<html><head></head><body>{"version":3,"file":"cef-store-main.js","mappings":"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","sources":["webpack://clarity-ecommerce-react/./node_modules/@fortawesome/ ./node_modules/@fortawesome/ sync ^\\.\\/free\\-.*\\-svg\\-icons$","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/authFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/Cors.ts","webpack://clarity-ecommerce-react/./buildsrc/axios.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Accounts.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Advertising.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Attributes.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Auctions.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Authentication.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Brands.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Categories.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Contacts.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Currencies.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Franchises.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Geography.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Globalization.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Inventory.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Invoicing.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.JSConfigs.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Manufacturers.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Media.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Messaging.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Ordering.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Payments.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Pricing.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Products.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Providers.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Questionnaire.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Quoting.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Returning.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Reviews.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Sales.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Sampling.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Scheduling.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Shipping.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Shopping.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Stores.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Structure.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Tracking.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.Vendors.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi._ServiceClass.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/Promiser.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/cefConfigSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/authSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/Formatters.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/ServiceStrings.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useInventoryFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/cartFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/cartSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/MicroCart.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/TotalsWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/ImageWithFallback.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/Translate.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/LoadingWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/modals/Modal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useViewState.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/FormGroupLabel.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/CardInputFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/CheckboxFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/NumberInputFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/PasswordInputFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/SelectFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/TextAreaFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/TextInputFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/LoginForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/LoginModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/LoginForPricing.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/modals/ConfirmationModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/MiniCartDiscountListItem.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/CartValidator.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardNameWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardPricingWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardSkuWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardStockWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/signalR/signalR.js","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi._DtoClasses.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/signalRSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useBiddingFactory.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardLotTimerWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/salesGroup/SalesItemQuantityLine.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/MiniCart.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/ErrorView.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/Categories.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/MiniMenu.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/CatalogFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/AttributesFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/CategoriesFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/CompareFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/SearchTermFilter.module.scss?51e5","webpack://clarity-ecommerce-react/./buildsrc/_shared/higherOrderComponents/OutsideClickDetector.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useDetectOutsideClick.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useDebounceWithCallback.ts","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/AppliedFilterBlock.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilters.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/AddToCartModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/AddAllToCartModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/RemoveFromCartModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_meta/css/exposedToJSVariables.module.scss","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddToCartButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddToCartQuantitySelector.module.scss?781c","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddToCartQuantitySelector.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ViewDetailsButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/Price.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddAllToCartButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardBiddingWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ProductCardActionButtonWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ExternalSearchBox.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/LanguageSelectorButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Navigation/NavMenu.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/Footer.tsx","webpack://clarity-ecommerce-react/./buildsrc/Layout.tsx","webpack://clarity-ecommerce-react/./buildsrc/Home/Home.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/usePricingFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/RemoveDiscountButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/CartDiscountListItem.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/CartTableWideScreen.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/CartTableMobile.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/Cart.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/AlertInfoNoResults.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ProductCardControlsWidget/PCCWOverlayLayout.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ProductCardControlsWidget/PCCWHorizontalLayout.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ProductCardControlsWidget/PCCWVerticalLayout.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ShoppingList/AddToShoppingListModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ShoppingList/CreateShoppingListModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ProductCardControlsWidget/AddToInStockAlertsModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CatalogGridView.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CatalogListView.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CatalogTableView.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CategoryLandingPageView.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CategoryLandingPageWidgets/CategoryLandingPageHeader.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CategoryLandingPageWidgets/CategoryLandingPageSidebar.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CategoryLandingPageWidgets/CategoryLandingPageFooter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/Compare.module.scss?f9d5","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CompareFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/Compare.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogSwitchComponents/CatalogFormatSwitch.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogSwitchComponents/CatalogSizeSwitch.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogSwitchComponents/CatalogSortBySwitch.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/Breadcrumbs.module.scss?4ff9","webpack://clarity-ecommerce-react/./buildsrc/_shared/Breadcrumbs.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useSortingFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useRatingFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/catalog/useProductSearchViewModel.ts","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogPaginationControls.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/catalog/useCatalogSortFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useCustomCompareEffect.ts","webpack://clarity-ecommerce-react/./buildsrc/Catalog/Catalog.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/helperFunctions.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/_shared/CheckoutStepsHeader.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useCheckoutStepFactory.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/method/CheckoutMethodStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AddressBook/AddressBlock.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/NewAddressForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AddressBook/NewAddressModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AddressBook/ContactSwitch.tsx","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/addressBookSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/addressBookFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/billing/CheckoutBillingStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/PurchaseRateQuotesManagerWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/CheckoutShippingStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/SplitShippingTarget.tsx","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.shared.ts","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/splitShippingFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/NewWalletForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/CheckoutTargets.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/CheckoutSplitShippingStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/NewWalletModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/walletFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/walletSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/methods/PaymentMethodCreditCardBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/WalletEntryCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/WalletSwitch.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/FileUploadWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/methods/PaymentMethodInvoiceBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/methods/PaymentMethodQuoteBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/methods/PaymentMethodFreeBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/methods/PaymentMethodECheckBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/CheckoutPaymentStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/confirmation/CheckoutConfirmationStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/SplitShippingTotals.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shippingRates/CheckoutShippingRatesStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/completed/CheckoutCompletedStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/Checkout.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useEffectSkipFirst.ts","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/Stock.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/MagicImageCarousel2.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/RatingSummary.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/VariantSwatches.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/VariantDropdown.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/Carousel.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/RelatedProductsList.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/ClothingProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/TabContent.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/Tabs.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductDetailsTabs/ProductDetailsTabAttribute.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductDetailsTabs/ProductDetailsTabsDefaultTabContent.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/RatingEntry.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ReviewEntry.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ReviewsMain.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductDetailsTabs/ProductDetailsTabs.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/DefaultProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/RecentlyViewedProductsList.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/MoreFromCategoryList.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/RecentlyViewedProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/Wallet.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/StaticHeadphonesProductDetailsTemplate.module.scss?4b9a","webpack://clarity-ecommerce-react/./buildsrc/Catalog/StaticHeadphonesProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/VariantsCustomProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/TemplatePicker.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/ProductDetails.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AddressBook/AddressBookCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AddressBook/AddressBook.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/MyProfile/MyProfile.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarAttributeFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarAutoCompleteFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarBooleanFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarFilterBtns.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarIDFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarInputFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGrid.module.scss?8b33","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarMinMaxDateFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarMinMaxNumFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbarFilterComponents/CVGridToolbarSelectFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGridToolbar.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CVGrid.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Invoices/InvoiceModalBillingContactSection.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Invoices/InvoiceModalWalletSection.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Invoices/PayMultipleInvoicesModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Invoices/Invoices.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Orders/Orders.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Returns/Returns.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/WishList/WishList.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/Table.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ShoppingList/ShoppingListsDetail.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ShoppingList/ShoppingLists.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AccountProfile/AccountProfile.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Privacy/PrivacyDataActionCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Privacy/Privacy.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/InStockAlerts/InStockAlerts.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Favorites/Favorites.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Quotes/Quotes.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/salesGroup/SalesGroupContactBlock.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/salesGroup/SalesGroupDetailsBlock.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Invoices/PayInvoiceModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/MakeAPaymentButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Invoices/InvoicePaymentsTable.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/SalesGroup/SalesGroupDetailsAdditionalDetails.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/salesGroup/SalesGroupItemsTable.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/SalesGroup/SalesGroupQuoteModals.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/SalesGroup/SalesGroupDetails.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/SalesGroup/SalesTab.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/SalesGroup/SalesGroupSideContent.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/SalesGroup/SalesGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Dashboard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/_shared/RegistrationStepsHeader.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/basicInfo/RegistrationBasicInfoStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/addressBook/RegistrationAddressBookStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/wallet/RegistrationWalletStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/custom/RegistrationCustomStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/confirmation/RegistrationConfirmationStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/completed/RegistrationCompletedStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/RegistrationHeader.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/Registration.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/Registration/steps/registrationSteps.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/Message.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/ForgotPassword.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/ForgotUsername.tsx","webpack://clarity-ecommerce-react/./buildsrc/Legal/Privacy.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/ForcedPasswordReset.tsx","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocatorCard.module.scss?cc2c","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocatorCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocatorMarkerTip.module.scss?d11a","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocatorMarkerTip.tsx","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocatorMarker.tsx","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocator.tsx","webpack://clarity-ecommerce-react/./buildsrc/App.tsx","webpack://clarity-ecommerce-react/./buildsrc/registerServiceWorker.js","webpack://clarity-ecommerce-react/./buildsrc/_meta/js/i18n.js","webpack://clarity-ecommerce-react/./buildsrc/_redux/store.ts","webpack://clarity-ecommerce-react/./buildsrc/Tracking/TrackingSnippet.tsx","webpack://clarity-ecommerce-react/./buildsrc/index.js","webpack://clarity-ecommerce-react/./buildsrc/_shared/CategoriesMenuBar.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/CefConfigKeyEnabled.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/higherOrderComponents/CVRoutesManager.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/ForgotPasswordReturn.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/HeaderMid.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/Icon.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/PopularProducts.tsx","webpack://clarity-ecommerce-react/webpack/bootstrap","webpack://clarity-ecommerce-react/webpack/runtime/chunk loaded","webpack://clarity-ecommerce-react/webpack/runtime/compat get default export","webpack://clarity-ecommerce-react/webpack/runtime/define property getters","webpack://clarity-ecommerce-react/webpack/runtime/global","webpack://clarity-ecommerce-react/webpack/runtime/hasOwnProperty shorthand","webpack://clarity-ecommerce-react/webpack/runtime/make namespace object","webpack://clarity-ecommerce-react/webpack/runtime/node module decorator","webpack://clarity-ecommerce-react/webpack/runtime/jsonp chunk loading","webpack://clarity-ecommerce-react/webpack/startup"],"sourcesContent":["var map = {\n\t\"./free-brands-svg-icons\": 27118,\n\t\"./free-regular-svg-icons\": 71297,\n\t\"./free-solid-svg-icons\": 53174\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 26210;","/* eslint-disable sort-keys */\r\n/* eslint-disable arrow-body-style */\r\nimport { AuthProviderLoginDto, IHttpPromise, UserModel } from \"src/_api/cvApi.shared\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { setAccount, setUser } from \"src/_redux/slices/authSlice\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport axios from \"src/axios\";\r\nimport { AccountModel, AuthenticateResponse, MFARequirementsModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { RegisterNewUserDto, RegisterNewUserToAccountDto } from \"src/_api\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\n\r\nexport type AuthBody = AuthProviderLoginDto &amp; { MFAToken?: string };\r\n\r\nexport enum LoginResponseStatus {\r\n  Success,\r\n  Failure,\r\n  Challenge,\r\n}\r\n\r\nexport interface LoginResponse {\r\n  Status: LoginResponseStatus;\r\n  MFAResult?: MFARequirementsModel;\r\n}\r\n\r\nexport interface IAuthFactory {\r\n  preAuth: (force?: boolean) =&gt; Promise<boolean>;\r\n  loadCurrentUser: (force?: boolean) =&gt; Promise<usermodel>;\r\n  loadCurrentAccount: (force?: boolean) =&gt; Promise<accountmodel>;\r\n  login: (credentials: AuthBody) =&gt; Promise<loginresponse>;\r\n  logout: () =&gt; Promise<void>;\r\n  requestMFA: (username: string, usePhone: boolean) =&gt; Promise<boolean>;\r\n  register: (user: RegisterNewUserDto) =&gt; Promise<void>;\r\n  registerToAcct: (user: RegisterNewUserToAccountDto) =&gt; Promise<void>;\r\n  hasRole: (role: string) =&gt; Promise<boolean>;\r\n  hasPermission: (permission: string) =&gt; Promise<boolean>;\r\n  updateCurrentUser: (newUser: UserModel) =&gt; Promise<usermodel>;\r\n  updateCurrentAccount: (newAccount: AccountModel) =&gt; Promise<accountmodel>;\r\n}\r\n\r\nfunction getCookieValue(name: string): string {\r\n  return document.cookie.match(`(^|;)\\\\s*${name}\\\\s*=\\\\s*([^;]+)`)?.pop() || \"\";\r\n}\r\n\r\nfunction readOrPopulateAuthenticationCookie(\r\n    value: string,\r\n    populator: () =&gt; IHttpPromise<void>,\r\n    loop?: boolean\r\n): Promise<boolean> {\r\n  const cookieValue = getCookieValue(value);\r\n  if (!cookieValue &amp;&amp; !loop) {\r\n    return populator()\r\n      .then(() =&gt; readOrPopulateAuthenticationCookie(value, populator, true));\r\n  }\r\n  return Promise.resolve(cookieValue === \"1\");\r\n}\r\n\r\nfunction readRoleCookie(role: string): Promise<boolean> {\r\n  return readOrPopulateAuthenticationCookie(\r\n    `cef_hr_${role.replace(/\\s+/ug, \"%20\")}`,\r\n    () =&gt; cvApi.authentication.CurrentUserHasRole({ Name: role })\r\n  );\r\n}\r\n\r\nfunction readPermissionCookie(permission: string): Promise<boolean> {\r\n  return readOrPopulateAuthenticationCookie(\r\n    `cef_hp_${permission.replace(/\\s+/ug, \"%20\")}`,\r\n    () =&gt; cvApi.authentication.CurrentUserHasPermission({ Name: permission })\r\n  );\r\n}\r\n\r\nexport const useAuthFactory = (): IAuthFactory | null =&gt; {\r\n  const [ authFactory, setAuthFactory ] = useState<iauthfactory>(null);\r\n\r\n  const cefConfig = useCefConfig();\r\n  const dispatch = useDispatch();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig) {\r\n      return;\r\n    }\r\n    const factory = {\r\n      preAuth: (force?: boolean): Promise<boolean> =&gt; {\r\n        if (force) {\r\n          promiser.flush(\"authFactory:PreAuth\");\r\n        }\r\n        return promiser.resolve(\r\n          \"authFactory:PreAuth\",\r\n          () =&gt; cvApi.contacts\r\n            .GetCurrentUserName()\r\n            .then(r =&gt; {\r\n              return r?.data?.ActionSucceeded ?? false;\r\n            })\r\n        );\r\n      },\r\n\r\n      loadCurrentUser: (force?: boolean): Promise<usermodel> =&gt; {\r\n        if (force) {\r\n          promiser.flush(\"authFactory:LoadCurrentUser\");\r\n        }\r\n        return promiser.resolve(\r\n          \"authFactory:LoadCurrentUser\",\r\n          () =&gt; factory.preAuth(force)\r\n            .then(authed =&gt; {\r\n              if (!authed) {\r\n                return null;\r\n              }\r\n              return cvApi.contacts.GetCurrentUser();\r\n            })\r\n            .then(r =&gt; {\r\n              dispatch(setUser({ ...r?.data, Loading: false }));\r\n              return r?.data;\r\n            })\r\n        );\r\n      },\r\n\r\n      loadCurrentAccount: (force?: boolean): Promise<accountmodel> =&gt; {\r\n        if (force) {\r\n          promiser.flush(\"authFactory:LoadCurrentAccount\");\r\n        }\r\n        return promiser.resolve(\r\n          \"authFactory:LoadCurrentAccount\",\r\n          () =&gt; factory.preAuth()\r\n            .then(authed =&gt; {\r\n              if (!authed) {\r\n                return null;\r\n              }\r\n              return cvApi.accounts.GetCurrentAccount();\r\n            })\r\n            .then(r =&gt; {\r\n              if (!r?.data) {\r\n                throw new Error(\"Unable to load current account\");\r\n              }\r\n              dispatch(setAccount(r.data));\r\n              return r.data;\r\n            })\r\n        );\r\n      },\r\n\r\n      hasRole: (role: string): Promise<boolean> =&gt; {\r\n        const key = `authFactory:HasRole:${role}`;\r\n        return promiser.resolve(\r\n          key,\r\n          () =&gt; readRoleCookie(role)\r\n        );\r\n      },\r\n\r\n      hasPermission: (permission: string): Promise<boolean> =&gt; {\r\n        const key = `authFactory:HasPermission:${permission}`;\r\n        return promiser.resolve(\r\n          key,\r\n          () =&gt; readPermissionCookie(permission)\r\n        );\r\n      },\r\n\r\n      login: async (credentials: AuthBody): Promise<loginresponse> =&gt; {\r\n        // Step 1: Check for MFA\r\n        if (cefConfig.authProviderMFAEnabled) {\r\n          if (!credentials.MFAToken) {\r\n            try {\r\n              const mfaResult = await cvApi.authentication.CheckForMFAForUsername(credentials.Username);\r\n              if (mfaResult?.data?.ActionSucceeded) {\r\n                // MFA required for this user\r\n                return Promise.resolve({\r\n                  Status: LoginResponseStatus.Challenge,\r\n                  MFAResult: mfaResult.data.Result\r\n                });\r\n              }\r\n            } catch (err) {\r\n              // MFA not required or an error occurred - either way, attempt normal auth\r\n              console.error(err);\r\n            }\r\n          }\r\n          credentials.Password = (credentials.Password ?? \"\") + (credentials.MFAToken ?? \"\");\r\n        }\r\n        // Step 2: Check for forced password reset\r\n        // TODO\r\n        // Step 3: send auth request\r\n        const providers = cefConfig.authProvider.split(\",\");\r\n        for (const provider of providers) {\r\n          try {\r\n            // eslint-disable-next-line no-await-in-loop\r\n            const authResponse = await axios.post<authenticateresponse>(\r\n              `/auth/${provider}`,\r\n              credentials\r\n            );\r\n            if (authResponse?.data?.UserName) {\r\n              // Login successful\r\n              // eslint-disable-next-line no-await-in-loop\r\n              return await factory.loadCurrentUser(true)\r\n                .then(() =&gt; {\r\n                  return Promise.resolve({ Status: LoginResponseStatus.Success });\r\n                });\r\n            }\r\n          } catch (err) {\r\n            console.error(err);\r\n            continue;\r\n          }\r\n        }\r\n        return Promise.reject(LoginResponseStatus.Failure);\r\n      },\r\n\r\n      requestMFA: (username: string, usePhone: boolean): Promise<boolean> =&gt; {\r\n        return cvApi.authentication\r\n          .RequestMFAForUsername(username, { UsePhone: usePhone })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              return false;\r\n            }\r\n            return true;\r\n          });\r\n      },\r\n\r\n      logout: (): Promise<void> =&gt; {\r\n        return axios.post(\"/auth/logout\")\r\n          .then(() =&gt; {\r\n            promiser.flush(/authFactory:.*/u);\r\n            // redirect to homepage\r\n            window.location.href = corsLink(cefConfig, cefConfig.routes.site.root, \"site\", \"primary\");\r\n            // @ts-ignore\r\n            dispatch(setUser({ Loading: false }));\r\n          })\r\n          .catch(err =&gt; {\r\n            console.error(err);\r\n          });\r\n      },\r\n\r\n      register: (user: RegisterNewUserDto): Promise<void> =&gt; {\r\n        return cvApi.authentication\r\n          .RegisterNewUser(user)\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Failed to register new user\" ];\r\n            }\r\n          });\r\n      },\r\n\r\n      registerToAcct: (user: RegisterNewUserToAccountDto): Promise<void> =&gt; {\r\n        return cvApi.authentication\r\n          .RegisterNewUserToAccount(user)\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Failed to register new user\" ];\r\n            }\r\n          });\r\n      },\r\n\r\n      updateCurrentUser: (newUser: UserModel): Promise<usermodel> =&gt; {\r\n        return cvApi.contacts\r\n          .UpdateCurrentUser(newUser)\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Failed to update current user\" ];\r\n            }\r\n            return factory.loadCurrentUser(true);\r\n          });\r\n      },\r\n\r\n      updateCurrentAccount: (newAccount: AccountModel): Promise<accountmodel> =&gt; {\r\n        return cvApi.accounts\r\n          .UpdateCurrentAccount(newAccount)\r\n          .then(r =&gt; {\r\n            if (!r?.data) {\r\n              throw new Error(\"Unable to update account\");\r\n            }\r\n            return factory.loadCurrentAccount(true);\r\n          });\r\n      }\r\n    };\r\n    setAuthFactory(factory);\r\n  }, [ cefConfig ]);\r\n\r\n  return authFactory;\r\n};\r\n","/** @format */\r\n\r\nimport { CEFConfig, IUrlConfig, IUrlHostConfig } from \"src/_shared/CefConfigTypes\";\r\n\r\nexport const corsLinkRootInner = (urlConfig: IUrlConfig): string =&gt; {\r\n  if (!urlConfig.host &amp;&amp; !urlConfig.root) {\r\n    // We don't have a static url or root path to apply\r\n    return \"\";\r\n  }\r\n  if (!urlConfig.host &amp;&amp; urlConfig.root) {\r\n    // We don't have a static url, but we do have a root path to apply\r\n    return urlConfig.root;\r\n  }\r\n  if (urlConfig.host &amp;&amp; !urlConfig.root) {\r\n    // We don't have a root path, but we do have a static url to apply\r\n    return urlConfig.host;\r\n  }\r\n  // We have both a root path and a static url to apply\r\n  return urlConfig.host + urlConfig.root;\r\n};\r\n\r\nexport const corsLinkRoot = (\r\n  cefConfig: CEFConfig,\r\n  area: keyof typeof cefConfig.routes = \"site\",\r\n  whichUrl: string = \"primary\"\r\n): string =&gt; {\r\n  const areaToUse = cefConfig.routes[area] as IUrlConfig;\r\n  if (!areaToUse) {\r\n    throw Error(`Area '${area}' does not exist on cefConfig.`);\r\n  }\r\n  if (!areaToUse.hostIsProvidedByLookup) {\r\n    // We don't need to inject a host URL\r\n    return corsLinkRootInner(areaToUse);\r\n  }\r\n  /* TODO: ByBrand, SiteDomains\r\n  // We have to inject a host URL to it\r\n  let siteDomainToUse: SiteDomainModel;\r\n  if ((areaToUse.hostIsProvidedByLookup as IUrlHostConfig).type === \"ByBrand\") {\r\n    if (!$rootScope[\"globalBrandSiteDomain\"]) {\r\n      // We failed to get data, so just try going to it with a relative path\r\n      return $filter(\"corsLinkRootInner\")(areaToUse);\r\n    } else {\r\n      siteDomainToUse = $rootScope[\"globalBrandSiteDomain\"];\r\n    }\r\n  } else {\r\n    // We failed to get data, so just try going to it with a relative path\r\n    return corsLinkRootInner(areaToUse);\r\n  }\r\n  // We have the site domain data\r\n  let host: string;\r\n  switch (whichUrl.toLowerCase()) {\r\n    case \"alternate-1\": {\r\n      host = siteDomainToUse.AlternateUrl1;\r\n      break;\r\n    } // The ALternate Site\r\n    case \"alternate-2\": {\r\n      host = siteDomainToUse.AlternateUrl2;\r\n      break;\r\n    } // The CORS site\r\n    case \"alternate-3\": {\r\n      host = siteDomainToUse.AlternateUrl3;\r\n      break;\r\n    } // Unused\r\n    case \"primary\":\r\n    default: {\r\n      host = siteDomainToUse.Url;\r\n      break;\r\n    } // This Shop site\r\n  }\r\n  while (/\\/$/.test(host)) {\r\n    // Make sure we don't end up with 'domain.com//some-path'\r\n    host = host.substring(0, host.length - 1);\r\n  }\r\n  // Go to the new absolute URL\r\n  const altAreaToUse = JSON.parse(JSON.stringify(areaToUse));\r\n  const hostNoProtocol = host.replace(\"http://\", \"\").replace(\"http://\", \"\");\r\n  altAreaToUse.host = host;\r\n  const result = corsLinkRootInner(altAreaToUse);\r\n  return result.replace(hostNoProtocol + \"/\" + hostNoProtocol, hostNoProtocol);\r\n  */\r\n  return null;\r\n};\r\n\r\n// Specialized marker to inject this path as the Return URL\r\nconst swapReturnUrlToken = (path: string): string =&gt; {\r\n  if (!path) {\r\n    return \"\";\r\n  }\r\n  let retVal = path;\r\n  if (retVal.indexOf(\"[ReturnUrl]\") !== -1) {\r\n    retVal = retVal.replace(/\\[ReturnUrl\\]/u, encodeURI(window.location.pathname));\r\n  }\r\n  // Assumes path contained \"[ReturnUrl]\", and was encoded by the above code block\r\n  if (retVal.indexOf(\"%5BReturnUrl%5D\") !== -1) {\r\n    retVal = retVal.replace(/%5BReturnUrl%5D/u, encodeURI(window.location.pathname));\r\n  }\r\n  if (retVal === \"/\") {\r\n    return retVal;\r\n  }\r\n  // Strip '/' from the end\r\n  return retVal.replace(/\\/+$/gu, \"\");\r\n};\r\n\r\nconst appendQueryStringParams = (\r\n  basePlusPath: string,\r\n  noCache: boolean,\r\n  paramsBody: { [key: string]: any }\r\n): string =&gt; {\r\n  if (!paramsBody || JSON.stringify(paramsBody) === \"{}\") {\r\n    // There's no paramsBody, just return\r\n    return noCache ? `${basePlusPath}?noCache=${new Date().getTime()}` : basePlusPath;\r\n  }\r\n  // Convert paramsBody into query parameters\r\n  if (noCache) {\r\n    // Merge in noCache if set\r\n    // eslint-disable-next-line dot-notation\r\n    paramsBody[\"noCache\"] = new Date().getTime();\r\n  }\r\n  const queryString = new URLSearchParams();\r\n  for (const key in paramsBody) {\r\n    if (Object.hasOwn(paramsBody, key)) {\r\n      const property = paramsBody[key];\r\n      queryString.append(key, property);\r\n    }\r\n  }\r\n  // Strip '/' from the end then appendQueryString\r\n  return swapReturnUrlToken(`${basePlusPath.replace(/\\/+$/gu, \"\")}?${queryString}`);\r\n};\r\n\r\nexport const corsLink = (\r\n  cefConfig: CEFConfig,\r\n  path: string,\r\n  area: keyof typeof cefConfig.routes = \"site\",\r\n  whichUrl: string | null = \"primary\",\r\n  noCache: boolean = false,\r\n  paramsBody: { [key: string]: any } = null\r\n): string =&gt; {\r\n  // Specialized marker to inject this path as the Return URL\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n  const path2 = swapReturnUrlToken(path);\r\n  if (path2 &amp;&amp; path2.indexOf(\"http\") === 0) {\r\n    // Absolute path, don't do anything else, just go\r\n    return noCache ? `${path2}?noCache=${new Date().getTime()}` : path2;\r\n  }\r\n  const areaToUse = cefConfig.routes[area] as IUrlConfig;\r\n  if (!areaToUse) {\r\n    throw Error(`Area '${area}' does not exist on cefConfig.`);\r\n  }\r\n  // The new absolute URL\r\n  const root = corsLinkRoot(\r\n    cefConfig,\r\n    area,\r\n    (areaToUse.hostIsProvidedByLookup as IUrlHostConfig)?.whichUrl || whichUrl\r\n  );\r\n  const base3 = root;\r\n  let pathToUse3 = (path2 &amp;&amp; (/^\\//gu).test(path2) ? \"\" : \"/\") + (path2 || \"\");\r\n  if (areaToUse.root &amp;&amp; pathToUse3 &amp;&amp; new RegExp(`^${areaToUse.root}`, \"u\").test(pathToUse3)) {\r\n    pathToUse3 = pathToUse3.substring(areaToUse.root.length);\r\n  }\r\n  return swapReturnUrlToken(appendQueryStringParams(base3 + pathToUse3, noCache, paramsBody));\r\n};\r\n\r\nexport const corsImageLink = (\r\n  cefConfig: CEFConfig,\r\n  fileName?: string,\r\n  kind: keyof typeof cefConfig.images = \"products\",\r\n  imageResizerParamsBody: { [key: string]: any } = null,\r\n  whichUrl: string = \"primary\"\r\n): string =&gt; {\r\n  if (!cefConfig) {\r\n    return \"\";\r\n  }\r\n  if (!fileName) {\r\n    return corsLink(cefConfig, \"/Content/placeholder.jpg\", \"ui\", whichUrl, false, imageResizerParamsBody);\r\n  }\r\n  return corsLink(\r\n    cefConfig,\r\n    cefConfig.images[kind] + cefConfig.images.suffix + fileName,\r\n    \"images\",\r\n    whichUrl,\r\n    false,\r\n    imageResizerParamsBody\r\n  );\r\n};\r\n\r\nexport const getCorsProductLink = (\r\n  cefConfig: CEFConfig,\r\n  seoUrl: string,\r\n  whichUrl: string = \"primary\",\r\n  noCache: boolean = false,\r\n  stateParamsBody: { [key: string]: any } = null\r\n): string =&gt; corsLink(\r\n  cefConfig,\r\n  (seoUrl.startsWith(\"/\") ? \"\" : \"/\") + seoUrl,\r\n  \"productDetail\",\r\n  whichUrl,\r\n  noCache,\r\n  stateParamsBody\r\n);\r\n\r\nexport const getCorsStoreLink = (\r\n  cefConfig: CEFConfig,\r\n  seoUrl: string,\r\n  whichUrl: string = \"primary\",\r\n  noCache: boolean = false,\r\n  stateParamsBody: { [key: string]: any } = null\r\n): string =&gt; corsLink(\r\n  cefConfig,\r\n  (seoUrl.startsWith(\"/\") ? \"\" : \"/\") + seoUrl,\r\n  \"storeDetail\",\r\n  whichUrl,\r\n  noCache,\r\n  stateParamsBody\r\n);\r\n\r\nexport const getCorsImageLink = (\r\n  cefConfig: CEFConfig,\r\n  fileName: string,\r\n  kind: string = \"products\",\r\n  imageResizerParamsBody: { [key: string]: any } = null,\r\n  whichUrl: string = \"primary\"\r\n): string =&gt; {\r\n  if (!fileName) {\r\n    return corsLink(\r\n      cefConfig,\r\n      // @ts-ignore\r\n      `${cefConfig.images[kind] + cefConfig.images.suffix}/placeholder.jpg`,\r\n      \"images\",\r\n      undefined,\r\n      undefined,\r\n      imageResizerParamsBody\r\n    );\r\n  }\r\n  return corsLink(\r\n    cefConfig,\r\n    // @ts-ignore\r\n    cefConfig.images[kind]\r\n      + cefConfig.images.suffix\r\n      + (fileName === \"/\" ? \"\" : ((/^\\//gu).test(fileName) ? \"\" : \"/\") + fileName),\r\n    \"images\",\r\n    whichUrl,\r\n    false,\r\n    imageResizerParamsBody\r\n  );\r\n};\r\n\r\nexport const getCorsStoredFilesLink = (\r\n  cefConfig: CEFConfig,\r\n  fileName: string,\r\n  kind: string = \"products\",\r\n  whichUrl: string = \"primary\"\r\n): string =&gt; corsLink(\r\n  cefConfig,\r\n  // @ts-ignore\r\n  cefConfig.storedFiles[kind] + cefConfig.storedFiles.suffix + (((/^\\//gu).test(fileName) ? \"\" : \"/\") + fileName),\r\n  \"storedFiles\",\r\n  whichUrl,\r\n  false,\r\n  null\r\n);\r\n\r\nexport const getCorsImportsLink = (\r\n  cefConfig: CEFConfig,\r\n  fileName: string,\r\n  kind: string = \"products\",\r\n  whichUrl: string = \"primary\"\r\n): string =&gt; corsLink(\r\n  cefConfig,\r\n  // @ts-ignore\r\n  cefConfig.imports[kind] + cefConfig.imports.suffix + (((/^\\//gu).test(fileName) ? \"\" : \"/\") + fileName),\r\n  \"imports\",\r\n  whichUrl,\r\n  false,\r\n  null\r\n);\r\n","import axios from \"axios\";\r\n\r\nconst instance = axios.create({\r\n  baseURL: \"/DesktopModules/ClarityEcommerce/API-Storefront\",\r\n  withCredentials: true,\r\n  headers: { \"Content-Type\": \"application/json\" },\r\n  paramsSerializer(params) {\r\n    const keys = Object.keys(params);\r\n    let stringified = \"\";\r\n    for (let i = 0; i &lt; keys.length; i++) {\r\n      const key = keys[i];\r\n      const param = params[key];\r\n      if (param === undefined) {\r\n        continue;\r\n      }\r\n      if (i &gt; 0) {\r\n        stringified += \"&amp;\";\r\n      }\r\n      stringified += key;\r\n      if (param instanceof Array) {\r\n        for (let j = 0; j &lt; param.length; j++) {\r\n          const param2 = param[j];\r\n          stringified += `=${param2}${j === param.length - 1 ? \"\" : `&amp;${key}`}`;\r\n        }\r\n      } else if (param instanceof Object) {\r\n        stringified += `=${\r\n          encodeURIComponent(JSON.stringify(param))\r\n            .replace(/%40/gui, \"@\")\r\n            .replace(/%3A/gui, \":\")\r\n            .replace(/%24/gu, \"$\")\r\n            .replace(/%2C/gui, \",\")\r\n            .replace(/%3B/gui, \";\")\r\n            // Double-quotes to nothing\r\n            .replace(/%22/gui, \"\")\r\n            .replace(/%20/gu, \"+\")}`;\r\n      } else {\r\n        stringified += `=${param}`;\r\n      }\r\n    }\r\n    return stringified;\r\n  }\r\n});\r\n\r\nexport default instance;\r\n","/**\r\n * @file _api/cvApi.Accounts.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tAccountContactModel,\r\n\tTypeSearchModel,\r\n\tAccountAssociationTypePagedResults,\r\n\tAccountSearchModel,\r\n\tAccountPagedResults,\r\n\tStatusSearchModel,\r\n\tAccountStatusPagedResults,\r\n\tAccountTypePagedResults,\r\n\tUserSearchModel,\r\n\tAccountModel,\r\n\tUserPagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to create a new account contact.\r\n * @see {@link AccountContactModel}\r\n * @public\r\n */\r\nexport interface CreateAccountContactDto extends AccountContactModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of account association types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetAccountAssociationTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of accounts\r\n * @see {@link AccountSearchModel}\r\n * @public\r\n */\r\nexport interface GetAccountsDto extends AccountSearchModel {\r\n}\r\n\r\n/**\r\n * Get Accounts for the current account (as a local administrator)\r\n * @see {@link AccountSearchModel}\r\n * @public\r\n */\r\nexport interface GetAccountsForCurrentAccountDto extends AccountSearchModel {\r\n\tReturnFirstResultOnly?: boolean;\r\n}\r\n\r\n/**\r\n * Use to get a list of account statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetAccountStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of account types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetAccountTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Get all User IDs for the current account (as a local administrator)\r\n * @see {@link UserSearchModel}\r\n * @public\r\n */\r\nexport interface GetAllUserIDsForCurrentAccountDto extends UserSearchModel {\r\n}\r\n\r\n/**\r\n * Get Users for the current account (as a local administrator)\r\n * @see {@link UserSearchModel}\r\n * @public\r\n */\r\nexport interface GetUsersForCurrentAccountDto extends UserSearchModel {\r\n}\r\n\r\n/**\r\n * Use to update an existing account contact.\r\n * @see {@link AccountContactModel}\r\n * @public\r\n */\r\nexport interface UpdateAccountContactDto extends AccountContactModel {\r\n}\r\n\r\n/**\r\n * Use to update the account associated to the user currently logged into the system\r\n * @see {@link AccountModel}\r\n * @public\r\n */\r\nexport interface UpdateCurrentAccountDto extends AccountModel {\r\n}\r\n\r\nexport class Accounts {\r\n\t/**\r\n\t * Use to create a new account contact.\r\n\t * @param {@link cef.store.api.CreateAccountContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateAccountContact\r\n\t * @path <api root="">/Accounts/AccountContact/Create\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateAccountContact = (routeParams?: CreateAccountContactDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Accounts\", \"AccountContact\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Removes a specific account contact from the system [Hard-Delete]\r\n\t * @param {@link cef.store.api.DeleteAccountContactByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteAccountContactByID\r\n\t * @path <api root="">/Accounts/AccountContact/Delete/ID/{ID}\r\n\t * @verb DELETE\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tDeleteAccountContactByID = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Accounts\", \"AccountContact\", \"Delete\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to get a list of account association types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountAssociationTypes\r\n\t * @path <api root="">/Accounts/AccountAssociationTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<accountassociationtypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAccountAssociationTypes = (routeParams?: GetAccountAssociationTypesDto): IHttpPromise<accountassociationtypepagedresults> =&gt;\r\n\t\taxios.get([\"Accounts\", \"AccountAssociationTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific account contact\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountContactByID\r\n\t * @path <api root="">/Accounts/AccountContact/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<accountcontactmodel>}\r\n\t * @public\r\n\t */\r\n\tGetAccountContactByID = (id: number): IHttpPromise<accountcontactmodel> =&gt;\r\n\t\taxios.get([\"Accounts\", \"AccountContact\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of accounts\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccounts\r\n\t * @path <api root="">/Accounts/Accounts\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<accountpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAccounts = (routeParams?: GetAccountsDto): IHttpPromise<accountpagedresults> =&gt;\r\n\t\taxios.get([\"Accounts\", \"Accounts\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get Accounts for the current account (as a local administrator)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountsForCurrentAccount\r\n\t * @path <api root="">/Accounts/AccountsForCurrentAccount\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<accountpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAccountsForCurrentAccount = (routeParams?: GetAccountsForCurrentAccountDto): IHttpPromise<accountpagedresults> =&gt;\r\n\t\taxios.get([\"Accounts\", \"AccountsForCurrentAccount\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of account statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountStatuses\r\n\t * @path <api root="">/Accounts/AccountStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<accountstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAccountStatuses = (routeParams?: GetAccountStatusesDto): IHttpPromise<accountstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Accounts\", \"AccountStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of account types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountTypes\r\n\t * @path <api root="">/Accounts/AccountTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<accounttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAccountTypes = (routeParams?: GetAccountTypesDto): IHttpPromise<accounttypepagedresults> =&gt;\r\n\t\taxios.get([\"Accounts\", \"AccountTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get all User IDs for the current account (as a local administrator)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAllUserIDsForCurrentAccount\r\n\t * @path <api root="">/Accounts/AllUserIDsForCurrentAccount\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetAllUserIDsForCurrentAccount = (routeParams?: GetAllUserIDsForCurrentAccountDto): IHttpPromise<array<number>&gt; =&gt;\r\n\t\taxios.get([\"Accounts\", \"AllUserIDsForCurrentAccount\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get account for the current user logged in\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccount\r\n\t * @path <api root="">/Accounts/CurrentAccount\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<accountmodel>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccount = (): IHttpPromise<accountmodel> =&gt;\r\n\t\taxios.get([\"Accounts\", \"CurrentAccount\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Get Users for the current account (as a local administrator)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUsersForCurrentAccount\r\n\t * @path <api root="">/Accounts/UsersForCurrentAccount\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<userpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetUsersForCurrentAccount = (routeParams?: GetUsersForCurrentAccountDto): IHttpPromise<userpagedresults> =&gt;\r\n\t\taxios.get([\"Accounts\", \"UsersForCurrentAccount\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.MarkAccountContactAsDefaultBillingDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.MarkAccountContactAsDefaultBilling\r\n\t * @path <api root="">/Accounts/AccountContact/MarkAsDefaultBilling/ID/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tMarkAccountContactAsDefaultBilling = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Accounts\", \"AccountContact\", \"MarkAsDefaultBilling\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.MarkAccountContactAsNeitherBillingNorShippingDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.MarkAccountContactAsNeitherBillingNorShipping\r\n\t * @path <api root="">/Accounts/AccountContact/MarkAsNotBillingOrShipping/ID/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tMarkAccountContactAsNeitherBillingNorShipping = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Accounts\", \"AccountContact\", \"MarkAsNotBillingOrShipping\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.MarkAccountContactAsPrimaryShippingDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.MarkAccountContactAsPrimaryShipping\r\n\t * @path <api root="">/Accounts/AccountContact/MarkAsPrimaryShipping/ID/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tMarkAccountContactAsPrimaryShipping = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Accounts\", \"AccountContact\", \"MarkAsPrimaryShipping\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to update an existing account contact.\r\n\t * @param {@link cef.store.api.UpdateAccountContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateAccountContact\r\n\t * @path <api root="">/Accounts/AccountContact/Update\r\n\t * @verb PUT\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdateAccountContact = (routeParams?: UpdateAccountContactDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.put([\"Accounts\", \"AccountContact\", \"Update\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to update the account associated to the user currently logged into the system\r\n\t * @param {@link cef.store.api.UpdateCurrentAccountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCurrentAccount\r\n\t * @path <api root="">/Accounts/CurrentAccount\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<accountmodel>}\r\n\t * @public\r\n\t */\r\n\tUpdateCurrentAccount = (routeParams?: UpdateCurrentAccountDto): IHttpPromise<accountmodel> =&gt;\r\n\t\taxios.put([\"Accounts\", \"CurrentAccount\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Advertising.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tAdModel,\r\n\tAdZoneSearchModel,\r\n\tAdZonePagedResults,\r\n\tZoneModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to get a list of ad zones\r\n * @see {@link AdZoneSearchModel}\r\n * @public\r\n */\r\nexport interface GetAdZonesDto extends AdZoneSearchModel {\r\n}\r\n\r\nexport class Advertising {\r\n\t/**\r\n\t * Use to get a specific ad\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAdByID\r\n\t * @path <api root="">/Advertising/Ad/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<admodel>}\r\n\t * @public\r\n\t */\r\n\tGetAdByID = (id: number): IHttpPromise<admodel> =&gt;\r\n\t\taxios.get([\"Advertising\", \"Ad\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of ad zones\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAdZones\r\n\t * @path <api root="">/Advertising/AdZones\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<adzonepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAdZones = (routeParams?: GetAdZonesDto): IHttpPromise<adzonepagedresults> =&gt;\r\n\t\taxios.get([\"Advertising\", \"AdZones\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific zone\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetZoneByID\r\n\t * @path <api root="">/Advertising/Zone/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<zonemodel>}\r\n\t * @public\r\n\t */\r\n\tGetZoneByID = (id: number): IHttpPromise<zonemodel> =&gt;\r\n\t\taxios.get([\"Advertising\", \"Zone\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n}\r\n","/**\r\n * @file _api/cvApi.Attributes.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsDisplayNameBase,\r\n\tImplementsNameBase,\r\n\tAttributeGroupSearchModel,\r\n\tAttributeGroupPagedResults,\r\n\tAttributeTabSearchModel,\r\n\tAttributeTabPagedResults,\r\n\tAttributeTypeSearchModel,\r\n\tAttributeTypePagedResults,\r\n\tGeneralAttributeModel,\r\n\tGeneralAttributePredefinedOptionSearchModel,\r\n\tGeneralAttributePredefinedOptionPagedResults,\r\n\tGeneralAttributeSearchModel,\r\n\tGeneralAttributePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckGeneralAttributeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckGeneralAttributeExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of attribute groups\r\n * @see {@link AttributeGroupSearchModel}\r\n * @public\r\n */\r\nexport interface GetAttributeGroupsDto extends AttributeGroupSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of attribute tabs\r\n * @see {@link AttributeTabSearchModel}\r\n * @public\r\n */\r\nexport interface GetAttributeTabsDto extends AttributeTabSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of attribute types\r\n * @see {@link AttributeTypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetAttributeTypesDto extends AttributeTypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of general attribute predefined options\r\n * @see {@link GeneralAttributePredefinedOptionSearchModel}\r\n * @public\r\n */\r\nexport interface GetGeneralAttributePredefinedOptionsDto extends GeneralAttributePredefinedOptionSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of general attributes\r\n * @see {@link GeneralAttributeSearchModel}\r\n * @public\r\n */\r\nexport interface GetGeneralAttributesDto extends GeneralAttributeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of general filter attributes for the storefront\r\n * @see {@link GeneralAttributeSearchModel}\r\n * @public\r\n */\r\nexport interface GetGeneralFilterAttributesForStorefrontDto extends GeneralAttributeSearchModel {\r\n}\r\n\r\nexport class Attributes {\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckGeneralAttributeExistsByDisplayName\r\n\t * @path <api root="">/Attributes/GeneralAttribute/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckGeneralAttributeExistsByDisplayName = (routeParams?: CheckGeneralAttributeExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckGeneralAttributeExistsByKey\r\n\t * @path <api root="">/Attributes/GeneralAttribute/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckGeneralAttributeExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckGeneralAttributeExistsByName\r\n\t * @path <api root="">/Attributes/GeneralAttribute/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckGeneralAttributeExistsByName = (routeParams?: CheckGeneralAttributeExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of attribute groups\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAttributeGroups\r\n\t * @path <api root="">/Attributes/AttributeGroups\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<attributegrouppagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAttributeGroups = (routeParams?: GetAttributeGroupsDto): IHttpPromise<attributegrouppagedresults> =&gt;\r\n\t\taxios.get([\"Attributes\", \"AttributeGroups\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of attribute tabs\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAttributeTabs\r\n\t * @path <api root="">/Attributes/AttributeTabs\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<attributetabpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAttributeTabs = (routeParams?: GetAttributeTabsDto): IHttpPromise<attributetabpagedresults> =&gt;\r\n\t\taxios.get([\"Attributes\", \"AttributeTabs\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of attribute types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAttributeTypes\r\n\t * @path <api root="">/Attributes/AttributeTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<attributetypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAttributeTypes = (routeParams?: GetAttributeTypesDto): IHttpPromise<attributetypepagedresults> =&gt;\r\n\t\taxios.get([\"Attributes\", \"AttributeTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific general attribute\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetGeneralAttributeByID\r\n\t * @path <api root="">/Attributes/GeneralAttribute/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<generalattributemodel>}\r\n\t * @public\r\n\t */\r\n\tGetGeneralAttributeByID = (id: number): IHttpPromise<generalattributemodel> =&gt;\r\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of general attribute predefined options\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetGeneralAttributePredefinedOptions\r\n\t * @path <api root="">/Attributes/GeneralAttributePredefinedOptions\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<generalattributepredefinedoptionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetGeneralAttributePredefinedOptions = (routeParams?: GetGeneralAttributePredefinedOptionsDto): IHttpPromise<generalattributepredefinedoptionpagedresults> =&gt;\r\n\t\taxios.get([\"Attributes\", \"GeneralAttributePredefinedOptions\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of general attributes\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetGeneralAttributes\r\n\t * @path <api root="">/Attributes/GeneralAttributes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<generalattributepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetGeneralAttributes = (routeParams?: GetGeneralAttributesDto): IHttpPromise<generalattributepagedresults> =&gt;\r\n\t\taxios.get([\"Attributes\", \"GeneralAttributes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of general filter attributes for the storefront\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetGeneralFilterAttributesForStorefront\r\n\t * @path <api root="">/Attributes/GeneralFilterAttributesForStorefront\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<generalattributepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetGeneralFilterAttributesForStorefront = (routeParams?: GetGeneralFilterAttributesForStorefrontDto): IHttpPromise<generalattributepagedresults> =&gt;\r\n\t\taxios.get([\"Attributes\", \"GeneralFilterAttributesForStorefront\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Auctions.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tAuctionModel,\r\n\tAuctionSearchModel,\r\n\tAuctionPagedResults,\r\n\tBidSearchModel,\r\n\tBidPagedResults,\r\n\tLotModel,\r\n\tLotSearchModel,\r\n\tLotPagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckAuctionExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckLotExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of auctions\r\n * @see {@link AuctionSearchModel}\r\n * @public\r\n */\r\nexport interface GetAuctionsDto extends AuctionSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of bids\r\n * @see {@link BidSearchModel}\r\n * @public\r\n */\r\nexport interface GetBidsDto extends BidSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of lots\r\n * @see {@link LotSearchModel}\r\n * @public\r\n */\r\nexport interface GetLotsDto extends LotSearchModel {\r\n}\r\n\r\n/**\r\n * Places a bid for the lot, at the requested price.\r\n * @public\r\n */\r\nexport interface PlaceBidDto {\r\n\tLotID: number;\r\n\tBidAmount?: number;\r\n}\r\n\r\nexport class Auctions {\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckAuctionExistsByID\r\n\t * @path <api root="">/Auctions/Auction/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckAuctionExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Auction\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckAuctionExistsByKey\r\n\t * @path <api root="">/Auctions/Auction/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckAuctionExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Auction\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckAuctionExistsByName\r\n\t * @path <api root="">/Auctions/Auction/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckAuctionExistsByName = (routeParams?: CheckAuctionExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Auction\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckLotExistsByID\r\n\t * @path <api root="">/Auctions/Lot/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckLotExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Lot\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckLotExistsByKey\r\n\t * @path <api root="">/Auctions/Lot/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckLotExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Lot\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckLotExistsByName\r\n\t * @path <api root="">/Auctions/Lot/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckLotExistsByName = (routeParams?: CheckLotExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Lot\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific auction\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAuctionByID\r\n\t * @path <api root="">/Auctions/Auction/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<auctionmodel>}\r\n\t * @public\r\n\t */\r\n\tGetAuctionByID = (id: number): IHttpPromise<auctionmodel> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Auction\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of auctions\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAuctions\r\n\t * @path <api root="">/Auctions/Auctions\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<auctionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetAuctions = (routeParams?: GetAuctionsDto): IHttpPromise<auctionpagedresults> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Auctions\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of bids\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBids\r\n\t * @path <api root="">/Auctions/Bids\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<bidpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetBids = (routeParams?: GetBidsDto): IHttpPromise<bidpagedresults> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Bids\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Retrieves data about the given lot, including the highest bid\r\n\t * @param {@link cef.store.api.GetHighestBidForLotDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetHighestBidForLot\r\n\t * @path <api root="">/Auctions/Lot/LotData/{ID}\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<lotmodel>}\r\n\t * @public\r\n\t */\r\n\tGetHighestBidForLot = (id: number): IHttpPromise<lotmodel> =&gt;\r\n\t\taxios.post([\"Auctions\", \"Lot\", \"LotData\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to get a specific lot\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLotByID\r\n\t * @path <api root="">/Auctions/Lot/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<lotmodel>}\r\n\t * @public\r\n\t */\r\n\tGetLotByID = (id: number): IHttpPromise<lotmodel> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Lot\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of lots\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLots\r\n\t * @path <api root="">/Auctions/Lots\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<lotpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetLots = (routeParams?: GetLotsDto): IHttpPromise<lotpagedresults> =&gt;\r\n\t\taxios.get([\"Auctions\", \"Lots\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Places a bid for the lot, at the requested price.\r\n\t * @param {@link cef.store.api.PlaceBidDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.PlaceBid\r\n\t * @path <api root="">/Auctions/Lot/PlaceBid\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<lotmodel>}\r\n\t * @public\r\n\t */\r\n\tPlaceBid = (routeParams: PlaceBidDto): IHttpPromise<lotmodel> =&gt;\r\n\t\taxios.post([\"Auctions\", \"Lot\", \"PlaceBid\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Authentication.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tMFARequirementsModel,\r\n\tAddressModel,\r\n\tStoreContactModel,\r\n\tUserModel,\r\n\tAccountContactModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponse,\r\n\tCEFActionResponseT,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Membership Registration Process step 5: Administrator approves the user\r\n * @public\r\n */\r\nexport interface ApproveUserRegistrationDto {\r\n\t/** The encrypted token to use for validation */\r\n\tToken: string;\r\n\t/** CEF User ID */\r\n\tID: number;\r\n}\r\n\r\n/**\r\n * When provided with the valid existing password, changes the password for a user to a new value.\r\n * @public\r\n */\r\nexport interface ChangePasswordDto {\r\n\t/** UserName */\r\n\tUserName: string;\r\n\t/** Current Password */\r\n\tPassword: string;\r\n\t/** New Password */\r\n\tNewPassword: string;\r\n}\r\n\r\n/**\r\n * Check if the user is required to reset their password.\r\n * @public\r\n */\r\nexport interface CheckForcedPasswordResetDto {\r\n\t/** UserName */\r\n\tUserName: string;\r\n\t/** Password */\r\n\tPassword: string;\r\n}\r\n\r\n/**\r\n * Membership Registration Process step 4: Validate Email and complete Registration\r\n * @public\r\n */\r\nexport interface CompleteRegistrationDto {\r\n\t/** First Name of the User */\r\n\tFirstName: string;\r\n\t/** Last Name of the User */\r\n\tLastName: string;\r\n\t/** Email to send the invitation to */\r\n\tEmail: string;\r\n\t/** UserName */\r\n\tUserName: string;\r\n\t/** Password */\r\n\tPassword: string;\r\n\t/** Reset Token */\r\n\tResetToken: string;\r\n\t/** Phone */\r\n\tPhone: string;\r\n\t/** CompanyName */\r\n\tCompanyName: string;\r\n\t/** RoleName */\r\n\tRoleName?: string;\r\n\t/** Address */\r\n\tAddress: AddressModel;\r\n\t/** TypeName */\r\n\tTypeName?: string;\r\n\t/** Website */\r\n\tWebsite?: string;\r\n\t/** ProfileType */\r\n\tProfileType?: string;\r\n\t/** StoreContacts */\r\n\tStoreContacts?: Array<storecontactmodel>;\r\n}\r\n\r\n/**\r\n * Membership Registration Process step 3: Send Email confirmation Email (User gets an email with validation token)\r\n * @public\r\n */\r\nexport interface CreateLiteAccountAndSendValidationEmailDto {\r\n\t/** First Name of the User */\r\n\tFirstName: string;\r\n\t/** Last Name of the User */\r\n\tLastName: string;\r\n\t/** The UserName */\r\n\tUserName?: string;\r\n\t/** Email to send the invitation to */\r\n\tEmail: string;\r\n\t/** Seller Type */\r\n\tSellerType: string;\r\n\t/** The Membership Level */\r\n\tMembership: string;\r\n\t/** The encrypted token to use for validation */\r\n\tToken: string;\r\n\t/** The Membership Type */\r\n\tMembershipType: string;\r\n\t/** The RootURL is used to override the settings generated RootURL */\r\n\tRootURL: string;\r\n}\r\n\r\n/**\r\n * Check if the currently logged in user has any Permissions by Regular Expression\r\n * @public\r\n */\r\nexport interface CurrentUserHasAnyPermissionDto {\r\n\t/** The Regular Expression of the Permissions to match against */\r\n\tRegex: string;\r\n}\r\n\r\n/**\r\n * Check if the currently logged in user has any Roles by Regular Expression\r\n * @public\r\n */\r\nexport interface CurrentUserHasAnyRoleDto {\r\n\t/** The Regular Expression of the Roles to match against */\r\n\tRegex: string;\r\n}\r\n\r\n/**\r\n * Check if the currently logged in user has a specific Permission by name\r\n * @public\r\n */\r\nexport interface CurrentUserHasPermissionDto {\r\n\t/** The Name of the Permission to check */\r\n\tName: string;\r\n}\r\n\r\n/**\r\n * Check if the currently logged in user has a specific role by name.\r\n * @public\r\n */\r\nexport interface CurrentUserHasRoleDto {\r\n\t/** The Name of the Role to check */\r\n\tName: string;\r\n}\r\n\r\n/**\r\n * When the user is required to reset their password, this endpoint handles it.\r\n * @public\r\n */\r\nexport interface ForcedPasswordResetDto {\r\n\t/** Email */\r\n\tEmail: string;\r\n\t/** Old Password */\r\n\tOldPassword: string;\r\n\t/** New Password */\r\n\tNewPassword: string;\r\n}\r\n\r\n/**\r\n * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\r\n * @public\r\n */\r\nexport interface ForgotPasswordDto {\r\n\t/** Email */\r\n\tEmail: string;\r\n}\r\n\r\n/**\r\n * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\r\n * @public\r\n */\r\nexport interface ForgotPasswordReturnDto {\r\n\t/** Email */\r\n\tEmail: string;\r\n\t/** Token */\r\n\tToken: string;\r\n\t/** Password */\r\n\tPassword: string;\r\n}\r\n\r\n/**\r\n * Sends an email to the user if the provided email matches an existing user with the Username in it.\r\n * @public\r\n */\r\nexport interface ForgotUsernameDto {\r\n\t/** Email */\r\n\tEmail: string;\r\n}\r\n\r\n/**\r\n * Consumes the code response from Open ID Connect\r\n * @public\r\n */\r\nexport interface OktaCodeCallbackDto {\r\n\tid_token?: string; // Name format overridden\r\n\taccess_token?: string; // Name format overridden\r\n\tcode?: string; // Name format overridden\r\n\texpires_in: number; // Name format overridden\r\n\tresource?: string; // Name format overridden\r\n\trefresh_token?: string; // Name format overridden\r\n\trefresh_token_expires_in: number; // Name format overridden\r\n\tscope?: string; // Name format overridden\r\n\terror?: string; // Name format overridden\r\n\terrorDescription?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * Consumes the code response from Open ID Connect\r\n * @public\r\n */\r\nexport interface OpenIDConnectCodeCallbackDto {\r\n\tid_token?: string; // Name format overridden\r\n\taccess_token?: string; // Name format overridden\r\n\tcode?: string; // Name format overridden\r\n\texpires_in: number; // Name format overridden\r\n\tresource?: string; // Name format overridden\r\n\trefresh_token?: string; // Name format overridden\r\n\trefresh_token_expires_in: number; // Name format overridden\r\n\tscope?: string; // Name format overridden\r\n\terror?: string; // Name format overridden\r\n\terrorDescription?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * Registers a new user via the standard process\r\n * @see {@link UserModel}\r\n * @public\r\n */\r\nexport interface RegisterNewUserDto extends UserModel {\r\n\tAddressBook?: Array<accountcontactmodel>;\r\n\tInService: boolean;\r\n}\r\n\r\n/**\r\n * Registers a new user to an existing account\r\n * @see {@link UserModel}\r\n * @public\r\n */\r\nexport interface RegisterNewUserToAccountDto extends UserModel {\r\n}\r\n\r\n/**\r\n * Request a multi-factor authentication token for a specific user.\r\n * @public\r\n */\r\nexport interface RequestMFAForUsernameDto {\r\n\t/** If true, send over SMS instead of email. */\r\n\tUsePhone: boolean;\r\n}\r\n\r\n/**\r\n * Pass in user credentials to log into the site.\r\n * @public\r\n */\r\nexport interface ValidateEmailDto {\r\n\t/** Email to send the invitation to */\r\n\tEmail: string;\r\n\t/** The encrypted token to use for validation */\r\n\tToken: string;\r\n}\r\n\r\n/**\r\n * Validate Email Is Unique\r\n * @public\r\n */\r\nexport interface ValidateEmailIsUniqueDto {\r\n\tEmail: string;\r\n}\r\n\r\n/**\r\n * Membership Registration Process step 2: Validate Invitation (User clicked the link in the email with an invite token)\r\n * @public\r\n */\r\nexport interface ValidateInvitationDto {\r\n\t/** Email to send the invitation to */\r\n\tEmail: string;\r\n\t/** The encrypted token to use for validation */\r\n\tToken: string;\r\n}\r\n\r\n/**\r\n * Validates that the password provided for a username is the correct one.\r\n * @public\r\n */\r\nexport interface ValidatePasswordDto {\r\n\tUserName: string;\r\n\tPassword: string;\r\n}\r\n\r\n/**\r\n * Pass in user credentials to log into the site.\r\n * @public\r\n */\r\nexport interface ValidatePasswordIsGoodDto {\r\n\tPassword: string;\r\n}\r\n\r\n/**\r\n * Pass in user credentials to log into the site.\r\n * @public\r\n */\r\nexport interface ValidateUserNameIsGoodDto {\r\n\tUserName: string;\r\n}\r\n\r\nexport class Authentication {\r\n\t/**\r\n\t * Membership Registration Process step 5: Administrator approves the user\r\n\t * @param {@link cef.store.api.ApproveUserRegistrationDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ApproveUserRegistration\r\n\t * @path <api root="">/Authentication/ApproveUser\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tApproveUserRegistration = (routeParams: ApproveUserRegistrationDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Authentication\", \"ApproveUser\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * When provided with the valid existing password, changes the password for a user to a new value.\r\n\t * @param {@link cef.store.api.ChangePasswordDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ChangePassword\r\n\t * @path <api root="">/Authentication/ChangePassword\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tChangePassword = (routeParams: ChangePasswordDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ChangePassword\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Check if this account exists by key.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckAccountKeyExists\r\n\t * @path <api root="">/Authentication/CheckAccountExists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<boolean>&gt;}\r\n\t * @public\r\n\t */\r\n\tCheckAccountKeyExists = (key: string): IHttpPromise<cefactionresponset<boolean>&gt; =&gt;\r\n\t\taxios.get([\"Authentication\", \"CheckAccountExists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if the user is required to reset their password.\r\n\t * @param {@link cef.store.api.CheckForcedPasswordResetDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckForcedPasswordReset\r\n\t * @path <api root="">/Authentication/CheckForcedPasswordReset\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tCheckForcedPasswordReset = (routeParams: CheckForcedPasswordResetDto): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.post([\"Authentication\", \"CheckForcedPasswordReset\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Check if multi-factor authentication is enabled for a specific user.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckForMFAForUsername\r\n\t * @path <api root="">/Authentication/CheckForMFA/{UserName*}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<mfarequirementsmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tCheckForMFAForUsername = (userName: string): IHttpPromise<cefactionresponset<mfarequirementsmodel>&gt; =&gt;\r\n\t\taxios.get([\"Authentication\", \"CheckForMFA\", encodeURIComponent(userName)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Membership Registration Process step 4: Validate Email and complete Registration\r\n\t * @param {@link cef.store.api.CompleteRegistrationDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CompleteRegistration\r\n\t * @path <api root="">/Authentication/CompleteRegistration\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCompleteRegistration = (routeParams: CompleteRegistrationDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Authentication\", \"CompleteRegistration\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Membership Registration Process step 3: Send Email confirmation Email (User gets an email with validation token)\r\n\t * @param {@link cef.store.api.CreateLiteAccountAndSendValidationEmailDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateLiteAccountAndSendValidationEmail\r\n\t * @path <api root="">/Authentication/CreateLiteAccountAndSendValidationEmail\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCreateLiteAccountAndSendValidationEmail = (routeParams: CreateLiteAccountAndSendValidationEmailDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"CreateLiteAccountAndSendValidationEmail\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Check if the currently logged in user has any Permissions by Regular Expression\r\n\t * @param {@link cef.store.api.CurrentUserHasAnyPermissionDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasAnyPermission\r\n\t * @path <api root="">/Authentication/CurrentUser/HasAnyPermission\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tCurrentUserHasAnyPermission = (routeParams: CurrentUserHasAnyPermissionDto): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasAnyPermission\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Check if the currently logged in user has any Roles by Regular Expression\r\n\t * @param {@link cef.store.api.CurrentUserHasAnyRoleDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasAnyRole\r\n\t * @path <api root="">/Authentication/CurrentUser/HasAnyRole\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tCurrentUserHasAnyRole = (routeParams: CurrentUserHasAnyRoleDto): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasAnyRole\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Check if the currently logged in user has a specific Permission by name\r\n\t * @param {@link cef.store.api.CurrentUserHasPermissionDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasPermission\r\n\t * @path <api root="">/Authentication/CurrentUser/HasPermission\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tCurrentUserHasPermission = (routeParams: CurrentUserHasPermissionDto): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasPermission\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Check if the currently logged in user has a specific role by name.\r\n\t * @param {@link cef.store.api.CurrentUserHasRoleDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasRole\r\n\t * @path <api root="">/Authentication/CurrentUser/HasRole\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tCurrentUserHasRole = (routeParams: CurrentUserHasRoleDto): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasRole\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * When the user is required to reset their password, this endpoint handles it.\r\n\t * @param {@link cef.store.api.ForcedPasswordResetDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForcedPasswordReset\r\n\t * @path <api root="">/Authentication/ForcedPasswordReset\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tForcedPasswordReset = (routeParams: ForcedPasswordResetDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ForcedPasswordReset\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\r\n\t * @param {@link cef.store.api.ForgotPasswordDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForgotPassword\r\n\t * @path <api root="">/Authentication/ForgotPassword\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tForgotPassword = (routeParams: ForgotPasswordDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ForgotPassword\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\r\n\t * @param {@link cef.store.api.ForgotPasswordReturnDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForgotPasswordReturn\r\n\t * @path <api root="">/Authentication/ForgotPassword/Return\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tForgotPasswordReturn = (routeParams: ForgotPasswordReturnDto): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.post([\"Authentication\", \"ForgotPassword\", \"Return\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Sends an email to the user if the provided email matches an existing user with the Username in it.\r\n\t * @param {@link cef.store.api.ForgotUsernameDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForgotUsername\r\n\t * @path <api root="">/Authentication/ForgotUsername\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tForgotUsername = (routeParams: ForgotUsernameDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ForgotUsername\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Consumes the code response from Open ID Connect\r\n\t * @param {@link cef.store.api.OktaCodeCallbackDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType ServiceStack.Auth.OktaCodeCallback\r\n\t * @path <api root="">/Authentication/OktaCodeCallback\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tOktaCodeCallback = (routeParams: OktaCodeCallbackDto): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"Authentication\", \"OktaCodeCallback\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Consumes the code response from Open ID Connect\r\n\t * @param {@link cef.store.api.OpenIDConnectCodeCallbackDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType ServiceStack.Auth.OpenIDConnectCodeCallback\r\n\t * @path <api root="">/Authentication/OpenIDConnectCodeCallback\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tOpenIDConnectCodeCallback = (routeParams: OpenIDConnectCodeCallbackDto): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"Authentication\", \"OpenIDConnectCodeCallback\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Registers a new user via the standard process\r\n\t * @param {@link cef.store.api.RegisterNewUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RegisterNewUser\r\n\t * @path <api root="">/Authentication/RegisterNewUser\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRegisterNewUser = (routeParams: RegisterNewUserDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"RegisterNewUser\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Registers a new user to an existing account\r\n\t * @param {@link cef.store.api.RegisterNewUserToAccountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RegisterNewUserToAccount\r\n\t * @path <api root="">/Authentication/RegisterNewUserToAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRegisterNewUserToAccount = (routeParams?: RegisterNewUserToAccountDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"RegisterNewUserToAccount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Request a multi-factor authentication token for a specific user.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RequestMFAForUsername\r\n\t * @path <api root="">/Authentication/RequestMFA/{UserName*}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRequestMFAForUsername = (userName: string, routeParams: RequestMFAForUsernameDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.get([\"Authentication\", \"RequestMFA\", encodeURIComponent(userName)].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Pass in user credentials to log into the site.\r\n\t * @param {@link cef.store.api.ValidateEmailDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateEmail\r\n\t * @path <api root="">/Authentication/ValidateEmail\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tValidateEmail = (routeParams: ValidateEmailDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ValidateEmail\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Validate Email Is Unique\r\n\t * @param {@link cef.store.api.ValidateEmailIsUniqueDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateEmailIsUnique\r\n\t * @path <api root="">/Authentication/ValidateEmailIsUnique\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tValidateEmailIsUnique = (routeParams: ValidateEmailIsUniqueDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ValidateEmailIsUnique\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Membership Registration Process step 2: Validate Invitation (User clicked the link in the email with an invite token)\r\n\t * @param {@link cef.store.api.ValidateInvitationDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateInvitation\r\n\t * @path <api root="">/Authentication/ValidateInvitation\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tValidateInvitation = (routeParams: ValidateInvitationDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ValidateInvitation\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Validates that the password provided for a username is the correct one.\r\n\t * @param {@link cef.store.api.ValidatePasswordDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidatePassword\r\n\t * @path <api root="">/Authentication/ValidatePassword\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tValidatePassword = (routeParams: ValidatePasswordDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ValidatePassword\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Pass in user credentials to log into the site.\r\n\t * @param {@link cef.store.api.ValidatePasswordIsGoodDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidatePasswordIsGood\r\n\t * @path <api root="">/Authentication/ValidatePasswordIsGood\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tValidatePasswordIsGood = (routeParams: ValidatePasswordIsGoodDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ValidatePasswordIsGood\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Pass in user credentials to log into the site.\r\n\t * @param {@link cef.store.api.ValidateUserNameIsGoodDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateUserNameIsGood\r\n\t * @path <api root="">/Authentication/ValidateUserNameIsGood\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tValidateUserNameIsGood = (routeParams: ValidateUserNameIsGoodDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Authentication\", \"ValidateUserNameIsGood\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Brands.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tBrandCurrencySearchModel,\r\n\tBrandCurrencyPagedResults,\r\n\tBrandLanguageSearchModel,\r\n\tBrandLanguagePagedResults,\r\n\tBrandSearchModel,\r\n\tBrandPagedResults,\r\n\tBrandSiteDomainSearchModel,\r\n\tBrandSiteDomainPagedResults,\r\n\tBrandModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to get a list of brand currencies\r\n * @see {@link BrandCurrencySearchModel}\r\n * @public\r\n */\r\nexport interface GetBrandCurrenciesDto extends BrandCurrencySearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of brand languages\r\n * @see {@link BrandLanguageSearchModel}\r\n * @public\r\n */\r\nexport interface GetBrandLanguagesDto extends BrandLanguageSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of brands\r\n * @see {@link BrandSearchModel}\r\n * @public\r\n */\r\nexport interface GetBrandsDto extends BrandSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of brand site domains\r\n * @see {@link BrandSiteDomainSearchModel}\r\n * @public\r\n */\r\nexport interface GetBrandSiteDomainsDto extends BrandSiteDomainSearchModel {\r\n}\r\n\r\nexport class Brands {\r\n\t/**\r\n\t * Use to get a list of brand currencies\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrandCurrencies\r\n\t * @path <api root="">/Brands/BrandCurrencies\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<brandcurrencypagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetBrandCurrencies = (routeParams?: GetBrandCurrenciesDto): IHttpPromise<brandcurrencypagedresults> =&gt;\r\n\t\taxios.get([\"Brands\", \"BrandCurrencies\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of brand languages\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrandLanguages\r\n\t * @path <api root="">/Brands/BrandLanguages\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<brandlanguagepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetBrandLanguages = (routeParams?: GetBrandLanguagesDto): IHttpPromise<brandlanguagepagedresults> =&gt;\r\n\t\taxios.get([\"Brands\", \"BrandLanguages\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of brands\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrands\r\n\t * @path <api root="">/Brands/Brands\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<brandpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetBrands = (routeParams?: GetBrandsDto): IHttpPromise<brandpagedresults> =&gt;\r\n\t\taxios.get([\"Brands\", \"Brands\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of brand site domains\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrandSiteDomains\r\n\t * @path <api root="">/Brands/BrandSiteDomains\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<brandsitedomainpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetBrandSiteDomains = (routeParams?: GetBrandSiteDomainsDto): IHttpPromise<brandsitedomainpagedresults> =&gt;\r\n\t\taxios.get([\"Brands\", \"BrandSiteDomains\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get the current brand based on url, sub-domain or sub-folder\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentBrand\r\n\t * @path <api root="">/Brands/Brand/Current\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<brandmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentBrand = (): IHttpPromise<cefactionresponset<brandmodel>&gt; =&gt;\r\n\t\taxios.get([\"Brands\", \"Brand\", \"Current\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n}\r\n","/**\r\n * @file _api/cvApi.Categories.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tImplementsSeoUrlBase,\r\n\tCategorySearchModel,\r\n\tCategoryPagedResults,\r\n\tCategoryModel,\r\n\tImplementsKeyOnQueryBase,\r\n\tCategoryImageModel,\r\n\tCategoryImageSearchModel,\r\n\tCategoryImagePagedResults,\r\n\tProductCategorySelectorModel,\r\n\tTypeSearchModel,\r\n\tCategoryTypePagedResults,\r\n\tMenuCategoryModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckCategoryExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this SEO URL exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsSeoUrlBase}\r\n * @public\r\n */\r\nexport interface CheckCategoryExistsBySeoUrlDto extends ImplementsSeoUrlBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of categories\r\n * @see {@link CategorySearchModel}\r\n * @public\r\n */\r\nexport interface GetCategoriesDto extends CategorySearchModel {\r\n}\r\n\r\n/**\r\n * Use to get three levels of categories\r\n * @see {@link CategorySearchModel}\r\n * @public\r\n */\r\nexport interface GetCategoriesThreeLevelsDto extends CategorySearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a specific category\r\n * @public\r\n */\r\nexport interface GetCategoryByIDDto {\r\n\t/** When true, don't map out the Product Categories (use when this would result in a lot of unnecessary data) */\r\n\tExcludeProductCategories?: boolean;\r\n}\r\n\r\n/**\r\n * Use to get a specific category by the custom key\r\n * @see {@link ImplementsKeyOnQueryBase}\r\n * @public\r\n */\r\nexport interface GetCategoryByKeyDto extends ImplementsKeyOnQueryBase {\r\n\t/** When true, don't map out the Product Categories (use when this would result in a lot of unnecessary data) */\r\n\tExcludeProductCategories?: boolean;\r\n}\r\n\r\n/**\r\n * Use to get a specific category by the SEO URL\r\n * @see {@link ImplementsSeoUrlBase}\r\n * @public\r\n */\r\nexport interface GetCategoryBySeoUrlDto extends ImplementsSeoUrlBase {\r\n\t/** When true, don't map out the Product Categories (use when this would result in a lot of unnecessary data) */\r\n\tExcludeProductCategories?: boolean;\r\n}\r\n\r\n/**\r\n * Get Category by SEO URL for just the SEO Metadata\r\n * @public\r\n */\r\nexport interface GetCategoryForMetaDataDto {\r\n\t/** The SEO URL of the Category to locate */\r\n\tSeoUrl: string;\r\n}\r\n\r\n/**\r\n * Use to get a list of category images\r\n * @see {@link CategoryImageSearchModel}\r\n * @public\r\n */\r\nexport interface GetCategoryImagesDto extends CategoryImageSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a tree of categories. Include the ParentID and set IncludeChildrenInResults to false and this can function as lazy loading for Kendo Trees.\r\n * @see {@link CategorySearchModel}\r\n * @public\r\n */\r\nexport interface GetCategoryTreeDto extends CategorySearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of category types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetCategoryTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get three levels of categories\r\n * @see {@link CategorySearchModel}\r\n * @public\r\n */\r\nexport interface GetMenuCategoriesThreeLevelsDto extends CategorySearchModel {\r\n}\r\n\r\nexport class Categories {\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsByID\r\n\t * @path <api root="">/Categories/Category/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCategoryExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsByKey\r\n\t * @path <api root="">/Categories/Category/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCategoryExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsByName\r\n\t * @path <api root="">/Categories/Category/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCategoryExistsByName = (routeParams?: CheckCategoryExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this SEO URL exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsBySeoUrl\r\n\t * @path <api root="">/Categories/Category/Exists/SeoUrl\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCategoryExistsBySeoUrl = (routeParams?: CheckCategoryExistsBySeoUrlDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"SeoUrl\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of categories\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategories\r\n\t * @path <api root="">/Categories/Categories\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<categorypagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCategories = (routeParams?: GetCategoriesDto): IHttpPromise<categorypagedresults> =&gt;\r\n\t\taxios.get([\"Categories\", \"Categories\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get three levels of categories\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoriesThreeLevels\r\n\t * @path <api root="">/Categories/Levels/Three\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<categorymodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCategoriesThreeLevels = (routeParams?: GetCategoriesThreeLevelsDto): IHttpPromise<array<categorymodel>&gt; =&gt;\r\n\t\taxios.get([\"Categories\", \"Levels\", \"Three\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get two levels of categories, fast\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoriesTwoLevelsFast\r\n\t * @path <api root="">/Categories/Levels/TwoFast\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<categorymodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCategoriesTwoLevelsFast = (): IHttpPromise<array<categorymodel>&gt; =&gt;\r\n\t\taxios.get([\"Categories\", \"Levels\", \"TwoFast\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific category\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryByID\r\n\t * @path <api root="">/Categories/Category/ID\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<categorymodel>}\r\n\t * @public\r\n\t */\r\n\tGetCategoryByID = (routeParams?: GetCategoryByIDDto): IHttpPromise<categorymodel> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"ID\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific category by the custom key\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryByKey\r\n\t * @path <api root="">/Categories/Category/Key\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<categorymodel>}\r\n\t * @public\r\n\t */\r\n\tGetCategoryByKey = (routeParams?: GetCategoryByKeyDto): IHttpPromise<categorymodel> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"Key\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific category by the SEO URL\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryBySeoUrl\r\n\t * @path <api root="">/Categories/Category/SeoUrl\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<categorymodel>}\r\n\t * @public\r\n\t */\r\n\tGetCategoryBySeoUrl = (routeParams?: GetCategoryBySeoUrlDto): IHttpPromise<categorymodel> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"SeoUrl\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get Category by SEO URL for just the SEO Metadata\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryForMetaData\r\n\t * @path <api root="">/Categories/Category/Metadata\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tGetCategoryForMetaData = (routeParams: GetCategoryForMetaDataDto): IHttpPromise<void> =&gt;\r\n\t\taxios.get([\"Categories\", \"Category\", \"Metadata\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific category image\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryImageByID\r\n\t * @path <api root="">/Categories/CategoryImage/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<categoryimagemodel>}\r\n\t * @public\r\n\t */\r\n\tGetCategoryImageByID = (id: number): IHttpPromise<categoryimagemodel> =&gt;\r\n\t\taxios.get([\"Categories\", \"CategoryImage\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of category images\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryImages\r\n\t * @path <api root="">/Categories/CategoryImages\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<categoryimagepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCategoryImages = (routeParams?: GetCategoryImagesDto): IHttpPromise<categoryimagepagedresults> =&gt;\r\n\t\taxios.get([\"Categories\", \"CategoryImages\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a tree of categories. Include the ParentID and set IncludeChildrenInResults to false and this can function as lazy loading for Kendo Trees.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryTree\r\n\t * @path <api root="">/Categories/Tree\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<productcategoryselectormodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCategoryTree = (routeParams?: GetCategoryTreeDto): IHttpPromise<array<productcategoryselectormodel>&gt; =&gt;\r\n\t\taxios.get([\"Categories\", \"Tree\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of category types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryTypes\r\n\t * @path <api root="">/Categories/CategoryTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<categorytypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCategoryTypes = (routeParams?: GetCategoryTypesDto): IHttpPromise<categorytypepagedresults> =&gt;\r\n\t\taxios.get([\"Categories\", \"CategoryTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get three levels of categories\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMenuCategoriesThreeLevels\r\n\t * @path <api root="">/Categories/MenuLevels/Three\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<menucategorymodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetMenuCategoriesThreeLevels = (routeParams?: GetMenuCategoriesThreeLevelsDto): IHttpPromise<array<menucategorymodel>&gt; =&gt;\r\n\t\taxios.get([\"Categories\", \"MenuLevels\", \"Three\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPersonalizedCategoriesForCurrentUser\r\n\t * @path <api root="">/Categories/Personalization/ForCurrentUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<categorymodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetPersonalizedCategoriesForCurrentUser = (): IHttpPromise<array<categorymodel>&gt; =&gt;\r\n\t\taxios.get([\"Categories\", \"Personalization\", \"ForCurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n}\r\n","/**\r\n * @file _api/cvApi.Contacts.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tUserModel,\r\n\tContactModel,\r\n\tTypeSearchModel,\r\n\tContactTypePagedResults,\r\n\tStatusModel,\r\n\tStatusSearchModel,\r\n\tUserOnlineStatusPagedResults,\r\n\tUserSearchModel,\r\n\tUserPagedResults,\r\n\tUserStatusPagedResults,\r\n\tUserTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tDictionary,\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to create a new user.\r\n * @see {@link UserModel}\r\n * @public\r\n */\r\nexport interface CreateUserDto extends UserModel {\r\n\t/** Password */\r\n\tPassword?: string;\r\n\t/** Should the system create a user on the CMS side */\r\n\tCreateCMSUser?: boolean;\r\n\t/** Should the system create a CEF User */\r\n\tCreateCEFUser?: boolean;\r\n}\r\n\r\n/**\r\n * Use to create user with invite code\r\n * @see {@link UserModel}\r\n * @public\r\n */\r\nexport interface CreateUserWithCodeDto extends UserModel {\r\n\t/** InvitationCode */\r\n\tInvitationCode: string;\r\n}\r\n\r\n/**\r\n * Use to get a list of contact types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetContactTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of user online statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetUserOnlineStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of users\r\n * @see {@link UserSearchModel}\r\n * @public\r\n */\r\nexport interface GetUsersDto extends UserSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of user statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetUserStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of user types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetUserTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to import a list of users to the current account. Returns the IDs of all users upserted\r\n * @public\r\n */\r\nexport interface ImportUsersFromExcelToCurrentAccountDto {\r\n\tFileName: string;\r\n\tAccountID?: number;\r\n}\r\n\r\n/**\r\n * Removes privacy data from the user's privacy attribute\r\n * @public\r\n */\r\nexport interface RemovePrivacyDataDto {\r\n\tMessage: string;\r\n}\r\n\r\n/**\r\n * Requests privacy data from the user's privacy attribute\r\n * @public\r\n */\r\nexport interface RequestPrivacyDataDto {\r\n\tMessage: string;\r\n}\r\n\r\n/**\r\n * Restricts user's privacy data from being sold\r\n * @public\r\n */\r\nexport interface RestrictPrivacyDataDto {\r\n\tMessage: string;\r\n}\r\n\r\n/**\r\n * Use to set the current user's online status.\r\n * @public\r\n */\r\nexport interface SetCurrentUserOnlineStatusDto {\r\n\tOnlineStatus: string;\r\n}\r\n\r\n/**\r\n * Use to update the current user's details\r\n * @see {@link UserModel}\r\n * @public\r\n */\r\nexport interface UpdateCurrentUserDto extends UserModel {\r\n}\r\n\r\n/**\r\n * Use to update the selected or current user's details\r\n * @see {@link UserModel}\r\n * @public\r\n */\r\nexport interface UpdateSelectedOrCurrentUserDto extends UserModel {\r\n}\r\n\r\n/**\r\n * Use to create a new or update an existing contact (as needed).\r\n * @see {@link ContactModel}\r\n * @public\r\n */\r\nexport interface UpsertContactDto extends ContactModel {\r\n}\r\n\r\nexport class Contacts {\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckUserExistsByKey\r\n\t * @path <api root="">/Contacts/User/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckUserExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Contacts\", \"User\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to create a new user.\r\n\t * @param {@link cef.store.api.CreateUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateUser\r\n\t * @path <api root="">/Contacts/User/Create\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateUser = (routeParams?: CreateUserDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Contacts\", \"User\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to create user with invite code\r\n\t * @param {@link cef.store.api.CreateUserWithCodeDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateUserWithCode\r\n\t * @path <api root="">/Contacts/User/CreateWithCode\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<usermodel>}\r\n\t * @public\r\n\t */\r\n\tCreateUserWithCode = (routeParams: CreateUserWithCodeDto): IHttpPromise<usermodel> =&gt;\r\n\t\taxios.post([\"Contacts\", \"User\", \"CreateWithCode\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific contact\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetContactByID\r\n\t * @path <api root="">/Contacts/Contact/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<contactmodel>}\r\n\t * @public\r\n\t */\r\n\tGetContactByID = (id: number): IHttpPromise<contactmodel> =&gt;\r\n\t\taxios.get([\"Contacts\", \"Contact\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of contact types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetContactTypes\r\n\t * @path <api root="">/Contacts/ContactTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<contacttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetContactTypes = (routeParams?: GetContactTypesDto): IHttpPromise<contacttypepagedresults> =&gt;\r\n\t\taxios.get([\"Contacts\", \"ContactTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get the current user's details\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUser\r\n\t * @path <api root="">/Contacts/CurrentUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<usermodel>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUser = (): IHttpPromise<usermodel> =&gt;\r\n\t\taxios.get([\"Contacts\", \"CurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get the current user's UserName. Note: this only returns the UserName in the UserModel, no additional data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserName\r\n\t * @path <api root="">/Contacts/CurrentUser/UserName\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cefalt.store.dictionary<any>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserName = (): IHttpPromise<cefactionresponset<dictionary<any>&gt;&gt; =&gt;\r\n\t\taxios.get([\"Contacts\", \"CurrentUser\", \"UserName\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get the current user's online status.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserOnlineStatus\r\n\t * @path <api root="">/Contacts/CurrentUser/GetOnlineStatus\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<statusmodel>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserOnlineStatus = (): IHttpPromise<statusmodel> =&gt;\r\n\t\taxios.get([\"Contacts\", \"CurrentUser\", \"GetOnlineStatus\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get the selected or current user's details\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSelectedOrCurrentUser\r\n\t * @path <api root="">/Contacts/SelectedUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<usermodel>}\r\n\t * @public\r\n\t */\r\n\tGetSelectedOrCurrentUser = (): IHttpPromise<usermodel> =&gt;\r\n\t\taxios.get([\"Contacts\", \"SelectedUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific user\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserByID\r\n\t * @path <api root="">/Contacts/User/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<usermodel>}\r\n\t * @public\r\n\t */\r\n\tGetUserByID = (id: number): IHttpPromise<usermodel> =&gt;\r\n\t\taxios.get([\"Contacts\", \"User\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific user by the custom key\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserByKey\r\n\t * @path <api root="">/Contacts/User/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<usermodel>}\r\n\t * @public\r\n\t */\r\n\tGetUserByKey = (key: string): IHttpPromise<usermodel> =&gt;\r\n\t\taxios.get([\"Contacts\", \"User\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of user online statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserOnlineStatuses\r\n\t * @path <api root="">/Contacts/UserOnlineStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<useronlinestatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetUserOnlineStatuses = (routeParams?: GetUserOnlineStatusesDto): IHttpPromise<useronlinestatuspagedresults> =&gt;\r\n\t\taxios.get([\"Contacts\", \"UserOnlineStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of users\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUsers\r\n\t * @path <api root="">/Contacts/Users\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<userpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetUsers = (routeParams?: GetUsersDto): IHttpPromise<userpagedresults> =&gt;\r\n\t\taxios.get([\"Contacts\", \"Users\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of user statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserStatuses\r\n\t * @path <api root="">/Contacts/UserStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<userstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetUserStatuses = (routeParams?: GetUserStatusesDto): IHttpPromise<userstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Contacts\", \"UserStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of user types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserTypes\r\n\t * @path <api root="">/Contacts/UserTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<usertypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetUserTypes = (routeParams?: GetUserTypesDto): IHttpPromise<usertypepagedresults> =&gt;\r\n\t\taxios.get([\"Contacts\", \"UserTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to import a list of users to the current account. Returns the IDs of all users upserted\r\n\t * @param {@link cef.store.api.ImportUsersFromExcelToCurrentAccountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Workflow.ImportUsersFromExcelToCurrentAccount\r\n\t * @path <api root="">/Contacts/Users/ImportFromExcelToCurrentAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<number>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tImportUsersFromExcelToCurrentAccount = (routeParams: ImportUsersFromExcelToCurrentAccountDto): IHttpPromise<cefactionresponset<array<number>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Contacts\", \"Users\", \"ImportFromExcelToCurrentAccount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Removes privacy data from the user's privacy attribute\r\n\t * @param {@link cef.store.api.RemovePrivacyDataDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemovePrivacyData\r\n\t * @path <api root="">/Contacts/Users/RemovePrivacyData\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRemovePrivacyData = (routeParams: RemovePrivacyDataDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Contacts\", \"Users\", \"RemovePrivacyData\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Requests privacy data from the user's privacy attribute\r\n\t * @param {@link cef.store.api.RequestPrivacyDataDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RequestPrivacyData\r\n\t * @path <api root="">/Contacts/Users/RequestPrivacyData\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRequestPrivacyData = (routeParams: RequestPrivacyDataDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Contacts\", \"Users\", \"RequestPrivacyData\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Restricts user's privacy data from being sold\r\n\t * @param {@link cef.store.api.RestrictPrivacyDataDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RestrictPrivacyData\r\n\t * @path <api root="">/Contacts/Users/RestrictPrivacyData\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRestrictPrivacyData = (routeParams: RestrictPrivacyDataDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Contacts\", \"Users\", \"RestrictPrivacyData\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to set the current user's online status.\r\n\t * @param {@link cef.store.api.SetCurrentUserOnlineStatusDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SetCurrentUserOnlineStatus\r\n\t * @path <api root="">/Contacts/CurrentUser/SetOnlineStatus\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetCurrentUserOnlineStatus = (routeParams: SetCurrentUserOnlineStatusDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Contacts\", \"CurrentUser\", \"SetOnlineStatus\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to update the current user's details\r\n\t * @param {@link cef.store.api.UpdateCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCurrentUser\r\n\t * @path <api root="">/Contacts/CurrentUser/Update\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tUpdateCurrentUser = (routeParams?: UpdateCurrentUserDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.put([\"Contacts\", \"CurrentUser\", \"Update\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to update the selected or current user's details\r\n\t * @param {@link cef.store.api.UpdateSelectedOrCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateSelectedOrCurrentUser\r\n\t * @path <api root="">/Contacts/SelectedUser/Update\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tUpdateSelectedOrCurrentUser = (routeParams?: UpdateSelectedOrCurrentUserDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.put([\"Contacts\", \"SelectedUser\", \"Update\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to create a new or update an existing contact (as needed).\r\n\t * @param {@link cef.store.api.UpsertContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpsertContact\r\n\t * @path <api root="">/Contacts/Contact/Upsert\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpsertContact = (routeParams?: UpsertContactDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Contacts\", \"Contact\", \"Upsert\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Currencies.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tCurrencySearchModel,\r\n\tCurrencyPagedResults,\r\n\tCurrencyModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Convert a decimal value from one currency to another\r\n * @public\r\n */\r\nexport interface ConvertCurrencyValueAtoBDto {\r\n\t/** The decimal value to convert */\r\n\tValue: number;\r\n\t/** The key of the starting currency (convert from) */\r\n\tKeyA: string;\r\n\t/** The key of the currency to convert to */\r\n\tKeyB: string;\r\n}\r\n\r\n/**\r\n * Use to get a list of currencies\r\n * @see {@link CurrencySearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrenciesDto extends CurrencySearchModel {\r\n}\r\n\r\nexport class Currencies {\r\n\t/**\r\n\t * Convert a decimal value from one currency to another\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ConvertCurrencyValueAtoB\r\n\t * @path <api root="">/Currencies/Convert\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tConvertCurrencyValueAtoB = (routeParams: ConvertCurrencyValueAtoBDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Currencies\", \"Convert\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of currencies\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrencies\r\n\t * @path <api root="">/Currencies/Currencies\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<currencypagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrencies = (routeParams?: GetCurrenciesDto): IHttpPromise<currencypagedresults> =&gt;\r\n\t\taxios.get([\"Currencies\", \"Currencies\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific currency by the custom key\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrencyByKey\r\n\t * @path <api root="">/Currencies/Currency/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<currencymodel>}\r\n\t * @public\r\n\t */\r\n\tGetCurrencyByKey = (key: string): IHttpPromise<currencymodel> =&gt;\r\n\t\taxios.get([\"Currencies\", \"Currency\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n}\r\n","/**\r\n * @file _api/cvApi.Franchises.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tFranchiseModel,\r\n\tFranchiseCategorySearchModel,\r\n\tFranchiseCategoryPagedResults,\r\n\tFranchiseSearchModel,\r\n\tFranchisePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckFranchiseExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Returns the current franchise ID for the specified user identifier.\r\n * @public\r\n */\r\nexport interface GetCurrentFranchiseIDDto {\r\n\t/** User ID */\r\n\tUserID: number;\r\n}\r\n\r\n/**\r\n * Use to get a list of franchise categories\r\n * @see {@link FranchiseCategorySearchModel}\r\n * @public\r\n */\r\nexport interface GetFranchiseCategoriesDto extends FranchiseCategorySearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of franchises\r\n * @see {@link FranchiseSearchModel}\r\n * @public\r\n */\r\nexport interface GetFranchisesDto extends FranchiseSearchModel {\r\n}\r\n\r\nexport class Franchises {\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckFranchiseExistsByID\r\n\t * @path <api root="">/Franchises/Franchise/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckFranchiseExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Franchises\", \"Franchise\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckFranchiseExistsByKey\r\n\t * @path <api root="">/Franchises/Franchise/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckFranchiseExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Franchises\", \"Franchise\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckFranchiseExistsByName\r\n\t * @path <api root="">/Franchises/Franchise/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckFranchiseExistsByName = (routeParams?: CheckFranchiseExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Franchises\", \"Franchise\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Returns the current franchise ID for the specified user identifier.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentFranchiseID\r\n\t * @path <api root="">/Franchises/CurrentFranchise\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentFranchiseID = (routeParams: GetCurrentFranchiseIDDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Franchises\", \"CurrentFranchise\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific franchise\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetFranchiseByID\r\n\t * @path <api root="">/Franchises/Franchise/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<franchisemodel>}\r\n\t * @public\r\n\t */\r\n\tGetFranchiseByID = (id: number): IHttpPromise<franchisemodel> =&gt;\r\n\t\taxios.get([\"Franchises\", \"Franchise\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of franchise categories\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetFranchiseCategories\r\n\t * @path <api root="">/Franchises/FranchiseCategories\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<franchisecategorypagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetFranchiseCategories = (routeParams?: GetFranchiseCategoriesDto): IHttpPromise<franchisecategorypagedresults> =&gt;\r\n\t\taxios.get([\"Franchises\", \"FranchiseCategories\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of franchises\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetFranchises\r\n\t * @path <api root="">/Franchises/Franchises\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<franchisepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetFranchises = (routeParams?: GetFranchisesDto): IHttpPromise<franchisepagedresults> =&gt;\r\n\t\taxios.get([\"Franchises\", \"Franchises\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Geography.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tAccountContactModel,\r\n\tCountrySearchModel,\r\n\tCountryPagedResults,\r\n\tCountryModel,\r\n\tDistrictModel,\r\n\tDistrictSearchModel,\r\n\tDistrictPagedResults,\r\n\tRegionModel,\r\n\tRegionSearchModel,\r\n\tRegionPagedResults,\r\n\tPhonePrefixLookupPagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Code exists and return the id if it does (null if it does not)\r\n * @public\r\n */\r\nexport interface CheckCountryExistsByCodeDto {\r\n\t/** The Country Code to look up */\r\n\tCode: string;\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckCountryExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Code exists and return the id if it does (null if it does not)\r\n * @public\r\n */\r\nexport interface CheckRegionExistsByCodeDto {\r\n\tCode: string;\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckRegionExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to add an address in the address book\r\n * @see {@link AccountContactModel}\r\n * @public\r\n */\r\nexport interface CreateAddressInBookDto extends AccountContactModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of countries\r\n * @see {@link CountrySearchModel}\r\n * @public\r\n */\r\nexport interface GetCountriesDto extends CountrySearchModel {\r\n}\r\n\r\n/**\r\n * Use to get the address book for the current Account\r\n * @public\r\n */\r\nexport interface GetCurrentAccountAddressBookDto {\r\n\tAccountID?: number;\r\n}\r\n\r\n/**\r\n * Use to get the address book for the current Account\r\n * @public\r\n */\r\nexport interface GetCurrentAccountPrimaryShippingAddressDto {\r\n\tAccountID?: number;\r\n}\r\n\r\n/**\r\n * Use to get the address book for the current Account\r\n * @public\r\n */\r\nexport interface GetCurrentUserAddressBookDto {\r\n\tAccountID?: number;\r\n}\r\n\r\n/**\r\n * Use to get a specific district by the name\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface GetDistrictByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Gets the district by the district name and region id\r\n * @public\r\n */\r\nexport interface GetDistrictByNameAndRegionIDDto {\r\n\tRegionID: number;\r\n\tName: string;\r\n}\r\n\r\n/**\r\n * Use to get a list of districts\r\n * @see {@link DistrictSearchModel}\r\n * @public\r\n */\r\nexport interface GetDistrictsDto extends DistrictSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a specific region by the name\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface GetRegionByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of regions\r\n * @see {@link RegionSearchModel}\r\n * @public\r\n */\r\nexport interface GetRegionsDto extends RegionSearchModel {\r\n}\r\n\r\n/**\r\n * Validates if the region is in a restricted region.\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface RestrictedRegionCheckDto extends ImplementsNameBase {\r\n\tCountryID: number;\r\n\tCode: string;\r\n\tRegionID: number;\r\n}\r\n\r\n/**\r\n * Use to get geographical data from the phone number\r\n * @public\r\n */\r\nexport interface ReversePhonePrefixToCityRegionCountryDto {\r\n\t/** The prefix, will be limited to 5 characters ignoring any symbols or spaces. */\r\n\tPrefix: string;\r\n}\r\n\r\nexport class Geography {\r\n\t/**\r\n\t * Check if this Code exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCountryExistsByCode\r\n\t * @path <api root="">/Geography/Country/Exists/Code\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCountryExistsByCode = (routeParams: CheckCountryExistsByCodeDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Geography\", \"Country\", \"Exists\", \"Code\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCountryExistsByKey\r\n\t * @path <api root="">/Geography/Country/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCountryExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Geography\", \"Country\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCountryExistsByName\r\n\t * @path <api root="">/Geography/Country/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCountryExistsByName = (routeParams?: CheckCountryExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Geography\", \"Country\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Code exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckRegionExistsByCode\r\n\t * @path <api root="">/Geography/Region/Exists/Code\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckRegionExistsByCode = (routeParams: CheckRegionExistsByCodeDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Geography\", \"Region\", \"Exists\", \"Code\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckRegionExistsByKey\r\n\t * @path <api root="">/Geography/Region/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckRegionExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Geography\", \"Region\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckRegionExistsByName\r\n\t * @path <api root="">/Geography/Region/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckRegionExistsByName = (routeParams?: CheckRegionExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Geography\", \"Region\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to add an address in the address book\r\n\t * @param {@link cef.store.api.CreateAddressInBookDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateAddressInBook\r\n\t * @path <api root="">/Geography/AddressBook/Create\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<accountcontactmodel>}\r\n\t * @public\r\n\t */\r\n\tCreateAddressInBook = (routeParams?: CreateAddressInBookDto): IHttpPromise<accountcontactmodel> =&gt;\r\n\t\taxios.post([\"Geography\", \"AddressBook\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a list of countries\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCountries\r\n\t * @path <api root="">/Geography/Countries\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<countrypagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCountries = (routeParams?: GetCountriesDto): IHttpPromise<countrypagedresults> =&gt;\r\n\t\taxios.get([\"Geography\", \"Countries\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific country\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCountryByID\r\n\t * @path <api root="">/Geography/Country/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<countrymodel>}\r\n\t * @public\r\n\t */\r\n\tGetCountryByID = (id: number): IHttpPromise<countrymodel> =&gt;\r\n\t\taxios.get([\"Geography\", \"Country\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get the address book for the current Account\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountAddressBook\r\n\t * @path <api root="">/Geography/AddressBook/CurrentAccount\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<accountcontactmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountAddressBook = (routeParams?: GetCurrentAccountAddressBookDto): IHttpPromise<array<accountcontactmodel>&gt; =&gt;\r\n\t\taxios.get([\"Geography\", \"AddressBook\", \"CurrentAccount\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get the address book for the current Account\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountPrimaryShippingAddress\r\n\t * @path <api root="">/Geography/AddressBook/CurrentAccount/PrimaryShipping\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<accountcontactmodel>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountPrimaryShippingAddress = (routeParams?: GetCurrentAccountPrimaryShippingAddressDto): IHttpPromise<accountcontactmodel> =&gt;\r\n\t\taxios.get([\"Geography\", \"AddressBook\", \"CurrentAccount\", \"PrimaryShipping\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get the address book for the current Account\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserAddressBook\r\n\t * @path <api root="">/Geography/AddressBook/CurrentUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<accountcontactmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserAddressBook = (routeParams?: GetCurrentUserAddressBookDto): IHttpPromise<array<accountcontactmodel>&gt; =&gt;\r\n\t\taxios.get([\"Geography\", \"AddressBook\", \"CurrentUser\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific district by the name\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDistrictByName\r\n\t * @path <api root="">/Geography/District/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<districtmodel>}\r\n\t * @public\r\n\t */\r\n\tGetDistrictByName = (routeParams?: GetDistrictByNameDto): IHttpPromise<districtmodel> =&gt;\r\n\t\taxios.get([\"Geography\", \"District\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Gets the district by the district name and region id\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDistrictByNameAndRegionID\r\n\t * @path <api root="">/Geography/District/GetDistrictByNameAndRegionID\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<districtmodel>}\r\n\t * @public\r\n\t */\r\n\tGetDistrictByNameAndRegionID = (routeParams: GetDistrictByNameAndRegionIDDto): IHttpPromise<districtmodel> =&gt;\r\n\t\taxios.get([\"Geography\", \"District\", \"GetDistrictByNameAndRegionID\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of districts\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDistricts\r\n\t * @path <api root="">/Geography/Districts\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<districtpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetDistricts = (routeParams?: GetDistrictsDto): IHttpPromise<districtpagedresults> =&gt;\r\n\t\taxios.get([\"Geography\", \"Districts\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific region\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRegionByID\r\n\t * @path <api root="">/Geography/Region/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<regionmodel>}\r\n\t * @public\r\n\t */\r\n\tGetRegionByID = (id: number): IHttpPromise<regionmodel> =&gt;\r\n\t\taxios.get([\"Geography\", \"Region\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific region by the name\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRegionByName\r\n\t * @path <api root="">/Geography/Region/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<regionmodel>}\r\n\t * @public\r\n\t */\r\n\tGetRegionByName = (routeParams?: GetRegionByNameDto): IHttpPromise<regionmodel> =&gt;\r\n\t\taxios.get([\"Geography\", \"Region\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of regions\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRegions\r\n\t * @path <api root="">/Geography/Regions\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<regionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetRegions = (routeParams?: GetRegionsDto): IHttpPromise<regionpagedresults> =&gt;\r\n\t\taxios.get([\"Geography\", \"Regions\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Validates if the region is in a restricted region.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RestrictedRegionCheck\r\n\t * @path <api root="">/Geography/Region/RestrictedRegionCheck\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRestrictedRegionCheck = (routeParams: RestrictedRegionCheckDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.get([\"Geography\", \"Region\", \"RestrictedRegionCheck\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get geographical data from the phone number\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReversePhonePrefixToCityRegionCountry\r\n\t * @path <api root="">/Geography/PhonePrefixLookups/ReversePhonePrefixToCityRegionCountry\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<phoneprefixlookuppagedresults>}\r\n\t * @public\r\n\t */\r\n\tReversePhonePrefixToCityRegionCountry = (routeParams: ReversePhonePrefixToCityRegionCountryDto): IHttpPromise<phoneprefixlookuppagedresults> =&gt;\r\n\t\taxios.get([\"Geography\", \"PhonePrefixLookups\", \"ReversePhonePrefixToCityRegionCountry\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Globalization.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tLanguageModel,\r\n\tLanguageSearchModel,\r\n\tLanguagePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to get a list of languages\r\n * @see {@link LanguageSearchModel}\r\n * @public\r\n */\r\nexport interface GetLanguagesDto extends LanguageSearchModel {\r\n}\r\n\r\nexport class Globalization {\r\n\t/**\r\n\t * Use to get a specific language by the custom key\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLanguageByKey\r\n\t * @path <api root="">/Globalization/Language/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<languagemodel>}\r\n\t * @public\r\n\t */\r\n\tGetLanguageByKey = (key: string): IHttpPromise<languagemodel> =&gt;\r\n\t\taxios.get([\"Globalization\", \"Language\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of languages\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLanguages\r\n\t * @path <api root="">/Globalization/Languages\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<languagepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetLanguages = (routeParams?: GetLanguagesDto): IHttpPromise<languagepagedresults> =&gt;\r\n\t\taxios.get([\"Globalization\", \"Languages\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Inventory.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tInventoryLocationRegionSearchModel,\r\n\tInventoryLocationRegionPagedResults,\r\n\tInventoryLocationSearchModel,\r\n\tInventoryLocationPagedResults,\r\n\tInventoryLocationSectionSearchModel,\r\n\tInventoryLocationSectionPagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Get InventoryLocationRegions by InventoryLocation ID\r\n * @see {@link InventoryLocationRegionSearchModel}\r\n * @public\r\n */\r\nexport interface GetInventoryLocationRegionsByInventoryLocationIDDto extends InventoryLocationRegionSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of inventory locations\r\n * @see {@link InventoryLocationSearchModel}\r\n * @public\r\n */\r\nexport interface GetInventoryLocationsDto extends InventoryLocationSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of inventory location sections\r\n * @see {@link InventoryLocationSectionSearchModel}\r\n * @public\r\n */\r\nexport interface GetInventoryLocationSectionsDto extends InventoryLocationSectionSearchModel {\r\n}\r\n\r\nexport class Inventory {\r\n\t/**\r\n\t * Get InventoryLocationRegions by InventoryLocation ID\r\n\t * @param {@link cef.store.api.GetInventoryLocationRegionsByInventoryLocationIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetInventoryLocationRegionsByInventoryLocationID\r\n\t * @path <api root="">/Inventory/InventoryLocation/Regions/ByInventoryLocationID\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<inventorylocationregionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetInventoryLocationRegionsByInventoryLocationID = (routeParams?: GetInventoryLocationRegionsByInventoryLocationIDDto): IHttpPromise<inventorylocationregionpagedresults> =&gt;\r\n\t\taxios.post([\"Inventory\", \"InventoryLocation\", \"Regions\", \"ByInventoryLocationID\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a list of inventory locations\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetInventoryLocations\r\n\t * @path <api root="">/Inventory/InventoryLocations\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<inventorylocationpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetInventoryLocations = (routeParams?: GetInventoryLocationsDto): IHttpPromise<inventorylocationpagedresults> =&gt;\r\n\t\taxios.get([\"Inventory\", \"InventoryLocations\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of inventory location sections\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetInventoryLocationSections\r\n\t * @path <api root="">/Inventory/InventoryLocationSections\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<inventorylocationsectionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetInventoryLocationSections = (routeParams?: GetInventoryLocationSectionsDto): IHttpPromise<inventorylocationsectionpagedresults> =&gt;\r\n\t\taxios.get([\"Inventory\", \"InventoryLocationSections\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Invoicing.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsDisplayNameBase,\r\n\tImplementsNameBase,\r\n\tSalesInvoiceModel,\r\n\tSalesInvoiceEventSearchModel,\r\n\tSalesInvoiceEventPagedResults,\r\n\tStateModel,\r\n\tStateSearchModel,\r\n\tSalesInvoiceStatePagedResults,\r\n\tStatusModel,\r\n\tStatusSearchModel,\r\n\tSalesInvoiceStatusPagedResults,\r\n\tTypeModel,\r\n\tTypeSearchModel,\r\n\tSalesInvoiceTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesInvoiceStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesInvoiceStateExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesInvoiceStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesInvoiceStatusExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesInvoiceTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesInvoiceTypeExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales invoice events\r\n * @see {@link SalesInvoiceEventSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesInvoiceEventsDto extends SalesInvoiceEventSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales invoice states\r\n * @see {@link StateSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesInvoiceStatesDto extends StateSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales invoice statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesInvoiceStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales invoice types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesInvoiceTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Invoicing {\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStateExistsByDisplayName\r\n\t * @path <api root="">/Invoicing/SalesInvoiceState/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceStateExistsByDisplayName = (routeParams?: CheckSalesInvoiceStateExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStateExistsByKey\r\n\t * @path <api root="">/Invoicing/SalesInvoiceState/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceStateExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStateExistsByName\r\n\t * @path <api root="">/Invoicing/SalesInvoiceState/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceStateExistsByName = (routeParams?: CheckSalesInvoiceStateExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStatusExistsByDisplayName\r\n\t * @path <api root="">/Invoicing/SalesInvoiceStatus/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceStatusExistsByDisplayName = (routeParams?: CheckSalesInvoiceStatusExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStatusExistsByKey\r\n\t * @path <api root="">/Invoicing/SalesInvoiceStatus/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceStatusExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStatusExistsByName\r\n\t * @path <api root="">/Invoicing/SalesInvoiceStatus/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceStatusExistsByName = (routeParams?: CheckSalesInvoiceStatusExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceTypeExistsByDisplayName\r\n\t * @path <api root="">/Invoicing/SalesInvoiceType/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceTypeExistsByDisplayName = (routeParams?: CheckSalesInvoiceTypeExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceTypeExistsByKey\r\n\t * @path <api root="">/Invoicing/SalesInvoiceType/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceTypeExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceTypeExistsByName\r\n\t * @path <api root="">/Invoicing/SalesInvoiceType/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesInvoiceTypeExistsByName = (routeParams?: CheckSalesInvoiceTypeExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales invoice\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceByID\r\n\t * @path <api root="">/Invoicing/SalesInvoice/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesinvoicemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceByID = (id: number): IHttpPromise<salesinvoicemodel> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoice\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales invoice events\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceEvents\r\n\t * @path <api root="">/Invoicing/SalesInvoiceEvents\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesinvoiceeventpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceEvents = (routeParams?: GetSalesInvoiceEventsDto): IHttpPromise<salesinvoiceeventpagedresults> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceEvents\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales invoice state\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStateByID\r\n\t * @path <api root="">/Invoicing/SalesInvoiceState/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceStateByID = (id: number): IHttpPromise<statemodel> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales invoice states\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStates\r\n\t * @path <api root="">/Invoicing/SalesInvoiceStates\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesinvoicestatepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceStates = (routeParams?: GetSalesInvoiceStatesDto): IHttpPromise<salesinvoicestatepagedresults> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStates\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales invoice status\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStatusByID\r\n\t * @path <api root="">/Invoicing/SalesInvoiceStatus/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statusmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceStatusByID = (id: number): IHttpPromise<statusmodel> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales invoice statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStatuses\r\n\t * @path <api root="">/Invoicing/SalesInvoiceStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesinvoicestatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceStatuses = (routeParams?: GetSalesInvoiceStatusesDto): IHttpPromise<salesinvoicestatuspagedresults> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales invoice type\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceTypeByID\r\n\t * @path <api root="">/Invoicing/SalesInvoiceType/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<typemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceTypeByID = (id: number): IHttpPromise<typemodel> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales invoice types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceTypes\r\n\t * @path <api root="">/Invoicing/SalesInvoiceTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesinvoicetypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoiceTypes = (routeParams?: GetSalesInvoiceTypesDto): IHttpPromise<salesinvoicetypepagedresults> =&gt;\r\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.JSConfigs.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\nexport class JSConfigs {\r\n\t/**\r\n\t * Gets the current cache counter value\r\n\t * @param {@link cef.store.api.GetCacheCounterDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCacheCounter\r\n\t * @path <api root="">/JSConfigs/Counter\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tGetCacheCounter = (): IHttpPromise<number> =&gt;\r\n\t\taxios.post([\"JSConfigs\", \"Counter\"].join(\"/\"));\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreFrontCEFConfig\r\n\t * @path <api root="">/JSConfigs/StoreFront\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tGetStoreFrontCEFConfig = (): IHttpPromise<void> =&gt;\r\n\t\taxios.get([\"JSConfigs\", \"StoreFront\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreFrontCEFConfigAlt\r\n\t * @path <api root="">/JSConfigs/StoreFrontAlt\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<string>}\r\n\t * @public\r\n\t */\r\n\tGetStoreFrontCEFConfigAlt = (): IHttpPromise<string> =&gt;\r\n\t\taxios.get([\"JSConfigs\", \"StoreFrontAlt\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreFrontCefConfigReact\r\n\t * @path <api root="">/JSConfigs/StoreFrontReact\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<any>}\r\n\t * @public\r\n\t */\r\n\tGetStoreFrontCefConfigReact = (): IHttpPromise<any> =&gt;\r\n\t\taxios.get([\"JSConfigs\", \"StoreFrontReact\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Flushes the cached setting values and reloads the config file.\r\n\t * @param {@link cef.store.api.ReloadSettingsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReloadSettings\r\n\t * @path <api root="">/JSConfigs/Reload\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tReloadSettings = (): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"JSConfigs\", \"Reload\"].join(\"/\"));\r\n}\r\n","/**\r\n * @file _api/cvApi.Manufacturers.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tManufacturerModel,\r\n\tManufacturerSearchModel,\r\n\tManufacturerPagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckManufacturerExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of manufacturers\r\n * @see {@link ManufacturerSearchModel}\r\n * @public\r\n */\r\nexport interface GetManufacturersDto extends ManufacturerSearchModel {\r\n}\r\n\r\nexport class Manufacturers {\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckManufacturerExistsByID\r\n\t * @path <api root="">/Manufacturers/Manufacturer/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckManufacturerExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckManufacturerExistsByKey\r\n\t * @path <api root="">/Manufacturers/Manufacturer/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckManufacturerExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckManufacturerExistsByName\r\n\t * @path <api root="">/Manufacturers/Manufacturer/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckManufacturerExistsByName = (routeParams?: CheckManufacturerExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific manufacturer\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetManufacturerByID\r\n\t * @path <api root="">/Manufacturers/Manufacturer/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<manufacturermodel>}\r\n\t * @public\r\n\t */\r\n\tGetManufacturerByID = (id: number): IHttpPromise<manufacturermodel> =&gt;\r\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of manufacturers\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetManufacturers\r\n\t * @path <api root="">/Manufacturers/Manufacturers\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<manufacturerpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetManufacturers = (routeParams?: GetManufacturersDto): IHttpPromise<manufacturerpagedresults> =&gt;\r\n\t\taxios.get([\"Manufacturers\", \"Manufacturers\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Media.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tFileEntityType,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIUploadResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * FileUrl\r\n * @public\r\n */\r\nexport interface GetStoredFileUrlDto {\r\n\tEntityType: FileEntityType;\r\n\tFileKey: string;\r\n}\r\n\r\n/**\r\n * Upload stored files of any type and they will be injected with your model as you save them (e.g.- Create/Update Product, Category, etc)\r\n * @public\r\n */\r\nexport interface UploadStoredFileDto {\r\n\tEntityFileType: FileEntityType;\r\n\tName?: string;\r\n\tAsync: boolean;\r\n}\r\n\r\nexport class Media {\r\n\t/**\r\n\t * FileUrl\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoredFileUrl\r\n\t * @path <api root="">/Media/StoredFiles/Url\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<string>}\r\n\t * @public\r\n\t */\r\n\tGetStoredFileUrl = (routeParams: GetStoredFileUrlDto): IHttpPromise<string> =&gt;\r\n\t\taxios.get([\"Media\", \"StoredFiles\", \"Url\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get Upload StoredFile Results\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUploadStoredFileResults\r\n\t * @path <api root="">/Media/StoredFiles/UploadResults/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<iuploadresponse>}\r\n\t * @public\r\n\t */\r\n\tGetUploadStoredFileResults = (id: string): IHttpPromise<iuploadresponse> =&gt;\r\n\t\taxios.get([\"Media\", \"StoredFiles\", \"UploadResults\", encodeURIComponent(id)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Upload stored files of any type and they will be injected with your model as you save them (e.g.- Create/Update Product, Category, etc)\r\n\t * @param {@link cef.store.api.UploadStoredFileDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UploadStoredFile\r\n\t * @path <api root="">/Media/StoredFiles/Upload\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<iuploadresponse>}\r\n\t * @public\r\n\t */\r\n\tUploadStoredFile = (routeParams: UploadStoredFileDto): IHttpPromise<iuploadresponse> =&gt;\r\n\t\taxios.post([\"Media\", \"StoredFiles\", \"Upload\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Messaging.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tConversationModel,\r\n\tMessageModel,\r\n\tConversationSearchModel,\r\n\tConversationPagedResults,\r\n\tMessageSearchModel,\r\n\tMessagePagedResults,\r\n\tUserTypingStatus,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tCEFActionResponse,\r\n\tDictionary,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to create a new conversation.\r\n * @see {@link ConversationModel}\r\n * @public\r\n */\r\nexport interface CreateConversationDto extends ConversationModel {\r\n}\r\n\r\n/**\r\n * Use to create a new message.\r\n * @see {@link MessageModel}\r\n * @public\r\n */\r\nexport interface CreateMessageDto extends MessageModel {\r\n}\r\n\r\n/**\r\n * Use to get conversation headers for the current user\r\n * @see {@link ConversationSearchModel}\r\n * @public\r\n */\r\nexport interface GetConversationHeadersForCurrentUserDto extends ConversationSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get all messages for all non-ended conversations with the current user. Include a PostedSince to limit by time-frame for monitoring calls.\r\n * @public\r\n */\r\nexport interface GetMessagesForActiveConversationsForCurrentUserDto {\r\n\tPostedSince?: Date;\r\n}\r\n\r\n/**\r\n * Use to get messages\r\n * @see {@link MessageSearchModel}\r\n * @public\r\n */\r\nexport interface GetMessagesForCurrentUserDto extends MessageSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get all messages for all ended conversations with the current user. Include a PostedSince to limit by time-frame for monitoring calls.\r\n * @public\r\n */\r\nexport interface GetMessagesForEndedConversationsForCurrentUserDto {\r\n\tID?: number;\r\n\tPostedSince?: Date;\r\n}\r\n\r\n/**\r\n * Use to get messages\r\n * @see {@link MessageSearchModel}\r\n * @public\r\n */\r\nexport interface GetMessagesFromCurrentUserDto extends MessageSearchModel {\r\n}\r\n\r\n/**\r\n * Use to add a message to a conversation, all message recipients in the conversation will see the message.\r\n * @see {@link MessageModel}\r\n * @public\r\n */\r\nexport interface PostMessageToConversationDto extends MessageModel {\r\n}\r\n\r\n/**\r\n * Use to update an existing message.\r\n * @see {@link MessageModel}\r\n * @public\r\n */\r\nexport interface UpdateMessageDto extends MessageModel {\r\n}\r\n\r\nexport class Messaging {\r\n\t/**\r\n\t * Use to create a new conversation.\r\n\t * @param {@link cef.store.api.CreateConversationDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateConversation\r\n\t * @path <api root="">/Messaging/Conversation/Create\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateConversation = (routeParams?: CreateConversationDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Messaging\", \"Conversation\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to create a new message.\r\n\t * @param {@link cef.store.api.CreateMessageDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateMessage\r\n\t * @path <api root="">/Messaging/Message/Create\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateMessage = (routeParams?: CreateMessageDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Messaging\", \"Message\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Deactivate a specific message from the system [Soft-Delete]\r\n\t * @param {@link cef.store.api.DeactivateMessageByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeactivateMessageByID\r\n\t * @path <api root="">/Messaging/Message/Deactivate/ID/{ID}\r\n\t * @verb PATCH\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tDeactivateMessageByID = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Messaging\", \"Message\", \"Deactivate\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to set a conversation as ended. If it was set to copy, then an email of the conversation will be sent to the user.\r\n\t * @param {@link cef.store.api.EndConversationDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.EndConversation\r\n\t * @path <api root="">/Messaging/Conversation/End/{ID}\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tEndConversation = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Messaging\", \"Conversation\", \"End\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to get conversation headers for the current user\r\n\t * @param {@link cef.store.api.GetConversationHeadersForCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetConversationHeadersForCurrentUser\r\n\t * @path <api root="">/Messaging/CurrentUser/ConversationHeaders\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<conversationpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetConversationHeadersForCurrentUser = (routeParams?: GetConversationHeadersForCurrentUserDto): IHttpPromise<conversationpagedresults> =&gt;\r\n\t\taxios.post([\"Messaging\", \"CurrentUser\", \"ConversationHeaders\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific message\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessageByID\r\n\t * @path <api root="">/Messaging/Message/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<messagemodel>}\r\n\t * @public\r\n\t */\r\n\tGetMessageByID = (id: number): IHttpPromise<messagemodel> =&gt;\r\n\t\taxios.get([\"Messaging\", \"Message\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get all messages for all non-ended conversations with the current user. Include a PostedSince to limit by time-frame for monitoring calls.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesForActiveConversationsForCurrentUser\r\n\t * @path <api root="">/Messaging/CurrentUser/Messages/ActiveConversations\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cefalt.store.dictionary<array<messagemodel>&gt;&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetMessagesForActiveConversationsForCurrentUser = (routeParams?: GetMessagesForActiveConversationsForCurrentUserDto): IHttpPromise<cefactionresponset<dictionary<array<messagemodel>&gt;&gt;&gt; =&gt;\r\n\t\taxios.get([\"Messaging\", \"CurrentUser\", \"Messages\", \"ActiveConversations\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get messages\r\n\t * @param {@link cef.store.api.GetMessagesForCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesForCurrentUser\r\n\t * @path <api root="">/Messaging/CurrentUser/Messages\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<messagepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetMessagesForCurrentUser = (routeParams?: GetMessagesForCurrentUserDto): IHttpPromise<messagepagedresults> =&gt;\r\n\t\taxios.post([\"Messaging\", \"CurrentUser\", \"Messages\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get all messages for all ended conversations with the current user. Include a PostedSince to limit by time-frame for monitoring calls.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesForEndedConversationsForCurrentUser\r\n\t * @path <api root="">/Messaging/CurrentUser/Messages/EndedConversations\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cefalt.store.dictionary<array<messagemodel>&gt;&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetMessagesForEndedConversationsForCurrentUser = (routeParams?: GetMessagesForEndedConversationsForCurrentUserDto): IHttpPromise<cefactionresponset<dictionary<array<messagemodel>&gt;&gt;&gt; =&gt;\r\n\t\taxios.get([\"Messaging\", \"CurrentUser\", \"Messages\", \"EndedConversations\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get messages\r\n\t * @param {@link cef.store.api.GetMessagesFromCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesFromCurrentUser\r\n\t * @path <api root="">/Messaging/CurrentUser/Messages/From\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<messagepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetMessagesFromCurrentUser = (routeParams?: GetMessagesFromCurrentUserDto): IHttpPromise<messagepagedresults> =&gt;\r\n\t\taxios.post([\"Messaging\", \"CurrentUser\", \"Messages\", \"From\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get the typing states for other users in your non-ended conversations.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetOtherConversationUsersTypingStatuses\r\n\t * @path <api root="">/Messaging/ConversationUser/GetTypingStateForOtherConversationUsers\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<usertypingstatus>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetOtherConversationUsersTypingStatuses = (): IHttpPromise<cefactionresponset<array<usertypingstatus>&gt;&gt; =&gt;\r\n\t\taxios.get([\"Messaging\", \"ConversationUser\", \"GetTypingStateForOtherConversationUsers\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to add a message to a conversation, all message recipients in the conversation will see the message.\r\n\t * @param {@link cef.store.api.PostMessageToConversationDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.PostMessageToConversation\r\n\t * @path <api root="">/Messaging/Conversation/PostMessage\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<messagemodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tPostMessageToConversation = (routeParams?: PostMessageToConversationDto): IHttpPromise<cefactionresponset<messagemodel>&gt; =&gt;\r\n\t\taxios.post([\"Messaging\", \"Conversation\", \"PostMessage\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to set a conversation that when it ends, it should send an email to the user\r\n\t * @param {@link cef.store.api.SetConversationToCopyDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SetConversationToCopy\r\n\t * @path <api root="">/Messaging/Conversation/SetToCopy/{ID}\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetConversationToCopy = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.put([\"Messaging\", \"Conversation\", \"SetToCopy\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to set the typing state while the user is typing.\r\n\t * @param {@link cef.store.api.SetConversationUserTypingStateForCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SetConversationUserTypingStateForCurrentUser\r\n\t * @path <api root="">/Messaging/ConversationUser/CurrentUser/SetTypingState/{IsTyping}\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetConversationUserTypingStateForCurrentUser = (isTyping: boolean): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Messaging\", \"ConversationUser\", \"CurrentUser\", \"SetTypingState\", isTyping].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to update an existing message.\r\n\t * @param {@link cef.store.api.UpdateMessageDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateMessage\r\n\t * @path <api root="">/Messaging/Message/Update\r\n\t * @verb PUT\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdateMessage = (routeParams?: UpdateMessageDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.put([\"Messaging\", \"Message\", \"Update\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Ordering.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsDisplayNameBase,\r\n\tImplementsNameBase,\r\n\tSalesOrderSearchModel,\r\n\tSalesOrderPagedResults,\r\n\tSalesOrderModel,\r\n\tSalesOrderEventSearchModel,\r\n\tSalesOrderEventPagedResults,\r\n\tStateModel,\r\n\tStateSearchModel,\r\n\tSalesOrderStatePagedResults,\r\n\tStatusModel,\r\n\tStatusSearchModel,\r\n\tSalesOrderStatusPagedResults,\r\n\tTypeModel,\r\n\tTypeSearchModel,\r\n\tSalesOrderTypePagedResults,\r\n\tSubscriptionSearchModel,\r\n\tSubscriptionModel,\r\n\tSubscriptionHistorySearchModel,\r\n\tSubscriptionHistoryPagedResults,\r\n\tImplementsIDBase,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesOrderStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesOrderStateExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesOrderStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesOrderStatusExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesOrderTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesOrderTypeExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get history of sales orders for the current account\r\n * @see {@link SalesOrderSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentAccountSalesOrdersDto extends SalesOrderSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of sales order for the current store\r\n * @see {@link SalesOrderSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentStoreSalesOrdersDto extends SalesOrderSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of sales order for the current user\r\n * @see {@link SalesOrderSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentUserSalesOrdersDto extends SalesOrderSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales order events\r\n * @see {@link SalesOrderEventSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesOrderEventsDto extends SalesOrderEventSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales order states\r\n * @see {@link StateSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesOrderStatesDto extends StateSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales order statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesOrderStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales order types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesOrderTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * View subscription to update. Get by subscriptionID.\r\n * @see {@link SubscriptionSearchModel}\r\n * @public\r\n */\r\nexport interface GetSubscriptionBySalesOrderIDDto extends SubscriptionSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get all on-demand subscriptions.\r\n * @see {@link SubscriptionHistorySearchModel}\r\n * @public\r\n */\r\nexport interface GetSubscriptionHistoryBySubscriptionIDDto extends SubscriptionHistorySearchModel {\r\n\tSubID: number;\r\n}\r\n\r\n/**\r\n * Send an email with the sales order receipt.\r\n * @see {@link ImplementsIDBase}\r\n * @public\r\n */\r\nexport interface SendSalesOrderConfirmationEmailDto extends ImplementsIDBase {\r\n\tEmail?: string;\r\n}\r\n\r\nexport class Ordering {\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStateExistsByDisplayName\r\n\t * @path <api root="">/Ordering/SalesOrderState/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderStateExistsByDisplayName = (routeParams?: CheckSalesOrderStateExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStateExistsByKey\r\n\t * @path <api root="">/Ordering/SalesOrderState/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderStateExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStateExistsByName\r\n\t * @path <api root="">/Ordering/SalesOrderState/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderStateExistsByName = (routeParams?: CheckSalesOrderStateExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStatusExistsByDisplayName\r\n\t * @path <api root="">/Ordering/SalesOrderStatus/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderStatusExistsByDisplayName = (routeParams?: CheckSalesOrderStatusExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStatusExistsByKey\r\n\t * @path <api root="">/Ordering/SalesOrderStatus/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderStatusExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStatusExistsByName\r\n\t * @path <api root="">/Ordering/SalesOrderStatus/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderStatusExistsByName = (routeParams?: CheckSalesOrderStatusExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderTypeExistsByDisplayName\r\n\t * @path <api root="">/Ordering/SalesOrderType/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderTypeExistsByDisplayName = (routeParams?: CheckSalesOrderTypeExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderTypeExistsByKey\r\n\t * @path <api root="">/Ordering/SalesOrderType/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderTypeExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderTypeExistsByName\r\n\t * @path <api root="">/Ordering/SalesOrderType/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesOrderTypeExistsByName = (routeParams?: CheckSalesOrderTypeExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get history of sales orders for the current account\r\n\t * @param {@link cef.store.api.GetCurrentAccountSalesOrdersDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountSalesOrders\r\n\t * @path <api root="">/Ordering/CurrentAccount/SalesOrders\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesorderpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountSalesOrders = (routeParams?: GetCurrentAccountSalesOrdersDto): IHttpPromise<salesorderpagedresults> =&gt;\r\n\t\taxios.post([\"Ordering\", \"CurrentAccount\", \"SalesOrders\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of sales order for the current store\r\n\t * @param {@link cef.store.api.GetCurrentStoreSalesOrdersDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStoreSalesOrders\r\n\t * @path <api root="">/Ordering/CurrentStore/SalesOrders\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesorderpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentStoreSalesOrders = (routeParams?: GetCurrentStoreSalesOrdersDto): IHttpPromise<salesorderpagedresults> =&gt;\r\n\t\taxios.post([\"Ordering\", \"CurrentStore\", \"SalesOrders\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of sales order for the current user\r\n\t * @param {@link cef.store.api.GetCurrentUserSalesOrdersDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserSalesOrders\r\n\t * @path <api root="">/Ordering/CurrentUser/SalesOrders\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesorderpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserSalesOrders = (routeParams?: GetCurrentUserSalesOrdersDto): IHttpPromise<salesorderpagedresults> =&gt;\r\n\t\taxios.post([\"Ordering\", \"CurrentUser\", \"SalesOrders\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific sales order\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderByID\r\n\t * @path <api root="">/Ordering/SalesOrder/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesordermodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderByID = (id: number): IHttpPromise<salesordermodel> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrder\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales order events\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderEvents\r\n\t * @path <api root="">/Ordering/SalesOrderEvents\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesordereventpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderEvents = (routeParams?: GetSalesOrderEventsDto): IHttpPromise<salesordereventpagedresults> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderEvents\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales order state\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStateByID\r\n\t * @path <api root="">/Ordering/SalesOrderState/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderStateByID = (id: number): IHttpPromise<statemodel> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales order states\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStates\r\n\t * @path <api root="">/Ordering/SalesOrderStates\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesorderstatepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderStates = (routeParams?: GetSalesOrderStatesDto): IHttpPromise<salesorderstatepagedresults> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderStates\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales order status\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStatusByID\r\n\t * @path <api root="">/Ordering/SalesOrderStatus/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statusmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderStatusByID = (id: number): IHttpPromise<statusmodel> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales order statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStatuses\r\n\t * @path <api root="">/Ordering/SalesOrderStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesorderstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderStatuses = (routeParams?: GetSalesOrderStatusesDto): IHttpPromise<salesorderstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales order type\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderTypeByID\r\n\t * @path <api root="">/Ordering/SalesOrderType/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<typemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderTypeByID = (id: number): IHttpPromise<typemodel> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales order types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderTypes\r\n\t * @path <api root="">/Ordering/SalesOrderTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesordertypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesOrderTypes = (routeParams?: GetSalesOrderTypesDto): IHttpPromise<salesordertypepagedresults> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrderTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales order and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSecureSalesOrder\r\n\t * @path <api root="">/Ordering/SecureSalesOrder/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesordermodel>}\r\n\t * @public\r\n\t */\r\n\tGetSecureSalesOrder = (id: number): IHttpPromise<salesordermodel> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SecureSalesOrder\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * View subscription to update. Get by subscriptionID.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionBySalesOrderID\r\n\t * @path <api root="">/Ordering/SalesOrder/Detail/Subscription\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<subscriptionmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSubscriptionBySalesOrderID = (routeParams?: GetSubscriptionBySalesOrderIDDto): IHttpPromise<subscriptionmodel> =&gt;\r\n\t\taxios.get([\"Ordering\", \"SalesOrder\", \"Detail\", \"Subscription\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get all on-demand subscriptions.\r\n\t * @param {@link cef.store.api.GetSubscriptionHistoryBySubscriptionIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionHistoryBySubscriptionID\r\n\t * @path <api root="">/Ordering/SalesOrder/Detail/Subscription/History\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<subscriptionhistorypagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSubscriptionHistoryBySubscriptionID = (routeParams: GetSubscriptionHistoryBySubscriptionIDDto): IHttpPromise<subscriptionhistorypagedresults> =&gt;\r\n\t\taxios.post([\"Ordering\", \"SalesOrder\", \"Detail\", \"Subscription\", \"History\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Send an email with the sales order receipt.\r\n\t * @param {@link cef.store.api.SendSalesOrderConfirmationEmailDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SendSalesOrderConfirmationEmail\r\n\t * @path <api root="">/Ordering/SalesOrder/SendReceiptEmail\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSendSalesOrderConfirmationEmail = (routeParams?: SendSalesOrderConfirmationEmailDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Ordering\", \"SalesOrder\", \"SendReceiptEmail\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Payments.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsDisplayNameBase,\r\n\tImplementsNameBase,\r\n\tWalletModel,\r\n\tCreditModel,\r\n\tCreditPaymentModel,\r\n\tCreditSearchModel,\r\n\tCreditPagedResults,\r\n\tStatusSearchModel,\r\n\tCreditStatusPagedResults,\r\n\tStatusModel,\r\n\tSubscriptionSearchModel,\r\n\tSubscriptionPagedResults,\r\n\tMembershipLevelSearchModel,\r\n\tMembershipLevelPagedResults,\r\n\tMembershipSearchModel,\r\n\tMembershipPagedResults,\r\n\tPaymentMethodSearchModel,\r\n\tPaymentMethodPagedResults,\r\n\tPaymentStatusPagedResults,\r\n\tTypeSearchModel,\r\n\tPaymentTypePagedResults,\r\n\tRepeatTypeSearchModel,\r\n\tRepeatTypePagedResults,\r\n\tSalesInvoicePaymentSearchModel,\r\n\tPaymentPagedResults,\r\n\tSubscriptionModel,\r\n\tSubscriptionStatusPagedResults,\r\n\tSubscriptionTypeSearchModel,\r\n\tSubscriptionTypePagedResults,\r\n\tContactModel,\r\n\tApiKeyWebhookReturn,\r\n\tOrderEventWebhookReturn,\r\n\tOrderWebhookReturn,\r\n\tAccountWebhookReturn,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponse,\r\n\tCEFActionResponseT,\r\n\tDictionary,\r\n\tTransactionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckCreditStatusForStorefrontExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckCreditStatusForStorefrontExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to add an entry to the current user's wallet\r\n * @see {@link WalletModel}\r\n * @public\r\n */\r\nexport interface CreateCurrentUserWalletEntryDto extends WalletModel {\r\n}\r\n\r\n/**\r\n * Use to get credits for this Account\r\n * @see {@link CreditSearchModel}\r\n * @public\r\n */\r\nexport interface CreditsForCurrentAccountDto extends CreditSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get credits for this Account (lite)\r\n * @see {@link CreditSearchModel}\r\n * @public\r\n */\r\nexport interface CreditsForCurrentAccountLiteDto extends CreditSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of credit statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetCreditStatusesForStorefrontDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get subscriptions by Current User as a dropdown-appropriate listing.\r\n * @see {@link SubscriptionSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentUserSubscriptionsDto extends SubscriptionSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of membership levels\r\n * @see {@link MembershipLevelSearchModel}\r\n * @public\r\n */\r\nexport interface GetMembershipLevelsDto extends MembershipLevelSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of memberships\r\n * @see {@link MembershipSearchModel}\r\n * @public\r\n */\r\nexport interface GetMembershipsDto extends MembershipSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of payment methods\r\n * @see {@link PaymentMethodSearchModel}\r\n * @public\r\n */\r\nexport interface GetPaymentMethodsDto extends PaymentMethodSearchModel {\r\n}\r\n\r\n/**\r\n * Retrieve a payments provider authentication token.\r\n * @public\r\n */\r\nexport interface GetPaymentsProviderAuthenticationTokenDto {\r\n\tPaymentsProviderName: string;\r\n}\r\n\r\n/**\r\n * Use to get a list of payment statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetPaymentStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Retrieve a payments provider transaction report by id or date range.\r\n * @public\r\n */\r\nexport interface GetPaymentTransactionReportDto {\r\n\tStartDate?: Date;\r\n\tEndDate?: Date;\r\n\tTransactionID?: string;\r\n}\r\n\r\n/**\r\n * Use to get a list of payment types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetPaymentTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of repeat types\r\n * @see {@link RepeatTypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetRepeatTypesDto extends RepeatTypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get sales invoice payments for current account by invoice ID.\r\n * @see {@link SalesInvoicePaymentSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesInvoicePaymentsForCurrentAccountDto extends SalesInvoicePaymentSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of subscription statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetSubscriptionStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of subscription types\r\n * @see {@link SubscriptionTypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetSubscriptionTypesDto extends SubscriptionTypeSearchModel {\r\n}\r\n\r\n/**\r\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\r\n * @public\r\n */\r\nexport interface GetSurchargeForInvoicePaymentDto {\r\n\tBIN?: string;\r\n\tBillingContactID: number;\r\n\tInvoiceIDs?: Set<number>;\r\n\tWalletID?: number;\r\n\tTotalAmount: number;\r\n\tAmountsPerInvoice?: Dictionary<number>;\r\n}\r\n\r\n/**\r\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\r\n * @public\r\n */\r\nexport interface GetSurchargeForQuickInvoicePaymentDto {\r\n\tBIN?: string;\r\n\tBillingContact?: ContactModel;\r\n\tInvoiceIDs?: Set<number>;\r\n\tTotalAmount: number;\r\n}\r\n\r\n/**\r\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\r\n * @public\r\n */\r\nexport interface PayoneerOrderEventWebhookReturnDto {\r\n\tapi_key?: ApiKeyWebhookReturn; // Name format overridden\r\n\tevent?: OrderEventWebhookReturn; // Name format overridden\r\n\torder?: OrderWebhookReturn; // Name format overridden\r\n\taccount?: AccountWebhookReturn; // Name format overridden\r\n}\r\n\r\n/**\r\n * Use to update an entry in the current user's wallet\r\n * @see {@link WalletModel}\r\n * @public\r\n */\r\nexport interface UpdateCurrentUserWalletEntryDto extends WalletModel {\r\n}\r\n\r\n/**\r\n * Use to get all on-demand subscriptions.\r\n * @see {@link SubscriptionSearchModel}\r\n * @public\r\n */\r\nexport interface ViewOnDemandSubscriptionsDto extends SubscriptionSearchModel {\r\n\tUID: number;\r\n}\r\n\r\nexport class Payments {\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.AssignPayoneerAccountUserForCurrentStore\r\n\t * @path <api root="">/Payments/CurrentStore/AssignPayoneerAccountUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tAssignPayoneerAccountUserForCurrentStore = (): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.get([\"Payments\", \"CurrentStore\", \"AssignPayoneerAccountUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.AssignPayoneerAccountUserForCurrentUser\r\n\t * @path <api root="">/Payments/CurrentUser/AssignPayoneerAccountUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tAssignPayoneerAccountUserForCurrentUser = (): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.get([\"Payments\", \"CurrentUser\", \"AssignPayoneerAccountUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.CheckCreditStatusForStorefrontExistsByDisplayName\r\n\t * @path <api root="">/Payments/CreditStatusForStorefront/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCreditStatusForStorefrontExistsByDisplayName = (routeParams?: CheckCreditStatusForStorefrontExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.CheckCreditStatusForStorefrontExistsByKey\r\n\t * @path <api root="">/Payments/CreditStatusForStorefront/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCreditStatusForStorefrontExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.CheckCreditStatusForStorefrontExistsByName\r\n\t * @path <api root="">/Payments/CreditStatusForStorefront/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckCreditStatusForStorefrontExistsByName = (routeParams?: CheckCreditStatusForStorefrontExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.CreateAPayoneerAccountForCurrentStoreDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.CreateAPayoneerAccountForCurrentStore\r\n\t * @path <api root="">/Payments/CurrentStore/CreateAPayoneerAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateAPayoneerAccountForCurrentStore = (): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.post([\"Payments\", \"CurrentStore\", \"CreateAPayoneerAccount\"].join(\"/\"));\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.CreateAPayoneerAccountForCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.CreateAPayoneerAccountForCurrentUser\r\n\t * @path <api root="">/Payments/CurrentUser/CreateAPayoneerAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateAPayoneerAccountForCurrentUser = (): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.post([\"Payments\", \"CurrentUser\", \"CreateAPayoneerAccount\"].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to add an entry to the current user's wallet\r\n\t * @param {@link cef.store.api.CreateCurrentUserWalletEntryDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateCurrentUserWalletEntry\r\n\t * @path <api root="">/Payments/Wallet/CurrentUser/Entry/Create\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<walletmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateCurrentUserWalletEntry = (routeParams?: CreateCurrentUserWalletEntryDto): IHttpPromise<cefactionresponset<walletmodel>&gt; =&gt;\r\n\t\taxios.post([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific credit and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.CreditForCurrentAccount\r\n\t * @path <api root="">/Payments/Credit/CreditForCurrentAccount/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<creditmodel>}\r\n\t * @public\r\n\t */\r\n\tCreditForCurrentAccount = (id: number): IHttpPromise<creditmodel> =&gt;\r\n\t\taxios.get([\"Payments\", \"Credit\", \"CreditForCurrentAccount\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a set of payments for a specific credit and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.CreditPaymentsForCurrentAccount\r\n\t * @path <api root="">/Payments/Credit/CreditPaymentsForCurrentAccount/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<array<creditpaymentmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreditPaymentsForCurrentAccount = (id: number): IHttpPromise<array<creditpaymentmodel>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"Credit\", \"CreditPaymentsForCurrentAccount\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get credits for this Account\r\n\t * @param {@link cef.store.api.CreditsForCurrentAccountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.CreditsForCurrentAccount\r\n\t * @path <api root="">/Payments/Credit/CreditsForCurrentAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<creditpagedresults>}\r\n\t * @public\r\n\t */\r\n\tCreditsForCurrentAccount = (routeParams?: CreditsForCurrentAccountDto): IHttpPromise<creditpagedresults> =&gt;\r\n\t\taxios.post([\"Payments\", \"Credit\", \"CreditsForCurrentAccount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get credits for this Account (lite)\r\n\t * @param {@link cef.store.api.CreditsForCurrentAccountLiteDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.CreditsForCurrentAccountLite\r\n\t * @path <api root="">/Payments/Credit/CreditsForCurrentAccountLite\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<creditpagedresults>}\r\n\t * @public\r\n\t */\r\n\tCreditsForCurrentAccountLite = (routeParams?: CreditsForCurrentAccountLiteDto): IHttpPromise<creditpagedresults> =&gt;\r\n\t\taxios.post([\"Payments\", \"Credit\", \"CreditsForCurrentAccountLite\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to deactivate a specific entry in the current user's wallet\r\n\t * @param {@link cef.store.api.CurrentUserMarkWalletEntryAsDefaultDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserMarkWalletEntryAsDefault\r\n\t * @path <api root="">/Payments/Wallet/CurrentUser/Entry/SetAsDefault/ID/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentUserMarkWalletEntryAsDefault = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"SetAsDefault\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to deactivate a specific entry in the current user's wallet\r\n\t * @param {@link cef.store.api.DeactivateCurrentUserWalletEntryDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeactivateCurrentUserWalletEntry\r\n\t * @path <api root="">/Payments/Wallet/CurrentUser/Entry/Deactivate/ID/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tDeactivateCurrentUserWalletEntry = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"Deactivate\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLForBuyerToSetUpPaymentAccounts\r\n\t * @path <api root="">/Payments/CurrentStore/GetPayoneerAuthedURLForBuyerToSetUpPaymentAccounts\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetAuthedURLForBuyerToSetUpPaymentAccounts = (): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"CurrentStore\", \"GetPayoneerAuthedURLForBuyerToSetUpPaymentAccounts\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder\r\n\t * @path <api root="">/Payments/GetPayoneerAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder/OrderID/{OrderID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder = (orderID: number): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"GetPayoneerAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder\", \"OrderID\", orderID].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLForStoreOwnerToSetUpPayoutAccountsForCurrentStore\r\n\t * @path <api root="">/Payments/CurrentStore/GetPayoneerAuthedURLForStoreOwnerToSetUpPayoutAccounts\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetAuthedURLForStoreOwnerToSetUpPayoutAccountsForCurrentStore = (): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"CurrentStore\", \"GetPayoneerAuthedURLForStoreOwnerToSetUpPayoutAccounts\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLToReleaseFundsForEscrowOrder\r\n\t * @path <api root="">/Payments/GetPayoneerAuthedURLToReleaseFundsForEscrowOrder/OrderID/{OrderID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetAuthedURLToReleaseFundsForEscrowOrder = (orderID: number): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"GetPayoneerAuthedURLToReleaseFundsForEscrowOrder\", \"OrderID\", orderID].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of credit statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.GetCreditStatusesForStorefront\r\n\t * @path <api root="">/Payments/CreditStatusesForStorefront\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<creditstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCreditStatusesForStorefront = (routeParams?: GetCreditStatusesForStorefrontDto): IHttpPromise<creditstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"CreditStatusesForStorefront\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific credit status\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.Payments.GetCreditStatusForStorefrontByID\r\n\t * @path <api root="">/Payments/CreditStatusForStorefront/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statusmodel>}\r\n\t * @public\r\n\t */\r\n\tGetCreditStatusForStorefrontByID = (id: number): IHttpPromise<statusmodel> =&gt;\r\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get subscriptions by Current User as a dropdown-appropriate listing.\r\n\t * @param {@link cef.store.api.GetCurrentUserSubscriptionsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserSubscriptions\r\n\t * @path <api root="">/Payments/CurrentUser/Subscriptions\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<subscriptionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserSubscriptions = (routeParams?: GetCurrentUserSubscriptionsDto): IHttpPromise<subscriptionpagedresults> =&gt;\r\n\t\taxios.post([\"Payments\", \"CurrentUser\", \"Subscriptions\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get the wallet for the current user\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserWallet\r\n\t * @path <api root="">/Payments/Wallet/CurrentUser/List\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<walletmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserWallet = (): IHttpPromise<cefactionresponset<array<walletmodel>&gt;&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"Wallet\", \"CurrentUser\", \"List\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get an entry from the current user's wallet\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserWalletEntryByID\r\n\t * @path <api root="">/Payments/Wallet/CurrentUser/Entry/ByID/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<walletmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserWalletEntryByID = (id: number): IHttpPromise<cefactionresponset<walletmodel>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"ByID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of membership levels\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMembershipLevels\r\n\t * @path <api root="">/Payments/MembershipLevels\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<membershiplevelpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetMembershipLevels = (routeParams?: GetMembershipLevelsDto): IHttpPromise<membershiplevelpagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"MembershipLevels\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of memberships\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMemberships\r\n\t * @path <api root="">/Payments/Memberships\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<membershippagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetMemberships = (routeParams?: GetMembershipsDto): IHttpPromise<membershippagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"Memberships\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.GetPaymentInstructionsUrlForEscrowOrderDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetPaymentInstructionsUrlForEscrowOrder\r\n\t * @path <api root="">/Payments/GetPaymentInstructionsUrlForEscrowOrder/{OrderID}/{PayoneerAccountID}/{PayoneerCustomerID}\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetPaymentInstructionsUrlForEscrowOrder = (orderID: number, payoneerAccountID: number, payoneerCustomerID: number): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.post([\"Payments\", \"GetPaymentInstructionsUrlForEscrowOrder\", orderID, payoneerAccountID, payoneerCustomerID].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to get a list of payment methods\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentMethods\r\n\t * @path <api root="">/Payments/PaymentMethods\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<paymentmethodpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetPaymentMethods = (routeParams?: GetPaymentMethodsDto): IHttpPromise<paymentmethodpagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"PaymentMethods\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Retrieve a payments provider authentication token.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentsProviderAuthenticationToken\r\n\t * @path <api root="">/Payments/GetPaymentsProviderAuthenticationToken\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<string>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetPaymentsProviderAuthenticationToken = (routeParams: GetPaymentsProviderAuthenticationTokenDto): IHttpPromise<cefactionresponset<string>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"GetPaymentsProviderAuthenticationToken\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of payment statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentStatuses\r\n\t * @path <api root="">/Payments/PaymentStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<paymentstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetPaymentStatuses = (routeParams?: GetPaymentStatusesDto): IHttpPromise<paymentstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"PaymentStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Retrieve a payments provider transaction report by id or date range.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentTransactionReport\r\n\t * @path <api root="">/Payments/GetPaymentTransactionsReport\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<transactionresponse>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetPaymentTransactionReport = (routeParams?: GetPaymentTransactionReportDto): IHttpPromise<cefactionresponset<transactionresponse>&gt; =&gt;\r\n\t\taxios.get([\"Payments\", \"GetPaymentTransactionsReport\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of payment types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentTypes\r\n\t * @path <api root="">/Payments/PaymentTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<paymenttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetPaymentTypes = (routeParams?: GetPaymentTypesDto): IHttpPromise<paymenttypepagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"PaymentTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of repeat types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRepeatTypes\r\n\t * @path <api root="">/Payments/RepeatTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<repeattypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetRepeatTypes = (routeParams?: GetRepeatTypesDto): IHttpPromise<repeattypepagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"RepeatTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get sales invoice payments for current account by invoice ID.\r\n\t * @param {@link cef.store.api.GetSalesInvoicePaymentsForCurrentAccountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoicePaymentsForCurrentAccount\r\n\t * @path <api root="">/Payments/CurrentAccount/SalesInvoicePayments\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<paymentpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesInvoicePaymentsForCurrentAccount = (routeParams?: GetSalesInvoicePaymentsForCurrentAccountDto): IHttpPromise<paymentpagedresults> =&gt;\r\n\t\taxios.post([\"Payments\", \"CurrentAccount\", \"SalesInvoicePayments\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific subscription\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionByID\r\n\t * @path <api root="">/Payments/Subscription/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<subscriptionmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSubscriptionByID = (id: number): IHttpPromise<subscriptionmodel> =&gt;\r\n\t\taxios.get([\"Payments\", \"Subscription\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of subscription statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionStatuses\r\n\t * @path <api root="">/Payments/SubscriptionStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<subscriptionstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSubscriptionStatuses = (routeParams?: GetSubscriptionStatusesDto): IHttpPromise<subscriptionstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"SubscriptionStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of subscription types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionTypes\r\n\t * @path <api root="">/Payments/SubscriptionTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<subscriptiontypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSubscriptionTypes = (routeParams?: GetSubscriptionTypesDto): IHttpPromise<subscriptiontypepagedresults> =&gt;\r\n\t\taxios.get([\"Payments\", \"SubscriptionTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.GetSurchargeForInvoicePaymentDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Surcharges.GetSurchargeForInvoicePayment\r\n\t * @path <api root="">/Payments/SurchargeForInvoices\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetSurchargeForInvoicePayment = (routeParams: GetSurchargeForInvoicePaymentDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Payments\", \"SurchargeForInvoices\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.GetSurchargeForQuickInvoicePaymentDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Surcharges.GetSurchargeForQuickInvoicePayment\r\n\t * @path <api root="">/Payments/SurchargeForQuickInvoices\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetSurchargeForQuickInvoicePayment = (routeParams: GetSurchargeForQuickInvoicePaymentDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Payments\", \"SurchargeForQuickInvoices\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * @param {@link cef.store.api.PayoneerOrderEventWebhookReturnDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.PayoneerOrderEventWebhookReturn\r\n\t * @path <api root="">/Payments/Payoneer/OrderEventWebhooks\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<void>}\r\n\t * @public\r\n\t */\r\n\tPayoneerOrderEventWebhookReturn = (routeParams?: PayoneerOrderEventWebhookReturnDto): IHttpPromise<void> =&gt;\r\n\t\taxios.post([\"Payments\", \"Payoneer\", \"OrderEventWebhooks\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get all on-demand subscriptions.\r\n\t * @param {@link cef.store.api.RefillOnDemandSubscriptionDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RefillOnDemandSubscription\r\n\t * @path <api root="">/Payments/CurrentUser/Subscriptions/OnDemand/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRefillOnDemandSubscription = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Payments\", \"CurrentUser\", \"Subscriptions\", \"OnDemand\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to update an entry in the current user's wallet\r\n\t * @param {@link cef.store.api.UpdateCurrentUserWalletEntryDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCurrentUserWalletEntry\r\n\t * @path <api root="">/Payments/Wallet/CurrentUser/Entry/Update\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<walletmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdateCurrentUserWalletEntry = (routeParams?: UpdateCurrentUserWalletEntryDto): IHttpPromise<cefactionresponset<walletmodel>&gt; =&gt;\r\n\t\taxios.put([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"Update\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get all on-demand subscriptions.\r\n\t * @param {@link cef.store.api.ViewOnDemandSubscriptionsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ViewOnDemandSubscriptions\r\n\t * @path <api root="">/Payments/CurrentUser/Subscriptions/OnDemand\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<subscriptionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tViewOnDemandSubscriptions = (routeParams: ViewOnDemandSubscriptionsDto): IHttpPromise<subscriptionpagedresults> =&gt;\r\n\t\taxios.post([\"Payments\", \"CurrentUser\", \"Subscriptions\", \"OnDemand\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Pricing.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tCalculatedPrice,\r\n\tPriceRuleModel,\r\n\tPricePointSearchModel,\r\n\tPricePointPagedResults,\r\n\tPriceRuleSearchModel,\r\n\tPriceRulePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tDictionary,\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Calculate the prices for multiple products by IDs.\r\n * @public\r\n */\r\nexport interface CalculatePricesForProductsDto {\r\n\tProductIDs: Array<number>;\r\n}\r\n\r\n/**\r\n * Use to create a new price rule.\r\n * @see {@link PriceRuleModel}\r\n * @public\r\n */\r\nexport interface CreatePriceRuleDto extends PriceRuleModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of price points\r\n * @see {@link PricePointSearchModel}\r\n * @public\r\n */\r\nexport interface GetPricePointsDto extends PricePointSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of price rules\r\n * @see {@link PriceRuleSearchModel}\r\n * @public\r\n */\r\nexport interface GetPriceRulesDto extends PriceRuleSearchModel {\r\n}\r\n\r\n/**\r\n * Use to update an existing price rule.\r\n * @see {@link PriceRuleModel}\r\n * @public\r\n */\r\nexport interface UpdatePriceRuleDto extends PriceRuleModel {\r\n}\r\n\r\nexport class Pricing {\r\n\t/**\r\n\t * Calculate the price for a product by ID.\r\n\t * @param {@link cef.store.api.CalculatePricesForProductDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CalculatePricesForProduct\r\n\t * @path <api root="">/Pricing/Prices/ForProduct/{ProductID}/Quantity/{Quantity}\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<calculatedprice>&gt;}\r\n\t * @public\r\n\t */\r\n\tCalculatePricesForProduct = (productID: number, quantity: number): IHttpPromise<cefactionresponset<calculatedprice>&gt; =&gt;\r\n\t\taxios.post([\"Pricing\", \"Prices\", \"ForProduct\", productID, \"Quantity\", quantity].join(\"/\"));\r\n\r\n\t/**\r\n\t * Calculate the prices for multiple products by IDs.\r\n\t * @param {@link cef.store.api.CalculatePricesForProductsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CalculatePricesForProducts\r\n\t * @path <api root="">/Pricing/Prices/ForProducts\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cefalt.store.dictionary<calculatedprice>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tCalculatePricesForProducts = (routeParams: CalculatePricesForProductsDto): IHttpPromise<cefactionresponset<dictionary<calculatedprice>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Pricing\", \"Prices\", \"ForProducts\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to create a new price rule.\r\n\t * @param {@link cef.store.api.CreatePriceRuleDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreatePriceRule\r\n\t * @path <api root="">/Pricing/PriceRule/Create\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreatePriceRule = (routeParams?: CreatePriceRuleDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Pricing\", \"PriceRule\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Removes a specific price rule from the system [Hard-Delete]\r\n\t * @param {@link cef.store.api.DeletePriceRuleByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeletePriceRuleByID\r\n\t * @path <api root="">/Pricing/PriceRule/Delete/ID/{ID}\r\n\t * @verb DELETE\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tDeletePriceRuleByID = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Pricing\", \"PriceRule\", \"Delete\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to get a list of price points\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPricePoints\r\n\t * @path <api root="">/Pricing/PricePoints\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<pricepointpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetPricePoints = (routeParams?: GetPricePointsDto): IHttpPromise<pricepointpagedresults> =&gt;\r\n\t\taxios.get([\"Pricing\", \"PricePoints\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific price rule\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPriceRuleByID\r\n\t * @path <api root="">/Pricing/PriceRule/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<pricerulemodel>}\r\n\t * @public\r\n\t */\r\n\tGetPriceRuleByID = (id: number): IHttpPromise<pricerulemodel> =&gt;\r\n\t\taxios.get([\"Pricing\", \"PriceRule\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of price rules\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPriceRules\r\n\t * @path <api root="">/Pricing/PriceRules\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<pricerulepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetPriceRules = (routeParams?: GetPriceRulesDto): IHttpPromise<pricerulepagedresults> =&gt;\r\n\t\taxios.get([\"Pricing\", \"PriceRules\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to update an existing price rule.\r\n\t * @param {@link cef.store.api.UpdatePriceRuleDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdatePriceRule\r\n\t * @path <api root="">/Pricing/PriceRule/Update\r\n\t * @verb PUT\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdatePriceRule = (routeParams?: UpdatePriceRuleDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.put([\"Pricing\", \"PriceRule\", \"Update\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Products.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tImplementsSeoUrlBase,\r\n\tSerializableAttributesDictionary,\r\n\tProductModel,\r\n\tCategoryModel,\r\n\tTypeSearchModel,\r\n\tProductAssociationTypePagedResults,\r\n\tImplementsIDBase,\r\n\tImplementsKeyBase,\r\n\tProductDownloadTypePagedResults,\r\n\tProductImageSearchModel,\r\n\tProductImagePagedResults,\r\n\tProductImageTypePagedResults,\r\n\tProductInventoryLocationSectionSearchModel,\r\n\tProductInventoryLocationSectionPagedResults,\r\n\tProductReviewInformationModel,\r\n\tProductSearchModel,\r\n\tProductPagedResults,\r\n\tQuickOrderFormProductsModel,\r\n\tPreviouslyOrderedProductPagedResults,\r\n\tStatusSearchModel,\r\n\tProductStatusPagedResults,\r\n\tProductTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tDictionary,\r\n\tKeyValuePair,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckProductExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this SEO URL exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsSeoUrlBase}\r\n * @public\r\n */\r\nexport interface CheckProductExistsBySeoUrlDto extends ImplementsSeoUrlBase {\r\n}\r\n\r\n/**\r\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\r\n * @public\r\n */\r\nexport interface GetAttributesForProductIDsDto {\r\n\tProductIDs?: Array<number>;\r\n}\r\n\r\n/**\r\n * Use to get best selling products in the system\r\n * @public\r\n */\r\nexport interface GetBestSellersProductsDto {\r\n\t/** Count of Products to Pull */\r\n\tCount: number;\r\n\t/** Number of days back from today to use for calculations */\r\n\tDays: number;\r\n\tCategorySeoUrl?: string;\r\n}\r\n\r\n/**\r\n * Use to get a list of product association types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductAssociationTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a specific product\r\n * @see {@link ImplementsIDBase}\r\n * @public\r\n */\r\nexport interface GetProductByIDDto extends ImplementsIDBase {\r\n\t/** The store the user has selected if present */\r\n\tStoreID?: number;\r\n\t/** The brand the user has selected if present */\r\n\tBrandID?: number;\r\n\t/** A flag indicating that this is a vendor admin request. This can only be set by the server. */\r\n\tIsVendorAdmin?: boolean;\r\n\t/** The identifier of the vendor which is logged in. This can only be set by the server. */\r\n\tVendorAdminID?: number;\r\n\t/** The identifier of the preview version to load. */\r\n\tPreviewID?: number;\r\n}\r\n\r\n/**\r\n * Use to get a specific product by the custom key\r\n * @see {@link ImplementsKeyBase}\r\n * @public\r\n */\r\nexport interface GetProductByKeyDto extends ImplementsKeyBase {\r\n\t/** The store the user has selected if present */\r\n\tStoreID?: number;\r\n\t/** The brand the user has selected if present */\r\n\tBrandID?: number;\r\n\t/** A flag indicating that this is a vendor admin request. This can only be set by the server. */\r\n\tIsVendorAdmin?: boolean;\r\n\t/** The identifier of the vendor which is logged in. This can only be set by the server. */\r\n\tVendorAdminID?: number;\r\n}\r\n\r\n/**\r\n * Use to get a list of product download types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductDownloadTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of product images\r\n * @see {@link ProductImageSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductImagesDto extends ProductImageSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of product image types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductImageTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of product inventory location sections\r\n * @see {@link ProductInventoryLocationSectionSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductInventoryLocationSectionsDto extends ProductInventoryLocationSectionSearchModel {\r\n}\r\n\r\n/**\r\n * Get Product Metadata By SEO URL.\r\n * @public\r\n */\r\nexport interface GetProductMetadataByURLDto {\r\n\t/** The SEO URL to perform the lookup with */\r\n\tSeoUrl: string;\r\n}\r\n\r\n/**\r\n * Get product reviews summary information for a set of products\r\n * @public\r\n */\r\nexport interface GetProductReviewsDto {\r\n\tProductIDs?: Array<number>;\r\n}\r\n\r\n/**\r\n * Use to get a list of products\r\n * @see {@link ProductSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductsDto extends ProductSearchModel {\r\n}\r\n\r\n/**\r\n * GET Product By category\r\n * @public\r\n */\r\nexport interface GetProductsByCategoryDto {\r\n\t/** Product type ID */\r\n\tProductTypeIDs: Array<number>;\r\n}\r\n\r\n/**\r\n * Provides the same results as calling GetProductByID multiple times with separate IDs. WARNING: You should not use this endpoint to get a large number of products, limit to a page size.\r\n * @public\r\n */\r\nexport interface GetProductsByIDsDto {\r\n\t/** The store the user has selected if present */\r\n\tStoreID?: number;\r\n\t/** The brand the user has selected if present */\r\n\tBrandID?: number;\r\n\t/** A flag indicating that this is a vendor admin request. This can only be set by the server. */\r\n\tIsVendorAdmin?: boolean;\r\n\t/** The identifier of the vendor which is logged in. This can only be set by the server. */\r\n\tVendorAdminID?: number;\r\n\t/** The identifiers of products to read out */\r\n\tIDs: Array<number>;\r\n}\r\n\r\n/**\r\n * GET Product By category\r\n * @see {@link ProductSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductsByPreviouslyOrderedDto extends ProductSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of products (for the current store only)\r\n * @see {@link ProductSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductsForCurrentStoreDto extends ProductSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of product statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of product types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetProductTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Products {\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsByID\r\n\t * @path <api root="">/Products/Product/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckProductExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsByKey\r\n\t * @path <api root="">/Products/Product/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckProductExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsByName\r\n\t * @path <api root="">/Products/Product/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckProductExistsByName = (routeParams?: CheckProductExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this SEO URL exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsBySeoUrl\r\n\t * @path <api root="">/Products/Product/Exists/SeoUrl\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckProductExistsBySeoUrl = (routeParams?: CheckProductExistsBySeoUrlDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"SeoUrl\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAttributesForProductIDs\r\n\t * @path <api root="">/Products/AttributesForIDs\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefalt.store.dictionary<serializableattributesdictionary>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetAttributesForProductIDs = (routeParams?: GetAttributesForProductIDsDto): IHttpPromise<dictionary<serializableattributesdictionary>&gt; =&gt;\r\n\t\taxios.get([\"Products\", \"AttributesForIDs\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get best selling products in the system\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBestSellersProducts\r\n\t * @path <api root="">/Products/BestSellers\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<productmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetBestSellersProducts = (routeParams: GetBestSellersProductsDto): IHttpPromise<array<productmodel>&gt; =&gt;\r\n\t\taxios.get([\"Products\", \"BestSellers\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPersonalizationProductsForCurrentUser\r\n\t * @path <api root="">/Products/Personalization/ForCurrentUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<productmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetPersonalizationProductsForCurrentUser = (): IHttpPromise<array<productmodel>&gt; =&gt;\r\n\t\taxios.get([\"Products\", \"Personalization\", \"ForCurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPersonalizedCategoryAndProductFeedForCurrentUser\r\n\t * @path <api root="">/Products/Personalization/Feed/ForCurrentUser\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<keyvaluepair<categorymodel,array<productmodel>&gt;&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetPersonalizedCategoryAndProductFeedForCurrentUser = (): IHttpPromise<array<keyvaluepair<categorymodel,array<productmodel>&gt;&gt;&gt; =&gt;\r\n\t\taxios.get([\"Products\", \"Personalization\", \"Feed\", \"ForCurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of product association types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductAssociationTypes\r\n\t * @path <api root="">/Products/ProductAssociationTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productassociationtypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductAssociationTypes = (routeParams?: GetProductAssociationTypesDto): IHttpPromise<productassociationtypepagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"ProductAssociationTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific product\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductByID\r\n\t * @path <api root="">/Products/Product/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productmodel>}\r\n\t * @public\r\n\t */\r\n\tGetProductByID = (id: number, routeParams?: GetProductByIDDto): IHttpPromise<productmodel> =&gt;\r\n\t\taxios.get([\"Products\", \"Product\", \"ID\", id].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific product by the custom key\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductByKey\r\n\t * @path <api root="">/Products/Product/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productmodel>}\r\n\t * @public\r\n\t */\r\n\tGetProductByKey = (key: string, routeParams?: GetProductByKeyDto): IHttpPromise<productmodel> =&gt;\r\n\t\taxios.get([\"Products\", \"Product\", \"Key\", encodeURIComponent(key)].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of product download types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductDownloadTypes\r\n\t * @path <api root="">/Products/ProductDownloadTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productdownloadtypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductDownloadTypes = (routeParams?: GetProductDownloadTypesDto): IHttpPromise<productdownloadtypepagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"ProductDownloadTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of product images\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductImages\r\n\t * @path <api root="">/Products/ProductImages\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productimagepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductImages = (routeParams?: GetProductImagesDto): IHttpPromise<productimagepagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"ProductImages\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of product image types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductImageTypes\r\n\t * @path <api root="">/Products/ProductImageTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productimagetypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductImageTypes = (routeParams?: GetProductImageTypesDto): IHttpPromise<productimagetypepagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"ProductImageTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of product inventory location sections\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductInventoryLocationSections\r\n\t * @path <api root="">/Products/ProductInventoryLocationSections\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productinventorylocationsectionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductInventoryLocationSections = (routeParams?: GetProductInventoryLocationSectionsDto): IHttpPromise<productinventorylocationsectionpagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"ProductInventoryLocationSections\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get Product Metadata By SEO URL.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductMetadataByURL\r\n\t * @path <api root="">/Products/Product/URL/Metadata\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<serializableattributesdictionary>}\r\n\t * @public\r\n\t */\r\n\tGetProductMetadataByURL = (routeParams: GetProductMetadataByURLDto): IHttpPromise<serializableattributesdictionary> =&gt;\r\n\t\taxios.get([\"Products\", \"Product\", \"URL\", \"Metadata\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get product reviews summary information\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductReview\r\n\t * @path <api root="">/Products/ReviewSummary/ByProductID/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<productreviewinformationmodel>}\r\n\t * @public\r\n\t */\r\n\tGetProductReview = (id: number): IHttpPromise<productreviewinformationmodel> =&gt;\r\n\t\taxios.get([\"Products\", \"ReviewSummary\", \"ByProductID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Get product reviews summary information for a set of products\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductReviews\r\n\t * @path <api root="">/Products/ReviewSummary/ByProductIDs\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<productreviewinformationmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetProductReviews = (routeParams?: GetProductReviewsDto): IHttpPromise<array<productreviewinformationmodel>&gt; =&gt;\r\n\t\taxios.get([\"Products\", \"ReviewSummary\", \"ByProductIDs\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of products\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProducts\r\n\t * @path <api root="">/Products/Products\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProducts = (routeParams?: GetProductsDto): IHttpPromise<productpagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"Products\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * GET Product By category\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsByCategory\r\n\t * @path <api root="">/Products/GetProductsByCategory\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<quickorderformproductsmodel>}\r\n\t * @public\r\n\t */\r\n\tGetProductsByCategory = (routeParams: GetProductsByCategoryDto): IHttpPromise<quickorderformproductsmodel> =&gt;\r\n\t\taxios.get([\"Products\", \"GetProductsByCategory\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Provides the same results as calling GetProductByID multiple times with separate IDs. WARNING: You should not use this endpoint to get a large number of products, limit to a page size.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsByIDs\r\n\t * @path <api root="">/Products/Products/ByIDs\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<productmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetProductsByIDs = (routeParams: GetProductsByIDsDto): IHttpPromise<array<productmodel>&gt; =&gt;\r\n\t\taxios.get([\"Products\", \"Products\", \"ByIDs\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * GET Product By category\r\n\t * @param {@link cef.store.api.GetProductsByPreviouslyOrderedDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsByPreviouslyOrdered\r\n\t * @path <api root="">/Products/GetProductsByPreviouslyOrdered\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<previouslyorderedproductpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductsByPreviouslyOrdered = (routeParams?: GetProductsByPreviouslyOrderedDto): IHttpPromise<previouslyorderedproductpagedresults> =&gt;\r\n\t\taxios.post([\"Products\", \"GetProductsByPreviouslyOrdered\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a list of products (for the current store only)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsForCurrentStore\r\n\t * @path <api root="">/Products/CurrentStore/Products\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductsForCurrentStore = (routeParams?: GetProductsForCurrentStoreDto): IHttpPromise<productpagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"CurrentStore\", \"Products\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of product statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductStatuses\r\n\t * @path <api root="">/Products/ProductStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<productstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductStatuses = (routeParams?: GetProductStatusesDto): IHttpPromise<productstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"ProductStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of product types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductTypes\r\n\t * @path <api root="">/Products/ProductTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<producttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetProductTypes = (routeParams?: GetProductTypesDto): IHttpPromise<producttypepagedresults> =&gt;\r\n\t\taxios.get([\"Products\", \"ProductTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Providers.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tCheckoutModel,\r\n\tCartModel,\r\n\tCalculatedInventory,\r\n\tImplementsIDBase,\r\n\tSalesReturnModel,\r\n\tSalesInvoiceSearchModel,\r\n\tSalesInvoicePagedResults,\r\n\tSalesQuoteSearchModel,\r\n\tSalesQuotePagedResults,\r\n\tSalesReturnSearchModel,\r\n\tSalesReturnPagedResults,\r\n\tSampleRequestSearchModel,\r\n\tSampleRequestPagedResults,\r\n\tDiscountsForInvoice,\r\n\tDiscountsForOrderResponse,\r\n\tDiscountsForQuote,\r\n\tSalesInvoiceModel,\r\n\tSalesQuoteModel,\r\n\tSampleRequestModel,\r\n\tPaymentModel,\r\n\tContactModel,\r\n\tCheckoutResult,\r\n\tAuctionCatalogSearchForm,\r\n\tAuctionSearchViewModel,\r\n\tCategoryCatalogSearchForm,\r\n\tCategorySearchViewModel,\r\n\tFranchiseCatalogSearchForm,\r\n\tFranchiseSearchViewModel,\r\n\tLotCatalogSearchForm,\r\n\tLotSearchViewModel,\r\n\tManufacturerCatalogSearchForm,\r\n\tManufacturerSearchViewModel,\r\n\tProductCatalogSearchForm,\r\n\tProductSearchViewModel,\r\n\tStoreCatalogSearchForm,\r\n\tStoreSearchViewModel,\r\n\tVendorCatalogSearchForm,\r\n\tVendorSearchViewModel,\r\n\tSalesQuoteStatusUpdate,\r\n\tSalesQuoteSalesGroupIdentifiers,\r\n\tAuctionSuggestResult,\r\n\tCategorySuggestResult,\r\n\tFranchiseSuggestResult,\r\n\tLotSuggestResult,\r\n\tManufacturerSuggestResult,\r\n\tProductSuggestResult,\r\n\tStoreSuggestResult,\r\n\tVendorSuggestResult,\r\n\tAddressModel,\r\n\tAddressValidationResultModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tDictionary,\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Analyze the current cart and build target carts for it based on the internal rules.\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface AnalyzeCurrentCartToTargetCartsDto extends CheckoutModel {\r\n\t/** Reset the analysis results so any previous target setups are removed. */\r\n\tResetAnalysis: boolean;\r\n}\r\n\r\n/**\r\n * Submit the current quote cart of the given session type\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface AnalyzeCurrentQuoteCartToTargetQuoteCartsDto extends CheckoutModel {\r\n\t/** Reset the analysis results so any previous target setups are removed. */\r\n\tResetAnalysis: boolean;\r\n}\r\n\r\n/**\r\n * Calculates inventory for the given product identifier. Returns a model containing relevant information about how the inventory was calculated, limits to purchasing, etc.\r\n * @public\r\n */\r\nexport interface BulkCalculateInventoryDto {\r\n\tProductIDs: Array<number>;\r\n}\r\n\r\n/**\r\n * Returns a boolean value indicating whether there is any available inventory for the given product identifier.\r\n * @public\r\n */\r\nexport interface BulkCheckHasAnyAvailableInventoryDto {\r\n\tProductIDs: Array<number>;\r\n}\r\n\r\n/**\r\n * Use to cancel an active subscription.\r\n * @see {@link ImplementsIDBase}\r\n * @public\r\n */\r\nexport interface CancelSubscriptionDto extends ImplementsIDBase {\r\n}\r\n\r\n/**\r\n * Clear the current target carts and start over.\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface ClearCurrentCartToTargetCartsAnalysisDto extends CheckoutModel {\r\n}\r\n\r\n/**\r\n * Clear the current target carts and start over.\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface ClearCurrentQuoteCartToTargetCartsAnalysisDto extends CheckoutModel {\r\n}\r\n\r\n/**\r\n * Generates a RMA for each item. An email notification will be sent to the customer.\r\n * @see {@link SalesReturnModel}\r\n * @public\r\n */\r\nexport interface CreateSalesReturnFromStorefrontDto extends SalesReturnModel {\r\n}\r\n\r\n/**\r\n * Returns a total sum count of available inventory for the given product identifier.\r\n * @public\r\n */\r\nexport interface GetBulkAvailableInventoryCountDto {\r\n\tProductIDs: Array<number>;\r\n}\r\n\r\n/**\r\n * Use to get history of invoices for this Account\r\n * @see {@link SalesInvoiceSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentAccountSalesInvoicesDto extends SalesInvoiceSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of invoices for this Account (lite)\r\n * @see {@link SalesInvoiceSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentAccountSalesInvoicesLiteDto extends SalesInvoiceSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of quotes for the current account\r\n * @see {@link SalesQuoteSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentAccountSalesQuotesDto extends SalesQuoteSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of returns for the current account\r\n * @see {@link SalesReturnSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentAccountSalesReturnsDto extends SalesReturnSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of sample request for the current account\r\n * @see {@link SampleRequestSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentAccountSampleRequestsDto extends SampleRequestSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of invoices for this user\r\n * @see {@link SalesInvoiceSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentUserSalesInvoicesDto extends SalesInvoiceSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of quotes for the current user.\r\n * @see {@link SalesQuoteSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentUserSalesQuotesDto extends SalesQuoteSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of returns for the current user.\r\n * @see {@link SalesReturnSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentUserSalesReturnsDto extends SalesReturnSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get history of sample requests for the current user\r\n * @see {@link SampleRequestSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentUserSampleRequestsDto extends SampleRequestSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a specific sales invoice and check for valid quick pay token.\r\n * @see {@link ImplementsIDBase}\r\n * @public\r\n */\r\nexport interface GetQuickPaySalesInvoiceDto extends ImplementsIDBase {\r\n\tQuickPayToken: string;\r\n}\r\n\r\n/**\r\n * Use to get the available upgrades.\r\n * @public\r\n */\r\nexport interface ModifySubscriptionForCurrentUserDto {\r\n\t/** The identifier of the subscription to modify. */\r\n\tSubscriptionID: number;\r\n\t/** When set, will change the billing contact information for the subscription. When null, no action is taken against the Billing Contact. */\r\n\tBillingContactID?: number;\r\n\t/** When set, will change the shipping contact information for the subscription. When null, no action is taken against the Shipping Contact. */\r\n\tShippingContactID?: number;\r\n}\r\n\r\n/**\r\n * Use to pay multiple invoices, specifying the amount with each one\r\n * @public\r\n */\r\nexport interface PayMultipleInvoicesByAmountsDto {\r\n\tAmounts: Dictionary<number>;\r\n\tPayment: PaymentModel;\r\n\tBilling?: ContactModel;\r\n\tCredits?: Dictionary<number>;\r\n}\r\n\r\n/**\r\n * Provide payment information to a specific invoice by ID.\r\n * @public\r\n */\r\nexport interface PaySingleInvoiceByIDDto {\r\n\tInvoiceID: number;\r\n\tPayment: PaymentModel;\r\n\tBilling?: ContactModel;\r\n}\r\n\r\n/**\r\n * Checkout the current shopping cart\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface ProcessCurrentCartToSingleOrderDto extends CheckoutModel {\r\n}\r\n\r\n/**\r\n * Checkout the current cart of the given session type.\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface ProcessCurrentCartToTargetOrdersDto extends CheckoutModel {\r\n}\r\n\r\n/**\r\n * Submit the current quote cart of the given session type\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface ProcessCurrentQuoteCartToSingleQuoteDto extends CheckoutModel {\r\n}\r\n\r\n/**\r\n * Submit the current quote cart of the given session type.\r\n * @see {@link CheckoutModel}\r\n * @public\r\n */\r\nexport interface ProcessCurrentQuoteCartToTargetQuotesDto extends CheckoutModel {\r\n}\r\n\r\n/**\r\n * Provide quick payment information to a specific invoice by ID.\r\n * @public\r\n */\r\nexport interface QuickPaySingleInvoiceByIDDto {\r\n\tInvoiceID: number;\r\n\tPayment: PaymentModel;\r\n\tBilling?: ContactModel;\r\n}\r\n\r\n/**\r\n * Search the auction catalog. Returns a range of data\r\n * @see {@link AuctionCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchAuctionCatalogWithProviderDto extends AuctionCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the category catalog. Returns a range of data\r\n * @see {@link CategoryCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchCategoryCatalogWithProviderDto extends CategoryCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the franchise catalog. Returns a range of data\r\n * @see {@link FranchiseCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchFranchiseCatalogWithProviderDto extends FranchiseCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the lot catalog. Returns a range of data\r\n * @see {@link LotCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchLotCatalogWithProviderDto extends LotCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the manufacturer catalog. Returns a range of data\r\n * @see {@link ManufacturerCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchManufacturerCatalogWithProviderDto extends ManufacturerCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the product catalog. Returns a range of data\r\n * @see {@link ProductCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchProductCatalogWithProviderDto extends ProductCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the store catalog. Returns a range of data\r\n * @see {@link StoreCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchStoreCatalogWithProviderDto extends StoreCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the vendor catalog. Returns a range of data\r\n * @see {@link VendorCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SearchVendorCatalogWithProviderDto extends VendorCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Membership Registration Process step 1: Send Invitation (User gets an email with an invite token)\r\n * @public\r\n */\r\nexport interface SendInvitationDto {\r\n\t/** Email to send the invitation to */\r\n\tEmail: string;\r\n}\r\n\r\n/**\r\n * Use to update a specific sales order item\r\n * @public\r\n */\r\nexport interface SendReceiptNotificationWithEmailDto {\r\n\t/** Order ID */\r\n\tOrderID: number;\r\n\t/** Email address to send the notification to */\r\n\tEmail: string;\r\n}\r\n\r\n/**\r\n * Sets the specified Quote as Approved\r\n * @see {@link SalesQuoteStatusUpdate}\r\n * @public\r\n */\r\nexport interface SetSalesQuoteAsApprovedDto extends SalesQuoteStatusUpdate {\r\n}\r\n\r\n/**\r\n * Sets the specified Quote as Cancelled\r\n * @see {@link SalesQuoteStatusUpdate}\r\n * @public\r\n */\r\nexport interface SetSalesQuoteAsCancelledDto extends SalesQuoteStatusUpdate {\r\n}\r\n\r\n/**\r\n * Sets the specified Quote as Pending\r\n * @see {@link SalesQuoteStatusUpdate}\r\n * @public\r\n */\r\nexport interface SetSalesQuoteAsPendingDto extends SalesQuoteStatusUpdate {\r\n}\r\n\r\n/**\r\n * Sets the specified Quote as Rejected\r\n * @see {@link SalesQuoteStatusUpdate}\r\n * @public\r\n */\r\nexport interface SetSalesQuoteAsRejectedDto extends SalesQuoteStatusUpdate {\r\n}\r\n\r\n/**\r\n * Submit a quote for processing by the store\r\n * @see {@link SalesQuoteModel}\r\n * @public\r\n */\r\nexport interface SubmitRequestForQuoteForGenericProductsDto extends SalesQuoteModel {\r\n\tDoShareBusinessCardWithSupplier?: boolean;\r\n}\r\n\r\n/**\r\n * Submit a quote for processing by the store\r\n * @see {@link SalesQuoteModel}\r\n * @public\r\n */\r\nexport interface SubmitRequestForQuoteForSingleProductDto extends SalesQuoteModel {\r\n\tDoShareBusinessCardWithSupplier?: boolean;\r\n\tDoRecommendOtherSuppliers?: boolean;\r\n}\r\n\r\n/**\r\n * Search the auction catalog. Returns a range of data\r\n * @see {@link AuctionCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestAuctionCatalogWithProviderDto extends AuctionCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the category catalog. Returns a range of data\r\n * @see {@link CategoryCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestCategoryCatalogWithProviderDto extends CategoryCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the franchise catalog. Returns a range of data\r\n * @see {@link FranchiseCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestFranchiseCatalogWithProviderDto extends FranchiseCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the lot catalog. Returns a range of data\r\n * @see {@link LotCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestLotCatalogWithProviderDto extends LotCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the manufacturer catalog. Returns a range of data\r\n * @see {@link ManufacturerCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestManufacturerCatalogWithProviderDto extends ManufacturerCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the product catalog. Returns a range of data\r\n * @see {@link ProductCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestProductCatalogWithProviderDto extends ProductCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the store catalog. Returns a range of data\r\n * @see {@link StoreCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestStoreCatalogWithProviderDto extends StoreCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Search the vendor catalog. Returns a range of data\r\n * @see {@link VendorCatalogSearchForm}\r\n * @public\r\n */\r\nexport interface SuggestVendorCatalogWithProviderDto extends VendorCatalogSearchForm {\r\n}\r\n\r\n/**\r\n * Use to update a sales return\r\n * @see {@link SalesReturnModel}\r\n * @public\r\n */\r\nexport interface UpdateSalesReturnFromStorefrontDto extends SalesReturnModel {\r\n}\r\n\r\n/**\r\n * Use to validate address with AddressProvider\r\n * @public\r\n */\r\nexport interface ValidateAddressDto {\r\n\tAccountContactID?: number;\r\n\tContactID?: number;\r\n\tAddressID?: number;\r\n\tAddress?: AddressModel;\r\n}\r\n\r\nexport class Providers {\r\n\t/**\r\n\t * Analyze the current cart and build target carts for it based on the internal rules.\r\n\t * @param {@link cef.store.api.AnalyzeCurrentCartToTargetCartsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.AnalyzeCurrentCartToTargetCarts\r\n\t * @path <api root="">/Providers/Checkout/AnalyzeCurrentCartToTargetCarts\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<cartmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tAnalyzeCurrentCartToTargetCarts = (routeParams: AnalyzeCurrentCartToTargetCartsDto): IHttpPromise<cefactionresponset<array<cartmodel>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Providers\", \"Checkout\", \"AnalyzeCurrentCartToTargetCarts\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Submit the current quote cart of the given session type\r\n\t * @param {@link cef.store.api.AnalyzeCurrentQuoteCartToTargetQuoteCartsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.AnalyzeCurrentQuoteCartToTargetQuoteCarts\r\n\t * @path <api root="">/Providers/SubmitQuote/AnalyzeCurrentQuoteCartToTargetQuoteCarts\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<cartmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tAnalyzeCurrentQuoteCartToTargetQuoteCarts = (routeParams: AnalyzeCurrentQuoteCartToTargetQuoteCartsDto): IHttpPromise<cefactionresponset<array<cartmodel>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Providers\", \"SubmitQuote\", \"AnalyzeCurrentQuoteCartToTargetQuoteCarts\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Calculates inventory for the given product identifier. Returns a model containing relevant information about how the inventory was calculated, limits to purchasing, etc.\r\n\t * @param {@link cef.store.api.BulkCalculateInventoryDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.BulkCalculateInventory\r\n\t * @path <api root="">/Providers/Inventory/BulkCalculateInventory\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cefalt.store.dictionary<calculatedinventory>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tBulkCalculateInventory = (routeParams: BulkCalculateInventoryDto): IHttpPromise<cefactionresponset<dictionary<calculatedinventory>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Providers\", \"Inventory\", \"BulkCalculateInventory\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Returns a boolean value indicating whether there is any available inventory for the given product identifier.\r\n\t * @param {@link cef.store.api.BulkCheckHasAnyAvailableInventoryDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.BulkCheckHasAnyAvailableInventory\r\n\t * @path <api root="">/Providers/Inventory/BulkCheckHasAnyAvailableInventory\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cefalt.store.dictionary<boolean>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tBulkCheckHasAnyAvailableInventory = (routeParams: BulkCheckHasAnyAvailableInventoryDto): IHttpPromise<cefactionresponset<dictionary<boolean>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Providers\", \"Inventory\", \"BulkCheckHasAnyAvailableInventory\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Calculates inventory for the given product identifier. Returns a model containing relevant information about how the inventory was calculated, limits to purchasing, etc.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.CalculateInventory\r\n\t * @path <api root="">/Providers/Inventory/CalculateInventory/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<calculatedinventory>&gt;}\r\n\t * @public\r\n\t */\r\n\tCalculateInventory = (id: number): IHttpPromise<cefactionresponset<calculatedinventory>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Inventory\", \"CalculateInventory\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to cancel an active subscription.\r\n\t * @param {@link cef.store.api.CancelSubscriptionDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Memberships.CancelSubscription\r\n\t * @path <api root="">/Providers/Payments/CancelSubscription\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCancelSubscription = (routeParams?: CancelSubscriptionDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Payments\", \"CancelSubscription\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Returns a boolean value indicating whether there is any available inventory for the given product identifier.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.CheckHasAnyAvailableInventory\r\n\t * @path <api root="">/Providers/Inventory/CheckHasAnyAvailableInventory/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<boolean>&gt;}\r\n\t * @public\r\n\t */\r\n\tCheckHasAnyAvailableInventory = (id: number): IHttpPromise<cefactionresponset<boolean>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Inventory\", \"CheckHasAnyAvailableInventory\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Clear the current target carts and start over.\r\n\t * @param {@link cef.store.api.ClearCurrentCartToTargetCartsAnalysisDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ClearCurrentCartToTargetCartsAnalysis\r\n\t * @path <api root="">/Providers/Checkout/ClearCurrentCartToTargetCartsAnalysis\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tClearCurrentCartToTargetCartsAnalysis = (routeParams?: ClearCurrentCartToTargetCartsAnalysisDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Providers\", \"Checkout\", \"ClearCurrentCartToTargetCartsAnalysis\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Clear the current target carts and start over.\r\n\t * @param {@link cef.store.api.ClearCurrentQuoteCartToTargetCartsAnalysisDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ClearCurrentQuoteCartToTargetCartsAnalysis\r\n\t * @path <api root="">/Providers/SubmitQuote/ClearCurrentCartToTargetCartsAnalysis\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tClearCurrentQuoteCartToTargetCartsAnalysis = (routeParams?: ClearCurrentQuoteCartToTargetCartsAnalysisDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Providers\", \"SubmitQuote\", \"ClearCurrentCartToTargetCartsAnalysis\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Generates a RMA for each item. An email notification will be sent to the customer.\r\n\t * @param {@link cef.store.api.CreateSalesReturnFromStorefrontDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.CreateSalesReturnFromStorefront\r\n\t * @path <api root="">/Providers/Returning/Actions/CreateSalesReturnFromStorefront\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateSalesReturnFromStorefront = (routeParams?: CreateSalesReturnFromStorefrontDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Providers\", \"Returning\", \"Actions\", \"CreateSalesReturnFromStorefront\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Returns a total sum count of available inventory for the given product identifier.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.GetAvailableInventoryCount\r\n\t * @path <api root="">/Providers/Inventory/CalculateInventory/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetAvailableInventoryCount = (id: number): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Inventory\", \"CalculateInventory\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Returns a total sum count of available inventory for the given product identifier.\r\n\t * @param {@link cef.store.api.GetBulkAvailableInventoryCountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.GetBulkAvailableInventoryCount\r\n\t * @path <api root="">/Providers/Inventory/BulkCalculateInventoryCount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cefalt.store.dictionary<number>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetBulkAvailableInventoryCount = (routeParams: GetBulkAvailableInventoryCountDto): IHttpPromise<cefactionresponset<dictionary<number>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Providers\", \"Inventory\", \"BulkCalculateInventoryCount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of invoices for this Account\r\n\t * @param {@link cef.store.api.GetCurrentAccountSalesInvoicesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesInvoices\r\n\t * @path <api root="">/Providers/Invoicing/Queries/RecordsForCurrentAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesinvoicepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountSalesInvoices = (routeParams?: GetCurrentAccountSalesInvoicesDto): IHttpPromise<salesinvoicepagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Queries\", \"RecordsForCurrentAccount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of invoices for this Account (lite)\r\n\t * @param {@link cef.store.api.GetCurrentAccountSalesInvoicesLiteDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesInvoicesLite\r\n\t * @path <api root="">/Providers/Invoicing/Queries/RecordsForCurrentAccountLite\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesinvoicepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountSalesInvoicesLite = (routeParams?: GetCurrentAccountSalesInvoicesLiteDto): IHttpPromise<salesinvoicepagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Queries\", \"RecordsForCurrentAccountLite\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of quotes for the current account\r\n\t * @param {@link cef.store.api.GetCurrentAccountSalesQuotesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesQuotes\r\n\t * @path <api root="">/Providers/Quoting/Queries/RecordsForCurrentAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesquotepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountSalesQuotes = (routeParams?: GetCurrentAccountSalesQuotesDto): IHttpPromise<salesquotepagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Quoting\", \"Queries\", \"RecordsForCurrentAccount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of returns for the current account\r\n\t * @param {@link cef.store.api.GetCurrentAccountSalesReturnsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesReturns\r\n\t * @path <api root="">/Providers/Returning/Queries/CurrentAccountSalesReturns\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesreturnpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountSalesReturns = (routeParams?: GetCurrentAccountSalesReturnsDto): IHttpPromise<salesreturnpagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Returning\", \"Queries\", \"CurrentAccountSalesReturns\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of sample request for the current account\r\n\t * @param {@link cef.store.api.GetCurrentAccountSampleRequestsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SampleRequestHandlers.Queries.Services.Endpoints.GetCurrentAccountSampleRequests\r\n\t * @path <api root="">/Providers/Sampling/Queries/RecordsForCurrentAccount\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<samplerequestpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountSampleRequests = (routeParams?: GetCurrentAccountSampleRequestsDto): IHttpPromise<samplerequestpagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Sampling\", \"Queries\", \"RecordsForCurrentAccount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get count of unpaid or partially paid invoices for this Account\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentAccountUnpaidOrPartiallyPaidSalesInvoicesCount\r\n\t * @path <api root="">/Providers/Invoicing/Queries/CurrentAccountUnpaidOrPartiallyPaidCount\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountUnpaidOrPartiallyPaidSalesInvoicesCount = (): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"CurrentAccountUnpaidOrPartiallyPaidCount\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get history of invoices for this user\r\n\t * @param {@link cef.store.api.GetCurrentUserSalesInvoicesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentUserSalesInvoices\r\n\t * @path <api root="">/Providers/Invoicing/Queries/RecordsForCurrentUser\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesinvoicepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserSalesInvoices = (routeParams?: GetCurrentUserSalesInvoicesDto): IHttpPromise<salesinvoicepagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of quotes for the current user.\r\n\t * @param {@link cef.store.api.GetCurrentUserSalesQuotesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetCurrentUserSalesQuotes\r\n\t * @path <api root="">/Providers/Quoting/Queries/RecordsForCurrentUser\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesquotepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserSalesQuotes = (routeParams?: GetCurrentUserSalesQuotesDto): IHttpPromise<salesquotepagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Quoting\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of returns for the current user.\r\n\t * @param {@link cef.store.api.GetCurrentUserSalesReturnsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.GetCurrentUserSalesReturns\r\n\t * @path <api root="">/Providers/Returning/Queries/RecordsForCurrentUser\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesreturnpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserSalesReturns = (routeParams?: GetCurrentUserSalesReturnsDto): IHttpPromise<salesreturnpagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Returning\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get history of sample requests for the current user\r\n\t * @param {@link cef.store.api.GetCurrentUserSampleRequestsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SampleRequestHandlers.Queries.Services.Endpoints.GetCurrentUserSampleRequests\r\n\t * @path <api root="">/Providers/Sampling/Queries/RecordsForCurrentUser\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<samplerequestpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserSampleRequests = (routeParams?: GetCurrentUserSampleRequestsDto): IHttpPromise<samplerequestpagedresults> =&gt;\r\n\t\taxios.post([\"Providers\", \"Sampling\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get the discounts for the top level and item levels at the same time.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetDiscountsForInvoice\r\n\t * @path <api root="">/Providers/Invoicing/Queries/Secured/DiscountsFor/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<discountsforinvoice>}\r\n\t * @public\r\n\t */\r\n\tGetDiscountsForInvoice = (id: number): IHttpPromise<discountsforinvoice> =&gt;\r\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"Secured\", \"DiscountsFor\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get the discounts for the top level and item levels at the same time.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDiscountsForOrder\r\n\t * @path <api root="">/Providers/Ordering/Queries/Secured/DiscountsFor/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<discountsfororderresponse>}\r\n\t * @public\r\n\t */\r\n\tGetDiscountsForOrder = (id: number): IHttpPromise<discountsfororderresponse> =&gt;\r\n\t\taxios.get([\"Providers\", \"Ordering\", \"Queries\", \"Secured\", \"DiscountsFor\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get the discounts for the top level and item levels at the same time.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetDiscountsForQuote\r\n\t * @path <api root="">/Providers/Quoting/Queries/Secured/DiscountsFor/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<discountsforquote>}\r\n\t * @public\r\n\t */\r\n\tGetDiscountsForQuote = (id: number): IHttpPromise<discountsforquote> =&gt;\r\n\t\taxios.get([\"Providers\", \"Quoting\", \"Queries\", \"Secured\", \"DiscountsFor\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific sales invoice and check for valid quick pay token.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetQuickPaySalesInvoice\r\n\t * @path <api root="">/Providers/Invoicing/Queries/QuickPay/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesinvoicemodel>}\r\n\t * @public\r\n\t */\r\n\tGetQuickPaySalesInvoice = (id: number, routeParams: GetQuickPaySalesInvoiceDto): IHttpPromise<salesinvoicemodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"QuickPay\", id].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales invoice and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetSecureSalesInvoice\r\n\t * @path <api root="">/Providers/Invoicing/Queries/Secured/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesinvoicemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSecureSalesInvoice = (id: number): IHttpPromise<salesinvoicemodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific sales quote and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetSecureSalesQuote\r\n\t * @path <api root="">/Providers/Quoting/Queries/Secured/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<salesquotemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSecureSalesQuote = (id: number): IHttpPromise<salesquotemodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Quoting\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific sales return and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.GetSecureSalesReturn\r\n\t * @path <api root="">/Providers/Returning/Queries/Secured/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<salesreturnmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSecureSalesReturn = (id: number): IHttpPromise<salesreturnmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Returning\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific sample request and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SampleRequestHandlers.Queries.Services.Endpoints.GetSecureSampleRequest\r\n\t * @path <api root="">/Providers/Sampling/Queries/Secured/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<samplerequestmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSecureSampleRequest = (id: number): IHttpPromise<samplerequestmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Sampling\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Test if the Sales Order is eligible for return.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.IsSalesOrderReadyForReturn\r\n\t * @path <api root="">/Providers/Returning/Queries/IsSalesOrderReadyForReturn/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tIsSalesOrderReadyForReturn = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.get([\"Providers\", \"Returning\", \"Queries\", \"IsSalesOrderReadyForReturn\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get the available upgrades.\r\n\t * @param {@link cef.store.api.ModifySubscriptionForCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Memberships.ModifySubscriptionForCurrentUser\r\n\t * @path <api root="">/Providers/Payments/AvailableSubscriptionUpgrades\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tModifySubscriptionForCurrentUser = (routeParams: ModifySubscriptionForCurrentUserDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Providers\", \"Payments\", \"AvailableSubscriptionUpgrades\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to pay multiple invoices, specifying the amount with each one\r\n\t * @param {@link cef.store.api.PayMultipleInvoicesByAmountsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Actions.Services.Endpoints.PayMultipleInvoicesByAmounts\r\n\t * @path <api root="">/Providers/Invoicing/Actions/PayMultiple\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tPayMultipleInvoicesByAmounts = (routeParams: PayMultipleInvoicesByAmountsDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Actions\", \"PayMultiple\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Provide payment information to a specific invoice by ID.\r\n\t * @param {@link cef.store.api.PaySingleInvoiceByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Actions.Services.Endpoints.PaySingleInvoiceByID\r\n\t * @path <api root="">/Providers/Invoicing/Actions/Pay\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tPaySingleInvoiceByID = (routeParams: PaySingleInvoiceByIDDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Actions\", \"Pay\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Checkout the current shopping cart\r\n\t * @param {@link cef.store.api.ProcessCurrentCartToSingleOrderDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentCartToSingleOrder\r\n\t * @path <api root="">/Providers/Checkout/ProcessCurrentCartToSingleOrder\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<checkoutresult>}\r\n\t * @public\r\n\t */\r\n\tProcessCurrentCartToSingleOrder = (routeParams?: ProcessCurrentCartToSingleOrderDto): IHttpPromise<checkoutresult> =&gt;\r\n\t\taxios.post([\"Providers\", \"Checkout\", \"ProcessCurrentCartToSingleOrder\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Checkout the current cart of the given session type.\r\n\t * @param {@link cef.store.api.ProcessCurrentCartToTargetOrdersDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentCartToTargetOrders\r\n\t * @path <api root="">/Providers/Checkout/ProcessCurrentCartToTargetOrders\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<checkoutresult>}\r\n\t * @public\r\n\t */\r\n\tProcessCurrentCartToTargetOrders = (routeParams?: ProcessCurrentCartToTargetOrdersDto): IHttpPromise<checkoutresult> =&gt;\r\n\t\taxios.post([\"Providers\", \"Checkout\", \"ProcessCurrentCartToTargetOrders\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Submit the current quote cart of the given session type\r\n\t * @param {@link cef.store.api.ProcessCurrentQuoteCartToSingleQuoteDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentQuoteCartToSingleQuote\r\n\t * @path <api root="">/Providers/SubmitQuote/ProcessCurrentQuoteCartToSingleQuote\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<checkoutresult>}\r\n\t * @public\r\n\t */\r\n\tProcessCurrentQuoteCartToSingleQuote = (routeParams?: ProcessCurrentQuoteCartToSingleQuoteDto): IHttpPromise<checkoutresult> =&gt;\r\n\t\taxios.post([\"Providers\", \"SubmitQuote\", \"ProcessCurrentQuoteCartToSingleQuote\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Submit the current quote cart of the given session type.\r\n\t * @param {@link cef.store.api.ProcessCurrentQuoteCartToTargetQuotesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentQuoteCartToTargetQuotes\r\n\t * @path <api root="">/Providers/SubmitQuote/ProcessCurrentCartToTargetOrders\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<checkoutresult>}\r\n\t * @public\r\n\t */\r\n\tProcessCurrentQuoteCartToTargetQuotes = (routeParams?: ProcessCurrentQuoteCartToTargetQuotesDto): IHttpPromise<checkoutresult> =&gt;\r\n\t\taxios.post([\"Providers\", \"SubmitQuote\", \"ProcessCurrentCartToTargetOrders\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Provide quick payment information to a specific invoice by ID.\r\n\t * @param {@link cef.store.api.QuickPaySingleInvoiceByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Actions.Services.Endpoints.QuickPaySingleInvoiceByID\r\n\t * @path <api root="">/Providers/Invoicing/Actions/QuickPay\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tQuickPaySingleInvoiceByID = (routeParams: QuickPaySingleInvoiceByIDDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Actions\", \"QuickPay\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Search the auction catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchAuctionCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Auctions/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<auctionsearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchAuctionCatalogWithProvider = (routeParams?: SearchAuctionCatalogWithProviderDto): IHttpPromise<auctionsearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Auctions\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the category catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchCategoryCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Categories/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<categorysearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchCategoryCatalogWithProvider = (routeParams?: SearchCategoryCatalogWithProviderDto): IHttpPromise<categorysearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Categories\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the franchise catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchFranchiseCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Franchises/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<franchisesearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchFranchiseCatalogWithProvider = (routeParams?: SearchFranchiseCatalogWithProviderDto): IHttpPromise<franchisesearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Franchises\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the lot catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchLotCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Lots/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<lotsearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchLotCatalogWithProvider = (routeParams?: SearchLotCatalogWithProviderDto): IHttpPromise<lotsearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Lots\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the manufacturer catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchManufacturerCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Manufacturers/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<manufacturersearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchManufacturerCatalogWithProvider = (routeParams?: SearchManufacturerCatalogWithProviderDto): IHttpPromise<manufacturersearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Manufacturers\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the product catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchProductCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Products/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<productsearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchProductCatalogWithProvider = (routeParams?: SearchProductCatalogWithProviderDto): IHttpPromise<productsearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Products\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the store catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchStoreCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Stores/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<storesearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchStoreCatalogWithProvider = (routeParams?: SearchStoreCatalogWithProviderDto): IHttpPromise<storesearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Stores\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the vendor catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchVendorCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Vendors/Query\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<vendorsearchviewmodel>}\r\n\t * @public\r\n\t */\r\n\tSearchVendorCatalogWithProvider = (routeParams?: SearchVendorCatalogWithProviderDto): IHttpPromise<vendorsearchviewmodel> =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Vendors\", \"Query\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Membership Registration Process step 1: Send Invitation (User gets an email with an invite token)\r\n\t * @param {@link cef.store.api.SendInvitationDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Emails.SendInvitation\r\n\t * @path <api root="">/Providers/Emails/Authentication/SendInvitation\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSendInvitation = (routeParams: SendInvitationDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Emails\", \"Authentication\", \"SendInvitation\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to update a specific sales order item\r\n\t * @param {@link cef.store.api.SendReceiptNotificationWithEmailDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Emails.SendReceiptNotificationWithEmail\r\n\t * @path <api root="">/Providers/Emails/ReceiptNotificationToEmailAddress\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSendReceiptNotificationWithEmail = (routeParams: SendReceiptNotificationWithEmailDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Emails\", \"ReceiptNotificationToEmailAddress\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Sets the specified Quote as Approved\r\n\t * @param {@link cef.store.api.SetSalesQuoteAsApprovedDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsApproved\r\n\t * @path <api root="">/Providers/Quoting/Actions/Approved\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<salesquotesalesgroupidentifiers>&gt;}\r\n\t * @public\r\n\t */\r\n\tSetSalesQuoteAsApproved = (routeParams?: SetSalesQuoteAsApprovedDto): IHttpPromise<cefactionresponset<salesquotesalesgroupidentifiers>&gt; =&gt;\r\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Approved\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Sets the specified Quote as Cancelled\r\n\t * @param {@link cef.store.api.SetSalesQuoteAsCancelledDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsCancelled\r\n\t * @path <api root="">/Providers/Quoting/Actions/Cancelled\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetSalesQuoteAsCancelled = (routeParams?: SetSalesQuoteAsCancelledDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Cancelled\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Sets the specified Quote as Pending\r\n\t * @param {@link cef.store.api.SetSalesQuoteAsPendingDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsPending\r\n\t * @path <api root="">/Providers/Quoting/Actions/Pending\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetSalesQuoteAsPending = (routeParams?: SetSalesQuoteAsPendingDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Pending\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Sets the specified Quote as Rejected\r\n\t * @param {@link cef.store.api.SetSalesQuoteAsRejectedDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsRejected\r\n\t * @path <api root="">/Providers/Quoting/Actions/Rejected\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetSalesQuoteAsRejected = (routeParams?: SetSalesQuoteAsRejectedDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Rejected\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * The return will be set to 'Canceled' status, no further modifications will be allowed. An email notification will be sent to the customer.\r\n\t * @param {@link cef.store.api.SetSalesReturnAsCancelledDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.SetSalesReturnAsCancelled\r\n\t * @path <api root="">/Providers/Returning/Actions/Cancel/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetSalesReturnAsCancelled = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Providers\", \"Returning\", \"Actions\", \"Cancel\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * The return will be set to 'Shipped' status. An email notification will be sent to the customer.\r\n\t * @param {@link cef.store.api.SetSalesReturnAsShippedDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.SetSalesReturnAsShipped\r\n\t * @path <api root="">/Providers/Returning/Actions/Shipped/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSetSalesReturnAsShipped = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Providers\", \"Returning\", \"Actions\", \"Shipped\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Submit a quote for processing by the store\r\n\t * @param {@link cef.store.api.SubmitRequestForQuoteForGenericProductsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SubmitRequestForQuoteForGenericProducts\r\n\t * @path <api root="">/Providers/Quoting/Actions/SubmitForGenericProducts\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSubmitRequestForQuoteForGenericProducts = (routeParams?: SubmitRequestForQuoteForGenericProductsDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Quoting\", \"Actions\", \"SubmitForGenericProducts\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Submit a quote for processing by the store\r\n\t * @param {@link cef.store.api.SubmitRequestForQuoteForSingleProductDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SubmitRequestForQuoteForSingleProduct\r\n\t * @path <api root="">/Providers/Quoting/Actions/SubmitForSingleProduct\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSubmitRequestForQuoteForSingleProduct = (routeParams?: SubmitRequestForQuoteForSingleProductDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Providers\", \"Quoting\", \"Actions\", \"SubmitForSingleProduct\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Search the auction catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestAuctionCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Auctions/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<auctionsuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestAuctionCatalogWithProvider = (routeParams?: SuggestAuctionCatalogWithProviderDto): IHttpPromise<array<auctionsuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Auctions\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the category catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestCategoryCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Categories/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<categorysuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestCategoryCatalogWithProvider = (routeParams?: SuggestCategoryCatalogWithProviderDto): IHttpPromise<array<categorysuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Categories\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the franchise catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestFranchiseCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Franchises/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<franchisesuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestFranchiseCatalogWithProvider = (routeParams?: SuggestFranchiseCatalogWithProviderDto): IHttpPromise<array<franchisesuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Franchises\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the lot catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestLotCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Lots/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<lotsuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestLotCatalogWithProvider = (routeParams?: SuggestLotCatalogWithProviderDto): IHttpPromise<array<lotsuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Lots\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the manufacturer catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestManufacturerCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Manufacturers/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<manufacturersuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestManufacturerCatalogWithProvider = (routeParams?: SuggestManufacturerCatalogWithProviderDto): IHttpPromise<array<manufacturersuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Manufacturers\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the product catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestProductCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Products/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<productsuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestProductCatalogWithProvider = (routeParams?: SuggestProductCatalogWithProviderDto): IHttpPromise<array<productsuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Products\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the store catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestStoreCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Stores/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<storesuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestStoreCatalogWithProvider = (routeParams?: SuggestStoreCatalogWithProviderDto): IHttpPromise<array<storesuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Stores\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Search the vendor catalog. Returns a range of data\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestVendorCatalogWithProvider\r\n\t * @path <api root="">/Providers/Searching/Vendors/Suggest\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<array<vendorsuggestresult>&gt;}\r\n\t * @public\r\n\t */\r\n\tSuggestVendorCatalogWithProvider = (routeParams?: SuggestVendorCatalogWithProviderDto): IHttpPromise<array<vendorsuggestresult>&gt; =&gt;\r\n\t\taxios.get([\"Providers\", \"Searching\", \"Vendors\", \"Suggest\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to update a sales return\r\n\t * @param {@link cef.store.api.UpdateSalesReturnFromStorefrontDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.UpdateSalesReturnFromStorefront\r\n\t * @path <api root="">/Providers/Returning/Actions/UpdateSalesReturnFromStorefront\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdateSalesReturnFromStorefront = (routeParams?: UpdateSalesReturnFromStorefrontDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.put([\"Providers\", \"Returning\", \"Actions\", \"UpdateSalesReturnFromStorefront\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to validate address with AddressProvider\r\n\t * @param {@link cef.store.api.ValidateAddressDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.AddressValidation.ValidateAddress\r\n\t * @path <api root="">/Providers/Geography/ValidateAddress\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<addressvalidationresultmodel>}\r\n\t * @public\r\n\t */\r\n\tValidateAddress = (routeParams?: ValidateAddressDto): IHttpPromise<addressvalidationresultmodel> =&gt;\r\n\t\taxios.post([\"Providers\", \"Geography\", \"ValidateAddress\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Questionnaire.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tQuestionSearchModel,\r\n\tQuestionPagedResults,\r\n\tAnswerModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Checks if the current user has answered the given brand's questionnaire.\r\n * @public\r\n */\r\nexport interface CheckIfQuestionnaireIsAnsweredDto {\r\n\t/** Brand ID For Search, Note: This will be overridden on data calls automatically */\r\n\tBrandID?: number;\r\n\tBrandIDIncludeNull?: boolean;\r\n\t/** The Brand Key for objects */\r\n\tBrandKey?: string;\r\n\t/** The Brand Name for objects */\r\n\tBrandName?: string;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\t/** Match a store which uses this category */\r\n\tBrandCategoryID?: number;\r\n}\r\n\r\n/**\r\n * Use to get a list of questions\r\n * @see {@link QuestionSearchModel}\r\n * @public\r\n */\r\nexport interface GetQuestionsDto extends QuestionSearchModel {\r\n}\r\n\r\n/**\r\n * Securely creates many answers, ensures that the user ID on the answers is the current user.\r\n * @public\r\n */\r\nexport interface SecureCreateAnswersDto {\r\n\tAnswers?: Array<answermodel>;\r\n}\r\n\r\nexport class Questionnaire {\r\n\t/**\r\n\t * Checks if the current user has answered the given brand's questionnaire.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckIfQuestionnaireIsAnswered\r\n\t * @path <api root="">/Questionnaire/CurrentUser/HasAnswersForBrandQuestionnaire\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<boolean>&gt;}\r\n\t * @public\r\n\t */\r\n\tCheckIfQuestionnaireIsAnswered = (routeParams?: CheckIfQuestionnaireIsAnsweredDto): IHttpPromise<cefactionresponset<boolean>&gt; =&gt;\r\n\t\taxios.get([\"Questionnaire\", \"CurrentUser\", \"HasAnswersForBrandQuestionnaire\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of questions\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestions\r\n\t * @path <api root="">/Questionnaire/Questions\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<questionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetQuestions = (routeParams?: GetQuestionsDto): IHttpPromise<questionpagedresults> =&gt;\r\n\t\taxios.get([\"Questionnaire\", \"Questions\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Securely creates many answers, ensures that the user ID on the answers is the current user.\r\n\t * @param {@link cef.store.api.SecureCreateAnswersDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SecureCreateAnswers\r\n\t * @path <api root="">/Questionnaire/Answers/CreateMany\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tSecureCreateAnswers = (routeParams?: SecureCreateAnswersDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Questionnaire\", \"Answers\", \"CreateMany\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Quoting.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsDisplayNameBase,\r\n\tImplementsNameBase,\r\n\tSalesQuoteModel,\r\n\tSalesQuoteEventSearchModel,\r\n\tSalesQuoteEventPagedResults,\r\n\tSalesQuoteSearchModel,\r\n\tSalesQuotePagedResults,\r\n\tStateModel,\r\n\tStateSearchModel,\r\n\tSalesQuoteStatePagedResults,\r\n\tStatusModel,\r\n\tStatusSearchModel,\r\n\tSalesQuoteStatusPagedResults,\r\n\tTypeModel,\r\n\tTypeSearchModel,\r\n\tSalesQuoteTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesQuoteStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesQuoteStateExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesQuoteStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesQuoteStatusExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesQuoteTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesQuoteTypeExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales quote events\r\n * @see {@link SalesQuoteEventSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesQuoteEventsDto extends SalesQuoteEventSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales quotes\r\n * @see {@link SalesQuoteSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesQuotesDto extends SalesQuoteSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales quote states\r\n * @see {@link StateSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesQuoteStatesDto extends StateSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales quote statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesQuoteStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales quote types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesQuoteTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Quoting {\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStateExistsByDisplayName\r\n\t * @path <api root="">/Quoting/SalesQuoteState/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteStateExistsByDisplayName = (routeParams?: CheckSalesQuoteStateExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStateExistsByKey\r\n\t * @path <api root="">/Quoting/SalesQuoteState/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteStateExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStateExistsByName\r\n\t * @path <api root="">/Quoting/SalesQuoteState/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteStateExistsByName = (routeParams?: CheckSalesQuoteStateExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByDisplayName\r\n\t * @path <api root="">/Quoting/SalesQuoteStatus/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteStatusExistsByDisplayName = (routeParams?: CheckSalesQuoteStatusExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByID\r\n\t * @path <api root="">/Quoting/SalesQuoteStatus/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteStatusExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByKey\r\n\t * @path <api root="">/Quoting/SalesQuoteStatus/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteStatusExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByName\r\n\t * @path <api root="">/Quoting/SalesQuoteStatus/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteStatusExistsByName = (routeParams?: CheckSalesQuoteStatusExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteTypeExistsByDisplayName\r\n\t * @path <api root="">/Quoting/SalesQuoteType/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteTypeExistsByDisplayName = (routeParams?: CheckSalesQuoteTypeExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteTypeExistsByKey\r\n\t * @path <api root="">/Quoting/SalesQuoteType/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteTypeExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteTypeExistsByName\r\n\t * @path <api root="">/Quoting/SalesQuoteType/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesQuoteTypeExistsByName = (routeParams?: CheckSalesQuoteTypeExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales quote\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteByID\r\n\t * @path <api root="">/Quoting/SalesQuote/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesquotemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteByID = (id: number): IHttpPromise<salesquotemodel> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuote\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales quote events\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteEvents\r\n\t * @path <api root="">/Quoting/SalesQuoteEvents\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesquoteeventpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteEvents = (routeParams?: GetSalesQuoteEventsDto): IHttpPromise<salesquoteeventpagedresults> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteEvents\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of sales quotes\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuotes\r\n\t * @path <api root="">/Quoting/SalesQuotes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesquotepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuotes = (routeParams?: GetSalesQuotesDto): IHttpPromise<salesquotepagedresults> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuotes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales quote state\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStateByID\r\n\t * @path <api root="">/Quoting/SalesQuoteState/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteStateByID = (id: number): IHttpPromise<statemodel> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales quote states\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStates\r\n\t * @path <api root="">/Quoting/SalesQuoteStates\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesquotestatepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteStates = (routeParams?: GetSalesQuoteStatesDto): IHttpPromise<salesquotestatepagedresults> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteStates\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales quote status\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStatusByID\r\n\t * @path <api root="">/Quoting/SalesQuoteStatus/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statusmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteStatusByID = (id: number): IHttpPromise<statusmodel> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales quote statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStatuses\r\n\t * @path <api root="">/Quoting/SalesQuoteStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesquotestatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteStatuses = (routeParams?: GetSalesQuoteStatusesDto): IHttpPromise<salesquotestatuspagedresults> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales quote type\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteTypeByID\r\n\t * @path <api root="">/Quoting/SalesQuoteType/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<typemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteTypeByID = (id: number): IHttpPromise<typemodel> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales quote types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteTypes\r\n\t * @path <api root="">/Quoting/SalesQuoteTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesquotetypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesQuoteTypes = (routeParams?: GetSalesQuoteTypesDto): IHttpPromise<salesquotetypepagedresults> =&gt;\r\n\t\taxios.get([\"Quoting\", \"SalesQuoteTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Returning.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsDisplayNameBase,\r\n\tImplementsNameBase,\r\n\tSalesReturnModel,\r\n\tSalesReturnEventSearchModel,\r\n\tSalesReturnEventPagedResults,\r\n\tSalesReturnReasonSearchModel,\r\n\tSalesReturnReasonPagedResults,\r\n\tSalesReturnSearchModel,\r\n\tSalesReturnPagedResults,\r\n\tStateModel,\r\n\tStateSearchModel,\r\n\tSalesReturnStatePagedResults,\r\n\tStatusModel,\r\n\tStatusSearchModel,\r\n\tSalesReturnStatusPagedResults,\r\n\tTypeModel,\r\n\tTypeSearchModel,\r\n\tSalesReturnTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesReturnStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesReturnStateExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesReturnStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesReturnStatusExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesReturnTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckSalesReturnTypeExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales return events\r\n * @see {@link SalesReturnEventSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesReturnEventsDto extends SalesReturnEventSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales return reasons\r\n * @see {@link SalesReturnReasonSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesReturnReasonsDto extends SalesReturnReasonSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales returns\r\n * @see {@link SalesReturnSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesReturnsDto extends SalesReturnSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales return states\r\n * @see {@link StateSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesReturnStatesDto extends StateSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales return statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesReturnStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales return types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesReturnTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Returning {\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStateExistsByDisplayName\r\n\t * @path <api root="">/Returning/SalesReturnState/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnStateExistsByDisplayName = (routeParams?: CheckSalesReturnStateExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStateExistsByKey\r\n\t * @path <api root="">/Returning/SalesReturnState/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnStateExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStateExistsByName\r\n\t * @path <api root="">/Returning/SalesReturnState/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnStateExistsByName = (routeParams?: CheckSalesReturnStateExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStatusExistsByDisplayName\r\n\t * @path <api root="">/Returning/SalesReturnStatus/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnStatusExistsByDisplayName = (routeParams?: CheckSalesReturnStatusExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStatusExistsByKey\r\n\t * @path <api root="">/Returning/SalesReturnStatus/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnStatusExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStatusExistsByName\r\n\t * @path <api root="">/Returning/SalesReturnStatus/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnStatusExistsByName = (routeParams?: CheckSalesReturnStatusExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnTypeExistsByDisplayName\r\n\t * @path <api root="">/Returning/SalesReturnType/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnTypeExistsByDisplayName = (routeParams?: CheckSalesReturnTypeExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnTypeExistsByKey\r\n\t * @path <api root="">/Returning/SalesReturnType/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnTypeExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnTypeExistsByName\r\n\t * @path <api root="">/Returning/SalesReturnType/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckSalesReturnTypeExistsByName = (routeParams?: CheckSalesReturnTypeExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales return\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnByID\r\n\t * @path <api root="">/Returning/SalesReturn/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesreturnmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnByID = (id: number): IHttpPromise<salesreturnmodel> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturn\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales return events\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnEvents\r\n\t * @path <api root="">/Returning/SalesReturnEvents\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesreturneventpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnEvents = (routeParams?: GetSalesReturnEventsDto): IHttpPromise<salesreturneventpagedresults> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnEvents\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of sales return reasons\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnReasons\r\n\t * @path <api root="">/Returning/SalesReturnReasons\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesreturnreasonpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnReasons = (routeParams?: GetSalesReturnReasonsDto): IHttpPromise<salesreturnreasonpagedresults> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnReasons\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of sales returns\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturns\r\n\t * @path <api root="">/Returning/SalesReturns\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesreturnpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturns = (routeParams?: GetSalesReturnsDto): IHttpPromise<salesreturnpagedresults> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturns\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales return state\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStateByID\r\n\t * @path <api root="">/Returning/SalesReturnState/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnStateByID = (id: number): IHttpPromise<statemodel> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales return states\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStates\r\n\t * @path <api root="">/Returning/SalesReturnStates\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesreturnstatepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnStates = (routeParams?: GetSalesReturnStatesDto): IHttpPromise<salesreturnstatepagedresults> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnStates\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales return status\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStatusByID\r\n\t * @path <api root="">/Returning/SalesReturnStatus/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<statusmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnStatusByID = (id: number): IHttpPromise<statusmodel> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales return statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStatuses\r\n\t * @path <api root="">/Returning/SalesReturnStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesreturnstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnStatuses = (routeParams?: GetSalesReturnStatusesDto): IHttpPromise<salesreturnstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales return type\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnTypeByID\r\n\t * @path <api root="">/Returning/SalesReturnType/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<typemodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnTypeByID = (id: number): IHttpPromise<typemodel> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales return types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnTypes\r\n\t * @path <api root="">/Returning/SalesReturnTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesreturntypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesReturnTypes = (routeParams?: GetSalesReturnTypesDto): IHttpPromise<salesreturntypepagedresults> =&gt;\r\n\t\taxios.get([\"Returning\", \"SalesReturnTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Reviews.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tReviewModel,\r\n\tTypeSearchModel,\r\n\tReviewTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to create a new review.\r\n * @see {@link ReviewModel}\r\n * @public\r\n */\r\nexport interface CreateReviewDto extends ReviewModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of review types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetReviewTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Reviews {\r\n\t/**\r\n\t * Use to create a new review.\r\n\t * @param {@link cef.store.api.CreateReviewDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateReview\r\n\t * @path <api root="">/Reviews/Review/Create\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateReview = (routeParams?: CreateReviewDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Reviews\", \"Review\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a list of review types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetReviewTypes\r\n\t * @path <api root="">/Reviews/ReviewTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<reviewtypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetReviewTypes = (routeParams?: GetReviewTypesDto): IHttpPromise<reviewtypepagedresults> =&gt;\r\n\t\taxios.get([\"Reviews\", \"ReviewTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Sales.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tSalesGroupSearchModel,\r\n\tSalesGroupPagedResults,\r\n\tSalesGroupModel,\r\n\tTypeSearchModel,\r\n\tSalesItemTargetTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to get history of sales groups for the current account\r\n * @see {@link SalesGroupSearchModel}\r\n * @public\r\n */\r\nexport interface GetCurrentAccountSalesGroupsDto extends SalesGroupSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sales item target types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetSalesItemTargetTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Sales {\r\n\t/**\r\n\t * Use to get history of sales groups for the current account\r\n\t * @param {@link cef.store.api.GetCurrentAccountSalesGroupsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountSalesGroups\r\n\t * @path <api root="">/Sales/CurrentAccount/SalesGroups\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<salesgrouppagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountSalesGroups = (routeParams?: GetCurrentAccountSalesGroupsDto): IHttpPromise<salesgrouppagedresults> =&gt;\r\n\t\taxios.post([\"Sales\", \"CurrentAccount\", \"SalesGroups\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific sales group\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesGroupByID\r\n\t * @path <api root="">/Sales/SalesGroup/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesgroupmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSalesGroupByID = (id: number): IHttpPromise<salesgroupmodel> =&gt;\r\n\t\taxios.get([\"Sales\", \"SalesGroup\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sales item target types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesItemTargetTypes\r\n\t * @path <api root="">/Sales/SalesItemTargetTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesitemtargettypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSalesItemTargetTypes = (routeParams?: GetSalesItemTargetTypesDto): IHttpPromise<salesitemtargettypepagedresults> =&gt;\r\n\t\taxios.get([\"Sales\", \"SalesItemTargetTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific sales group and check for ownership by the current Account.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSecureSalesGroup\r\n\t * @path <api root="">/Sales/SecureSalesGroup/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesgroupmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSecureSalesGroup = (id: number): IHttpPromise<salesgroupmodel> =&gt;\r\n\t\taxios.get([\"Sales\", \"SecureSalesGroup\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n}\r\n","/**\r\n * @file _api/cvApi.Sampling.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tSampleRequestModel,\r\n\tStateSearchModel,\r\n\tSampleRequestStatePagedResults,\r\n\tStatusSearchModel,\r\n\tSampleRequestStatusPagedResults,\r\n\tTypeSearchModel,\r\n\tSampleRequestTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to get a list of sample request states\r\n * @see {@link StateSearchModel}\r\n * @public\r\n */\r\nexport interface GetSampleRequestStatesDto extends StateSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sample request statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetSampleRequestStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of sample request types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetSampleRequestTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Sampling {\r\n\t/**\r\n\t * Use to get a specific sample request\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestByID\r\n\t * @path <api root="">/Sampling/SampleRequest/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<samplerequestmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSampleRequestByID = (id: number): IHttpPromise<samplerequestmodel> =&gt;\r\n\t\taxios.get([\"Sampling\", \"SampleRequest\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of sample request states\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestStates\r\n\t * @path <api root="">/Sampling/SampleRequestStates\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<samplerequeststatepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSampleRequestStates = (routeParams?: GetSampleRequestStatesDto): IHttpPromise<samplerequeststatepagedresults> =&gt;\r\n\t\taxios.get([\"Sampling\", \"SampleRequestStates\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of sample request statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestStatuses\r\n\t * @path <api root="">/Sampling/SampleRequestStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<samplerequeststatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSampleRequestStatuses = (routeParams?: GetSampleRequestStatusesDto): IHttpPromise<samplerequeststatuspagedresults> =&gt;\r\n\t\taxios.get([\"Sampling\", \"SampleRequestStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of sample request types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestTypes\r\n\t * @path <api root="">/Sampling/SampleRequestTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<samplerequesttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSampleRequestTypes = (routeParams?: GetSampleRequestTypesDto): IHttpPromise<samplerequesttypepagedresults> =&gt;\r\n\t\taxios.get([\"Sampling\", \"SampleRequestTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Scheduling.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tAppointmentModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponse,\r\n\tCEFActionResponseT,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Gets appointments for the current account in the given time range.\r\n * @public\r\n */\r\nexport interface GetCurrentAccountAppointmentsDto {\r\n\tStart: Date;\r\n\tEnd: Date;\r\n}\r\n\r\n/**\r\n * Reserves an appointment with the given details.\r\n * @see {@link AppointmentModel}\r\n * @public\r\n */\r\nexport interface ReserveAppointmentDto extends AppointmentModel {\r\n}\r\n\r\nexport class Scheduling {\r\n\t/**\r\n\t * Confirms the given appointment.\r\n\t * @param {@link cef.store.api.CancelAppointmentDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CancelAppointment\r\n\t * @path <api root="">/Scheduling/CancelAppointment/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCancelAppointment = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Scheduling\", \"CancelAppointment\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Confirms the given appointment.\r\n\t * @param {@link cef.store.api.ConfirmAppointmentDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ConfirmAppointment\r\n\t * @path <api root="">/Scheduling/ConfirmAppointment/{ID}\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tConfirmAppointment = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Scheduling\", \"ConfirmAppointment\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Gets appointments for the current account in the given time range.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountAppointments\r\n\t * @path <api root="">/Scheduling/CurrentAppointments/TimeRange\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<appointmentmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentAccountAppointments = (routeParams: GetCurrentAccountAppointmentsDto): IHttpPromise<cefactionresponset<array<appointmentmodel>&gt;&gt; =&gt;\r\n\t\taxios.get([\"Scheduling\", \"CurrentAppointments\", \"TimeRange\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Securely retrieves an appointment, or returns an error if not possible.\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSecureAppointment\r\n\t * @path <api root="">/Scheduling/SecureAppointment/{ID}\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<appointmentmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetSecureAppointment = (id: number): IHttpPromise<cefactionresponset<appointmentmodel>&gt; =&gt;\r\n\t\taxios.get([\"Scheduling\", \"SecureAppointment\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Reserves an appointment with the given details.\r\n\t * @param {@link cef.store.api.ReserveAppointmentDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReserveAppointment\r\n\t * @path <api root="">/Scheduling/ReserveAppointment\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tReserveAppointment = (routeParams?: ReserveAppointmentDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Scheduling\", \"ReserveAppointment\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Shipping.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tTypeSearchModel,\r\n\tPackageTypePagedResults,\r\n\tStatusSearchModel,\r\n\tShipmentStatusPagedResults,\r\n\tShipmentTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to get a list of package types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetPackageTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of shipment statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetShipmentStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of shipment types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetShipmentTypesDto extends TypeSearchModel {\r\n}\r\n\r\nexport class Shipping {\r\n\t/**\r\n\t * Use to get a list of package types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPackageTypes\r\n\t * @path <api root="">/Shipping/PackageTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<packagetypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetPackageTypes = (routeParams?: GetPackageTypesDto): IHttpPromise<packagetypepagedresults> =&gt;\r\n\t\taxios.get([\"Shipping\", \"PackageTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of shipment statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetShipmentStatuses\r\n\t * @path <api root="">/Shipping/ShipmentStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<shipmentstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetShipmentStatuses = (routeParams?: GetShipmentStatusesDto): IHttpPromise<shipmentstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Shipping\", \"ShipmentStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of shipment types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetShipmentTypes\r\n\t * @path <api root="">/Shipping/ShipmentTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<shipmenttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetShipmentTypes = (routeParams?: GetShipmentTypesDto): IHttpPromise<shipmenttypepagedresults> =&gt;\r\n\t\taxios.get([\"Shipping\", \"ShipmentTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Shopping.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsTypeNameForStorefrontBase,\r\n\tSerializableAttributesDictionary,\r\n\tSalesItemTargetBaseModel,\r\n\tAppliedCartItemDiscountModel,\r\n\tImplementsCartLookupForStorefrontBase,\r\n\tImplementsTypeNameBase,\r\n\tCartTypeModel,\r\n\tContactModel,\r\n\tCartModel,\r\n\tSalesItemBaseSearchModel,\r\n\tCartItemPagedResults,\r\n\tStateSearchModel,\r\n\tCartStatePagedResults,\r\n\tStatusSearchModel,\r\n\tCartStatusPagedResults,\r\n\tImplementsNameBase,\r\n\tCartTypeSearchModel,\r\n\tCartTypePagedResults,\r\n\tRateQuoteModel,\r\n\tBulkOrderHeadersModel,\r\n\tImplementsIDOnBodyBase,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tSalesItemBaseModel,\r\n\tCEFActionResponse,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to add the Buffer Sku in a quantity that will allow the requirements to be met in the specified session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface AddBufferSkuCartItemDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** Buffer Sku SEO URL */\r\n\tBufferSkuSEOURL: string;\r\n\t/** Amount to Fill (will divide cost of item to get quantity to add) */\r\n\tAmountToFill: string;\r\n}\r\n\r\n/**\r\n * Use to add an item to the specified session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface AddCartItemDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** The ID of the product to add */\r\n\tProductID: number;\r\n\t/** The quantity of the product to add */\r\n\tQuantity: number;\r\n\t/** Cart Item Serializable JSON Attributes */\r\n\tSerializableAttributes?: SerializableAttributesDictionary;\r\n\t/** Shipment to add to item */\r\n\tTargets?: Array<salesitemtargetbasemodel>;\r\n\t/** [Optional] */\r\n\tForceUniqueLineItemKey?: string;\r\n}\r\n\r\n/**\r\n * Use to add multiple items to the specified session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface AddCartItemsDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** Cart items to add */\r\n\tItems: Array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;;\r\n}\r\n\r\n/**\r\n * Use to add an item to the compare cart for the current user (or anon)\r\n * @see {@link ImplementsCartLookupForStorefrontBase}\r\n * @public\r\n */\r\nexport interface AddCompareCartItemDto extends ImplementsCartLookupForStorefrontBase {\r\n\t/** The ID of the product to add */\r\n\tProductID: number;\r\n\t/** Cart Item Serializable JSON Attributes */\r\n\tSerializableAttributes?: SerializableAttributesDictionary;\r\n}\r\n\r\n/**\r\n * Use to add an item to the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface AddStaticCartItemDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** The ID of the product to add */\r\n\tProductID: number;\r\n\t/** The quantity of the product to add (Only applicable to Notify Me When In Stock static cart */\r\n\tQuantity: number;\r\n\t/** Cart Item Serializable JSON Attributes */\r\n\tSerializableAttributes?: SerializableAttributesDictionary;\r\n}\r\n\r\n/**\r\n * Use to add a Lot to the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n * @see {@link ImplementsTypeNameBase}\r\n * @public\r\n */\r\nexport interface AddStaticCartLotDto extends ImplementsTypeNameBase {\r\n\t/** The ID of the lot to add */\r\n\tLotID: number;\r\n\t/** The quantity of the product to add (Only applicable to Notify Me When In Stock static cart */\r\n\tQuantity: number;\r\n}\r\n\r\n/**\r\n * Use to get shipping rates for the current cart.\r\n * @public\r\n */\r\nexport interface ApplyCurrentCartShippingRateQuoteDto {\r\n\t/** The type name of the session cart to apply the selected rate quote to. */\r\n\tTypeName: string;\r\n\t/** The Key of the rate quote to select. Send null to un-assign the current rate quote. */\r\n\tRateQuoteID?: number;\r\n\t/** The requested ship by date from the Customer. */\r\n\tRequestedShipDate?: Date;\r\n}\r\n\r\n/**\r\n * Parse excel file and add item to temp cart\r\n * @public\r\n */\r\nexport interface BulkOrderDto {\r\n\t/** File name to be imported */\r\n\tFileName: string;\r\n\t/** Cart type to add items to */\r\n\tCartType: string;\r\n\t/** ID of the Vendor */\r\n\tVendorID: number;\r\n}\r\n\r\n/**\r\n * Use to clear a specific session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface ClearCurrentCartDto extends ImplementsTypeNameForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to get shipping rates for the current cart.\r\n * @public\r\n */\r\nexport interface ClearCurrentCartShippingRateQuoteDto {\r\n\t/** The type name of the session cart to clear the selected rate quote from. */\r\n\tTypeName: string;\r\n}\r\n\r\n/**\r\n * Use to clear a specific compare cart for the current user (or anon)\r\n * @see {@link ImplementsCartLookupForStorefrontBase}\r\n * @public\r\n */\r\nexport interface ClearCurrentCompareCartDto extends ImplementsCartLookupForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to clear a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n * @see {@link ImplementsTypeNameBase}\r\n * @public\r\n */\r\nexport interface ClearCurrentStaticCartDto extends ImplementsTypeNameBase {\r\n}\r\n\r\n/**\r\n * Create a custom cart type assigned to the current user (custom shopping lists).\r\n * @see {@link CartTypeModel}\r\n * @public\r\n */\r\nexport interface CreateCartTypeForCurrentUserDto extends CartTypeModel {\r\n}\r\n\r\n/**\r\n * Use to add the Buffer Sku in a quantity that will allow the requirements to be met for the current session Shopping cart (not available for any other cart types)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartAddBufferFeeDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** Amount to Fee */\r\n\tAmountToFee: string;\r\n}\r\n\r\n/**\r\n * Use to add and validate a discount code to the current user's session cart (Shopping, Quote) (Not available for Static carts or Samples carts)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartAddDiscountDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** Discount Code */\r\n\tCode: string;\r\n}\r\n\r\n/**\r\n * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartClearBillingContactDto extends ImplementsTypeNameForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartClearShippingContactDto extends ImplementsTypeNameForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Get the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartGetShippingContactDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** The Cart ID (requires admin to set) */\r\n\tCartID?: number;\r\n\t/** The User ID (requires admin to set) */\r\n\tUserID?: number;\r\n\t/** The Account ID (requires admin to set) */\r\n\tAccountID?: number;\r\n}\r\n\r\n/**\r\n * Use to remove an Cart Discount Code from the current user's session cart (Shopping, Quote) (Not available for Static carts or Samples carts)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartRemoveDiscountDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** Cart Discount ID */\r\n\tID: number;\r\n}\r\n\r\n/**\r\n * Set the billing contact on the current user's session cart (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartSetBillingContactDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** The Cart ID (requires admin to set) */\r\n\tCartID?: number;\r\n\t/** The User ID (requires admin to set) */\r\n\tUserID?: number;\r\n\t/** The billing contact */\r\n\tBillingContact?: ContactModel;\r\n}\r\n\r\n/**\r\n * Set the shipping contact on the current user's session cart to be the same as billing or not for shipping calculations (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartSetSetSameAsBillingDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** The Cart ID (requires admin to set) */\r\n\tCartID?: number;\r\n\t/** The User ID (requires admin to set) */\r\n\tUserID?: number;\r\n\t/** The flag value */\r\n\tIsSameAsBilling: boolean;\r\n}\r\n\r\n/**\r\n * Set the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface CurrentCartSetShippingContactDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** The Cart ID (requires admin to set) */\r\n\tCartID?: number;\r\n\t/** The User ID (requires admin to set) */\r\n\tUserID?: number;\r\n\t/** The shipping contact */\r\n\tShippingContact?: ContactModel;\r\n}\r\n\r\n/**\r\n * Use to update the current user's session cart (Shopping, Quote, Samples) attributes\r\n * @see {@link CartModel}\r\n * @public\r\n */\r\nexport interface CurrentCartUpdateAttributesDto extends CartModel {\r\n}\r\n\r\n/**\r\n * Delete a custom cart type assigned to the current user (custom shopping lists).\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface DeleteCartTypeForCurrentUserDto extends ImplementsTypeNameForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of cart items\r\n * @see {@link SalesItemBaseSearchModel}\r\n * @public\r\n */\r\nexport interface GetCartItemsDto extends SalesItemBaseSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of cart states\r\n * @see {@link StateSearchModel}\r\n * @public\r\n */\r\nexport interface GetCartStatesDto extends StateSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of cart statuses\r\n * @see {@link StatusSearchModel}\r\n * @public\r\n */\r\nexport interface GetCartStatusesDto extends StatusSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a specific cart type by the name\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface GetCartTypeByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Gets a custom cart type assigned to the current user (custom shopping lists).\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface GetCartTypeForCurrentUserDto extends ImplementsTypeNameForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of cart types\r\n * @see {@link CartTypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetCartTypesDto extends CartTypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a specific session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface GetCurrentCartDto extends ImplementsTypeNameForStorefrontBase {\r\n\tValidate?: boolean;\r\n}\r\n\r\n/**\r\n * Use to access all items in the specified session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface GetCurrentCartItemsDto extends ImplementsTypeNameForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to get shipping rates for the current cart.\r\n * @public\r\n */\r\nexport interface GetCurrentCartShippingRateQuotesDto {\r\n\t/** Cart Type Name */\r\n\tTypeName?: string;\r\n\t/** Adding the Expedited flag will activate the fee and change to target ship by with expedited timeline. */\r\n\tExpedited: boolean;\r\n}\r\n\r\n/**\r\n * Use to get a specific compare cart for the current user (or anon)\r\n * @see {@link ImplementsCartLookupForStorefrontBase}\r\n * @public\r\n */\r\nexport interface GetCurrentCompareCartDto extends ImplementsCartLookupForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to get a specific compare cart for the current user (or anon)\r\n * @see {@link ImplementsCartLookupForStorefrontBase}\r\n * @public\r\n */\r\nexport interface GetCurrentCompareCartItemsDto extends ImplementsCartLookupForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to get a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n * @see {@link ImplementsTypeNameBase}\r\n * @public\r\n */\r\nexport interface GetCurrentStaticCartDto extends ImplementsTypeNameBase {\r\n}\r\n\r\n/**\r\n * Use to access all items in the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n * @see {@link ImplementsTypeNameBase}\r\n * @public\r\n */\r\nexport interface GetCurrentStaticCartItemsDto extends ImplementsTypeNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of the cart types this user has.\r\n * @public\r\n */\r\nexport interface GetCurrentUserCartTypesDto {\r\n\t/** Include Cart Types not created by the User, such as the default Cart, Wish List, etc. Defaults to True if not set */\r\n\tIncludeNotCreated?: boolean;\r\n}\r\n\r\n/**\r\n * Get Excel Spreadsheet headers for mapping\r\n * @public\r\n */\r\nexport interface GetFileHeadersDto {\r\n\t/** File name to be imported */\r\n\tFileName: string;\r\n}\r\n\r\n/**\r\n * Use to deactivate an item from the specified session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface RemoveCartItemByProductIDAndTypeDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** Product ID */\r\n\tProductID: number;\r\n\t/** [Optional] */\r\n\tForceUniqueLineItemKey?: string;\r\n}\r\n\r\n/**\r\n * Removes a Discount from an item in the current user's session cart (Shopping, Quote) (Not available for Static carts or Samples carts)\r\n * @see {@link ImplementsIDOnBodyBase}\r\n * @public\r\n */\r\nexport interface RemoveCartItemDiscountDto extends ImplementsIDOnBodyBase {\r\n}\r\n\r\n/**\r\n * Use to deactivate an item from the compare cart for the current user (or anon)\r\n * @see {@link ImplementsCartLookupForStorefrontBase}\r\n * @public\r\n */\r\nexport interface RemoveCompareCartItemByProductIDDto extends ImplementsCartLookupForStorefrontBase {\r\n}\r\n\r\n/**\r\n * Use to deactivate an item from the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n * @see {@link ImplementsTypeNameBase}\r\n * @public\r\n */\r\nexport interface RemoveStaticCartItemByProductIDAndTypeDto extends ImplementsTypeNameBase {\r\n\t/** Product ID */\r\n\tProductID: number;\r\n\t/** [Optional] */\r\n\tForceUniqueLineItemKey?: string;\r\n}\r\n\r\n/**\r\n * Use to send an email containing the current user's cart items to an email address\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface ShareCurrentCartItemsByEmailDto extends ImplementsTypeNameForStorefrontBase {\r\n\tEmail: string;\r\n}\r\n\r\n/**\r\n * Use to send an email containing the current user's static cart items from the specified type to an email address\r\n * @see {@link ImplementsTypeNameBase}\r\n * @public\r\n */\r\nexport interface ShareStaticCartItemsByEmailDto extends ImplementsTypeNameBase {\r\n\tEmail: string;\r\n}\r\n\r\n/**\r\n * Updates only the Quantity value for the item, overrides any previous value, not trying to adjust by offset. Returns the value supplied unless it needed to be modified for purchasing or stock limits.\r\n * @public\r\n */\r\nexport interface UpdateCartItemQuantityDto {\r\n\t/** The identifier of the cart item to change the quantity value on. */\r\n\tCartItemID: number;\r\n\t/** The new Quantity value to set (actual number, not an offset). */\r\n\tQuantity: number;\r\n\t/** The new Quantity Back-Ordered value to set (actual number, not an offset). */\r\n\tQuantityBackOrdered: number;\r\n\t/** The new Quantity Pre-Sold value to set (actual number, not an offset). */\r\n\tQuantityPreSold: number;\r\n}\r\n\r\n/**\r\n * Use to update multiple items in the specified session cart for the current user (Shopping, Quote, Samples)\r\n * @see {@link ImplementsTypeNameForStorefrontBase}\r\n * @public\r\n */\r\nexport interface UpdateCartItemsDto extends ImplementsTypeNameForStorefrontBase {\r\n\t/** Cart items to update */\r\n\tItems: Array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;;\r\n}\r\n\r\n/**\r\n * Use to update an existing cart type.\r\n * @see {@link CartTypeModel}\r\n * @public\r\n */\r\nexport interface UpdateCartTypeDto extends CartTypeModel {\r\n}\r\n\r\nexport class Shopping {\r\n\t/**\r\n\t * Use to add the Buffer Sku in a quantity that will allow the requirements to be met in the specified session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.AddBufferSkuCartItemDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddBufferSkuCartItem\r\n\t * @path <api root="">/Shopping/CurrentCart/AddBufferSkuCartItem\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<boolean>}\r\n\t * @public\r\n\t */\r\n\tAddBufferSkuCartItem = (routeParams: AddBufferSkuCartItemDto): IHttpPromise<boolean> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"AddBufferSkuCartItem\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to add an item to the specified session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.AddCartItemDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddCartItem\r\n\t * @path <api root="">/Shopping/CurrentCart/Item/Add\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tAddCartItem = (routeParams: AddCartItemDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"Item\", \"Add\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to add multiple items to the specified session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.AddCartItemsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddCartItems\r\n\t * @path <api root="">/Shopping/CurrentCart/Items/Add\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<number>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tAddCartItems = (routeParams: AddCartItemsDto): IHttpPromise<cefactionresponset<array<number>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"Items\", \"Add\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to add an item to the compare cart for the current user (or anon)\r\n\t * @param {@link cef.store.api.AddCompareCartItemDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddCompareCartItem\r\n\t * @path <api root="">/Shopping/CurrentCompareCart/Item/Add\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tAddCompareCartItem = (routeParams: AddCompareCartItemDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCompareCart\", \"Item\", \"Add\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to add an item to the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n\t * @param {@link cef.store.api.AddStaticCartItemDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddStaticCartItem\r\n\t * @path <api root="">/Shopping/CurrentStaticCart/Item/Add\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tAddStaticCartItem = (routeParams: AddStaticCartItemDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"Item\", \"Add\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to add a Lot to the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n\t * @param {@link cef.store.api.AddStaticCartLotDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddStaticCartLot\r\n\t * @path <api root="">/Shopping/CurrentStaticCart/Lot/Add\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tAddStaticCartLot = (routeParams: AddStaticCartLotDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"Lot\", \"Add\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get shipping rates for the current cart.\r\n\t * @param {@link cef.store.api.ApplyCurrentCartShippingRateQuoteDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ApplyCurrentCartShippingRateQuote\r\n\t * @path <api root="">/Shopping/CurrentCart/ShippingRateQuotes/Apply\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tApplyCurrentCartShippingRateQuote = (routeParams: ApplyCurrentCartShippingRateQuoteDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShippingRateQuotes\", \"Apply\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Parse excel file and add item to temp cart\r\n\t * @param {@link cef.store.api.BulkOrderDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Importer.BulkOrder\r\n\t * @path <api root="">/Shopping/Cart/BulkOrder\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tBulkOrder = (routeParams: BulkOrderDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"Cart\", \"BulkOrder\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to clear a specific session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.ClearCurrentCartDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentCart\r\n\t * @path <api root="">/Shopping/CurrentCart/Clear\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tClearCurrentCart = (routeParams?: ClearCurrentCartDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Clear\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get shipping rates for the current cart.\r\n\t * @param {@link cef.store.api.ClearCurrentCartShippingRateQuoteDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentCartShippingRateQuote\r\n\t * @path <api root="">/Shopping/CurrentCart/ShippingRateQuotes/Clear\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tClearCurrentCartShippingRateQuote = (routeParams: ClearCurrentCartShippingRateQuoteDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShippingRateQuotes\", \"Clear\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to clear a specific compare cart for the current user (or anon)\r\n\t * @param {@link cef.store.api.ClearCurrentCompareCartDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentCompareCart\r\n\t * @path <api root="">/Shopping/CurrentCompareCart/Clear\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tClearCurrentCompareCart = (routeParams?: ClearCurrentCompareCartDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentCompareCart\", \"Clear\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to clear a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n\t * @param {@link cef.store.api.ClearCurrentStaticCartDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentStaticCart\r\n\t * @path <api root="">/Shopping/CurrentStaticCart/Clear\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tClearCurrentStaticCart = (routeParams?: ClearCurrentStaticCartDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentStaticCart\", \"Clear\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Create a custom cart type assigned to the current user (custom shopping lists).\r\n\t * @param {@link cef.store.api.CreateCartTypeForCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateCartTypeForCurrentUser\r\n\t * @path <api root="">/Shopping/CurrentUser/CreateCartType\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<carttypemodel>}\r\n\t * @public\r\n\t */\r\n\tCreateCartTypeForCurrentUser = (routeParams?: CreateCartTypeForCurrentUserDto): IHttpPromise<carttypemodel> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentUser\", \"CreateCartType\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to add the Buffer Sku in a quantity that will allow the requirements to be met for the current session Shopping cart (not available for any other cart types)\r\n\t * @param {@link cef.store.api.CurrentCartAddBufferFeeDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartAddBufferFee\r\n\t * @path <api root="">/Shopping/CurrentCart/AddBufferFee\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<boolean>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartAddBufferFee = (routeParams: CurrentCartAddBufferFeeDto): IHttpPromise<boolean> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"AddBufferFee\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to add and validate a discount code to the current user's session cart (Shopping, Quote) (Not available for Static carts or Samples carts)\r\n\t * @param {@link cef.store.api.CurrentCartAddDiscountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartAddDiscount\r\n\t * @path <api root="">/Shopping/CurrentCart/AddDiscount\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartAddDiscount = (routeParams: CurrentCartAddDiscountDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"AddDiscount\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.CurrentCartClearBillingContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartClearBillingContact\r\n\t * @path <api root="">/Shopping/CurrentCart/ClearBillingContact\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartClearBillingContact = (routeParams?: CurrentCartClearBillingContactDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"ClearBillingContact\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.CurrentCartClearShippingContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartClearShippingContact\r\n\t * @path <api root="">/Shopping/CurrentCart/ClearShippingContact\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartClearShippingContact = (routeParams?: CurrentCartClearShippingContactDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"ClearShippingContact\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Get the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.CurrentCartGetShippingContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartGetShippingContact\r\n\t * @path <api root="">/Shopping/CurrentCart/GetShippingContact\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<contactmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tCurrentCartGetShippingContact = (routeParams?: CurrentCartGetShippingContactDto): IHttpPromise<cefactionresponset<contactmodel>&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"GetShippingContact\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to remove an Cart Discount Code from the current user's session cart (Shopping, Quote) (Not available for Static carts or Samples carts)\r\n\t * @param {@link cef.store.api.CurrentCartRemoveDiscountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartRemoveDiscount\r\n\t * @path <api root="">/Shopping/CurrentCart/RemoveDiscount\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartRemoveDiscount = (routeParams: CurrentCartRemoveDiscountDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"RemoveDiscount\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Set the billing contact on the current user's session cart (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.CurrentCartSetBillingContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartSetBillingContact\r\n\t * @path <api root="">/Shopping/CurrentCart/SetBillingContact\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartSetBillingContact = (routeParams?: CurrentCartSetBillingContactDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"SetBillingContact\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Set the shipping contact on the current user's session cart to be the same as billing or not for shipping calculations (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.CurrentCartSetSetSameAsBillingDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartSetSetSameAsBilling\r\n\t * @path <api root="">/Shopping/CurrentCart/SetSameAsBilling\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartSetSetSameAsBilling = (routeParams: CurrentCartSetSetSameAsBillingDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"SetSameAsBilling\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Set the shipping contact on the current user's session cart (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.CurrentCartSetShippingContactDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartSetShippingContact\r\n\t * @path <api root="">/Shopping/CurrentCart/SetShippingContact\r\n\t * @verb PATCH\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartSetShippingContact = (routeParams?: CurrentCartSetShippingContactDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"SetShippingContact\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to update the current user's session cart (Shopping, Quote, Samples) attributes\r\n\t * @param {@link cef.store.api.CurrentCartUpdateAttributesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartUpdateAttributes\r\n\t * @path <api root="">/Shopping/CurrentCart/UpdateAttributes\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tCurrentCartUpdateAttributes = (routeParams?: CurrentCartUpdateAttributesDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.put([\"Shopping\", \"CurrentCart\", \"UpdateAttributes\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Removes a specific cart from the system [Hard-Delete]\r\n\t * @param {@link cef.store.api.DeleteCartByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteCartByID\r\n\t * @path <api root="">/Shopping/Cart/Delete/ID/{ID}\r\n\t * @verb DELETE\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tDeleteCartByID = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"Cart\", \"Delete\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Removes a specific cart type from the system [Hard-Delete]\r\n\t * @param {@link cef.store.api.DeleteCartTypeByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteCartTypeByID\r\n\t * @path <api root="">/Shopping/CartType/Delete/ID/{ID}\r\n\t * @verb DELETE\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tDeleteCartTypeByID = (id: number): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CartType\", \"Delete\", \"ID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Delete a custom cart type assigned to the current user (custom shopping lists).\r\n\t * @param {@link cef.store.api.DeleteCartTypeForCurrentUserDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteCartTypeForCurrentUser\r\n\t * @path <api root="">/Shopping/CurrentUser/DeleteCartType\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tDeleteCartTypeForCurrentUser = (routeParams?: DeleteCartTypeForCurrentUserDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentUser\", \"DeleteCartType\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific cart item\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartItemByID\r\n\t * @path <api root="">/Shopping/CartItem/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<salesitembasemodel<appliedcartitemdiscountmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCartItemByID = (id: number): IHttpPromise<salesitembasemodel<appliedcartitemdiscountmodel>&gt; =&gt;\r\n\t\taxios.get([\"Shopping\", \"CartItem\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of cart items\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartItems\r\n\t * @path <api root="">/Shopping/CartItems\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cartitempagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCartItems = (routeParams?: GetCartItemsDto): IHttpPromise<cartitempagedresults> =&gt;\r\n\t\taxios.get([\"Shopping\", \"CartItems\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of cart states\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartStates\r\n\t * @path <api root="">/Shopping/CartStates\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cartstatepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCartStates = (routeParams?: GetCartStatesDto): IHttpPromise<cartstatepagedresults> =&gt;\r\n\t\taxios.get([\"Shopping\", \"CartStates\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of cart statuses\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartStatuses\r\n\t * @path <api root="">/Shopping/CartStatuses\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cartstatuspagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCartStatuses = (routeParams?: GetCartStatusesDto): IHttpPromise<cartstatuspagedresults> =&gt;\r\n\t\taxios.get([\"Shopping\", \"CartStatuses\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific cart type by the name\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartTypeByName\r\n\t * @path <api root="">/Shopping/CartType/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<carttypemodel>}\r\n\t * @public\r\n\t */\r\n\tGetCartTypeByName = (routeParams?: GetCartTypeByNameDto): IHttpPromise<carttypemodel> =&gt;\r\n\t\taxios.get([\"Shopping\", \"CartType\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Gets a custom cart type assigned to the current user (custom shopping lists).\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartTypeForCurrentUser\r\n\t * @path <api root="">/Shopping/CurrentUser/CartType\r\n\t * @verb GET\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<carttypemodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCartTypeForCurrentUser = (routeParams?: GetCartTypeForCurrentUserDto): IHttpPromise<cefactionresponset<carttypemodel>&gt; =&gt;\r\n\t\taxios.get([\"Shopping\", \"CurrentUser\", \"CartType\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of cart types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartTypes\r\n\t * @path <api root="">/Shopping/CartTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<carttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCartTypes = (routeParams?: GetCartTypesDto): IHttpPromise<carttypepagedresults> =&gt;\r\n\t\taxios.get([\"Shopping\", \"CartTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.GetCurrentCartDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCart\r\n\t * @path <api root="">/Shopping/CurrentCart\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<cartmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentCart = (routeParams?: GetCurrentCartDto): IHttpPromise<cefactionresponset<cartmodel>&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to access all items in the specified session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.GetCurrentCartItemsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCartItems\r\n\t * @path <api root="">/Shopping/CurrentCart/Items\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentCartItems = (routeParams?: GetCurrentCartItemsDto): IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"Items\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get shipping rates for the current cart.\r\n\t * @param {@link cef.store.api.GetCurrentCartShippingRateQuotesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCartShippingRateQuotes\r\n\t * @path <api root="">/Shopping/CurrentCart/ShippingRateQuotes\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<ratequotemodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentCartShippingRateQuotes = (routeParams: GetCurrentCartShippingRateQuotesDto): IHttpPromise<cefactionresponset<array<ratequotemodel>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShippingRateQuotes\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific compare cart for the current user (or anon)\r\n\t * @param {@link cef.store.api.GetCurrentCompareCartDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCompareCart\r\n\t * @path <api root="">/Shopping/CurrentCompareCart\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cartmodel>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentCompareCart = (routeParams?: GetCurrentCompareCartDto): IHttpPromise<cartmodel> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCompareCart\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific compare cart for the current user (or anon)\r\n\t * @param {@link cef.store.api.GetCurrentCompareCartItemsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCompareCartItems\r\n\t * @path <api root="">/Shopping/CurrentCompareCart/Items\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentCompareCartItems = (routeParams?: GetCurrentCompareCartItemsDto): IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCompareCart\", \"Items\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n\t * @param {@link cef.store.api.GetCurrentStaticCartDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStaticCart\r\n\t * @path <api root="">/Shopping/CurrentStaticCart\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cartmodel>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentStaticCart = (routeParams?: GetCurrentStaticCartDto): IHttpPromise<cartmodel> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to access all items in the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n\t * @param {@link cef.store.api.GetCurrentStaticCartItemsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStaticCartItems\r\n\t * @path <api root="">/Shopping/CurrentStaticCart/Items\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentStaticCartItems = (routeParams?: GetCurrentStaticCartItemsDto): IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt; =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"Items\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a list of the cart types this user has.\r\n\t * @param {@link cef.store.api.GetCurrentUserCartTypesDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserCartTypes\r\n\t * @path <api root="">/Shopping/CurrentUser/UsedCartTypes\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<carttypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetCurrentUserCartTypes = (routeParams?: GetCurrentUserCartTypesDto): IHttpPromise<carttypepagedresults> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentUser\", \"UsedCartTypes\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Get Excel Spreadsheet headers for mapping\r\n\t * @param {@link cef.store.api.GetFileHeadersDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Importer.GetFileHeaders\r\n\t * @path <api root="">/Shopping/Cart/GetHeaders\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<bulkorderheadersmodel>}\r\n\t * @public\r\n\t */\r\n\tGetFileHeaders = (routeParams: GetFileHeadersDto): IHttpPromise<bulkorderheadersmodel> =&gt;\r\n\t\taxios.post([\"Shopping\", \"Cart\", \"GetHeaders\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to deactivate a specific cart item by it's identifier (regardless of cart type name or session vs static cart type)\r\n\t * @param {@link cef.store.api.RemoveCartItemByIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCartItemByID\r\n\t * @path <api root="">/Shopping/CurrentCart/Item/Remove/ByID/{ID}\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<boolean>}\r\n\t * @public\r\n\t */\r\n\tRemoveCartItemByID = (id: number): IHttpPromise<boolean> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Item\", \"Remove\", \"ByID\", id].join(\"/\"));\r\n\r\n\t/**\r\n\t * Use to deactivate an item from the specified session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.RemoveCartItemByProductIDAndTypeDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCartItemByProductIDAndType\r\n\t * @path <api root="">/Shopping/CurrentCart/Item/Remove/ByProductIDAndType\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<boolean>}\r\n\t * @public\r\n\t */\r\n\tRemoveCartItemByProductIDAndType = (routeParams: RemoveCartItemByProductIDAndTypeDto): IHttpPromise<boolean> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Item\", \"Remove\", \"ByProductIDAndType\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Removes a Discount from an item in the current user's session cart (Shopping, Quote) (Not available for Static carts or Samples carts)\r\n\t * @param {@link cef.store.api.RemoveCartItemDiscountDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCartItemDiscount\r\n\t * @path <api root="">/Shopping/CurrentCart/Item/Discount/Remove\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRemoveCartItemDiscount = (routeParams?: RemoveCartItemDiscountDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Item\", \"Discount\", \"Remove\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to deactivate an item from the compare cart for the current user (or anon)\r\n\t * @param {@link cef.store.api.RemoveCompareCartItemByProductIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCompareCartItemByProductID\r\n\t * @path <api root="">/Shopping/CurrentCompareCart/Item/Remove/ByProductID/{ProductID}\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRemoveCompareCartItemByProductID = (productID: number, routeParams?: RemoveCompareCartItemByProductIDDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentCompareCart\", \"Item\", \"Remove\", \"ByProductID\", productID].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to deactivate an item from the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\r\n\t * @param {@link cef.store.api.RemoveStaticCartItemByProductIDAndTypeDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveStaticCartItemByProductIDAndType\r\n\t * @path <api root="">/Shopping/CurrentStaticCart/Item/Remove\r\n\t * @verb DELETE\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tRemoveStaticCartItemByProductIDAndType = (routeParams: RemoveStaticCartItemByProductIDAndTypeDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.delete([\"Shopping\", \"CurrentStaticCart\", \"Item\", \"Remove\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tdata: routeParams\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to send an email containing the current user's cart items to an email address\r\n\t * @param {@link cef.store.api.ShareCurrentCartItemsByEmailDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ShareCurrentCartItemsByEmail\r\n\t * @path <api root="">/Shopping/CurrentCart/ShareByEmail\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tShareCurrentCartItemsByEmail = (routeParams: ShareCurrentCartItemsByEmailDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShareByEmail\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to send an email containing the current user's static cart items from the specified type to an email address\r\n\t * @param {@link cef.store.api.ShareStaticCartItemsByEmailDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ShareStaticCartItemsByEmail\r\n\t * @path <api root="">/Shopping/CurrentStaticCart/ShareByEmail\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponse>}\r\n\t * @public\r\n\t */\r\n\tShareStaticCartItemsByEmail = (routeParams: ShareStaticCartItemsByEmailDto): IHttpPromise<cefactionresponse> =&gt;\r\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"ShareByEmail\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Updates only the Quantity value for the item, overrides any previous value, not trying to adjust by offset. Returns the value supplied unless it needed to be modified for purchasing or stock limits.\r\n\t * @param {@link cef.store.api.UpdateCartItemQuantityDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCartItemQuantity\r\n\t * @path <api root="">/Shopping/CurrentCart/Item/UpdateQuantity\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdateCartItemQuantity = (routeParams: UpdateCartItemQuantityDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.put([\"Shopping\", \"CurrentCart\", \"Item\", \"UpdateQuantity\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to update multiple items in the specified session cart for the current user (Shopping, Quote, Samples)\r\n\t * @param {@link cef.store.api.UpdateCartItemsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCartItems\r\n\t * @path <api root="">/Shopping/CurrentCart/Items/Update\r\n\t * @verb PUT\r\n\t * @returns {ng.IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdateCartItems = (routeParams: UpdateCartItemsDto): IHttpPromise<array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;&gt; =&gt;\r\n\t\taxios.put([\"Shopping\", \"CurrentCart\", \"Items\", \"Update\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to update an existing cart type.\r\n\t * @param {@link cef.store.api.UpdateCartTypeDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCartType\r\n\t * @path <api root="">/Shopping/CartType/Update\r\n\t * @verb PUT\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tUpdateCartType = (routeParams?: UpdateCartTypeDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.put([\"Shopping\", \"CartType\", \"Update\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Stores.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tImplementsDisplayNameBase,\r\n\tStoreModel,\r\n\tSiteDomainModel,\r\n\tSiteDomainSearchModel,\r\n\tSiteDomainPagedResults,\r\n\tUserModel,\r\n\tImplementsSeoUrlBase,\r\n\tStoreInventoryLocationsMatrixModel,\r\n\tTypeSearchModel,\r\n\tStoreInventoryLocationTypePagedResults,\r\n\tStoreRegionSearchModel,\r\n\tStoreRegionPagedResults,\r\n\tStoreSearchModel,\r\n\tStorePagedResults,\r\n\tTypeModel,\r\n\tStoreTypePagedResults,\r\n\tStoreUserSearchModel,\r\n\tStoreUserPagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckStoreExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Display Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsDisplayNameBase}\r\n * @public\r\n */\r\nexport interface CheckStoreTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\r\n}\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckStoreTypeExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of site domains\r\n * @see {@link SiteDomainSearchModel}\r\n * @public\r\n */\r\nexport interface GetSiteDomainsDto extends SiteDomainSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a specific store by the SEO URL\r\n * @see {@link ImplementsSeoUrlBase}\r\n * @public\r\n */\r\nexport interface GetStoreBySeoUrlDto extends ImplementsSeoUrlBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of store inventory location types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetStoreInventoryLocationTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Get store regions by store ID\r\n * @see {@link StoreRegionSearchModel}\r\n * @public\r\n */\r\nexport interface GetStoreRegionsByStoreIDDto extends StoreRegionSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of stores\r\n * @see {@link StoreSearchModel}\r\n * @public\r\n */\r\nexport interface GetStoresDto extends StoreSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of store types\r\n * @see {@link TypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetStoreTypesDto extends TypeSearchModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of store users\r\n * @see {@link StoreUserSearchModel}\r\n * @public\r\n */\r\nexport interface GetStoreUsersDto extends StoreUserSearchModel {\r\n}\r\n\r\nexport class Stores {\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreExistsByID\r\n\t * @path <api root="">/Stores/Store/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckStoreExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Stores\", \"Store\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreExistsByKey\r\n\t * @path <api root="">/Stores/Store/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckStoreExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Stores\", \"Store\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreExistsByName\r\n\t * @path <api root="">/Stores/Store/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckStoreExistsByName = (routeParams?: CheckStoreExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Stores\", \"Store\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreTypeExistsByDisplayName\r\n\t * @path <api root="">/Stores/StoreType/Exists/DisplayName\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckStoreTypeExistsByDisplayName = (routeParams?: CheckStoreTypeExistsByDisplayNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreType\", \"Exists\", \"DisplayName\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreTypeExistsByKey\r\n\t * @path <api root="">/Stores/StoreType/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckStoreTypeExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreTypeExistsByName\r\n\t * @path <api root="">/Stores/StoreType/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckStoreTypeExistsByName = (routeParams?: CheckStoreTypeExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreType\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get the current store based on url, sub-domain or sub-folder\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStore\r\n\t * @path <api root="">/Stores/Store/Current\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<storemodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetCurrentStore = (): IHttpPromise<cefactionresponset<storemodel>&gt; =&gt;\r\n\t\taxios.get([\"Stores\", \"Store\", \"Current\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific site domain\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSiteDomainByID\r\n\t * @path <api root="">/Stores/SiteDomain/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<sitedomainmodel>}\r\n\t * @public\r\n\t */\r\n\tGetSiteDomainByID = (id: number): IHttpPromise<sitedomainmodel> =&gt;\r\n\t\taxios.get([\"Stores\", \"SiteDomain\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of site domains\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSiteDomains\r\n\t * @path <api root="">/Stores/SiteDomains\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<sitedomainpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetSiteDomains = (routeParams?: GetSiteDomainsDto): IHttpPromise<sitedomainpagedresults> =&gt;\r\n\t\taxios.get([\"Stores\", \"SiteDomains\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get the Administrator of the Store's User info\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreAdministratorUser\r\n\t * @path <api root="">/Stores/StoreAdministratorUser/{StoreID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<usermodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetStoreAdministratorUser = (storeID: number): IHttpPromise<cefactionresponset<usermodel>&gt; =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreAdministratorUser\", storeID].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific store\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreByID\r\n\t * @path <api root="">/Stores/Store/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<storemodel>}\r\n\t * @public\r\n\t */\r\n\tGetStoreByID = (id: number): IHttpPromise<storemodel> =&gt;\r\n\t\taxios.get([\"Stores\", \"Store\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a specific store by the SEO URL\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreBySeoUrl\r\n\t * @path <api root="">/Stores/Store/SeoUrl\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<storemodel>}\r\n\t * @public\r\n\t */\r\n\tGetStoreBySeoUrl = (routeParams?: GetStoreBySeoUrlDto): IHttpPromise<storemodel> =&gt;\r\n\t\taxios.get([\"Stores\", \"Store\", \"SeoUrl\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get the store that the current user has administrative rights to (limited to store admins)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreInventoryLocationsMatrix\r\n\t * @path <api root="">/Stores/InventoryLocationsMatrix\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<array<storeinventorylocationsmatrixmodel>&gt;&gt;}\r\n\t * @public\r\n\t */\r\n\tGetStoreInventoryLocationsMatrix = (): IHttpPromise<cefactionresponset<array<storeinventorylocationsmatrixmodel>&gt;&gt; =&gt;\r\n\t\taxios.get([\"Stores\", \"InventoryLocationsMatrix\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of store inventory location types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreInventoryLocationTypes\r\n\t * @path <api root="">/Stores/StoreInventoryLocationTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<storeinventorylocationtypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetStoreInventoryLocationTypes = (routeParams?: GetStoreInventoryLocationTypesDto): IHttpPromise<storeinventorylocationtypepagedresults> =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreInventoryLocationTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Get store regions by store ID\r\n\t * @param {@link cef.store.api.GetStoreRegionsByStoreIDDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreRegionsByStoreID\r\n\t * @path <api root="">/Stores/StoreRegions/ByStoreID\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<storeregionpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetStoreRegionsByStoreID = (routeParams?: GetStoreRegionsByStoreIDDto): IHttpPromise<storeregionpagedresults> =&gt;\r\n\t\taxios.post([\"Stores\", \"StoreRegions\", \"ByStoreID\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a list of stores\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStores\r\n\t * @path <api root="">/Stores/Stores\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<storepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetStores = (routeParams?: GetStoresDto): IHttpPromise<storepagedresults> =&gt;\r\n\t\taxios.get([\"Stores\", \"Stores\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific store type\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreTypeByID\r\n\t * @path <api root="">/Stores/StoreType/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<typemodel>}\r\n\t * @public\r\n\t */\r\n\tGetStoreTypeByID = (id: number): IHttpPromise<typemodel> =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of store types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreTypes\r\n\t * @path <api root="">/Stores/StoreTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<storetypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetStoreTypes = (routeParams?: GetStoreTypesDto): IHttpPromise<storetypepagedresults> =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a list of store users\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreUsers\r\n\t * @path <api root="">/Stores/StoreUsers\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<storeuserpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetStoreUsers = (routeParams?: GetStoreUsersDto): IHttpPromise<storeuserpagedresults> =&gt;\r\n\t\taxios.get([\"Stores\", \"StoreUsers\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Structure.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tNoteModel,\r\n\tNoteTypeSearchModel,\r\n\tNoteTypePagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to create a new note.\r\n * @see {@link NoteModel}\r\n * @public\r\n */\r\nexport interface CreateNoteDto extends NoteModel {\r\n}\r\n\r\n/**\r\n * Use to get a list of note types\r\n * @see {@link NoteTypeSearchModel}\r\n * @public\r\n */\r\nexport interface GetNoteTypesDto extends NoteTypeSearchModel {\r\n}\r\n\r\nexport class Structure {\r\n\t/**\r\n\t * Use to create a new note.\r\n\t * @param {@link cef.store.api.CreateNoteDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateNote\r\n\t * @path <api root="">/Structure/Note/Create\r\n\t * @verb POST\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<number>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateNote = (routeParams?: CreateNoteDto): IHttpPromise<cefactionresponset<number>&gt; =&gt;\r\n\t\taxios.post([\"Structure\", \"Note\", \"Create\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Use to get a specific note\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetNoteByID\r\n\t * @path <api root="">/Structure/Note/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<notemodel>}\r\n\t * @public\r\n\t */\r\n\tGetNoteByID = (id: number): IHttpPromise<notemodel> =&gt;\r\n\t\taxios.get([\"Structure\", \"Note\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of note types\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetNoteTypes\r\n\t * @path <api root="">/Structure/NoteTypes\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<notetypepagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetNoteTypes = (routeParams?: GetNoteTypesDto): IHttpPromise<notetypepagedresults> =&gt;\r\n\t\taxios.get([\"Structure\", \"NoteTypes\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.Tracking.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tEndUserEventRequest,\r\n\tEndUserEventResponse,\r\n\tPaging,\r\n\tProductModel,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tCEFActionResponseT,\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Use to create a new page view event along with additional data points as needed (Event, Visit, Visitor)\r\n * @see {@link EndUserEventRequest}\r\n * @public\r\n */\r\nexport interface CreateFullPageViewEventDto extends EndUserEventRequest {\r\n}\r\n\r\n/**\r\n * Get Recently Viewed Products based on Tracking data\r\n * @public\r\n */\r\nexport interface GetRecentlyViewedProductsDto {\r\n\tPaging?: Paging;\r\n}\r\n\r\nexport class Tracking {\r\n\t/**\r\n\t * Use to create a new page view event along with additional data points as needed (Event, Visit, Visitor)\r\n\t * @param {@link cef.store.api.CreateFullPageViewEventDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateFullPageViewEvent\r\n\t * @path <api root="">/Tracking/PageViewEvent/CreateFull\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<cefactionresponset<endusereventresponse>&gt;}\r\n\t * @public\r\n\t */\r\n\tCreateFullPageViewEvent = (routeParams?: CreateFullPageViewEventDto): IHttpPromise<cefactionresponset<endusereventresponse>&gt; =&gt;\r\n\t\taxios.post([\"Tracking\", \"PageViewEvent\", \"CreateFull\"].join(\"/\"), routeParams);\r\n\r\n\t/**\r\n\t * Get Recently Viewed Products based on Tracking data\r\n\t * @param {@link cef.store.api.GetRecentlyViewedProductsDto} routeParams - The route parameters as a Body Object\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRecentlyViewedProducts\r\n\t * @path <api root="">/Tracking/RecentlyViewedProducts\r\n\t * @verb POST\r\n\t * @returns {ng.IHttpPromise<array<productmodel>&gt;}\r\n\t * @public\r\n\t */\r\n\tGetRecentlyViewedProducts = (routeParams?: GetRecentlyViewedProductsDto): IHttpPromise<array<productmodel>&gt; =&gt;\r\n\t\taxios.post([\"Tracking\", \"RecentlyViewedProducts\"].join(\"/\"), routeParams);\r\n}\r\n","/**\r\n * @file _api/cvApi.Vendors.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\nimport axios from \"../axios\";\r\nimport cvApi from \"./cvApi\";\r\n\r\nimport {\r\n\tImplementsNameBase,\r\n\tVendorModel,\r\n\tVendorSearchModel,\r\n\tVendorPagedResults,\r\n} from \"./cvApi._DtoClasses\";\r\n\r\nimport {\r\n\tIHttpPromise\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * Check if this Name exists and return the id if it does (null if it does not)\r\n * @see {@link ImplementsNameBase}\r\n * @public\r\n */\r\nexport interface CheckVendorExistsByNameDto extends ImplementsNameBase {\r\n}\r\n\r\n/**\r\n * Use to get a list of vendors\r\n * @see {@link VendorSearchModel}\r\n * @public\r\n */\r\nexport interface GetVendorsDto extends VendorSearchModel {\r\n}\r\n\r\nexport class Vendors {\r\n\t/**\r\n\t * Check if this ID exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckVendorExistsByID\r\n\t * @path <api root="">/Vendors/Vendor/Exists/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckVendorExistsByID = (id: number): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Vendors\", \"Vendor\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this key exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckVendorExistsByKey\r\n\t * @path <api root="">/Vendors/Vendor/Exists/Key/{Key*}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckVendorExistsByKey = (key: string): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Vendors\", \"Vendor\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Check if this Name exists and return the id if it does (null if it does not)\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckVendorExistsByName\r\n\t * @path <api root="">/Vendors/Vendor/Exists/Name\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<number>}\r\n\t * @public\r\n\t */\r\n\tCheckVendorExistsByName = (routeParams?: CheckVendorExistsByNameDto): IHttpPromise<number> =&gt;\r\n\t\taxios.get([\"Vendors\", \"Vendor\", \"Exists\", \"Name\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n\r\n\t/**\r\n\t * Use to get a specific vendor\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetVendorByID\r\n\t * @path <api root="">/Vendors/Vendor/ID/{ID}\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<vendormodel>}\r\n\t * @public\r\n\t */\r\n\tGetVendorByID = (id: number): IHttpPromise<vendormodel> =&gt;\r\n\t\taxios.get([\"Vendors\", \"Vendor\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\r\n\r\n\t/**\r\n\t * Use to get a list of vendors\r\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetVendors\r\n\t * @path <api root="">/Vendors/Vendors\r\n\t * @verb GET\r\n\t * @priority 1\r\n\t * @returns {ng.IHttpPromise<vendorpagedresults>}\r\n\t * @public\r\n\t */\r\n\tGetVendors = (routeParams?: GetVendorsDto): IHttpPromise<vendorpagedresults> =&gt;\r\n\t\taxios.get([\"Vendors\", \"Vendors\"].join(\"/\"),\r\n\t\t{\r\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\r\n\t\t});\r\n}\r\n","/**\r\n * @file _api/cvApi.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Creates the cvApi singleton\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\nimport { CEFAPI } from \"./cvApi._ServiceClass\";\r\nconst instance = new CEFAPI();\r\nexport default instance;\r\n","/**\r\n * @file _api/cvApi._ServiceClass.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\n\r\n/** Exposes access to the ServiceStack routes */\r\nimport { Accounts } from \"./cvApi.Accounts\";\r\nimport { Advertising } from \"./cvApi.Advertising\";\r\nimport { Attributes } from \"./cvApi.Attributes\";\r\nimport { Auctions } from \"./cvApi.Auctions\";\r\nimport { Authentication } from \"./cvApi.Authentication\";\r\nimport { Brands } from \"./cvApi.Brands\";\r\nimport { Categories } from \"./cvApi.Categories\";\r\nimport { Contacts } from \"./cvApi.Contacts\";\r\nimport { Currencies } from \"./cvApi.Currencies\";\r\nimport { Franchises } from \"./cvApi.Franchises\";\r\nimport { Geography } from \"./cvApi.Geography\";\r\nimport { Globalization } from \"./cvApi.Globalization\";\r\nimport { Inventory } from \"./cvApi.Inventory\";\r\nimport { Invoicing } from \"./cvApi.Invoicing\";\r\nimport { JSConfigs } from \"./cvApi.JSConfigs\";\r\nimport { Manufacturers } from \"./cvApi.Manufacturers\";\r\nimport { Media } from \"./cvApi.Media\";\r\nimport { Messaging } from \"./cvApi.Messaging\";\r\nimport { Ordering } from \"./cvApi.Ordering\";\r\nimport { Payments } from \"./cvApi.Payments\";\r\nimport { Pricing } from \"./cvApi.Pricing\";\r\nimport { Products } from \"./cvApi.Products\";\r\nimport { Providers } from \"./cvApi.Providers\";\r\nimport { Questionnaire } from \"./cvApi.Questionnaire\";\r\nimport { Quoting } from \"./cvApi.Quoting\";\r\nimport { Returning } from \"./cvApi.Returning\";\r\nimport { Reviews } from \"./cvApi.Reviews\";\r\nimport { Sales } from \"./cvApi.Sales\";\r\nimport { Sampling } from \"./cvApi.Sampling\";\r\nimport { Scheduling } from \"./cvApi.Scheduling\";\r\nimport { Shipping } from \"./cvApi.Shipping\";\r\nimport { Shopping } from \"./cvApi.Shopping\";\r\nimport { Stores } from \"./cvApi.Stores\";\r\nimport { Structure } from \"./cvApi.Structure\";\r\nimport { Tracking } from \"./cvApi.Tracking\";\r\nimport { Vendors } from \"./cvApi.Vendors\";\r\n\r\nexport class CEFAPI {\r\n\taccounts: Accounts;\r\n\tadvertising: Advertising;\r\n\tattributes: Attributes;\r\n\tauctions: Auctions;\r\n\tauthentication: Authentication;\r\n\tbrands: Brands;\r\n\tcategories: Categories;\r\n\tcontacts: Contacts;\r\n\tcurrencies: Currencies;\r\n\tfranchises: Franchises;\r\n\tgeography: Geography;\r\n\tglobalization: Globalization;\r\n\tinventory: Inventory;\r\n\tinvoicing: Invoicing;\r\n\tjsConfigs: JSConfigs;\r\n\tmanufacturers: Manufacturers;\r\n\tmedia: Media;\r\n\tmessaging: Messaging;\r\n\tordering: Ordering;\r\n\tpayments: Payments;\r\n\tpricing: Pricing;\r\n\tproducts: Products;\r\n\tproviders: Providers;\r\n\tquestionnaire: Questionnaire;\r\n\tquoting: Quoting;\r\n\treturning: Returning;\r\n\treviews: Reviews;\r\n\tsales: Sales;\r\n\tsampling: Sampling;\r\n\tscheduling: Scheduling;\r\n\tshipping: Shipping;\r\n\tshopping: Shopping;\r\n\tstores: Stores;\r\n\tstructure: Structure;\r\n\ttracking: Tracking;\r\n\tvendors: Vendors;\r\n\tcacheCounter: number;\r\n\t\r\n\tconstructor() {\r\n\t\tthis.accounts = new Accounts();\r\n\t\tthis.advertising = new Advertising();\r\n\t\tthis.attributes = new Attributes();\r\n\t\tthis.auctions = new Auctions();\r\n\t\tthis.authentication = new Authentication();\r\n\t\tthis.brands = new Brands();\r\n\t\tthis.categories = new Categories();\r\n\t\tthis.contacts = new Contacts();\r\n\t\tthis.currencies = new Currencies();\r\n\t\tthis.franchises = new Franchises();\r\n\t\tthis.geography = new Geography();\r\n\t\tthis.globalization = new Globalization();\r\n\t\tthis.inventory = new Inventory();\r\n\t\tthis.invoicing = new Invoicing();\r\n\t\tthis.jsConfigs = new JSConfigs();\r\n\t\tthis.manufacturers = new Manufacturers();\r\n\t\tthis.media = new Media();\r\n\t\tthis.messaging = new Messaging();\r\n\t\tthis.ordering = new Ordering();\r\n\t\tthis.payments = new Payments();\r\n\t\tthis.pricing = new Pricing();\r\n\t\tthis.products = new Products();\r\n\t\tthis.providers = new Providers();\r\n\t\tthis.questionnaire = new Questionnaire();\r\n\t\tthis.quoting = new Quoting();\r\n\t\tthis.returning = new Returning();\r\n\t\tthis.reviews = new Reviews();\r\n\t\tthis.sales = new Sales();\r\n\t\tthis.sampling = new Sampling();\r\n\t\tthis.scheduling = new Scheduling();\r\n\t\tthis.shipping = new Shipping();\r\n\t\tthis.shopping = new Shopping();\r\n\t\tthis.stores = new Stores();\r\n\t\tthis.structure = new Structure();\r\n\t\tthis.tracking = new Tracking();\r\n\t\tthis.vendors = new Vendors();\r\n\t}\r\n}\r\n\r\n","export class Promiser {\r\n  promises: any;\r\n\r\n  results: any;\r\n\r\n  constructor() {\r\n    this.promises = {};\r\n    this.results = {};\r\n  }\r\n\r\n  resolve<t>(key: string, promiser: () =&gt; Promise<t>, cacheResult: boolean = true): Promise<t> {\r\n    // Check if the given key has a cached result already\r\n    if (Object.hasOwn(this.results, key)) {\r\n      return Promise.resolve(this.results[key]);\r\n    }\r\n    // If not, check if there is an existing promise to generate the result\r\n    if (!this.promises[key]) {\r\n      // If no promise exists, create it from the promiser method passed in\r\n      this.promises[key] = promiser().then(r =&gt; {\r\n        // Once the promise completes, store the result into the promiser if requested (default true)\r\n        if (cacheResult) {\r\n          this.results[key] = r;\r\n        }\r\n        // Remove the cached promise\r\n        delete this.promises[key];\r\n        return r;\r\n      });\r\n    }\r\n    // Return the promise for the given key\r\n    return this.promises[key];\r\n  }\r\n\r\n  flush(key?: string | RegExp): void {\r\n    if (!key) {\r\n      // If no key, flush all results\r\n      this.results = {};\r\n      return;\r\n    }\r\n    if (!(key instanceof RegExp)) {\r\n      // Clear a specific key\r\n      delete this.results[key];\r\n      return;\r\n    }\r\n    // Clear any key that matches the regex\r\n    const keys = Object.keys(this.results);\r\n    for (const resultKey of keys) {\r\n      if (key.test(resultKey)) {\r\n        delete this.results[resultKey];\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nconst instance = new Promiser();\r\nexport default instance;\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { RootState } from \"src/_redux/store\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport axios from \"src/axios\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport promiser from \"src/_shared/Promiser\";\r\n\r\ninterface ICefConfigSliceState {\r\n  value: CEFConfig | null;\r\n}\r\n\r\nexport const cefConfigSlice = createSlice({\r\n  name: \"cefConfig\",\r\n  initialState: {\r\n    value: null,\r\n  } as ICefConfigSliceState,\r\n  reducers: {\r\n    setCefConfig: (state, action: PayloadAction<cefconfig>) =&gt; {\r\n      state.value = action.payload;\r\n    }\r\n  }\r\n});\r\n\r\nexport const { setCefConfig } = cefConfigSlice.actions;\r\nexport const useCefConfig = (): CEFConfig | null =&gt; {\r\n  const cefConfig = useSelector((state: RootState) =&gt; state.cefConfig.value);\r\n  const dispatch = useDispatch();\r\n\r\n  useEffect(() =&gt; {\r\n    if (cefConfig === null) {\r\n      // @ts-ignore\r\n      const fromDoc = document.cefConfig as CEFConfig;\r\n      if (fromDoc) {\r\n        // Set the axios base URL from cef config API values\r\n        axios.defaults.baseURL = corsLink(\r\n          fromDoc,\r\n          \"\",\r\n          \"api\"\r\n        );\r\n        dispatch(setCefConfig(fromDoc));\r\n        // Now that the API is configured, we can load the cache counter\r\n        promiser.resolve(\r\n          \"loadCacheCounter\",\r\n          () =&gt; cvApi.jsConfigs.GetCacheCounter()\r\n            .then(r =&gt; r.data)\r\n            .catch(() =&gt; 0)\r\n            .then(counter =&gt; {\r\n              cvApi.cacheCounter = counter;\r\n              return counter;\r\n            })\r\n        );\r\n      }\r\n    }\r\n  }, [ cefConfig ]);\r\n\r\n  return cefConfig;\r\n};\r\n\r\nexport default cefConfigSlice.reducer;\r\n","/* eslint-disable arrow-body-style */\r\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { useEffect } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { UserModel } from \"src/_api/cvApi.shared\";\r\nimport { AccountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\r\nimport { RootState, WithLoading } from \"src/_redux/store\";\r\n\r\ninterface IAuthSliceState {\r\n  currentUser: WithLoading<usermodel>;\r\n  currentAccount: WithLoading<accountmodel>;\r\n}\r\n\r\nexport const authSlice = createSlice({\r\n  name: \"auth\",\r\n  initialState: {\r\n    currentUser: { Loading: true },\r\n    currentAccount: { Loading: true },\r\n  } as IAuthSliceState,\r\n  reducers: {\r\n    logout: state =&gt; {\r\n      state.currentUser = null;\r\n      state.currentAccount = null;\r\n    },\r\n    setAccount: (state, action: PayloadAction<withloading<accountmodel>&gt;) =&gt; {\r\n      state.currentAccount = action.payload;\r\n    },\r\n    setUser: (state, action: PayloadAction<withloading<usermodel>&gt;) =&gt; {\r\n      state.currentUser = action.payload;\r\n    },\r\n  }\r\n});\r\n\r\nexport const { logout, setUser, setAccount } = authSlice.actions;\r\n\r\nexport const useCurrentUser = (): WithLoading<usermodel> =&gt; {\r\n  const user = useSelector((state: RootState) =&gt; state.auth.currentUser);\r\n  const authFactory = useAuthFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (user.Loading &amp;&amp; authFactory !== null) {\r\n      authFactory.loadCurrentUser();\r\n    }\r\n  }, [ user, authFactory ]);\r\n\r\n  return user;\r\n};\r\n\r\nexport const useCurrentAccount = (): WithLoading<accountmodel> =&gt; {\r\n  const account = useSelector((state: RootState) =&gt; state.auth.currentAccount);\r\n  const authFactory = useAuthFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (account.Loading &amp;&amp; authFactory !== null) {\r\n      authFactory.loadCurrentAccount();\r\n    }\r\n  }, [ account, authFactory ]);\r\n\r\n  return account;\r\n};\r\n\r\nexport default authSlice.reducer;\r\n","export const currencyFormatter = new Intl.NumberFormat(\"en-US\", {\r\n  style: \"currency\",\r\n  currency: \"USD\"\r\n});\r\n\r\nexport const camelCaseToHumanReadable = (name: string): string =&gt; {\r\n  function capitalize(word: string) {\r\n    return word.charAt(0).toUpperCase() + word.substring(1);\r\n  }\r\n  const words = name.match(/[A-Za-z][a-z]*/gu) || [];\r\n  return words.map(capitalize).join(\" \");\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const getObjectFromDotNotation = (str: string, value: any): any =&gt; str\r\n  .split(\".\")\r\n  .reverse()\r\n  .reduce((prevValue, currentValue) =&gt; ({\r\n    [currentValue]: prevValue\r\n  }), value);\r\n\r\nexport const limitWithEllipses = (text: string, limit: number): string =&gt; text.length &gt; limit\r\n  ? `${text.substr(0, limit)}...`\r\n  : text;\r\n","export interface IServiceStrings {\r\n  attributes: {\r\n    shipOption: string;\r\n    selectedStoreID: string;\r\n    shipToHome: string;\r\n    inStorePickup: string;\r\n    shipToStore: string;\r\n  };\r\n  auth: {\r\n    providers: {\r\n      identity: string;\r\n      openIdConnect: string;\r\n      dnnSSO: string;\r\n      cobalt: string;\r\n      logout: string;\r\n    };\r\n    errors: {\r\n      unableToDetectDNNLogin: string;\r\n    };\r\n  };\r\n  carts: {\r\n    types: {\r\n      cart: string;\r\n      quote: string;\r\n      samples: string;\r\n      compare: string;\r\n      notifyMe: string;\r\n      wishList: string;\r\n      favorites: string;\r\n    };\r\n    targetGroupingPrefix: string;\r\n    kinds: {\r\n      session: string;\r\n      compare: string;\r\n      static: string;\r\n    };\r\n    props: {\r\n      hasASelectedRateQuote: string;\r\n    };\r\n  };\r\n  checkout: {\r\n    paymentMethods: {\r\n      ach: string;\r\n      creditCard: string;\r\n      echeck: string;\r\n      free: string;\r\n      invoice: string;\r\n      payoneer: string;\r\n      payPal: string;\r\n      quoteMe: string;\r\n      storeCredit: string;\r\n      wireTransfer: string;\r\n    };\r\n    steps: {\r\n      [key: string]: string;\r\n      billing?: string;\r\n      completed?: string;\r\n      confirmation?: string;\r\n      method?: string;\r\n      payment?: string;\r\n      shipping?: string;\r\n      splitShipping?: string;\r\n      shippingRates?: string;\r\n    };\r\n  };\r\n  cvgrid: {\r\n    filters: {\r\n      id: string,\r\n      input: string,\r\n      autocomplete: string,\r\n      attribute: string,\r\n      select: string,\r\n      boolean: string,\r\n      minmaxnumber: string,\r\n      minmaxdate: string,\r\n    }\r\n  };\r\n  events: {\r\n    account: {\r\n      loaded: string;\r\n      updated: string;\r\n      refreshRoles: string;\r\n    };\r\n    addressBook: {\r\n      added: string;\r\n      deleted: string;\r\n      deleteConfirmed: string;\r\n      deleteCancelled: string;\r\n      editSave: string;\r\n      editCancelled: string;\r\n      loaded: string;\r\n      reset: string;\r\n      resetRegionDropdownNeeded: string;\r\n    };\r\n    associator: {\r\n      added: string;\r\n      removed: string;\r\n    };\r\n    attributes: {\r\n      ready: string;\r\n      changed: string;\r\n    };\r\n    auth: {\r\n      signIn: string;\r\n      signInFailed: string;\r\n      signOut: string;\r\n    };\r\n    carts: {\r\n      updated: string;\r\n      itemAdded: string;\r\n      itemsAdded: string;\r\n      itemRemoved: string;\r\n      cleared: string;\r\n      loaded: string;\r\n      resetTargets: string;\r\n      updateShoppingLists: string;\r\n    };\r\n    catalog: {\r\n      change: string;\r\n      categoryTreeReady: string;\r\n      searchComplete: string;\r\n    };\r\n    chat: {\r\n      newMessage: string;\r\n    };\r\n    checkout: {\r\n      nextStep: string;\r\n    };\r\n    contacts: {\r\n      propertyChanged: string;\r\n    };\r\n    currency: {\r\n      changed: string;\r\n      changeFinished: string;\r\n    };\r\n    grid: {\r\n      built: string;\r\n    };\r\n    invoices: {\r\n      paymentMade: string;\r\n    };\r\n    lang: {\r\n      changed: string;\r\n      changeFinished: string;\r\n    };\r\n    lineItems: {\r\n      updated: string;\r\n    };\r\n    location: {\r\n      updated: string;\r\n    };\r\n    menus: {\r\n      deactivateChildren: string;\r\n      deactivateGroups: string;\r\n      hoverToggleOff: string;\r\n    };\r\n    modals: {\r\n      close: string;\r\n    };\r\n    orders: {\r\n      complete: string;\r\n    };\r\n    paging: {\r\n      searchComplete: string;\r\n    };\r\n    products: {\r\n      detailProductLoaded: string;\r\n      refreshReviews: string;\r\n      selectedVariantChanged: string;\r\n      variantInfoLoaded: string;\r\n    };\r\n    sales: {\r\n      totalsUpdated: string;\r\n    };\r\n    salesQuotes: {\r\n      complete: string;\r\n    };\r\n    shipping: {\r\n      loaded: string;\r\n      rateQuoteSelected: string;\r\n      ready: string;\r\n      revalidateStep: string;\r\n      setSelectedRateQuoteID: string;\r\n      unready: string;\r\n    };\r\n    signalR: {\r\n      sendMaxAutoBidAsync: string;\r\n      receiveMaxAutoBid: string;\r\n      sendQuickBidAsync: string;\r\n      receiveQuickBid: string;\r\n    };\r\n    states: {\r\n      loaded: string;\r\n    };\r\n    statuses: {\r\n      loaded: string;\r\n    };\r\n    stores: {\r\n      selectionUpdate: string;\r\n      nearbyUpdate: string;\r\n      cleared: string;\r\n      ready: string;\r\n    };\r\n    types: {\r\n      loaded: string;\r\n    };\r\n    users: {\r\n      importedToAccount: string;\r\n      updated: string;\r\n      refreshRoles: string;\r\n    };\r\n    wallet: {\r\n      loaded: string;\r\n      updated: string;\r\n    };\r\n  };\r\n  modalSizes: {\r\n    xl: \"xl\";\r\n    lg: \"lg\";\r\n    md: \"md\";\r\n    sm: \"sm\";\r\n  };\r\n  redux: {\r\n    actionTypes: {\r\n      cart: {\r\n        setCart: string;\r\n        setMessages: string;\r\n        setLoading: string;\r\n      };\r\n      cefConfig: {\r\n        setCefConfig: string;\r\n      };\r\n      currentAccount: {\r\n        setCurrentAccount: string;\r\n      };\r\n      currentAccountAddressBook: {\r\n        setCurrentAccountAddressBook: string;\r\n      };\r\n      quoteCart: {\r\n        setQuoteCart: string;\r\n        setMessages: string;\r\n        setLoading: string;\r\n      };\r\n      signalR: {\r\n        setSignalRConnection: string;\r\n      };\r\n      staticCarts: {\r\n        setFavoritesList: string;\r\n        setWishList: string;\r\n        setNotifyMeList: string;\r\n        setProductAlertList: string;\r\n        setWatchList: string;\r\n        setCompareList: string;\r\n        setShoppingLists: string;\r\n      };\r\n      currentUser: {\r\n        logUserIn: string;\r\n        logUserOut: string;\r\n        setLoading: string;\r\n      };\r\n      wallet: {\r\n        setWallet: string;\r\n      };\r\n    }\r\n  }\r\n  registration: {\r\n    steps: {\r\n      [key: string]: string;\r\n      addressBook?: string;\r\n      basicInfo?: string;\r\n      completed?: string;\r\n      confirmation?: string;\r\n      custom?: string;\r\n      wallet?: string;\r\n    };\r\n  };\r\n  submitQuote: {\r\n    steps: {\r\n      method: string;\r\n      shipping: string;\r\n      shippingRates: string;\r\n      splitShipping: string;\r\n      confirmation: string;\r\n      completed: string;\r\n    };\r\n  };\r\n  salesQuotes: {\r\n    statuses: {\r\n      submitted: {\r\n        name: string;\r\n        description: string;\r\n      };\r\n      inProcess: {\r\n        name: string;\r\n        description: string;\r\n      };\r\n      processed: {\r\n        name: string;\r\n        description: string;\r\n      };\r\n      approved: {\r\n        name: string;\r\n        description: string;\r\n        confirmTemplate: string;\r\n        actionTitle: string;\r\n        actionTitleAlt: string;\r\n      };\r\n      rejected: {\r\n        name: string;\r\n        description: string;\r\n        confirmTemplate: string;\r\n        actionTitle: string;\r\n      };\r\n      expired: {\r\n        name: string;\r\n        description: string;\r\n      };\r\n      void: {\r\n        name: string;\r\n        description: string;\r\n        confirmTemplate: string;\r\n        actionTitle: string;\r\n      };\r\n    };\r\n  };\r\n  tracking: {\r\n    visitID: string;\r\n    visitKey: string;\r\n    visitorID: string;\r\n    visitorKey: string;\r\n  };\r\n}\r\n\r\nexport const ServiceStrings: IServiceStrings = {\r\n  attributes: {\r\n    inStorePickup: \"InStorePickup\",\r\n    selectedStoreID: \"SelectedStoreID\",\r\n    shipOption: \"ShipOption\",\r\n    shipToHome: \"ShipToHome\",\r\n    shipToStore: \"ShipToStore\"\r\n  },\r\n  auth: {\r\n    providers: {\r\n      cobalt: \"cobalt\",\r\n      dnnSSO: \"dnnSSO\",\r\n      identity: \"identity\",\r\n      logout: \"logout\",\r\n      openIdConnect: \"openId\"\r\n    },\r\n    errors: {\r\n      unableToDetectDNNLogin: \"Unable to detect DNN Login\"\r\n    }\r\n  },\r\n  carts: {\r\n    types: {\r\n      cart: \"Cart\",\r\n      compare: \"Compare Cart\",\r\n      favorites: \"Favorites List\",\r\n      notifyMe: \"Notify Me When In Stock\",\r\n      quote: \"Quote Cart\",\r\n      samples: \"Samples Cart\",\r\n      wishList: \"Wish List\"\r\n    },\r\n    targetGroupingPrefix: \"Target-Grouping-\",\r\n    kinds: {\r\n      session: \"session\",\r\n      compare: \"compare\",\r\n      static: \"static\"\r\n    },\r\n    props: {\r\n      hasASelectedRateQuote: \"hasASelectedRateQuote\"\r\n    }\r\n  },\r\n  checkout: {\r\n    paymentMethods: {\r\n      ach: \"purchasePaymentMethodACH\",\r\n      creditCard: \"purchasePaymentMethodCreditCard\",\r\n      echeck: \"purchasePaymentMethodEcheck\",\r\n      free: \"purchasePaymentMethodFree\",\r\n      invoice: \"purchasePaymentMethodInvoice\",\r\n      payPal: \"purchasePaymentMethodPayPal\",\r\n      payoneer: \"purchasePaymentMethodPayoneer\",\r\n      quoteMe: \"purchasePaymentMethodQuoteMe\",\r\n      storeCredit: \"purchasePaymentMethodStoreCredit\",\r\n      wireTransfer: \"purchasePaymentMethodWireTransfer\"\r\n    },\r\n    steps: {\r\n      billing: \"purchaseStepBilling\",\r\n      completed: \"purchaseStepCompleted\",\r\n      confirmation: \"purchaseStepConfirmation\",\r\n      method: \"purchaseStepMethod\",\r\n      payment: \"purchaseStepPayment\",\r\n      shipping: \"purchaseStepShipping\",\r\n      shippingRates: \"purchaseStepShippingRates\",\r\n      splitShipping: \"purchaseStepSplitShipping\"\r\n    }\r\n  },\r\n  cvgrid: {\r\n    filters: {\r\n      attribute: \"attribute\",\r\n      autocomplete: \"autocomplete\",\r\n      boolean: \"boolean\",\r\n      id: \"id\",\r\n      input: \"input\",\r\n      minmaxdate: \"minmaxdate\",\r\n      minmaxnumber: \"minmaxnumber\",\r\n      select: \"select\"\r\n    }\r\n  },\r\n  events: {\r\n    account: {\r\n      loaded: \"accountLoaded\",\r\n      updated: \"accountUpdated\",\r\n      refreshRoles: \"refreshAccountRoles\"\r\n    },\r\n    addressBook: {\r\n      added: \"addressBookAddedEntry\",\r\n      deleteCancelled: \"addressBookDeleteCancel\",\r\n      deleteConfirmed: \"addressBookDeleteConfirmed\",\r\n      deleted: \"addressBookDeletedEntry\",\r\n      editCancelled: \"addressEditor2Cancel\",\r\n      editSave: \"addressEditor2Save\",\r\n      loaded: \"addressBookLoaded\",\r\n      reset: \"addressBookReset\",\r\n      resetRegionDropdownNeeded: \"addressBookRsetRegionDropdownNeeded\"\r\n    },\r\n    associator: {\r\n      added: \"associatorAdded\",\r\n      removed: \"associatorRemoved\"\r\n    },\r\n    attributes: {\r\n      ready: \"attributesReady\",\r\n      changed: \"jsonAttributesChanged\"\r\n    },\r\n    auth: {\r\n      signIn: \"signIn\",\r\n      signInFailed: \"signInFailed\",\r\n      signOut: \"logoutSuccess\"\r\n    },\r\n    carts: {\r\n      cleared: \"cartCleared\",\r\n      itemAdded: \"cartItemAdded\",\r\n      itemRemoved: \"cartItemRemoved\",\r\n      itemsAdded: \"cartItemsAdded\",\r\n      loaded: \"cartLoaded\",\r\n      resetTargets: \"cartResetTargets\",\r\n      updateShoppingLists: \"updateShoppingLists\",\r\n      updated: \"updateCart\"\r\n    },\r\n    catalog: {\r\n      change: \"searchCatalogChange\",\r\n      categoryTreeReady: \"categoryTreeReady\",\r\n      searchComplete: \"searchCatalogProductsSearchComplete\"\r\n    },\r\n    chat: {\r\n      newMessage: \"newConversationMessage\"\r\n    },\r\n    checkout: {\r\n      nextStep: \"purchaseNextStep\"\r\n    },\r\n    contacts: {\r\n      propertyChanged: \"contactPropertyChanged\"\r\n    },\r\n    currency: {\r\n      changed: \"changeCurrency\",\r\n      changeFinished: \"changeCurrencyFinished\"\r\n    },\r\n    grid: {\r\n      built: \"cvGridBuilt\"\r\n    },\r\n    invoices: {\r\n      paymentMade: \"invoicePaymentOccurred\"\r\n    },\r\n    lang: {\r\n      changed: \"changeLanguage\",\r\n      changeFinished: \"changeLanguageFinished\"\r\n    },\r\n    lineItems: {\r\n      updated: \"lineItemsUpdated\"\r\n    },\r\n    location: {\r\n      updated: \"mapUserLocationUpdate\"\r\n    },\r\n    menus: {\r\n      deactivateChildren: \"childMenusDeactivate\",\r\n      deactivateGroups: \"groupMenusDeactivate\",\r\n      hoverToggleOff: \"menuHoverToggleOffEvent\"\r\n    },\r\n    modals: {\r\n      close: \"closeModal\"\r\n    },\r\n    orders: {\r\n      complete: \"orderCheckoutComplete\"\r\n    },\r\n    paging: {\r\n      searchComplete: \"pagingSearchComplete\"\r\n    },\r\n    products: {\r\n      detailProductLoaded: \"productDetailProductLoaded\",\r\n      refreshReviews: \"refreshReviews\",\r\n      selectedVariantChanged: \"productDetailSelectedVariantChanged\",\r\n      variantInfoLoaded: \"variantInfoLoaded\"\r\n    },\r\n    sales: {\r\n      totalsUpdated: \"totalsUpdated\"\r\n    },\r\n    salesQuotes: {\r\n      complete: \"quoteSubmitComplete\"\r\n    },\r\n    shipping: {\r\n      loaded: \"loadShippingRateQuotesComplete\",\r\n      rateQuoteSelected: \"shippingRateQuoteSelected\",\r\n      ready: \"readyToLoadShippingRateQuotes\",\r\n      revalidateStep: \"revalidateShippingStep\",\r\n      setSelectedRateQuoteID: \"setSelectedRateQuoteID\",\r\n      unready: \"unreadyToLoadShippingRateQuotes\"\r\n    },\r\n    signalR: {\r\n      sendMaxAutoBidAsync: \"SendMaxAutoBidAsync\",\r\n      receiveMaxAutoBid: \"ReceiveMaxAutoBid\",\r\n      sendQuickBidAsync: \"SendQuickBidAsync\",\r\n      receiveQuickBid: \"ReceiveQuickBid\"\r\n    },\r\n    states: {\r\n      loaded: \"stateLoaded\"\r\n    },\r\n    statuses: {\r\n      loaded: \"statusLoaded\"\r\n    },\r\n    stores: {\r\n      selectionUpdate: \"globalStoreSelectionUpdate\",\r\n      nearbyUpdate: \"globalNearbyStoresUpdate\",\r\n      cleared: \"userSelectedStoreCleared\",\r\n      ready: \"storesReady\"\r\n    },\r\n    types: {\r\n      loaded: \"typeLoaded\"\r\n    },\r\n    users: {\r\n      importedToAccount: \"usersImportedToAccount\",\r\n      updated: \"userUpdated\",\r\n      refreshRoles: \"refreshUserRoles\"\r\n    },\r\n    wallet: {\r\n      loaded: \"walletLoaded\",\r\n      updated: \"walletUpdated\"\r\n    }\r\n  },\r\n  modalSizes: {\r\n    xl: \"xl\",\r\n    lg: \"lg\",\r\n    md: \"md\",\r\n    sm: \"sm\"\r\n  },\r\n  redux: {\r\n    actionTypes: {\r\n      cart: {\r\n        setCart: \"setCart\",\r\n        setMessages: \"setCartMessages\",\r\n        setLoading: \"setCartLoading\"\r\n      },\r\n      cefConfig: {\r\n        setCefConfig: \"setCefConfig\"\r\n      },\r\n      currentAccount: {\r\n        setCurrentAccount: \"setCurrentAccount\"\r\n      },\r\n      currentAccountAddressBook: {\r\n        setCurrentAccountAddressBook: \"setCurrentAccountAddressBook\"\r\n      },\r\n      currentUser: {\r\n        logUserIn: \"logUserIn\",\r\n        logUserOut: \"logUserOut\",\r\n        setLoading: \"setUserLoading\"\r\n      },\r\n      quoteCart: {\r\n        setQuoteCart: \"setQuoteCart\",\r\n        setMessages: \"setQuoteCartMessages\",\r\n        setLoading: \"setQuoteCartLoading\"\r\n      },\r\n      signalR: {\r\n        setSignalRConnection: \"setSignalRConnection\"\r\n      },\r\n      staticCarts: {\r\n        setCompareList: \"setCompareList\",\r\n        setFavoritesList: \"setFavoritesList\",\r\n        setNotifyMeList: \"setNotifyMeList\",\r\n        setProductAlertList: \"setProductAlertList\",\r\n        setShoppingLists: \"setShoppingLists\",\r\n        setWatchList: \"setWatchList\",\r\n        setWishList: \"setWishList\"\r\n      },\r\n      wallet: {\r\n        setWallet: \"setWallet\"\r\n      }\r\n    }\r\n  },\r\n  registration: {\r\n    steps: {\r\n      addressBook: \"registrationStepAddressBook\",\r\n      basicInfo: \"registrationStepBasicInfo\",\r\n      completed: \"registrationStepCompleted\",\r\n      confirmation: \"registrationStepConfirmation\",\r\n      custom: \"registrationStepCustom\",\r\n      wallet: \"registrationStepWallet\"\r\n    }\r\n  },\r\n  salesQuotes: {\r\n    statuses: {\r\n      approved: {\r\n        actionTitle: \"ui.storefront.SalesQuoteStatuses.Approve.ActionTitle\",\r\n        // Approve and Pay\r\n        actionTitleAlt: \"ui.storefront.SalesQuoteStatuses.Approve.ActionTitleAlt\",\r\n        confirmTemplate: \"ui.storefront.SalesQuoteStatuses.Approved.Confirm.Template\",\r\n        description: \"ui.storefront.SalesQuoteStatuses.Approved.Description\",\r\n        name: \"ui.storefront.SalesQuoteStatuses.Approved\"\r\n      },\r\n      expired: {\r\n        name: \"ui.storefront.SalesQuoteStatuses.Expired\",\r\n        description: \"ui.storefront.SalesQuoteStatuses.Expired.Description\"\r\n      },\r\n      inProcess: {\r\n        name: \"ui.storefront.SalesQuoteStatuses.InProcess\",\r\n        description: \"ui.storefront.SalesQuoteStatuses.InProcess.Description\"\r\n      },\r\n      processed: {\r\n        name: \"ui.storefront.SalesQuoteStatuses.Processed\",\r\n        description: \"ui.storefront.SalesQuoteStatuses.Processed.Description\"\r\n      },\r\n      rejected: {\r\n        name: \"ui.storefront.SalesQuoteStatuses.Rejected\",\r\n        description: \"ui.storefront.SalesQuoteStatuses.Rejected.Description\",\r\n        confirmTemplate: \"ui.storefront.SalesQuoteStatuses.Rejected.Confirm.Template\",\r\n        actionTitle: \"ui.storefront.SalesQuoteStatuses.Reject.ActionTitle\"\r\n      },\r\n      submitted: {\r\n        name: \"ui.storefront.SalesQuoteStatuses.Submitted\",\r\n        description: \"ui.storefront.SalesQuoteStatuses.Submitted.Description\"\r\n      },\r\n      void: {\r\n        name: \"ui.storefront.SalesQuoteStatuses.Void\",\r\n        description: \"ui.storefront.SalesQuoteStatuses.Void.Description\",\r\n        confirmTemplate: \"ui.storefront.SalesQuoteStatuses.Void.Confirm.Template\",\r\n        actionTitle: \"ui.storefront.common.Cancel\"\r\n      }\r\n    }\r\n  },\r\n  submitQuote: {\r\n    steps: {\r\n      completed: \"submitQuotePaneCompleted\",\r\n      confirmation: \"submitQuotePaneConfirmation\",\r\n      method: \"submitQuotePaneMethod\",\r\n      shipping: \"submitQuotePaneShipping\",\r\n      shippingRates: \"submitQuotePaneShippingRates\",\r\n      splitShipping: \"submitQuotePaneSplitShipping\"\r\n    }\r\n  },\r\n  tracking: {\r\n    visitID: \"cef_visit_id\",\r\n    visitKey: \"cef_visit_key\",\r\n    visitorID: \"cef_visitor_id\",\r\n    visitorKey: \"cef_visitor_key\"\r\n  }\r\n};\r\n","/**\r\n * @file React/src/_shared/customHooks/useInventoryFactory.tsx\r\n * @author Copyright (c) 2019-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Inventory Factory hook\r\n */\r\nimport { useEffect, useState } from \"react\";\r\nimport { CalculatedInventories, ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport _ from \"lodash\";\r\n\r\nexport interface IInventoryFactory {\r\n  factoryAssign<t extends="" productmodel="" salesitembasemodel<appliedcartitemdiscountmodel="" |="">&gt;\r\n    (product: T): Promise<t>;\r\n  bulkFactoryAssign<t extends="" productmodel="" salesitembasemodel<appliedcartitemdiscountmodel="" |="">&gt;\r\n    (products: T[], dontBuildReadInventoryFunction?: boolean): Promise<t[]>;\r\n  canProductBeAddedToCart<t extends="" productmodel="" salesitembasemodel<appliedcartitemdiscountmodel="" |="">&gt;\r\n    (product: T): boolean;\r\n}\r\n\r\nclass InventoryFactory implements IInventoryFactory {\r\n  // Functions\r\n  private static genBlankInventoryObj(): CalculatedInventories {\r\n    return {\r\n      AllowBackOrder: false,\r\n      AllowPreSale: false,\r\n      IsDiscontinued: false,\r\n      IsOutOfStock: false,\r\n      IsUnlimitedStock: false,\r\n      MaximumBackOrderPurchaseQuantity: null,\r\n      MaximumBackOrderPurchaseQuantityGlobal: null,\r\n      MaximumBackOrderPurchaseQuantityIfPastPurchased: null,\r\n      MaximumPrePurchaseQuantity: null,\r\n      MaximumPrePurchaseQuantityGlobal: null,\r\n      MaximumPrePurchaseQuantityIfPastPurchased: null,\r\n      MaximumPurchaseQuantity: null,\r\n      MaximumPurchaseQuantityIfPastPurchased: null,\r\n      PreSellEndDate: null,\r\n      ProductID: null,\r\n      QuantityAllocated: null,\r\n      QuantityOnHand: null,\r\n      QuantityPreSellable: null,\r\n      QuantityPreSold: null,\r\n      QuantityPresent: null,\r\n      RelevantLocations: null,\r\n      loading: true\r\n    } as CalculatedInventories;\r\n  }\r\n\r\n  factoryAssign\r\n  <t extends="" productmodel="" salesitembasemodel<appliedcartitemdiscountmodel="" |="">&gt;(product: T): Promise<t> {\r\n    return new Promise((resolve, reject) =&gt; {\r\n      if (!this.cefConfig.featureSet.inventory.enabled || _.isFunction(product.readInventory)) {\r\n        resolve(product);\r\n        return;\r\n      }\r\n      // eslint-disable-next-line dot-notation\r\n      product[\"$_rawInventory\"] = InventoryFactory.genBlankInventoryObj();\r\n      // eslint-disable-next-line dot-notation\r\n      product.readInventory = () =&gt; product[\"$_rawInventory\"];\r\n      // TODO: MemCache the results by product ID so we can avoid repeat calls for same product\r\n      let idToUse = 0;\r\n      if ((product as SalesItemBaseModel<appliedcartitemdiscountmodel>).ProductID) {\r\n        idToUse = (product as SalesItemBaseModel<appliedcartitemdiscountmodel>).ProductID;\r\n      } else {\r\n        idToUse = (product as ProductModel).ID;\r\n      }\r\n      cvApi.providers.CalculateInventory(idToUse).then(r =&gt; {\r\n        if (!r?.data?.ActionSucceeded) {\r\n          console.error(r.data);\r\n          reject(r.data);\r\n          return;\r\n        }\r\n        // eslint-disable-next-line dot-notation\r\n        let inventory = product[\"$_rawInventory\"] as CalculatedInventories;\r\n        if (!inventory) {\r\n          inventory = { loading: true } as any;\r\n        }\r\n        const {\r\n          ProductID,\r\n          IsDiscontinued,\r\n          IsUnlimitedStock,\r\n          IsOutOfStock,\r\n          QuantityPresent,\r\n          QuantityAllocated,\r\n          QuantityOnHand,\r\n          MaximumPurchaseQuantity,\r\n          MaximumPurchaseQuantityIfPastPurchased,\r\n          AllowBackOrder,\r\n          MaximumBackOrderPurchaseQuantity,\r\n          MaximumBackOrderPurchaseQuantityIfPastPurchased,\r\n          MaximumBackOrderPurchaseQuantityGlobal,\r\n          AllowPreSale,\r\n          PreSellEndDate,\r\n          QuantityPreSellable,\r\n          QuantityPreSold,\r\n          MaximumPrePurchaseQuantity,\r\n          MaximumPrePurchaseQuantityIfPastPurchased,\r\n          MaximumPrePurchaseQuantityGlobal,\r\n          RelevantLocations\r\n        } = r.data.Result;\r\n        // Assign updated values\r\n        /*\r\n         * NOTE: Feature required settings have been run in the server to only assign values\r\n         * That could be valid both globally and on this individual product's level. All\r\n         * variables can be assigned here because they will have the correct flags on them\r\n         * already.\r\n         */\r\n        inventory.ProductID = ProductID;\r\n        inventory.IsDiscontinued = IsDiscontinued;\r\n        inventory.IsUnlimitedStock = IsUnlimitedStock;\r\n        inventory.IsOutOfStock = IsOutOfStock;\r\n        inventory.QuantityPresent = QuantityPresent;\r\n        inventory.QuantityAllocated = QuantityAllocated;\r\n        inventory.QuantityOnHand = QuantityOnHand;\r\n        inventory.MaximumPurchaseQuantity = MaximumPurchaseQuantity;\r\n        inventory.MaximumPurchaseQuantityIfPastPurchased = MaximumPurchaseQuantityIfPastPurchased;\r\n        inventory.AllowBackOrder = AllowBackOrder;\r\n        inventory.MaximumBackOrderPurchaseQuantity = MaximumBackOrderPurchaseQuantity;\r\n        inventory.MaximumBackOrderPurchaseQuantityIfPastPurchased = MaximumBackOrderPurchaseQuantityIfPastPurchased;\r\n        inventory.MaximumBackOrderPurchaseQuantityGlobal = MaximumBackOrderPurchaseQuantityGlobal;\r\n        inventory.AllowPreSale = AllowPreSale;\r\n        inventory.PreSellEndDate = PreSellEndDate;\r\n        inventory.QuantityPreSellable = QuantityPreSellable;\r\n        inventory.QuantityPreSold = QuantityPreSold;\r\n        inventory.MaximumPrePurchaseQuantity = MaximumPrePurchaseQuantity;\r\n        inventory.MaximumPrePurchaseQuantityIfPastPurchased = MaximumPrePurchaseQuantityIfPastPurchased;\r\n        inventory.MaximumPrePurchaseQuantityGlobal = MaximumPrePurchaseQuantityGlobal;\r\n        inventory.RelevantLocations = RelevantLocations;\r\n        // Assign calculated values\r\n        /*\r\n          // PILS Stock (TODO: Rework this with variables for store only stock)\r\n          if (r.data.Result.RelevantLocations &amp;&amp; r.data.Result.RelevantLocations.length &gt; 0\r\n              &amp;&amp; this.cefConfig.featureSet.inventory.advanced.enabled\r\n              &amp;&amp; this.cefConfig.featureSet.stores.enabled\r\n              &amp;&amp; this.cefConfig.featureSet.inventory.advanced.countOnlyThisStoresWarehouseStock) {\r\n              const matrix = this.cvCurrentStoreFactory.getStoreInventoryLocationsMatrixImmediate();\r\n              if (matrix &amp;&amp; matrix.length) {\r\n                  const thisStoresWarehouses = r.data.Result.RelevantLocations\r\n                      .filter(x =&gt; _.some(matrix,\r\n                          y =&gt; y.InternalInventoryLocationKey =\"== \"x.InventoryLocationSectionInventoryLocationKey\r\n                            || y.DistributionCenterInventoryLocationKey\r\n                              === x.InventoryLocationSectionInventoryLocationKey));\r\n                  return _.sumBy(thisStoresWarehouses,\r\n                      x =&gt; (x.Quantity || 0) - (x.QuantityAllocated || 0));\r\n              }\r\n          }\r\n        */\r\n        // Finish\r\n        inventory.loading = false;\r\n        // eslint-disable-next-line dot-notation\r\n        product[\"$_rawInventory\"] = inventory;\r\n        resolve(product);\r\n      });\r\n    });\r\n  }\r\n\r\n  // eslint-disable-next-line max-len\r\n  bulkFactoryAssign<t extends="" productmodel="" salesitembasemodel<appliedcartitemdiscountmodel="" |="">&gt;(products: T[], dontBuildReadInventoryFunction?: boolean): Promise<t[]> {\r\n    if (!this.cefConfig.featureSet.inventory.enabled) {\r\n      return new Promise((resolve, reject) =&gt; {\r\n        resolve(products);\r\n      });\r\n    }\r\n    const debugMsg = \"inventoryFactory.bulkFactoryAssign(products)\";\r\n    if (!products || !products.length) {\r\n      console.warn(\r\n        `${debugMsg} No products provided to check inventory against`\r\n      );\r\n      return new Promise((resolve, reject) =&gt; {\r\n        reject(new Error(\"No products provided to check inventory against\"));\r\n      });\r\n    }\r\n    const processed: T[] = [];\r\n    const toProcess: T[] = [];\r\n    products.forEach(product =&gt; {\r\n      if (_.isFunction(product.readInventory)) {\r\n        processed.push(product);\r\n      } else {\r\n        // eslint-disable-next-line dot-notation\r\n        product[\"$_rawInventory\"] = InventoryFactory.genBlankInventoryObj();\r\n        // TODO: FIX - This value won't serialize in redux on salesItems\r\n        if (!dontBuildReadInventoryFunction) {\r\n          // eslint-disable-next-line dot-notation\r\n          product.readInventory = () =&gt; product[\"$_rawInventory\"];\r\n        }\r\n        toProcess.push(product);\r\n      }\r\n    });\r\n    if (!toProcess.length) {\r\n      return new Promise((resolve, reject) =&gt; {\r\n        resolve(processed);\r\n      });\r\n    }\r\n    return new Promise((resolve, reject) =&gt; {\r\n      let productIDsToUse = [];\r\n      const isSalesItem\r\n        = _.some(products as SalesItemBaseModel<appliedcartitemdiscountmodel>[], x =&gt; x.ProductID);\r\n      if (isSalesItem) {\r\n        productIDsToUse = (toProcess as SalesItemBaseModel<appliedcartitemdiscountmodel>[]).map(x =&gt; x.ProductID);\r\n      } else {\r\n        productIDsToUse = (toProcess as ProductModel[]).map(x =&gt; x.ID);\r\n      }\r\n      cvApi.providers\r\n        .BulkCalculateInventory({\r\n          ProductIDs: productIDsToUse\r\n        })\r\n        .then(r =&gt; {\r\n          if (!r || !r.data || !r.data.ActionSucceeded) {\r\n            console.error(r &amp;&amp; r.data);\r\n            reject(r &amp;&amp; r.data);\r\n            return;\r\n          }\r\n          Object.keys(r.data.Result).forEach(productID =&gt; {\r\n            let found: T = null;\r\n            if (isSalesItem) {\r\n              found = toProcess.find(x =&gt; (x as SalesItemBaseModel<appliedcartitemdiscountmodel>).ProductID\r\n                === Number(productID));\r\n            } else {\r\n              found = toProcess.find(x =&gt; x.ID === Number(productID));\r\n            }\r\n            // eslint-disable-next-line dot-notation\r\n            let inventory = found[\"$_rawInventory\"] as CalculatedInventories;\r\n            if (!inventory) {\r\n              inventory = { loading: true } as any;\r\n            }\r\n            // Assign updated values\r\n            /*\r\n             * NOTE: Feature required settings have been run in the server to only assign values\r\n             * That could be valid both globally and on this individual product's level. All\r\n             * variables can be assigned here because they will have the correct flags on them\r\n             * already.\r\n             */\r\n            const {\r\n              ProductID,\r\n              IsDiscontinued,\r\n              IsUnlimitedStock,\r\n              IsOutOfStock,\r\n              QuantityPresent,\r\n              QuantityAllocated,\r\n              QuantityOnHand,\r\n              MaximumPurchaseQuantity,\r\n              MaximumPurchaseQuantityIfPastPurchased,\r\n              AllowBackOrder,\r\n              MaximumBackOrderPurchaseQuantity,\r\n              MaximumBackOrderPurchaseQuantityIfPastPurchased,\r\n              MaximumBackOrderPurchaseQuantityGlobal,\r\n              AllowPreSale,\r\n              PreSellEndDate,\r\n              QuantityPreSellable,\r\n              QuantityPreSold,\r\n              MaximumPrePurchaseQuantity,\r\n              MaximumPrePurchaseQuantityIfPastPurchased,\r\n              MaximumPrePurchaseQuantityGlobal,\r\n              RelevantLocations\r\n            } = r.data.Result[productID];\r\n            inventory.ProductID = ProductID;\r\n            inventory.IsDiscontinued = IsDiscontinued;\r\n            inventory.IsUnlimitedStock = IsUnlimitedStock;\r\n            inventory.IsOutOfStock = IsOutOfStock;\r\n            inventory.QuantityPresent = QuantityPresent;\r\n            inventory.QuantityAllocated = QuantityAllocated;\r\n            inventory.QuantityOnHand = QuantityOnHand;\r\n            inventory.MaximumPurchaseQuantity = MaximumPurchaseQuantity;\r\n            inventory.MaximumPurchaseQuantityIfPastPurchased = MaximumPurchaseQuantityIfPastPurchased;\r\n            inventory.AllowBackOrder = AllowBackOrder;\r\n            inventory.MaximumBackOrderPurchaseQuantity = MaximumBackOrderPurchaseQuantity;\r\n            inventory.MaximumBackOrderPurchaseQuantityIfPastPurchased = MaximumBackOrderPurchaseQuantityIfPastPurchased;\r\n            inventory.MaximumBackOrderPurchaseQuantityGlobal = MaximumBackOrderPurchaseQuantityGlobal;\r\n            inventory.AllowPreSale = AllowPreSale;\r\n            inventory.PreSellEndDate = PreSellEndDate;\r\n            inventory.QuantityPreSellable = QuantityPreSellable;\r\n            inventory.QuantityPreSold = QuantityPreSold;\r\n            inventory.MaximumPrePurchaseQuantity = MaximumPrePurchaseQuantity;\r\n            inventory.MaximumPrePurchaseQuantityIfPastPurchased = MaximumPrePurchaseQuantityIfPastPurchased;\r\n            inventory.MaximumPrePurchaseQuantityGlobal = MaximumPrePurchaseQuantityGlobal;\r\n            inventory.RelevantLocations = RelevantLocations;\r\n            // Assign calculated values\r\n            /*\r\n            // PILS Stock (TODO: Rework this with variables for store only stock)\r\n            if (r.data.Result.RelevantLocations &amp;&amp; r.data.Result.RelevantLocations.length &gt; 0\r\n                &amp;&amp; this.cefConfig.featureSet.inventory.advanced.enabled\r\n                &amp;&amp; this.cefConfig.featureSet.stores.enabled\r\n                &amp;&amp; this.cefConfig.featureSet.inventory.advanced.countOnlyThisStoresWarehouseStock) {\r\n                const matrix = this.cvCurrentStoreService.getStoreInventoryLocationsMatrixImmediate();\r\n                if (matrix &amp;&amp; matrix.length) {\r\n                    const thisStoresWarehouses = r.data.Result.RelevantLocations\r\n                        .filter(x =&gt; _.some(matrix,\r\n                            y =&gt; y.InternalInventoryLocationKey === x.InventoryLocationSectionInventoryLocationKey\r\n                            || y.DistributionCenterInventoryLocationKey\r\n                              === x.InventoryLocationSectionInventoryLocationKey));\r\n                    return _.sumBy(thisStoresWarehouses,\r\n                        x =&gt; (x.Quantity || 0) - (x.QuantityAllocated || 0));\r\n                }\r\n            }\r\n            */\r\n            // Finish\r\n            inventory.loading = false;\r\n            // eslint-disable-next-line dot-notation\r\n            found[\"$_rawInventory\"] = inventory;\r\n            processed.push(found);\r\n          });\r\n          resolve(processed);\r\n        })\r\n        .catch(reject);\r\n    });\r\n  }\r\n\r\n  canProductBeAddedToCart\r\n  <t extends="" productmodel="" salesitembasemodel<appliedcartitemdiscountmodel="" |="">&gt;(product: T): boolean {\r\n    /*  Product requires inventory to be assigned before calling this in order for it to work */\r\n    if (\r\n      (product as ProductModel).TypeName === \"Variant Master\"\r\n      || !this.cefConfig?.featureSet.inventory.enabled\r\n      || !product.readInventory\r\n    ) {\r\n      return false;\r\n    }\r\n    const productInventory = product.readInventory();\r\n    return !productInventory.IsOutOfStock || productInventory.AllowBackOrder;\r\n  }\r\n\r\n  // Constructor\r\n  // eslint-disable-next-line no-empty-function, no-useless-constructor\r\n  constructor(private readonly cefConfig: CEFConfig) { }\r\n}\r\n\r\nexport const useInventoryFactory = (): IInventoryFactory =&gt; {\r\n  const [ inventoryFactory, setInventoryFactory ] = useState(null);\r\n  const cefConfig = useCefConfig() as CEFConfig;\r\n  useEffect(() =&gt; {\r\n    if (cefConfig === null) {\r\n      return;\r\n    }\r\n    // New up the class from above only once\r\n    const instance = new InventoryFactory(cefConfig);\r\n    setInventoryFactory(instance);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ cefConfig ]);\r\n  return inventoryFactory;\r\n};\r\n","/* eslint-disable sort-keys */\r\n/* eslint-disable arrow-body-style */\r\nimport { useDispatch } from \"react-redux\";\r\nimport { setCartByType, setShoppingLists, useAllCarts } from \"src/_redux/slices/cartSlice\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport { CEFActionResponse, CEFActionResponseT, IHttpPromise, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { AppliedCartItemDiscountModel, CartModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport _ from \"lodash\";\r\n\r\nexport interface ICartFactory {\r\n  addItemToCart: (type: string, productID: number, quantity: number, product?: ProductModel)\r\n    =&gt; Promise<cefactionresponset<number>&gt;;\r\n  addAllItemsToCart:\r\n  (type: string, items: { ProductID: number, Quantity: number }[]) =&gt; Promise<cefactionresponset<number[]>&gt;;\r\n  addItemToStaticCart: (type: string, productID: number, quantity: number) =&gt; Promise<void>;\r\n  removeItemFromCart: (type: string, cartItemID: number) =&gt; Promise<void>;\r\n  removeItemFromStaticCart: (type: string, productID: number) =&gt; Promise<void>;\r\n  addToCompare: (productID: number) =&gt; Promise<void>;\r\n  removeFromCompare: (productID: number) =&gt; Promise<void>;\r\n  clearCompare: () =&gt; Promise<void>;\r\n  addDiscount: (type: string, code: string) =&gt; Promise<cefactionresponse>;\r\n  removeDiscount: (type: string, discount: AppliedCartItemDiscountModel) =&gt; Promise<void>;\r\n  updateItemQuantity: (type: string, cartItemID: number, quantity: number) =&gt; Promise<void>;\r\n  createShoppingList: (name: string) =&gt; Promise<void>;\r\n  reloadCart: (type: string, force?: boolean) =&gt; Promise<cartmodel>;\r\n  reloadShoppingLists: () =&gt; Promise<void>;\r\n  reloadStaticCart: (type: string, force?: boolean) =&gt; Promise<cartmodel>;\r\n  checkIfItemIsInStaticCart: (type: string, productID: number) =&gt; Promise<boolean>;\r\n}\r\n\r\nexport const useCartFactory = (): ICartFactory | null =&gt; {\r\n  const [ cartFactory, setCartFactory ] = useState<icartfactory>(null);\r\n\r\n  const dispatch = useDispatch();\r\n  const cefConfig = useCefConfig();\r\n  const allCarts = useAllCarts();\r\n  const inventoryFactory = useInventoryFactory();\r\n\r\n  const checkIfQuantityExceedsStock = (type: string, quantity: number, product?: ProductModel): boolean =&gt; {\r\n    if (!cefConfig.featureSet.inventory.enabled\r\n      || type === ServiceStrings.carts.types.quote\r\n      || !product?.readInventory) {\r\n      return false;\r\n    }\r\n    const inventory = product.readInventory();\r\n    if (inventory.IsUnlimitedStock) {\r\n      return false;\r\n    }\r\n    const cart: CartModel = allCarts[type];\r\n    const quantityInCart = cart?.SalesItems?.find(x =&gt; x.ProductID === product.ID)?.Quantity ?? 0;\r\n    const totalQuantityDesired = quantityInCart + quantity;\r\n    if (!inventory.AllowBackOrder\r\n      &amp;&amp; (inventory.QuantityOnHand ?? 0) &lt; totalQuantityDesired) {\r\n      return true;\r\n    }\r\n    return false;\r\n  };\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig || !inventoryFactory) {\r\n      return;\r\n    }\r\n    const factory = {\r\n      addItemToCart: (\r\n        type: string,\r\n        productID: number,\r\n        quantity: number,\r\n        product?: ProductModel\r\n      ): Promise<cefactionresponset<number>&gt; =&gt; {\r\n        if (checkIfQuantityExceedsStock(type, quantity, product)) {\r\n          return Promise.reject(new Error(\"Quantity desired exceeds amount available\"));\r\n        }\r\n        return cvApi.shopping\r\n          .AddCartItem({ TypeName: type, ProductID: productID, Quantity: quantity })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Error adding product to cart\" ];\r\n            }\r\n            const result = r.data;\r\n            return factory.reloadCart(type, true).then(() =&gt; result);\r\n          });\r\n      },\r\n\r\n      addAllItemsToCart:\r\n      (type: string, items: { ProductID: number, Quantity: number }[]): Promise<cefactionresponset<number[]>&gt; =&gt; {\r\n        const toSend = items.map(item =&gt; ({\r\n          ...item,\r\n          UnitCorePrice: null,\r\n          ExtendedPrice: null,\r\n          ItemType: null,\r\n          ID: null,\r\n          Active: true,\r\n          CreatedDate: new Date(),\r\n        }));\r\n        return cvApi.shopping\r\n          .AddCartItems({ TypeName: type, Items: toSend })\r\n          .then(r =&gt; {\r\n            const result = r.data;\r\n            return factory.reloadCart(type, true).then(() =&gt; result);\r\n          });\r\n      },\r\n\r\n      addItemToStaticCart: (type: string, productID: number, quantity: number): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .AddStaticCartItem({ TypeName: type, ProductID: productID, Quantity: quantity })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Error adding product to cart\" ];\r\n            }\r\n            return factory.reloadStaticCart(type, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      removeItemFromCart: (type: string, cartItemID: number): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .RemoveCartItemByID(cartItemID)\r\n          .then(() =&gt; {\r\n            return factory.reloadCart(type, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      removeItemFromStaticCart: (type: string, productID: number): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .RemoveStaticCartItemByProductIDAndType({ TypeName: type, ProductID: productID })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Unable to remove from static cart\" ];\r\n            }\r\n            return factory.reloadStaticCart(type, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      addToCompare: (productID: number): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .AddCompareCartItem({ ProductID: productID })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Unable to add to compare cart\" ];\r\n            }\r\n            return factory.reloadCart(ServiceStrings.carts.types.compare, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      removeFromCompare: (productID: number): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .RemoveCompareCartItemByProductID(productID)\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Unable to remove from compare cart\" ];\r\n            }\r\n            return factory.reloadCart(ServiceStrings.carts.types.compare, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      clearCompare: (): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .ClearCurrentCompareCart()\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Unable to clear current compare cart\" ];\r\n            }\r\n            return factory.reloadCart(ServiceStrings.carts.types.compare, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      addDiscount: (type: string, code: string): Promise<cefactionresponse> =&gt; {\r\n        return cvApi.shopping\r\n          .CurrentCartAddDiscount({ TypeName: type, Code: code })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              return r?.data;\r\n            }\r\n            return factory.reloadCart(type, true).then(() =&gt; r?.data);\r\n          });\r\n      },\r\n\r\n      removeDiscount: (type: string, discount: AppliedCartItemDiscountModel): Promise<void> =&gt; {\r\n        // Normally comparing against hard-coded IDs would be a no-no, but these don't actually\r\n        // correspond to records in the database, they're part of an enum.\r\n        const discountType = discount.DiscountTypeID;\r\n        let removeFn: (body: { ID: number, TypeName?: string }) =&gt; IHttpPromise<cefactionresponse>\r\n          = cvApi.shopping.RemoveCartItemDiscount;\r\n        if (discountType === 0 || discountType === 2) {\r\n          removeFn = cvApi.shopping.CurrentCartRemoveDiscount;\r\n        }\r\n        return removeFn({ ID: discount.ID, TypeName: type })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Failed to remove discount from cart\" ];\r\n            }\r\n            return factory.reloadCart(type, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      updateItemQuantity: (type: string, cartItemID: number, quantity: number): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .UpdateCartItemQuantity({\r\n            CartItemID: cartItemID,\r\n            Quantity: quantity,\r\n            QuantityBackOrdered: 0,\r\n            QuantityPreSold: 0,\r\n          })\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Unable to update item quantity\" ];\r\n            }\r\n            return factory.reloadCart(type, true);\r\n          })\r\n          .then();\r\n      },\r\n\r\n      createShoppingList: (name: string): Promise<void> =&gt; {\r\n        return cvApi.shopping\r\n          .CreateCartTypeForCurrentUser({\r\n            Active: true,\r\n            CreatedDate: new Date(),\r\n            ID: 0,\r\n            Name: name\r\n          })\r\n          .then(() =&gt; {\r\n            return Promise.resolve();\r\n          })\r\n          .catch(err =&gt; {\r\n            return Promise.reject(err);\r\n          });\r\n      },\r\n\r\n      reloadSessionCart: (type: string, force?: boolean): Promise<cartmodel> =&gt; {\r\n        if (force) {\r\n          promiser.flush(`loadCart${type}`);\r\n        }\r\n        if (type === ServiceStrings.carts.types.compare) {\r\n          return promiser.resolve(\r\n            `loadCart${type}`,\r\n            () =&gt; cvApi.shopping\r\n              .GetCurrentCompareCart()\r\n              .then(r =&gt; {\r\n                dispatch(setCartByType({ type, cart: r.data }));\r\n                return r.data;\r\n              })\r\n          );\r\n        }\r\n        return promiser.resolve(\r\n          `loadCart${type}`,\r\n          () =&gt; cvApi.shopping\r\n            .GetCurrentCart({ TypeName: type, Validate: true })\r\n            .then(async r =&gt; {\r\n              if (!r?.data?.ActionSucceeded) {\r\n                throw r?.data?.Messages ?? [ \"Unable to retrieve updated cart\" ];\r\n              }\r\n              const resultCopy = { ...r.data.Result };\r\n              if (inventoryFactory &amp;&amp; resultCopy?.SalesItems?.length) {\r\n                resultCopy.SalesItems = await inventoryFactory.bulkFactoryAssign(r.data.Result.SalesItems, true);\r\n              }\r\n              const messages = r?.data?.Messages ?? [];\r\n              const cartValue = { ...resultCopy, Loading: false, Messages: messages };\r\n              dispatch(setCartByType({ type, cart: cartValue }));\r\n              return cartValue;\r\n            })\r\n        );\r\n      },\r\n\r\n      reloadCart: (type: string, force?: boolean): Promise<cartmodel> =&gt; {\r\n        switch (type) {\r\n          case ServiceStrings.carts.types.wishList:\r\n          case ServiceStrings.carts.types.favorites:\r\n          case ServiceStrings.carts.types.samples:\r\n          case ServiceStrings.carts.types.notifyMe: {\r\n            return factory.reloadStaticCart(type, force);\r\n          }\r\n          default: {\r\n            return factory.reloadSessionCart(type, force);\r\n          }\r\n        }\r\n      },\r\n\r\n      reloadShoppingLists: (force?: boolean): Promise<void> =&gt; {\r\n        if (force) {\r\n          promiser.flush(\"shoppingLists\");\r\n        }\r\n        return promiser.resolve(\r\n          \"shoppingLists\",\r\n          () =&gt; cvApi.shopping\r\n            .GetCurrentUserCartTypes({ IncludeNotCreated: false })\r\n            .then(r =&gt; {\r\n              if (!r?.data) {\r\n                throw new Error(\"Unable to load shopping list types\");\r\n              }\r\n              dispatch(setShoppingLists(r.data?.Results));\r\n              return r.data?.Results;\r\n            })\r\n        ).then();\r\n      },\r\n\r\n      reloadStaticCart: (type: string, force?: boolean): Promise<cartmodel> =&gt; {\r\n        if (force) {\r\n          promiser.flush(`loadStaticCart${type}`);\r\n        }\r\n        return promiser.resolve(\r\n          `loadStaticCart${type}`,\r\n          () =&gt; cvApi.shopping\r\n            .GetCurrentStaticCart({ TypeName: type })\r\n            .then(r =&gt; {\r\n              const cartValue = { ...r.data, Loading: false };\r\n              dispatch(setCartByType({ type, cart: cartValue }));\r\n              return cartValue;\r\n            })\r\n        ).then();\r\n      },\r\n\r\n      checkIfItemIsInStaticCart: (type: string, productID: number): Promise<boolean> =&gt; {\r\n        return factory.reloadStaticCart(type)\r\n          .then(cart =&gt; {\r\n            return Boolean(cart?.SalesItems?.find(item =&gt; item.ProductID === productID));\r\n          })\r\n          .catch(() =&gt; false);\r\n      },\r\n    };\r\n    setCartFactory(factory);\r\n  }, [ cefConfig, inventoryFactory ]);\r\n\r\n  return cartFactory;\r\n};\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { useEffect } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { CartModel, CartTypeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { RootState } from \"src/_redux/store\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\ntype ReduxCart = CartModel &amp; { Loading?: boolean, Messages?: string[] };\r\n\r\ninterface IReduxCarts {\r\n  [key: string]: ReduxCart | null;\r\n}\r\n\r\ninterface ICartSliceState {\r\n  carts: IReduxCarts;\r\n  shoppingLists: CartTypeModel[];\r\n}\r\n\r\nexport const cartSlice = createSlice({\r\n  name: \"carts\",\r\n  initialState: {\r\n    carts: {},\r\n    shoppingLists: [],\r\n  } as ICartSliceState,\r\n  reducers: {\r\n    setCartByType: (state, action: PayloadAction&lt;{ type: string, cart: ReduxCart }&gt;) =&gt; {\r\n      state.carts[action.payload.type as keyof IReduxCarts] = action.payload.cart;\r\n    },\r\n\r\n    setShoppingLists: (state, action: PayloadAction<carttypemodel[]>) =&gt; {\r\n      state.shoppingLists = action.payload;\r\n    }\r\n  }\r\n});\r\n\r\nexport const { setCartByType, setShoppingLists } = cartSlice.actions;\r\n\r\nexport const useCart = (type: string): ReduxCart =&gt; {\r\n  const cart = useSelector((state: RootState) =&gt; state.carts.carts[type]);\r\n  const cartFactory = useCartFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cart?.Loading &amp;&amp; cartFactory !== null &amp;&amp; type) {\r\n      cartFactory.reloadCart(type);\r\n    }\r\n  }, [ cart, cartFactory ]);\r\n\r\n  return cart;\r\n};\r\n\r\nexport const useAllCarts = (): IReduxCarts =&gt; useSelector((state: RootState) =&gt; state.carts.carts);\r\n\r\nexport const useShoppingLists = (): CartTypeModel[] =&gt; {\r\n  const list = useSelector((state: RootState) =&gt; state.carts.shoppingLists);\r\n  const currentUser = useCurrentUser();\r\n  const cartFactory = useCartFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (currentUser?.ID &gt; 0 &amp;&amp; cartFactory) {\r\n      cartFactory.reloadShoppingLists();\r\n    }\r\n  }, [ currentUser, cartFactory ]);\r\n\r\n  return list;\r\n};\r\n\r\nexport default cartSlice.reducer;\r\n","/** @format */\r\n\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ninterface IMicroCartProps {\r\n  type: \"Quote Cart\" | \"Cart\";\r\n}\r\n\r\nexport const MicroCart = (props: IMicroCartProps): JSX.Element =&gt; {\r\n  const { type } = props;\r\n  const cefConfig = useCefConfig();\r\n  const cart = useCart(type);\r\n\r\n  const isQuoteCart = type === ServiceStrings.carts.types.quote;\r\n\r\n  if (cefConfig?.featureSet &amp;&amp; !cefConfig.featureSet.carts.enabled) {\r\n    return null;\r\n  }\r\n\r\n  if (isQuoteCart) {\r\n    if (cefConfig?.featureSet?.salesQuotes?.enabled) {\r\n      return (\r\n        <a\r\n \"quotecart\")}="" btn-light="" cefconfig.routes.quotecart.root,="" classname='\"cef-micro-cart' href="{corsLink(cefConfig," nav-link="" one-rem\"\r\n="" py-3="" text-decoration-none="">\r\n          <i classname='\"fal' fa-quote-right="" me-2\"="">\r\n          {\r\n            <span classname='\"ps-1\"'>{`(${cart &amp;&amp; cart.ItemQuantity ? cart.ItemQuantity : 0})`}\r\n            {\" \"}Quotes\r\n            </span>\r\n          }\r\n        \r\n      );\r\n    }\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <a \"cart\")}="" btn-light="" cefconfig?.routes?.cart?.root,="" classname='\"cef-micro-cart' href="{corsLink(cefConfig," nav-link="" one-rem\"\r\n="" py-3="" text-decoration-none="">\r\n      <i classname='\"fal' fa-shopping-cart="" me-2\"="">\r\n      {\r\n        <span classname='\"ps-1\"'>\r\n          {`(${cart &amp;&amp; cart.ItemQuantity ? cart.ItemQuantity : 0}) ${\r\n          cart &amp;&amp; cart.Totals\r\n          ? currencyFormatter.format(cart.Totals.Total)\r\n          : currencyFormatter.format(0.0) }`}\r\n          {\" \"}My Cart\r\n        </span>\r\n      }\r\n    </i></a><i classname='\"fal' fa-shopping-cart="" me-2\"="">\r\n  );\r\n};","import { Table } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { CartTotals } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ninterface ITotalsWidgetProps {\r\n  totals: CartTotals;\r\n  type: \"Cart\" | \"Quote Cart\";\r\n  tableClasses?: string;\r\n  showHeader?: boolean;\r\n  hideShipping?: boolean;\r\n  hideHandling?: boolean;\r\n  hideFees?: boolean;\r\n  hideDiscounts?: boolean;\r\n  hideTaxes?: boolean;\r\n  padAlign?: boolean;\r\n  hasMissingPricing?: boolean;\r\n}\r\n\r\nexport const TotalsWidget = (props: ITotalsWidgetProps): JSX.Element =&gt; {\r\n  const {\r\n    totals,\r\n    tableClasses,\r\n    showHeader,\r\n    hideShipping,\r\n    hideHandling,\r\n    hideFees,\r\n    hideDiscounts,\r\n    hideTaxes,\r\n    padAlign,\r\n    hasMissingPricing,\r\n  } = props;\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n\r\n  if (!totals) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      {hasMissingPricing\r\n        &amp;&amp; <div alert-warning\"="" classname='\"alert'>\r\n          <span>\r\n            Some items in your cart do not have available pricing and will not be included in any estimated totals.\r\n          </span>\r\n        </div>}\r\n      \r\n        \r\n          \r\n          \r\n        \r\n        {showHeader\r\n          &amp;&amp; \r\n            \r\n              \r\n            \r\n          \r\n        }\r\n        \r\n          \r\n            \r\n            \r\n          \r\n          {cefConfig?.featureSet.shipping.enabled &amp;&amp; !hideShipping\r\n            ? \r\n              \r\n              \r\n            \r\n            : null}\r\n          {!hideHandling &amp;&amp; totals.Handling &gt; 0\r\n            ? \r\n              \r\n              \r\n            \r\n            : null}\r\n          {!hideFees &amp;&amp; totals.Fees &gt; 0\r\n            ? \r\n              \r\n              \r\n            \r\n            : null}\r\n          {cefConfig?.featureSet.discounts.enabled &amp;&amp; !hideDiscounts &amp;&amp; totals.Discounts &lt; 0\r\n            ? \r\n              \r\n              \r\n            \r\n            : null}\r\n          {cefConfig?.featureSet.taxes.enabled &amp;&amp; !hideTaxes\r\n            ? \r\n              \r\n              \r\n            \r\n            : null}\r\n        \r\n        \r\n          \r\n            \r\n            <th\r\n ${padalign="" :="" ?="" \"\"}`}\r\n="" \"pe-3\"="" border-medium="" classname="{`big" id='\"cartTotalsWidgetTotal\"' text-end="">\r\n              {currencyFormatter.format(totals.Total)}\r\n            \r\n          </th\r\n>\r\n        \r\n      <table ??="" \"w-100\"}="" classname="{tableClasses" hover\r\n="" size='\"sm\"\r\n'><colgroup></colgroup><colgroup><col classname='\"w-auto\"'/></colgroup><colgroup><col classname='\"w-auto\"'/></colgroup><thead><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"px-3\"="" classname="{`border-medium" colspan="{2}">\r\n                {t(\"ui.storefront.cart.widgets.totalsWidget.Totals\")}\r\n              </th></tr></thead><tbody><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"ps-3\"="" classname="{`border-medium" id='\"MiniCartSubtotalText\"'>\r\n              {t(\"ui.storefront.common.Subtotal\")}\r\n            </th><td ${padalign="" :="" ?="" \"\"}`}="" \"pe-3\"="" classname="{`text-end" id='\"cartTotalsWidgetSubtotal\"'>\r\n              {currencyFormatter.format(totals.SubTotal)}\r\n            </td></tr><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"ps-3\"="" classname="{`border-medium" id='\"CartTotalShippingText\"'>\r\n                {t(\"ui.storefront.common.Shipping\")}\r\n              </th><td ${padalign="" :="" ?="" \"\"}`}="" \"pe-3\"="" classname="{`text-end" id='\"cartTotalsWidgetShipping\"'>\r\n                {currencyFormatter.format(totals.Shipping)}\r\n              </td></tr><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"ps-3\"="" classname="{`border-medium">\r\n                {t(\"ui.storefront.common.Handling\")}\r\n              </th><td ${padalign="" :="" ?="" \"\"}`}="" \"pe-3\"="" classname="{`text-end" id='\"cartTotalsWidgetHandling\"'>\r\n                {currencyFormatter.format(totals.Handling)}\r\n              </td></tr><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"ps-3\"="" classname="{`border-medium">\r\n                {t(\"ui.storefront.common.Fee.Plural\")}\r\n              </th><td ${padalign="" :="" ?="" \"\"}`}="" \"pe-3\"="" classname="{`text-end" id='\"cartTotalsWidgetFees\"'>\r\n                {currencyFormatter.format(totals.Fees)}\r\n              </td></tr><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"ps-3\"="" classname="{`border-medium" id='\"MiniCartDiscountsText\"'>\r\n                {t(\"ui.storefront.common.Discount.Plural\")}\r\n              </th><td ${padalign="" :="" ?="" \"\"}`}="" \"pe-3\"="" classname="{`text-end" id='\"cartTotalsWidgetDiscounts\"'>\r\n                {currencyFormatter.format(totals.Discounts)}\r\n              </td></tr><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"ps-3\"="" classname="{`border-medium" id='\"MiniCartTaxesText\"'>\r\n                {t(\"ui.storefront.cart.Taxes\")}\r\n              </th><td ${padalign="" :="" ?="" \"\"}`}="" \"pe-3\"="" classname="{`text-end" id='\"cartTotalsWidgetTaxes\"'>\r\n                {currencyFormatter.format(totals.Tax)}\r\n              </td></tr></tbody><tfoot><tr><th ${padalign="" :="" ?="" \"\"}`}="" \"ps-3\"="" big="" classname="{`border-medium" id='\"MiniCartTotalText\"'>\r\n              {t(\"ui.storefront.common.Total\")}\r\n            </th></tr></tfoot></table>\r\n    </div>\r\n  );\r\n};\r\n","/**\r\n * @file React/src/_shared/common/ImageWithFallback.tsx\r\n * @author Copyright (c) 2019-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Image with placeholder.jpg as fallback\r\n */\r\nimport { ImgHTMLAttributes, SyntheticEvent, useState } from \"react\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { corsImageLink } from \"src/_shared/common/Cors\";\r\n\r\ninterface IImageWithFallbackProps extends ImgHTMLAttributes<any> {\r\n  // A synthetic property from react\r\n  dispatch?: any;\r\n  kind?: keyof CEFConfig[\"images\"];\r\n  imageResizerParamsBody?: { [key: string]: any };\r\n}\r\n\r\nexport const ImageWithFallback = ({\r\n  src,\r\n  alt,\r\n  dispatch,\r\n  kind,\r\n  imageResizerParamsBody = {\r\n    mode: \"pad\",\r\n    scale: \"both\",\r\n    maxheight: 200,\r\n    maxwidth: 200\r\n  },\r\n  ...props\r\n}: IImageWithFallbackProps): JSX.Element =&gt; {\r\n  const [ imgSrc, setImgSrc ] = useState<string undefined="" |="">(src);\r\n  // This is to prevent infinite image loading if 'corsDefaultImageLink' also fails to load placeholder.jpg\r\n  const [ fallBackError, setFallBackError ] = useState<boolean>(false);\r\n  const cefConfig = useCefConfig();\r\n  const onError = (event: SyntheticEvent<htmlimageelement, event="">) =&gt; {\r\n    if (fallBackError) {\r\n      return null;\r\n    }\r\n    setFallBackError(true);\r\n    // Will cause corsImageLink to fallback to placeholder, see Cors.ts\r\n    return setImgSrc(undefined);\r\n  };\r\n\r\n  return (\r\n    <img\r\n alt="{alt}\r\n" imageresizerparamsbody)}\r\n="" imgsrc,="" kind,="" onerror="{onError}\r\n" src="{corsImageLink(cefConfig," {...props}\r\n="">\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface ITranslateProps {\r\n  translateKey: string;\r\n  attrs?: {\r\n    [key: string]: string;\r\n  };\r\n}\r\n\r\nexport const Translate = (props: ITranslateProps): JSX.Element =&gt; {\r\n  const { translateKey, attrs } = props;\r\n\r\n  const [ assignableAttributes, setAssignableAttributes ] = useState&lt;{ [key: string]: string }&gt;(null);\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() =&gt; {\r\n    if (attrs) {\r\n      buildAssignableAttributes();\r\n    }\r\n  }, [ attrs ]);\r\n\r\n  function buildAssignableAttributes(): void {\r\n    const tempAssignableAttributes: { [key: string]: string } = {};\r\n    for (const attrName in attrs) {\r\n      if (Object.hasOwn(attrs, attrName)) {\r\n        tempAssignableAttributes[attrName] = t(attrs[attrName]);\r\n      }\r\n    }\r\n    setAssignableAttributes(tempAssignableAttributes);\r\n  }\r\n\r\n  return <span {...assignableattributes}="">{t(translateKey)}</span>;\r\n};\r\n","import { Col, Row, Spinner } from \"react-bootstrap\";\r\nimport { SizeProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { Translate } from \"src/_shared/Translate\";\r\n\r\ninterface ILoadingWidgetProps {\r\n  overlay?: boolean;\r\n  padIn?: boolean;\r\n  size?: SizeProp;\r\n  message?: string;\r\n  messageKey?: string;\r\n  classes?: string;\r\n  innerClasses?: string;\r\n}\r\n\r\nexport const LoadingWidget = (props: ILoadingWidgetProps): JSX.Element =&gt; {\r\n  const { overlay, padIn, message, messageKey, classes, innerClasses } = props;\r\n\r\n  let additionalClasses = \"\";\r\n  if (overlay) {\r\n    additionalClasses += `overlay position-absolute align-items-center ay-0 ax-${\r\n      padIn ? \"0\" : \"3\"\r\n    }`;\r\n  }\r\n  if (classes &amp;&amp; typeof classes === \"string\") {\r\n    additionalClasses += ` ${classes}`;\r\n  }\r\n\r\n  return (\r\n    <row 10000="" :="" ?="" \"inherit\",\r\n="" \"inherit\"\r\n="" \"rgba(var(--bs-light-rgb),0.7)\"="" background:="" classname="{additionalClasses}\r\n" overlay="" style="{{\r\n" zindex:="" }}="">\r\n      <col\r\n !innerclasses="" ${!overlay="" ${\r\n="" &&="" :="" ?="" \"\"\r\n="" \"\"}="" \"p-5\"="" classname="{`text-center" innerclasses="" o-100="" xs="{12}\r\n" }`}="">\r\n        {/* @ts-ignore */}\r\n        <spinner animation='\"border\"' size='\"md\"'>\r\n        {messageKey\r\n          &amp;&amp; <p>\r\n            <translate translatekey="{messageKey}">\r\n          </translate></p>\r\n        }\r\n        {message &amp;&amp; <p>{message}</p>}\r\n        {message &amp;&amp; messageKey\r\n          &amp;&amp; <translate translatekey='{\"ui.storefront.common.Loading.Ellipses\"}'>\r\n        }\r\n      \r\n    </translate></spinner></col\r\n></row>\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Modal as BootstrapModal } from \"react-bootstrap\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\n\r\ninterface IModalProps {\r\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n  title?: string;\r\n  titleID?: string;\r\n  showHeader?: boolean;\r\n  onCancel: Function;\r\n  show: boolean;\r\n  children?: React.ReactNode;\r\n  loading?: boolean;\r\n  modalBodyClasses?: string;\r\n}\r\n\r\nexport const Modal = (props: IModalProps): JSX.Element =&gt; {\r\n  const { title, titleID, onCancel, size, show, loading, showHeader, modalBodyClasses } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const onCancelButtonPressed = () =&gt; {\r\n    if (onCancel) {\r\n      onCancel();\r\n    }\r\n  };\r\n\r\n  // NOTE: TS doesn't know \"md\" exists\r\n  return (\r\n    <bootstrapmodal\r\n \"lg\"}\r\n="" as="" contentclassname='\"border-0\"' onhide="{onCancelButtonPressed}\r\n" show="{show}\r\n" size="{size">\r\n      {showHeader\r\n        &amp;&amp; <bootstrapmodal.header\r\n classname='\"bg-dark' closebutton\r\n="" closevariant='\"white\"' rounded-0\"\r\n="" text-light="">\r\n          <h5 ??="" \"\"}="" \"\"}\r\n="" classname='\"modal-title' data-sid="{titleID" id="{titleID" mb-0\"\r\n="" text-capitalize="">\r\n            {title ?? t(\"ui.storefront.common.Message\")}\r\n          </h5>\r\n        \r\n      }\r\n      <bootstrapmodal.body ??="" \"\"}`}="" classname="{`${modalBodyClasses">\r\n        {loading ? <loadingwidget> : props.children}\r\n      </loadingwidget></bootstrapmodal.body>\r\n    \r\n  );\r\n};\r\n\r\nModal.defaultProps = {\r\n  showHeader: true,\r\n  size: \"lg\"\r\n};\r\n","/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { CEFActionError } from \"src/_api/cvApi.shared\";\r\nimport {\r\n  Debounce,\r\n  IHTTPResponse,\r\n  IHTTPResponseT,\r\n  IUseViewStateResult,\r\n  IViewState,\r\n  ViewStateErrorArg\r\n} from \"src/_shared/customHooks/_customHooksTypes\";\r\n\r\ninterface IViewStateSettings {\r\n  debugMode: boolean;\r\n}\r\n\r\nexport const useViewState = (settings?: IViewStateSettings): IUseViewStateResult =&gt; {\r\n  const debugMode = Boolean(settings &amp;&amp; settings.debugMode);\r\n  const [ viewState, setViewState ] = useState<iviewstate>({\r\n    errorMessage: null,\r\n    errorMessages: null,\r\n    hasError: false,\r\n    running: false,\r\n    success: false,\r\n    waitMessage: null\r\n  });\r\n\r\n  const debounce500: Debounce = {\r\n    updateOn: \"default blur\",\r\n    debounce: { default: 500, blur: 0 },\r\n    allowInvalid: false\r\n  };\r\n\r\n  function consoleDebug(...args: unknown[]): void {\r\n    if (debugMode) {\r\n      console.debug(...args);\r\n    }\r\n  }\r\n\r\n  function setRunning(waitMessage: ViewStateErrorArg = null): void {\r\n    let newValue: string | null = null;\r\n    if (waitMessage) {\r\n      if (Object.prototype.toString.call(waitMessage) === \"[object Promise]\") {\r\n        // Wait message is a Promise\r\n        Promise.resolve(waitMessage as Promise<string>).then((msg: string) =&gt; {\r\n          newValue = msg;\r\n        });\r\n      } else if (Object.hasOwn(waitMessage as Error, \"message\")) {\r\n        newValue = (waitMessage as Error).message;\r\n      } else if (typeof waitMessage === \"string\") {\r\n        newValue = waitMessage;\r\n      }\r\n    }\r\n    setViewState({\r\n      ...viewState,\r\n      errorMessage: null,\r\n      errorMessages: null,\r\n      hasError: false,\r\n      running: true,\r\n      success: false,\r\n      waitMessage: newValue\r\n    });\r\n  }\r\n\r\n  function finishRunning(\r\n      hasError = false,\r\n      errorMessage: ViewStateErrorArg | IHTTPResponse | CEFActionError | Error = null,\r\n      errorMessages: string[] | null = null\r\n  ): void {\r\n    let errorMsg = errorMessage;\r\n    if (errorMessage) {\r\n      if (Object.hasOwn(errorMessage as Promise<string>, \"then\")) {\r\n        const errMessagePromise = errorMessage as Promise<string>;\r\n        errMessagePromise.then(value =&gt; {\r\n          errorMsg = value;\r\n        });\r\n      } else if (Object.hasOwn(errorMessage as IHTTPResponse, \"status\")) {\r\n        const asCallbackArg = errorMessage as IHTTPResponseT<any>;\r\n        errorMsg = `${asCallbackArg.status\r\n        }: ${\r\n          // E.g. \"Unauthorized\"\r\n          asCallbackArg.statusText\r\n        }${asCallbackArg.data?.ResponseStatus?.Message\r\n          // \"No active user in session.\"\r\n          ? `: ${asCallbackArg.data.ResponseStatus.Message}`\r\n          : JSON.parse(JSON.stringify(asCallbackArg))}`;\r\n      } else if (errorMessage as Error) {\r\n        const asError = errorMessage as Error;\r\n        errorMsg = asError.message;\r\n      }\r\n    } else if (errorMessages &amp;&amp; errorMessages.length) {\r\n      [ errorMsg ] = errorMessages;\r\n    }\r\n    if (errorMsg) {\r\n      console.error(errorMsg);\r\n    }\r\n    if (hasError &amp;&amp; debugMode) {\r\n      consoleDebug(errorMsg);\r\n    }\r\n    setViewState({\r\n      ...viewState,\r\n      errorMessage: errorMsg,\r\n      errorMessages,\r\n      hasError,\r\n      running: false,\r\n      success: !hasError,\r\n      waitMessage: null\r\n    });\r\n  }\r\n\r\n  return {\r\n    setRunning,\r\n    finishRunning,\r\n    viewState,\r\n    debounce500\r\n  };\r\n};\r\n","import { IFormGroupLabelProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\r\nimport { Form, OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\n\r\nexport const FormGroupLabel = (props: IFormGroupLabelProps): JSX.Element =&gt; {\r\n  const { tooltipText, label, formIdentifier, required } = props;\r\n\r\n  const RenderTooltip = (tooltipProps: any) =&gt; <tooltip {...tooltipprops}="">\r\n    {tooltipText}\r\n  </tooltip>;\r\n\r\n  if (tooltipText) {\r\n    return <overlaytrigger 250,="" 400="" delay="{{" hide:="" overlay="{RenderTooltip}" placement='\"top\"\r\n' show:="" }}\r\n="">\r\n      <form.label htmlfor="{formIdentifier}">\r\n        <span>{label}</span>\r\n        {required ? <span classname='\"text-danger\"'> * </span> : null}\r\n        <span classname='\"text-info\"'>\r\n          <i classname='\"fal' fa-question-circle\"="">\r\n        </i></span><i classname='\"fal' fa-question-circle\"="">\r\n      </i></form.label><i classname='\"fal' fa-question-circle\"="">\r\n    </i></overlaytrigger><i classname='\"fal' fa-question-circle\"="">;\r\n  }\r\n\r\n  return (\r\n    <form.label htmlfor="{formIdentifier}">\r\n      <span>{label}</span>\r\n      {required ? <span classname='\"text-danger\"'> *</span> : null}\r\n    </form.label>\r\n  );\r\n};\r\n","/* eslint-disable max-len */\r\n/* eslint-disable capitalized-comments */\r\nimport { ICardInputFormGroupProps } from \"./_formGroupTypes\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { t } from \"i18next\";\r\nimport { FormGroupLabel } from \"./FormGroupLabel\";\r\nimport cardValidator from \"card-validator\";\r\nimport { CardNumberVerification } from \"card-validator/dist/card-number\";\r\n\r\nexport const CardInputFormGroup = (props : ICardInputFormGroupProps): JSX.Element =&gt; {\r\n  const formIdentifier = \"txtWalletCardNumber\";\r\n  const cardTypeFormIdentifier = \"txtWalletCardType\";\r\n\r\n  const { register, errors, setValue } = props;\r\n  const cardInput = register(formIdentifier, {\r\n    onChange: event =&gt; {\r\n      if (event?.target?.value === undefined) {\r\n        return;\r\n      }\r\n      const valid = cardValidator.number(event.target.value);\r\n      if (valid.isPotentiallyValid &amp;&amp; Boolean(valid.card)) {\r\n        setValue(cardTypeFormIdentifier, valid.card.type);\r\n      }\r\n      setValue(formIdentifier, prettyCardNumber(event.target.value, valid));\r\n    },\r\n    required: {\r\n      value: true,\r\n      message: t(\"ui.storefront.common.validation.ThisFieldIsRequired\")\r\n    },\r\n    validate: {\r\n      isValid: value =&gt; {\r\n        const valid = cardValidator.number(value);\r\n        if (valid.isValid) {\r\n          return true;\r\n        }\r\n        return \"This card number is invalid.\";\r\n      },\r\n      maxLength: value =&gt; {\r\n        if (value?.length &lt;= 24) {\r\n          return true;\r\n        }\r\n        return \"Must not exceed maximum length of 24\";\r\n      },\r\n      minLength: value =&gt; {\r\n        if (value?.length &gt;= 13) {\r\n          return true;\r\n        }\r\n        return \"Must reach minimum length of 13\";\r\n      }\r\n    }\r\n  });\r\n\r\n  return (\r\n    <form.group\r\n classname='\"position-relative' mb-3\"="">\r\n      <formgrouplabel\r\n formidentifier="{formIdentifier}\r\n" label='{t(\"ui.storefront.wallet.walletCard.CardNumber\")}\r\n' required="{true}\r\n">\r\n      <inputgroup>\r\n        <input\r\n ${errors[formidentifier]="" :="" =="" ?="" \"\"}`}\r\n="" \"is-invalid\"="" autocomplete='\"cc-number\"\r\n' classname="{`form-control" excess="" id="{formIdentifier}\r\n" input\r\n="" inputmode='\"numeric\"\r\n' maxlength="{24}\r\n" minlength="{13}\r\n" onchange="{e" prevents="" type='\"tel\"\r\n' {...cardinput}\r\n=""> cardInput.onChange(e)}\r\n          placeholder=\"1234 5678 9012 3456\"\r\n        /&gt;\r\n        <inputgroup.text>\r\n          <i classname='\"fal' fa-credit-card\"="">\r\n        </i></inputgroup.text><i classname='\"fal' fa-credit-card\"="">\r\n        {errors[formIdentifier]\r\n          &amp;&amp; <form.control.feedback type='\"invalid\"'>\r\n            {errors[formIdentifier].message}\r\n          </form.control.feedback>\r\n        }\r\n      </i></input\r\n></inputgroup><i classname='\"fal' fa-credit-card\"="">\r\n    \r\n  );\r\n};\r\n\r\nfunction prettyCardNumber(cardNumber: string, cardNumberVerification: CardNumberVerification): string {\r\n  if (cardNumberVerification.card) {\r\n    const cardNumberToUse = cardNumber.replaceAll(/\\s/gu, \"\");\r\n    const { gaps } = cardNumberVerification.card;\r\n    const offsets = [].concat(0, gaps, cardNumberToUse.length);\r\n    const components = [];\r\n    for (let i = 0; offsets[i] &lt; cardNumberToUse.length; i++) {\r\n      const start = offsets[i];\r\n      const end = Math.min(offsets[i + 1], cardNumberToUse.length);\r\n      components.push(cardNumberToUse.substring(start, end));\r\n    }\r\n    return components.join(\" \");\r\n  }\r\n  return cardNumber;\r\n}\r\n","/** @format */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ICheckboxFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\r\n\r\nexport const CheckboxFormGroup = (props: ICheckboxFormGroupProps): JSX.Element =&gt; {\r\n  const {\r\n    register,\r\n    errors,\r\n    disabled,\r\n    tooltipKey,\r\n    tooltipText,\r\n    // OnBlur seems to be ignored on input\r\n    // TODO: forceTooltipWithFocus,\r\n    inputClass,\r\n    formClasses,\r\n    onBlur,\r\n    onFocus,\r\n    onKeyDown,\r\n    onKeyUp,\r\n    onMouseDown,\r\n    onMouseEnter,\r\n    onMouseLeave,\r\n    onMouseMove,\r\n    onMouseOver,\r\n    onMouseUp,\r\n    extraOnChange,\r\n    // TODO: showValidTooltip,\r\n    hideInvalidTooltip,\r\n    // TODO: failsOn,\r\n    checkboxOptions\r\n  } = props;\r\n\r\n  const [ touched, setTouched ] = useState<boolean>(false);\r\n  const [ tooltipIsOpen, setTooltipIsOpen ] = useState<boolean>(false);\r\n  const [ errorExists, setErrorExists ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n  const relevantFields = checkboxOptions.map(op =&gt; op.identifier);\r\n\r\n  useEffect(() =&gt; {\r\n    if (hideInvalidTooltip) {\r\n      return;\r\n    }\r\n    let willBeError = false;\r\n    for (const field of relevantFields) {\r\n      if (errors[field]) {\r\n        willBeError = true;\r\n        break;\r\n      }\r\n    }\r\n    if (willBeError) {\r\n      setErrorExists(true);\r\n      return;\r\n    }\r\n    setErrorExists(false);\r\n  });\r\n\r\n  const applyHasErrorClass = (): string =&gt; errorExists ? \"has-error\" : \"\";\r\n\r\n  return (\r\n    <form.group ${applyhaserrorclass()}`}="" ${formclasses="" ??="" \"\"}="" classname="{`position-relative" mb-2="">\r\n      {tooltipIsOpen\r\n        ? <div bg-dark="" border="" classname='{\"rounded' form-group-tooltip\"}="" p-2="" small="" text-center="" text-light="" w-25="">\r\n          {t(tooltipKey)}\r\n        </div>\r\n        : null}\r\n      <inputgroup classname='\"d-block\"'>\r\n        {checkboxOptions.map(option =&gt; {\r\n          const { identifier, required, requiredMessage, labelKey, labelText } = option;\r\n          const checkboxInput = register(identifier, {\r\n            required: {\r\n              value: typeof required === \"boolean\" ? required : null,\r\n              message: requiredMessage\r\n            }\r\n          });\r\n          return (\r\n            <form.label\r\n =="" classname='\"control-label' d-flex\"\r\n="" htmlfor="{identifier}\r\n" key="{labelText}\r\n" onmouseenter="{e"> {\r\n                if (tooltipKey || tooltipText) {\r\n                  setTooltipIsOpen(true);\r\n                }\r\n              }}\r\n              onMouseLeave={e =&gt; {\r\n                if (tooltipIsOpen) {\r\n                  setTooltipIsOpen(false);\r\n                }\r\n              }}&gt;\r\n              <form.check\r\n =="" ??="" \"\"}`}\r\n="" as='\"input\"\r\n' classname="{`${inputClass" disabled="{disabled}\r\n" onblur="{onBlur}\r\n" onchange="{e" onfocus="{onFocus}\r\n" onkeydown="{onKeyDown}\r\n" onkeyup="{onKeyUp}\r\n" onmousedown="{onMouseDown}\r\n" onmouseenter="{onMouseEnter}\r\n" onmouseleave="{onMouseLeave}\r\n" onmousemove="{onMouseMove}\r\n" onmouseover="{onMouseOver}\r\n" onmouseup="{onMouseUp}\r\n" type='\"checkbox\"\r\n' {...checkboxinput}\r\n=""> {\r\n                  checkboxInput.onChange(e);\r\n                  if (extraOnChange) {\r\n                    extraOnChange(e);\r\n                  }\r\n                  if (!touched) {\r\n                    setTouched(true);\r\n                  }\r\n                }}\r\n                id={identifier}\r\n                name={identifier}\r\n              /&gt;\r\n              <span classname='\"ms-2\"'>\r\n                {t(labelKey)}\r\n              </span>\r\n              {required ? <span classname='\"text-danger\"'> *</span> : null}\r\n              {tooltipKey || tooltipText\r\n                ? <span classname='\"text-info\"'>\r\n                  <i classname='\"fal' fa-check-circle\"="">\r\n                </i></span><i classname='\"fal' fa-check-circle\"="">\r\n                : null}\r\n            \r\n          );\r\n        })}\r\n      </i></form.check\r\n></form.label\r\n></inputgroup><i classname='\"fal' fa-check-circle\"="">\r\n      {errorExists &amp;&amp; !hideInvalidTooltip\r\n        ? <inputgroup.text classname='\"text-start' role='\"alert\"' text-wrap\"="">\r\n          {Object.keys(errors)\r\n            .filter(errorKey =&gt; relevantFields.includes(errorKey))\r\n            .map(errorKey =&gt; {\r\n              if (!errors[errorKey]) {\r\n                return null;\r\n              }\r\n              return (\r\n                <span classname='\"text-danger\"' key="{errorKey}">\r\n                  {errors[errorKey].message}\r\n                </span>\r\n              );\r\n            })}\r\n        </inputgroup.text>\r\n        : null}\r\n    </i></form.group><i classname='\"fal' fa-check-circle\"="">\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { INumberInputFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\r\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\r\n\r\nexport const NumberInputFormGroup = (props: INumberInputFormGroupProps): JSX.Element =&gt; {\r\n  const {\r\n    register,\r\n    errors,\r\n    formIdentifier,\r\n    min,\r\n    minMessage,\r\n    max,\r\n    maxMessage,\r\n    placeholderText,\r\n    placeholderKey,\r\n    isCurrency,\r\n    isPercent,\r\n    step,\r\n    disabled,\r\n    required,\r\n    requiredMessage,\r\n    labelKey,\r\n    labelText,\r\n    tooltipKey,\r\n    tooltipText,\r\n\r\n    // OnBlur seems to be ignored on input\r\n    // TODO: forceTooltipWithFocus,\r\n    inputClass,\r\n    formClasses,\r\n    onBlur,\r\n    onFocus,\r\n    onKeyDown,\r\n    onKeyUp,\r\n    onMouseDown,\r\n    onMouseEnter,\r\n    onMouseLeave,\r\n    onMouseMove,\r\n    onMouseOver,\r\n    onMouseUp,\r\n    extraOnChange,\r\n    // TODO: showValidTooltip,\r\n    hideInvalidTooltip\r\n    // TODO: failsOn,\r\n    // TODO: startTouched\r\n  } = props;\r\n\r\n  const [ touched, setTouched ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const numberInput = register(formIdentifier, {\r\n    required: {\r\n      value: typeof required === \"boolean\" ? required : null,\r\n      message: requiredMessage ?? \"This field is required\"\r\n    },\r\n    min: {\r\n      value: typeof min === \"number\" ? min : null,\r\n      message: minMessage ?? `Must reach minimum of ${min}`\r\n    },\r\n    max: {\r\n      value: typeof max === \"number\" ? max : null,\r\n      message: maxMessage ?? `Must not exceed maximum of ${max}`\r\n    },\r\n    valueAsNumber: true\r\n  });\r\n\r\n  const applyValidClass = (): string =&gt; {\r\n    if (!touched) {\r\n      return \"\";\r\n    }\r\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\r\n  };\r\n\r\n  return (\r\n    <form.group ${errors[formidentifier]="" ${formclasses="" :="" ?="" ??="" \"\"}="" \"\"}`}="" \"has-error\"="" classname="{`position-relative">\r\n      <formgrouplabel\r\n :="" ?="" ??="" formidentifier="{formIdentifier}\r\n" label="{labelText" null}\r\n="" required="{required}\r\n" t(labelkey)}\r\n="" t(tooltipkey)="" tooltipkey="" tooltiptext="{tooltipText">\r\n      <inputgroup>\r\n        {isCurrency\r\n          ? <inputgroup.text>\r\n            <i classname='\"fal' fa-dollar-sign\"="">\r\n          </i></inputgroup.text><i classname='\"fal' fa-dollar-sign\"="">\r\n          : null}\r\n        <input\r\n ${applyvalidclass()}="" ${inputclass="" 1}\r\n="" =="" ??="" \"\"}`}\r\n="" classname="{`form-control" disabled="{disabled}\r\n" id="{formIdentifier}\r\n" max="{max}\r\n" min="{min}\r\n" onblur="{onBlur}\r\n" onchange="{e" onfocus="{onFocus}\r\n" onkeydown="{onKeyDown}\r\n" onkeyup="{onKeyUp}\r\n" onmousedown="{onMouseDown}\r\n" onmouseenter="{onMouseEnter}\r\n" onmouseleave="{onMouseLeave}\r\n" onmousemove="{onMouseMove}\r\n" onmouseover="{onMouseOver}\r\n" onmouseup="{onMouseUp}\r\n" placeholder="{placeholderText" step="{step" t(placeholderkey)}\r\n="" type='\"number\"\r\n' {...numberinput}\r\n=""> {\r\n            numberInput.onChange(e);\r\n            if (extraOnChange) {\r\n              extraOnChange(e);\r\n            }\r\n            if (!touched) {\r\n              setTouched(true);\r\n            }\r\n          }}\r\n        /&gt;\r\n        {isPercent\r\n          ? <inputgroup.text>\r\n            <i classname='\"fal' fa-percent\"="">\r\n          </i></inputgroup.text><i classname='\"fal' fa-percent\"="">\r\n          : null}\r\n        {errors[formIdentifier] &amp;&amp; !hideInvalidTooltip\r\n          ? <form.control.feedback type='\"invalid\"'>{errors[formIdentifier].message}</form.control.feedback>\r\n          : null}\r\n      </i></input\r\n></i></inputgroup><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-percent\"="">\r\n    </i></i></formgrouplabel\r\n></form.group><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-percent\"="">\r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Form, InputGroup, ListGroup } from \"react-bootstrap\";\r\nimport { IPasswordInputFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\r\n\r\nexport const PasswordInputFormGroup = (props: IPasswordInputFormGroupProps): JSX.Element =&gt; {\r\n  const {\r\n    register,\r\n    errors,\r\n    pattern,\r\n    patternMessage,\r\n    formIdentifier,\r\n    disabled,\r\n    required,\r\n    requiredMessage,\r\n    labelKey,\r\n    // TODO: labelText,\r\n    tooltipKey,\r\n    tooltipText,\r\n    // OnBlur seems to be ignored on input\r\n    // TODO: forceTooltipWithFocus,\r\n    inputClasses,\r\n    formClasses,\r\n    onBlur,\r\n    onFocus,\r\n    onKeyDown,\r\n    onKeyUp,\r\n    onMouseDown,\r\n    onMouseEnter,\r\n    onMouseLeave,\r\n    onMouseMove,\r\n    onMouseOver,\r\n    onMouseUp,\r\n    extraOnChange,\r\n    // TODO: Use showValidTooltip,\r\n    hideInvalidTooltip,\r\n    // TODO: Use failsOn,\r\n    placeholderKey,\r\n    placeholderText,\r\n    minLengthMessage,\r\n    maxLength,\r\n    maxLengthMessage,\r\n    requireDigitMessage,\r\n    requireUppercaseMessage,\r\n    requireLowercaseMessage,\r\n    requireSpecialMessage,\r\n    suppressRequirements\r\n  } = props;\r\n\r\n  const [ touched, setTouched ] = useState<boolean>(false);\r\n  const [ showPassword, setShowPassword ] = useState(false);\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n\r\n  const toggleShowPassword = (): void =&gt; {\r\n    setShowPassword(!showPassword);\r\n  };\r\n\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n\r\n  const reqd = typeof required === \"boolean\" ? required : true;\r\n\r\n  const passwordInput = register(formIdentifier, {\r\n    maxLength: {\r\n      value: typeof maxLength === \"number\" &amp;&amp; !suppressRequirements ? maxLength : null,\r\n      message:\r\n        maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\r\n    },\r\n    minLength: {\r\n      value: suppressRequirements ? null : cefConfig?.passwordRequireLength,\r\n      message: minLengthMessage ?? `Must reach minimum length of ${cefConfig?.passwordRequireLength}`\r\n    },\r\n    pattern: {\r\n      value: pattern,\r\n      message: patternMessage ?? \"Value does not match required pattern\"\r\n    },\r\n    required: {\r\n      value: reqd,\r\n      message: requiredMessage ?? \"This field is required\"\r\n    },\r\n    validate: reqd\r\n      ? {\r\n        hasLowerCase: value =&gt; {\r\n          if (!suppressRequirements &amp;&amp; cefConfig?.passwordRequireLowercase &amp;&amp; !value.match(/[a-z]/gu)) {\r\n            return requireLowercaseMessage ?? \"Password must contain at least one lowercase character\";\r\n          }\r\n          return true;\r\n        },\r\n        hasUpperCase: value =&gt; {\r\n          if (!suppressRequirements &amp;&amp; cefConfig?.passwordRequireUppercase &amp;&amp; !value.match(/[A-Z]/gu)) {\r\n            return requireUppercaseMessage ?? \"Password must contain at least one uppercase character\";\r\n          }\r\n          return true;\r\n        },\r\n        hasNumber: value =&gt; {\r\n          if (!suppressRequirements &amp;&amp; cefConfig?.passwordRequireDigit &amp;&amp; !value.match(/\\d+/gu)) {\r\n            return requireDigitMessage ?? \"Password must contain at least one number\";\r\n          }\r\n          return true;\r\n        },\r\n        hasSpecial: value =&gt; {\r\n          if (!suppressRequirements\r\n            &amp;&amp; cefConfig?.passwordRequireSpecial\r\n            &amp;&amp; !value.match(/[!@#$%^&amp;*()_+\\-=[\\]{};':\"\\\\|,.&lt;&gt;/?]+/gu)) {\r\n            return requireSpecialMessage ?? \"Password must contain at least one special character\";\r\n          }\r\n          return true;\r\n        }\r\n      }\r\n      : null\r\n  });\r\n\r\n  const applyValidClass = (): string =&gt; {\r\n    if (!touched) {\r\n      return \"\";\r\n    }\r\n    if (hideInvalidTooltip) {\r\n      return \"is-valid\";\r\n    }\r\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\r\n  };\r\n\r\n  return (\r\n    <form.group\r\n ${\r\n="" ${formclasses="" :="" ?="" ??="" \"\"\r\n="" \"\"}="" \"has-error\"="" classname="{`position-relative" errors[formidentifier]="" }`}="">\r\n      <formgrouplabel\r\n :="" ?="" ??="" formidentifier="{formIdentifier}\r\n" label="{t(labelKey)}\r\n" null}\r\n="" required="{reqd}\r\n" t(tooltipkey)="" tooltipkey="" tooltiptext="{tooltipText">\r\n      <inputgroup>\r\n        <input\r\n ${applyvalidclass()}="" ${inputclasses="" :="" =="" ?="" ??="" \"\"}`}\r\n="" \"password\"}\r\n="" \"text\"="" classname="{`form-control" disabled="{disabled}\r\n" onblur="{onBlur}\r\n" onchange="{e" onfocus="{onFocus}\r\n" onkeydown="{onKeyDown}\r\n" onkeyup="{onKeyUp}\r\n" onmousedown="{onMouseDown}\r\n" onmouseenter="{onMouseEnter}\r\n" onmouseleave="{onMouseLeave}\r\n" onmousemove="{onMouseMove}\r\n" onmouseover="{onMouseOver}\r\n" onmouseup="{onMouseUp}\r\n" type="{showPassword" {...passwordinput}\r\n=""> {\r\n            passwordInput.onChange(e);\r\n            if (extraOnChange) {\r\n              extraOnChange(e);\r\n            }\r\n            if (!touched) {\r\n              setTouched(true);\r\n            }\r\n          }}\r\n          id={formIdentifier}\r\n          placeholder={placeholderKey ? t(placeholderKey) : placeholderText ? placeholderText : \"\"}\r\n        /&gt;\r\n        <inputgroup.text classname='\"p-0\"'>\r\n          <button\r\n classname='\"rounded-end\"\r\n' id='\"btnShowPassword\"\r\n' onclick="{toggleShowPassword}" variant='\"outline-secondary\"\r\n'>\r\n            <i :="" ?="" \"fal="" classname="{showPassword" fa-eye-slash\"="" fa-eye\"}="">\r\n          \r\n        </i></button\r\n></inputgroup.text><i :="" ?="" \"fal="" classname="{showPassword" fa-eye-slash\"="" fa-eye\"}="">\r\n        {errors[formIdentifier] &amp;&amp; !hideInvalidTooltip\r\n          ? <div classname='\"w-100\"'>\r\n            <listgroup as='\"ul\"' classname='\"list-unstyled\"'>\r\n              {errors[formIdentifier]\r\n                &amp;&amp; Object.values<string>(errors[formIdentifier].types).map(\r\n                  (msg): JSX.Element =&gt; <li classname='\"text-danger\"' key="{msg}">\r\n                    {msg}\r\n                  </li>\r\n\r\n                )}\r\n            </string></listgroup>\r\n          </div>\r\n          : null}\r\n        {/* TODO: add success messages */}\r\n      </i></input\r\n></inputgroup><i :="" ?="" \"fal="" classname="{showPassword" fa-eye-slash\"="" fa-eye\"}="">\r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { ISelectFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\r\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\r\n\r\nexport const SelectFormGroup = (props: ISelectFormGroupProps): JSX.Element =&gt; {\r\n  const {\r\n    register,\r\n    errors,\r\n    formIdentifier,\r\n    formClasses,\r\n    labelKey,\r\n    labelText,\r\n    tooltipKey,\r\n    tooltipText,\r\n    onBlur,\r\n    onFocus,\r\n    onKeyDown,\r\n    onKeyUp,\r\n    onMouseDown,\r\n    onMouseEnter,\r\n    onMouseLeave,\r\n    onMouseMove,\r\n    onMouseOver,\r\n    onMouseUp,\r\n    extraOnChange,\r\n    disabled,\r\n    // TODO: showValidTooltip,\r\n    hideInvalidTooltip,\r\n    // TODO: failsOn,\r\n    // TODO: forceTooltipWithFocus,\r\n    required,\r\n    requiredMessage,\r\n    options,\r\n    // TODO: autocomplete,\r\n    leftIcon,\r\n    rightIcon,\r\n    selectClass,\r\n    // TODO: isAutofocus,\r\n    optionsAsValue,\r\n    includeNull,\r\n    nullKey,\r\n    nullText,\r\n    hideOptionKey,\r\n    initialOption\r\n  } = props;\r\n\r\n  const [ touched, setTouched ] = useState<boolean>(false);\r\n  const [ nullOptionDisabled, setNullOptionDisabled ] = useState<boolean>(false);\r\n  const [ selectedValue, setSelectedValue ] = useState<string>(\"\");\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const applyValidClass = (): string =&gt; {\r\n    if (!touched) {\r\n      return \"\";\r\n    }\r\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\r\n  };\r\n\r\n  let nullString: string = \"\";\r\n  if (nullKey) {\r\n    nullString = t(nullKey);\r\n  } else if (nullText) {\r\n    nullString = nullText;\r\n  }\r\n  useEffect(() =&gt; {\r\n    if (selectedValue.length) {\r\n      return;\r\n    }\r\n    if (initialOption &amp;&amp; options?.length) {\r\n      if (includeNull &amp;&amp; initialOption.option === nullString) {\r\n        setSelectedValue(nullString);\r\n        return;\r\n      }\r\n      const initialValueOption = options\r\n        .find(o =&gt; o.option === initialOption.option || o.value === initialOption.value);\r\n      if (initialValueOption) {\r\n        setSelectedValue(initialValueOption.value ?? initialValueOption.option);\r\n        setNullOptionDisabled(true);\r\n      } else {\r\n        setSelectedValue(options[0].option);\r\n        setNullOptionDisabled(true);\r\n      }\r\n      return;\r\n    }\r\n    if (hideOptionKey &amp;&amp; options?.length &amp;&amp; selectedValue === \"\") {\r\n      setSelectedValue(options[0].option);\r\n      setNullOptionDisabled(true);\r\n    } else if (!hideOptionKey &amp;&amp; !options &amp;&amp; selectedValue === \"\") {\r\n      setSelectedValue(nullString);\r\n    }\r\n  // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ initialOption, options ]);\r\n\r\n  const select = register(formIdentifier, {\r\n    required: {\r\n      value: typeof required === \"boolean\" ? required : null,\r\n      message: requiredMessage ?? \"This field is required\"\r\n    },\r\n    validate: {\r\n      isNotNull: value =&gt; {\r\n        if (!value || value === nullString || value === nullText) {\r\n          return \"This field is required\";\r\n        }\r\n        return true;\r\n      }\r\n    }\r\n  });\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <form.group\r\n ${\r\n="" ${formclasses="" :="" ?="" ??="" \"\"\r\n="" \"\"}="" \"has-error\"="" classname="{`form-group" errors[formidentifier]="" position-relative="" }`}="">\r\n        <formgrouplabel\r\n :="" ?="" ??="" formidentifier="{formIdentifier}\r\n" label="{labelText" null}\r\n="" required="{required}\r\n" t(labelkey)}\r\n="" t(tooltipkey)="" tooltipkey="" tooltiptext="{tooltipText">\r\n        <inputgroup classname='\"input-group\"'>\r\n          {leftIcon\r\n            ? <inputgroup.text classname='\"rounded-start\"'>\r\n              <fontawesomeicon classname='\"fa-fw\"' icon="{leftIcon}">\r\n            </fontawesomeicon></inputgroup.text>\r\n            : null}\r\n          <form.select\r\n ${applyvalidclass()}="" ${righticon="" ${selectclass="" :="" =="" ?="" ??="" \"\"="" \"\"}`}\r\n="" \"rounded-end\"}="" classname="{`custom-select" disabled="{disabled}\r\n" id="{formIdentifier}\r\n" name="{formIdentifier}\r\n" onblur="{onBlur}\r\n" onchange="{e" onfocus="{onFocus}\r\n" onkeydown="{onKeyDown}\r\n" onkeyup="{onKeyUp}\r\n" onmousedown="{onMouseDown}\r\n" onmouseenter="{onMouseEnter}\r\n" onmouseleave="{onMouseLeave}\r\n" onmousemove="{onMouseMove}\r\n" onmouseover="{onMouseOver}\r\n" onmouseup="{onMouseUp}\r\n" value="{selectedValue}\r\n" {...select}\r\n=""> {\r\n              setSelectedValue(e.target.value);\r\n              select.onChange(e);\r\n              if (!nullOptionDisabled) {\r\n                setNullOptionDisabled(true);\r\n              }\r\n              if (extraOnChange) {\r\n                extraOnChange(e);\r\n              }\r\n              if (!touched) {\r\n                setTouched(true);\r\n              }\r\n            }}&gt;\r\n            {includeNull\r\n              ? <option disabled="{nullOptionDisabled}" value="{nullString}">\r\n                {nullString}\r\n              </option>\r\n              : null}\r\n            {options &amp;&amp; Array.isArray(options)\r\n              ? options.map(opt =&gt; <option\r\n :="" ?="" ??="" key="{opt.value" opt.option\r\n="" opt.option}\r\n="" opt.value\r\n="" optionsasvalue\r\n="" value="{\r\n" }="">\r\n                {opt.option}\r\n              )\r\n              : null}\r\n          \r\n          {rightIcon\r\n            ? <inputgroup.text classname='\"rounded-end\"'>\r\n              <fontawesomeicon classname='\"fa-fw\"' icon="{rightIcon}">\r\n            </fontawesomeicon></inputgroup.text>\r\n            : null}\r\n        </option\r\n></form.select\r\n></inputgroup>\r\n      \r\n      {errors[formIdentifier] &amp;&amp; !hideInvalidTooltip\r\n        ? <div classname='\"input-group-append' ps-1\"="" pt-1="" role='\"alert\"' w-100="">\r\n          <form.control.feedback type='\"invalid\"'>\r\n            {errors[formIdentifier].message}\r\n          </form.control.feedback>\r\n        </div>\r\n        : null}\r\n      {/* TODO: add success messages */}\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { ITextAreaFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\r\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\r\n\r\nexport const TextAreaFormGroup = (props: ITextAreaFormGroupProps): JSX.Element =&gt; {\r\n  const {\r\n    register,\r\n    errors,\r\n    validateObject,\r\n    formIdentifier,\r\n    disabled,\r\n    required,\r\n    requiredMessage,\r\n    // TODO: autoComplete,\r\n    labelKey,\r\n    labelText,\r\n    tooltipKey,\r\n    tooltipText,\r\n\r\n    // OnBlur seems to be ignored on input\r\n    // TODO: forceTooltipWithFocus,\r\n    inputClass,\r\n    formClasses,\r\n    onBlur,\r\n    onFocus,\r\n    onKeyDown,\r\n    onKeyUp,\r\n    onMouseDown,\r\n    onMouseEnter,\r\n    onMouseLeave,\r\n    onMouseMove,\r\n    onMouseOver,\r\n    onMouseUp,\r\n    extraOnChange,\r\n    // TODO: showValidTooltip,\r\n    hideInvalidTooltip,\r\n    // TODO: failsOn,\r\n    // TODO: startTouched,\r\n    placeholderKey,\r\n    placeholderText,\r\n    minLength,\r\n    minLengthMessage,\r\n    maxLength,\r\n    maxLengthMessage,\r\n    showCharacterCounter,\r\n    rows\r\n  } = props;\r\n\r\n  const [ touched, setTouched ] = useState<boolean>(false);\r\n  const [ letterCount, setLetterCount ] = useState<number>(0);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const textArea = register(formIdentifier, {\r\n    required: {\r\n      value: typeof required === \"boolean\" ? required : null,\r\n      message: requiredMessage ?? \"This field is required\"\r\n    },\r\n    minLength: {\r\n      value: typeof minLength === \"number\" ? minLength : null,\r\n      message: minLengthMessage ?? `Must reach minimum length of ${minLength}`\r\n    },\r\n    maxLength: {\r\n      value: typeof maxLength === \"number\" ? maxLength : null,\r\n      message: maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\r\n    },\r\n    validate: validateObject ?? null\r\n  });\r\n\r\n  const applyValidClass = (): string =&gt; {\r\n    if (!touched) {\r\n      return \"\";\r\n    }\r\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\r\n  };\r\n\r\n  return (\r\n    <form.group ${errors[formidentifier]="" ${formclasses="" :="" ?="" ??="" \"\"}="" \"\"}`}="" \"has-error\"="" classname="{`position-relative">\r\n      <formgrouplabel\r\n :="" ?="" ??="" formidentifier="{formIdentifier}\r\n" label="{labelText" null}\r\n="" required="{required}\r\n" t(labelkey)}\r\n="" t(tooltipkey)="" tooltipkey="" tooltiptext="{tooltipText">\r\n      <inputgroup>\r\n        <textarea\r\n ${applyvalidclass()}="" ${inputclass="" (rows="" *="" 4)}px`\r\n="" =="" ??="" \"100%\",\r\n="" \"\"}`}\r\n="" `${24="" classname="{`w-100" disabled="{disabled}\r\n" form-control="" maxwidth:="" minheight:="" onblur="{onBlur}\r\n" onchange="{e" onfocus="{onFocus}\r\n" onkeydown="{onKeyDown}\r\n" onkeyup="{onKeyUp}\r\n" onmousedown="{onMouseDown}\r\n" onmouseenter="{onMouseEnter}\r\n" onmouseleave="{onMouseLeave}\r\n" onmousemove="{onMouseMove}\r\n" onmouseover="{onMouseOver}\r\n" onmouseup="{onMouseUp}\r\n" p-1="" rows="{rows}\r\n" style="{{\r\n" {...textarea}\r\n="" ||="" }}\r\n=""> {\r\n            textArea.onChange(e);\r\n            if (extraOnChange) {\r\n              extraOnChange(e);\r\n            }\r\n            if (!touched) {\r\n              setTouched(true);\r\n            }\r\n            setLetterCount(e.target.value.length);\r\n          }}\r\n          id={formIdentifier}\r\n          placeholder={placeholderText ?? t(placeholderKey)}\r\n        /&gt;\r\n        {maxLength &gt; 0 &amp;&amp; showCharacterCounter ? <div>{`${letterCount} of ${maxLength}`}</div> : null}\r\n        {errors[formIdentifier] &amp;&amp; !hideInvalidTooltip\r\n          ? <div classname='\"input-group-append' ps-1\"="" pt-1="" role='\"alert\"' w-100="">\r\n            <form.control.feedback type='\"invalid\"'>{errors[formIdentifier].message}</form.control.feedback>\r\n          </div>\r\n          : null}\r\n        {/* TODO: add success messages */}\r\n      </textarea\r\n></inputgroup>\r\n    </formgrouplabel\r\n></form.group>\r\n  );\r\n};\r\n","import { ChangeEvent, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { ITextInputFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\r\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faBriefcase, faCity, faRoad } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const debounce = (func: Function, wait: number, context: any) =&gt; {\r\n  // eslint-disable-next-line no-undef\r\n  let timeout: NodeJS.Timeout = null;\r\n  return (...args: any[]): void =&gt; {\r\n    // eslint-disable-next-line prefer-rest-params\r\n    const later = () =&gt; {\r\n      timeout = null;\r\n      func.apply(context, args);\r\n    };\r\n    clearTimeout(timeout);\r\n    timeout = setTimeout(later, wait);\r\n  };\r\n};\r\n\r\nexport const TextInputFormGroup = (props: ITextInputFormGroupProps): JSX.Element =&gt; {\r\n  const {\r\n    register,\r\n    errors,\r\n    pattern,\r\n    patternMessage,\r\n    validateObject,\r\n    formIdentifier,\r\n    dataSid,\r\n    disabled,\r\n    required,\r\n    requiredMessage,\r\n    autoComplete,\r\n    labelKey,\r\n    labelText,\r\n    tooltipKey,\r\n    tooltipText,\r\n    // OnBlur seems to be ignored on input\r\n    // TODO: forceTooltipWithFocus,\r\n    leftIcon,\r\n    rightIcon,\r\n    inputClasses,\r\n    formClasses,\r\n    onBlur,\r\n    onFocus,\r\n    onKeyDown,\r\n    onKeyUp,\r\n    onKeyPress,\r\n    onMouseDown,\r\n    onMouseEnter,\r\n    onMouseLeave,\r\n    onMouseMove,\r\n    onMouseOver,\r\n    onMouseUp,\r\n    onPaste,\r\n    extraOnChange,\r\n    // TODO: showValidTooltip,\r\n    hideInvalidTooltip,\r\n    // TODO: failsOn,\r\n    // TODO: startTouched,\r\n    placeholderKey,\r\n    placeholderText,\r\n    minLength,\r\n    minLengthMessage,\r\n    maxLength,\r\n    maxLengthMessage,\r\n    isEmail,\r\n    isPhone,\r\n    isFax,\r\n    isUsername\r\n  } = props;\r\n\r\n  const [ touched, setTouched ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const textInput = register(formIdentifier, {\r\n    maxLength: {\r\n      value: typeof maxLength === \"number\" ? maxLength : null,\r\n      message:\r\n        maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\r\n    },\r\n    minLength: {\r\n      value: typeof minLength === \"number\" ? minLength : null,\r\n      message: minLengthMessage ?? `Must reach minimum length of ${minLength}`\r\n    },\r\n    pattern: {\r\n      value: isEmail\r\n        // eslint-disable-next-line no-useless-escape, prefer-named-capture-group, require-unicode-regexp, max-len\r\n        ? /^(([^&lt;&gt;()\\[\\]\\.,;:\\s@\\\"]+(\\.[^&lt;&gt;()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^&lt;&gt;()[\\]\\.,;:\\s@\\\"]+\\.)+[^&lt;&gt;()[\\]\\.,;:\\s@\\\"]{2,})$/i\r\n        : pattern,\r\n      message: patternMessage ?? \"Value does not match required pattern\"\r\n    },\r\n    required: {\r\n      value: typeof required === \"boolean\" ? required : null,\r\n      message:\r\n        requiredMessage\r\n        ?? t(\"ui.storefront.common.validation.ThisFieldIsRequired\")\r\n    },\r\n    validate: validateObject ?? null\r\n  });\r\n\r\n  let inputAutoComplete: string = null;\r\n  if (isUsername) {\r\n    inputAutoComplete = \"username\";\r\n  } else if (isEmail) {\r\n    inputAutoComplete = \"email\";\r\n  } else if (isPhone) {\r\n    inputAutoComplete = \"tel\";\r\n  } else if (isFax) {\r\n    inputAutoComplete = \"fax\";\r\n  } else if (autoComplete) {\r\n    inputAutoComplete = autoComplete;\r\n  }\r\n\r\n  const applyValidClass = (): string =&gt; {\r\n    if (!touched) {\r\n      return \"\";\r\n    }\r\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\r\n  };\r\n\r\n  const renderLeftIcon = () =&gt; {\r\n    if (!isEmail &amp;&amp; !isFax &amp;&amp; !isPhone &amp;&amp; !leftIcon) {\r\n      return null;\r\n    }\r\n    let iconString = null;\r\n    if (leftIcon === faRoad) {\r\n      iconString = \"fal fa-road\";\r\n    } else if (leftIcon === faBriefcase) {\r\n      iconString = \"fal fa-briefcase\";\r\n    } else if (leftIcon === faCity) {\r\n      iconString = \"fal fa-city\";\r\n    }\r\n    return (\r\n      <inputgroup.text>\r\n        {iconString &amp;&amp; <i classname="{iconString}/">}\r\n        {isEmail ? <i classname='\"fal' fa-at\"=""> : null}\r\n        {isPhone ? <i classname='\"fal' fa-phone\"=""> : null}\r\n        {isFax ? <i classname='\"fal' fa-fax\"=""> : null}\r\n        {!iconString &amp;&amp; leftIcon ? <fontawesomeicon icon="{leftIcon}"> : null}\r\n\r\n      </fontawesomeicon></i></i></i></i></inputgroup.text><i classname="{iconString}/"><i classname='\"fal' fa-at\"=""><i classname='\"fal' fa-phone\"=""><i classname='\"fal' fa-fax\"="">\r\n    );\r\n  };\r\n\r\n  return (\r\n    <form.group\r\n ${\r\n="" ${formclasses="" :="" ?="" ??="" \"\"\r\n="" \"\"}="" \"has-error\"="" classname="{`position-relative" errors[formidentifier]="" }`}="">\r\n      <formgrouplabel\r\n :="" ?="" ??="" formidentifier="{formIdentifier}\r\n" label="{labelText" null}\r\n="" required="{required}\r\n" t(labelkey)}\r\n="" t(tooltipkey)="" tooltipkey="" tooltiptext="{tooltipText">\r\n      <inputgroup>\r\n        {renderLeftIcon()}\r\n        <input\r\n ${applyvalidclass()}="" ${inputclasses="" ${righticon="" 100}\r\n="" :="" ?="" ??="" \"\"="" \"\"}`}\r\n="" \"off\"}\r\n="" \"rounded-end\"}="" \"tel\"="" \"text\"}\r\n="" autocomplete="{inputAutoComplete" changeevent<htmlinputelement="" classname="{`form-control" data-sid="{dataSid" disabled="{disabled}\r\n" excess="" input\r\n="" isfax="" maxlength="{maxLength" null}\r\n="" onblur="{onBlur}\r\n" onchange="{debounce((e:" onfocus="{onFocus}\r\n" onkeydown="{onKeyDown}\r\n" onkeypress="{onKeyPress}\r\n" onkeyup="{onKeyUp}\r\n" onmousedown="{onMouseDown}\r\n" onmouseenter="{onMouseEnter}\r\n" onmouseleave="{onMouseLeave}\r\n" onmousemove="{onMouseMove}\r\n" onmouseover="{onMouseOver}\r\n" onmouseup="{onMouseUp}\r\n" onpaste="{onPaste}\r\n" prevents="" type="{isPhone" {...textinput}\r\n="" ||="">) =&gt; {\r\n            textInput.onChange(e);\r\n            if (extraOnChange) {\r\n              extraOnChange(e);\r\n            }\r\n            if (!touched) {\r\n              setTouched(true);\r\n            }\r\n          // eslint-disable-next-line no-invalid-this\r\n          }, 500, this)}\r\n          id={formIdentifier}\r\n          placeholder={placeholderKey ? t(placeholderKey) : placeholderText}\r\n        /&gt;\r\n        {rightIcon\r\n          ? <inputgroup.text classname='\"rounded-end\"'>\r\n            <i classname='\"fal' fa-right-icon\"="">\r\n          </i></inputgroup.text><i classname='\"fal' fa-right-icon\"="">\r\n          : null}\r\n        {errors[formIdentifier] &amp;&amp; !hideInvalidTooltip\r\n          ? <form.control.feedback type='\"invalid\"'>\r\n            {errors[formIdentifier].message}\r\n          </form.control.feedback>\r\n          : null}\r\n        {/* TODO: add success messages */}\r\n      </i></input\r\n></inputgroup><i classname='\"fal' fa-right-icon\"="">\r\n    \r\n  );\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { UserModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { PasswordInputFormGroup, TextInputFormGroup } from \"./formGroups\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { LoginResponseStatus, useAuthFactory } from \"src/_redux/factories/authFactory\";\r\n\r\ninterface ILoginFormProps {\r\n  // Redux\r\n  currentUser?: UserModel;\r\n  showCancel?: boolean;\r\n  onCancel?: Function;\r\n  onLoginSuccess?: () =&gt; void;\r\n  returnUrl?: string;\r\n  onError?: () =&gt; void;\r\n  onClearError?: () =&gt; void;\r\n  signInLeft?: boolean;\r\n  usernameFieldId?: string;\r\n  passwordFieldId?: string;\r\n}\r\n\r\ninterface ILoginData {\r\n  Username: string;\r\n  Password: string;\r\n  MFAToken?: string;\r\n}\r\n\r\nexport const LoginForm = (props: ILoginFormProps): JSX.Element =&gt; {\r\n  const {\r\n    showCancel,\r\n    onCancel,\r\n    onLoginSuccess,\r\n    returnUrl,\r\n    onError,\r\n    onClearError,\r\n    signInLeft,\r\n    usernameFieldId,\r\n    passwordFieldId\r\n  } = props;\r\n\r\n  const [ showMFA, setShowMFA ] = useState<boolean>(false);\r\n  const [ , setHideLogin ] = useState<boolean>(false);\r\n  const [ emailFirstAndLastFour, setEmailFirstAndLastFour ] = useState<string>(\"\");\r\n  const [ MFAToken, setMFAToken ] = useState<string>(null);\r\n  const [ hasRunLoginSuccess, setHasRunLoginSuccess ] = useState<boolean>(false);\r\n  // Const [rememberMe, setRememberMe] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const authenticationFactory = useAuthFactory();\r\n  const history = useHistory();\r\n  const currentUser = useCurrentUser();\r\n\r\n  const {\r\n    register,\r\n    reset,\r\n    formState,\r\n    getValues\r\n  } = useForm({\r\n    mode: \"all\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const usernameIDResolved = usernameFieldId ?? \"txtLoginUsername\";\r\n  const passwordIDResolved = passwordFieldId ?? \"txtLoginPassword\";\r\n\r\n  useEffect(() =&gt; {\r\n    if (viewState.hasError &amp;&amp; onError) {\r\n      onError();\r\n    } else if (onClearError) {\r\n      onClearError();\r\n    }\r\n  }, [ viewState ]);\r\n\r\n  const handleCancel = (): void =&gt; {\r\n    reset();\r\n    if (onCancel) {\r\n      onCancel();\r\n    }\r\n  };\r\n\r\n  function handleSubmit(usePhone?: boolean, state?: string): void {\r\n    // Finish Running will be called for either an error state or when the page reloads, etc.\r\n    setRunning();\r\n    authenticationFactory.login({\r\n      Username: getValues(usernameIDResolved),\r\n      Password: getValues(passwordIDResolved),\r\n      MFAToken\r\n    })\r\n      .then(res =&gt; {\r\n        if (res.Status === LoginResponseStatus.Challenge) {\r\n          // MFA challenge\r\n          // TODO: res.MFAResult contains the exact result of the MFA call, use it\r\n          // to show which MFA options the user has configured\r\n          setShowMFA(true);\r\n          setEmailFirstAndLastFour(res.MFAResult?.EmailFirstAndLastFour);\r\n          finishRunning();\r\n          return;\r\n        }\r\n        if (returnUrl) {\r\n          history.push(returnUrl);\r\n          history.go(0);\r\n        }\r\n        finishRunning();\r\n      })\r\n      .catch((err: LoginResponseStatus) =&gt; {\r\n        finishRunning(true, new Error(\"Invalid UserName or Password\"));\r\n      });\r\n  }\r\n\r\n  function requestMFA(loginData: ILoginData, usePhone: boolean): Promise<boolean> {\r\n    return authenticationFactory\r\n      .requestMFA(loginData.Username, usePhone);\r\n  }\r\n\r\n  function requestMFATokenViaEmail(): void {\r\n    setRunning();\r\n    requestMFA({\r\n      Username: getValues(usernameIDResolved),\r\n      Password: getValues(passwordIDResolved),\r\n      MFAToken\r\n    }, false).then(() =&gt; {\r\n      setHideLogin(false);\r\n      finishRunning();\r\n    });\r\n  }\r\n  /* TODO:\r\n  function requestMFATokenViaSMS(): void {\r\n    setRunning();\r\n    requestMFA(loginData, true).then(() =&gt; {\r\n      setHideLogin(false);\r\n      finishRunning();\r\n    });\r\n  }\r\n  */\r\n\r\n  function keySubmit(e: React.KeyboardEvent<htmlinputelement>): void {\r\n    if (!e?.key || e.key !== \"Enter\" || !formState.isValid) {\r\n      return;\r\n    }\r\n    handleSubmit(null, \"home\");\r\n  }\r\n\r\n  useEffect(() =&gt; {\r\n    if (currentUser?.ID &gt; 0 &amp;&amp; onLoginSuccess &amp;&amp; !hasRunLoginSuccess) {\r\n      onLoginSuccess();\r\n      setHasRunLoginSuccess(true);\r\n    }\r\n    return () =&gt; {\r\n      reset();\r\n      setMFAToken(\"\");\r\n      finishRunning();\r\n    };\r\n  }, [ currentUser, onLoginSuccess ]);\r\n\r\n  if (currentUser?.ID &gt; 0) {\r\n    return (\r\n      <p>\r\n        {`${t(\"ui.storefront.user.login.YouAreCurrentlyLoggedInAs\")} ${currentUser.Contact.FirstName}`}\r\n      </p>\r\n    );\r\n  }\r\n\r\n  return \r\n    {viewState.running\r\n      ? <loadingwidget>\r\n      : &lt;&gt;\r\n        <row>\r\n          <textinputformgroup\r\n col-xs-12="" errors="{formState.errors}\r\n" formclasses='\"form-group' formidentifier="{usernameIDResolved}\r\n" labelkey='\"ui.storefront.common.Username\"\r\n' mb-2\"\r\n="" onkeydown="{keySubmit}\r\n" placeholdertext='\"Enter' register="{register}\r\n" required="{true}\r\n" username\"\r\n="" your="">\r\n          <passwordinputformgroup\r\n col-xs-12="" errors="{formState.errors}\r\n" formclasses='\"form-group' formidentifier="{passwordIDResolved}\r\n" labelkey='\"ui.storefront.common.Password\"\r\n' mb-2\"\r\n="" onkeydown="{keySubmit}\r\n" placeholderkey='\"ui.storefront.user.login.EnterYourPassword\"\r\n' register="{register}\r\n" required="{true}\r\n" suppressrequirements="{true}\r\n" tooltipkey='\"ui.storefront.user.registration.PasswordRequirements.Message\"\r\n'>\r\n          <form.group as="{Col}\r\n" classname='\"has-error' mb-2\"="" xs="{12}\r\n">\r\n            {showMFA\r\n              ? &lt;&gt;\r\n                <div\r\n ${viewstate.haserror="" :="" ?="" \"\"}`}="" \"has-error\"="" classname="{`form-group" col-12="" my-2="">\r\n                  <label classname='\"control-label\"' htmlfor='\"txtMFAPrompt\"'>\r\n                    {t(\"ui.storefront.controls.login.MFARequired\")}\r\n                  </label>\r\n                  <span classname='\"d-block\"'>{t(\"ui.storefront.controls.login.ReceiveCode\")}</span>\r\n                  <div classname='\"button-group\"'>\r\n                    <button\r\n =="" btn-primary\"\r\n="" classname='\"btn' id='\"mfaEmail\"\r\n' name='\"mfaEmail\"\r\n' onclick="{()" type='\"button\"\r\n'> requestMFATokenViaEmail()}&gt;\r\n                          Email: \r\n                      <span>{emailFirstAndLastFour}</span>\r\n                    \r\n                    {/* <button\r\n btn-primary\"\r\n="" classname='\"btn' id='\"mfaSMS\"\r\n' name='\"mfaSMS\"\r\n' ng-click='\"requestMFATokenViaSMS()\"' type='\"button\"\r\n'>\r\n                          SMS: •••-•••-\r\n                          <span ng-bind='\"mfaResult.PhoneLastFour\"'></span>\r\n                         */}\r\n                  </button\r\n></button\r\n></div>\r\n                \r\n                <div\r\n ${viewstate.haserror="" :="" ?="" \"\"}`}="" \"has-error\"="" classname="{`form-group" col-12="" my-2="">\r\n                  <label\r\n classname='\"control-label\"\r\n' htmlfor='\"txtMFAPrompt\"\r\n' uib-tooltip="\&quot;{{'ui.storefront.controls.login.MFAAuthToken.Tooltip'}}\&quot;">\r\n                    {t(\"ui.storefront.controls.login.AuthToken\")}\r\n                  \r\n                  <div classname='\"input-group\"'>\r\n                    <input\r\n ${viewstate.running="" :="" =="" ?="" \"\"}`}\r\n="" \"disabled\"="" autocomplete='\"off\"\r\n' classname="{`form-control" id='\"txtMFAPrompt\"\r\n' name='\"txtMFAPrompt\"\r\n' onchange="{e" placeholder='{t(\"ui.storefront.controls.login.EnterYourAuthToken\")}\r\n' type='\"text\"\r\n'> {\r\n                        setMFAToken(e.target.value);\r\n                      }}\r\n                      onKeyDown={e =&gt; keySubmit(e)}\r\n                    /&gt;\r\n                    {/* <button\r\n btn-primary\"\r\n="" classname='\"btn' id='\"resend\"\r\n' name='\"resend\"\r\n' ng-click="\&quot;submit('resend')\&quot;" type='\"button\"\r\n'>\r\n                          Resend\r\n                         */}\r\n                  </button\r\n></input\r\n></div>\r\n                \r\n              \r\n              : null}\r\n          </label\r\n></div\r\n></div\r\n></form.group>\r\n        </passwordinputformgroup\r\n></textinputformgroup\r\n></row>\r\n        <row classname='\"align-items-center\"'>\r\n          \r\n            <small classname='\"small\"'>\r\n              <a href='\"/authentication/forgot-password\"\r\n' id='\"btnLoginForgotPassword\"\r\n' onclick="{handleCancel}">\r\n                {t(\"ui.storefront.user.login.ForgotYourPassword\")}\r\n              </a>\r\n              <br/>\r\n              <span>{t(\"ui.storefront.user.login.DontHaveAnAccount\")}</span>\r\n                   \r\n              <a href='\"/Authentication/Registration\"\r\n' id='\"btnLoginRegister\"\r\n' onclick="{handleCancel}">\r\n                {t(\"ui.storefront.common.RegisterForOne\")}\r\n              </a>\r\n            </small>\r\n          \r\n          \r\n            {showCancel\r\n                  &amp;&amp; <button onclick="{handleCancel}" variant='\"outline-secondary\"'>\r\n                    {t(\"ui.storefront.common.Close\")}\r\n                  </button>\r\n            }\r\n            <button\r\n =="" disabled="{!formState.isValid}\r\n" id='\"btnLoginSubmit\"\r\n' onclick="{()" variant='\"primary\"\r\n'> handleSubmit()}&gt;\r\n              {t(\"ui.storefront.user.login.SignIn\")}\r\n            \r\n          \r\n        </button\r\n></row>\r\n        {viewState.hasError\r\n          &amp;&amp; <row align-items-center\"="" border-bottom="" border-danger="" border-top="" classname='\"mt-3' gx-0="" py-3="">\r\n            \r\n              <i classname='\"fal' fa-2x\"="" fa-exclamation-triangle="">\r\n            \r\n            \r\n              <span id='\"alertLoginErrorMessage\"'>{viewState.errorMessage}</span>\r\n            \r\n          </i></row><i classname='\"fal' fa-2x\"="" fa-exclamation-triangle="">\r\n        }\r\n      }\r\n  ;\r\n};\r\n","import { useState } from \"react\";\r\nimport { Container, Row } from \"react-bootstrap\";\r\nimport { Modal } from \"src/_shared/modals/Modal\";\r\nimport { LoginForm } from \"src/_shared/forms/LoginForm\";\r\n\r\ninterface ILoginModalProps {\r\n  show: boolean;\r\n  onConfirm?: () =&gt; void;\r\n  onCancel: () =&gt; void;\r\n}\r\n\r\nexport const LoginModal = (props: ILoginModalProps): JSX.Element =&gt; {\r\n  const { show, onConfirm, onCancel } = props;\r\n\r\n  const [ loginErrorExists, setLoginErrorExists ] = useState<boolean>(false);\r\n\r\n  return (\r\n    <modal\r\n :="" ?="" \"\"}="" \"alert="" alert-danger="" border-0\"="" in\"\r\n="" mb-0="" modalbodyclasses="{loginErrorExists" oncancel="{onCancel}\r\n" show="{show}\r\n" size='\"md\"\r\n' title='\"Sign' titleid='\"txtLoginModalTitle\"\r\n'>\r\n      <container fluid="">\r\n        <row classname='\"form-vertical\"'>\r\n          <loginform\r\n =="" oncancel="{onCancel}\r\n" onerror="{()" onloginsuccess="{onConfirm}\r\n" showcancel="{false}\r\n"> setLoginErrorExists(true)}\r\n            onClearError={() =&gt; setLoginErrorExists(false)}\r\n          /&gt;\r\n        </loginform\r\n></row>\r\n      </container>\r\n    \r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\ninterface ILoginForPricingProps {\r\n}\r\n\r\nexport const LoginForPricing = (props: ILoginForPricingProps): JSX.Element =&gt; {\r\n  const [ showLoginModal, setShowLoginModal ] = useState(false);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <loginmodal =="" oncancel="{()" show="{showLoginModal}"> setShowLoginModal(false)} /&gt;\r\n      <button\r\n =="" classname='\"nav-link' id='\"btLoginForPricing\"\r\n' name='\"btLoginForPricing\"\r\n' onclick="{()" p-0\"\r\n="" variant='\"link\"\r\n'> setShowLoginModal(true)}\r\n        tabIndex={0}&gt;\r\n        <span classname='\"text-capitalize\"'>\r\n          {t(\"ui.storefront.searchCatalog.loginToViewPricing\")}\r\n        </span>\r\n         »\r\n      \r\n    \r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Modal as BootstrapModal, Button } from \"react-bootstrap\";\r\n\r\ninterface IConfirmationModalProps {\r\n  confirmBtnLabel?: string | JSX.Element;\r\n  confirmBtnClasses?: string;\r\n  confirmBtnVariant?: string;\r\n  confirmBtnSID?: string;\r\n  cancelBtnLabel?: string | JSX.Element;\r\n  cancelBtnVariant?: string;\r\n  cancelBtnClasses?: string;\r\n  cancelBtnSID?: string;\r\n  confirmDisabled?: boolean;\r\n  showHeader?: boolean;\r\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n  title?: string;\r\n  show: boolean;\r\n  onConfirm?: Function;\r\n  confirmButton?: React.ReactNode;\r\n  onCancel: Function;\r\n  children?: React.ReactNode;\r\n}\r\n\r\nexport const ConfirmationModal = (props: IConfirmationModalProps): JSX.Element =&gt; {\r\n  const {\r\n    title,\r\n    showHeader,\r\n    confirmBtnLabel,\r\n    confirmBtnClasses,\r\n    confirmBtnVariant,\r\n    cancelBtnLabel,\r\n    cancelBtnVariant,\r\n    cancelBtnClasses,\r\n    onConfirm,\r\n    confirmDisabled,\r\n    onCancel,\r\n    size,\r\n    show,\r\n    confirmBtnSID,\r\n    cancelBtnSID\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const onConfirmButtonPressed = (): void =&gt; {\r\n    onConfirm();\r\n  };\r\n\r\n  const onCancelButtonPressed = (): void =&gt; {\r\n    if (onCancel) {\r\n      onCancel();\r\n    }\r\n  };\r\n\r\n  return (\r\n    <bootstrapmodal\r\n \"lg\"}\r\n="" as="" contentclassname='\"border-0\"' onhide="{onCancelButtonPressed}\r\n" show="{show}\r\n" size="{size">\r\n      {showHeader\r\n        &amp;&amp; <bootstrapmodal.header\r\n classname='\"bg-dark' closebutton\r\n="" closevariant='\"white\"' rounded-0\"\r\n="" text-light="">\r\n          <h5 classname='\"modal-title' id='\"txtConfirmationModalTitle\"' mb-0\"="" text-capitalize="">\r\n            {title ?? t(\"ui.storefront.common.PleaseConfirm\")}\r\n          </h5>\r\n        \r\n      }\r\n      <bootstrapmodal.body>{props.children}</bootstrapmodal.body>\r\n      <bootstrapmodal.footer>\r\n        <button\r\n ??="" \"\"}\r\n="" \"outline-secondary\"}\r\n="" classname="{cancelBtnClasses" data-sid="{cancelBtnSID}" id='\"btnConfirmationModalCancel\"\r\n' onclick="{onCancelButtonPressed}\r\n" variant="{cancelBtnVariant">\r\n          {cancelBtnLabel ?? t(\"ui.storefront.common.Cancel\")}\r\n        \r\n        {!props.confirmButton\r\n        &amp;&amp; <button\r\n ${confirmbtnclasses="" ??="" \"\"}`}\r\n="" \"primary\"}\r\n="" classname="{`ms-2" data-sid="{confirmBtnSID}" disabled="{confirmDisabled" false}\r\n="" id='\"btnConfirmationModalConfirm\"\r\n' onclick="{onConfirmButtonPressed}\r\n" variant="{confirmBtnVariant" ||="">\r\n          {confirmBtnLabel ?? \"Confirm\"}\r\n        }\r\n        {props.confirmButton}\r\n      </button\r\n></button\r\n></bootstrapmodal.footer>\r\n    \r\n  );\r\n};\r\n\r\nConfirmationModal.defaultProps = {\r\n  showHeader: true\r\n};\r\n","import { Button, Col, ListGroup, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { currencyFormatter, limitWithEllipses } from \"src/_shared/common/Formatters\";\r\n\r\ninterface IMiniCartDiscountListItemProps {\r\n  discount: AppliedCartItemDiscountModel;\r\n  type: \"Order\" | \"Shipping\";\r\n  index: number;\r\n  onRemoveDiscountClicked: (discount: AppliedCartItemDiscountModel) =&gt; void;\r\n}\r\n\r\nexport const MiniCartDiscountListItem = (props: IMiniCartDiscountListItemProps): JSX.Element =&gt; {\r\n  const { discount, type, index, onRemoveDiscountClicked } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <listgroup.item classname='\"px-3\"'>\r\n      <row align-items-center\"="" classname='\"gx-0'>\r\n        \r\n          {!discount.DiscountIsAutoApplied\r\n            &amp;&amp; <button\r\n =="" aria-label='{t(\"ui.storefront.cart.removeItemFromCart\")}\r\n' classname='\"float-left' id="{`btnRemove${type}Discount_${index}`}\r\n" onclick="{()" p-0\"\r\n="" text-danger="" title='{t(\"ui.storefront.cart.removeItemFromCart\")}\r\n' top="" variant='\"link\"\r\n'> onRemoveDiscountClicked(discount)}&gt;\r\n              <i classname='\"fal' fa-lg\"="" fa-trash="">\r\n              <span classname='\"sr-only\"'>{t(\"ui.storefront.cart.removeDiscountFromItem\")}</span>\r\n            \r\n          }\r\n        \r\n        \r\n          <div classname='\"text-start' px-1\"="">\r\n            <div\r\n classname='\"form-control-static' font-weight-normal\"="" id="{`${type.toLowerCase()}DiscountName_${index}`}\r\n">\r\n              <span>{limitWithEllipses(discount.SlaveName, 13)}</span>\r\n            </div\r\n></div>\r\n          \r\n        \r\n        \r\n          <div classname='\"text-end' px-1\"="">\r\n            <div\r\n cart-price="" classname='\"d-block' form-control-static="" id="{`${type.toLowerCase()}DiscountValue_${index}`}\r\n" price="" text-end\"="">\r\n              <span>\r\n                {discount.DiscountValueType === 1\r\n                  ? currencyFormatter.format(discount.DiscountValue)\r\n                  : `${discount.DiscountValue}%`}\r\n              </span>\r\n               <span>{t(\"ui.storefront.common.Off\")}</span>\r\n            </div\r\n></div>\r\n          \r\n        \r\n        \r\n          <div\r\n cart-price="" classname='\"ps-1' d-block="" form-control-static="" id="{`${type.toLowerCase()}DiscountTotal_${index}`}\r\n" price="" text-end="" text-success\"="">\r\n            <b>{currencyFormatter.format(discount.DiscountTotal)}</b>\r\n          \r\n        \r\n      </div\r\n></i></button\r\n></row><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n    </i></listgroup.item><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Alert, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\n\r\ninterface ICartValidatorProps {\r\n  type: \"Cart\" | \"Quote Cart\";\r\n  // TODO: What does this do?\r\n  shift?: boolean;\r\n}\r\n\r\ninterface IMessageWithClass {\r\n  message: string;\r\n  alertVariant: string;\r\n}\r\n\r\nexport const CartValidator = (props: ICartValidatorProps): JSX.Element =&gt; {\r\n  const { type, shift } = props;\r\n\r\n  // eslint-disable-next-line array-bracket-spacing\r\n  const [errorMessages, setErrorMessages] = useState<imessagewithclass[]>(null);\r\n  const [ updating, setUpdating ] = useState<boolean>(false);\r\n\r\n  const cart = useCart(type);\r\n  const cartMessages = cart?.Messages;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const resolveMessage = (item: string): Promise<imessagewithclass> =&gt; new Promise((resolve, _reject) =&gt; {\r\n    switch (item.substring(0, item.indexOf(\"!\")).toUpperCase() || \"\") {\r\n      case \"SUCCESS\": {\r\n        resolve({ message: item, alertVariant: \"success\" });\r\n        break;\r\n      }\r\n      case \"WARNING\": {\r\n        if (shift) {\r\n          resolve({ message: item.replace(\"WARNING\", \"ACCEPTED\"), alertVariant: \"success\" });\r\n        } else {\r\n          resolve({ message: item, alertVariant: \"warning\" });\r\n        }\r\n        break;\r\n      }\r\n      case \"ERROR\": {\r\n        if (\r\n          item !== \"ERROR! There are no active items in this cart.\"\r\n            &amp;&amp; item !== \"ERROR! There is no cart to test\"\r\n        ) {\r\n          if (shift) {\r\n            resolve({ message: item.replace(\"ERROR\", \"WARNING\"), alertVariant: \"warning\" });\r\n          } else {\r\n            resolve({ message: item, alertVariant: \"danger\" });\r\n          }\r\n        }\r\n        if (item === \"ERROR! Some products have role restrictions.\") {\r\n          resolve({\r\n            message: t(\"ui.storefront.cartValidator.RoleRestrictions\"),\r\n            alertVariant: \"danger\"\r\n          });\r\n        }\r\n        break;\r\n      }\r\n      default: {\r\n        break;\r\n      }\r\n    }\r\n  });\r\n\r\n  const buildErrorMessages = async (): Promise<void> =&gt; {\r\n    setErrorMessages([]);\r\n    if (!cart || !cartMessages) {\r\n      return;\r\n    }\r\n    if (!updating) {\r\n      setUpdating(true);\r\n      await setTimeout(() =&gt; {\r\n        Promise.all(cartMessages.map(x =&gt; resolveMessage(x))).then(\r\n          (rarr: IMessageWithClass[]) =&gt; {\r\n            if (!rarr || !Array.isArray(rarr)) {\r\n              return;\r\n            }\r\n            setErrorMessages(rarr);\r\n            setUpdating(false);\r\n          }\r\n        );\r\n      }, 250);\r\n    }\r\n  };\r\n\r\n  useEffect(() =&gt; {\r\n    buildErrorMessages();\r\n  }, [ cart, cartMessages ]);\r\n\r\n  if (!errorMessages) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <div classname='\"alerts\"' id='\"alertCartValidationMessages\"'>\r\n          {errorMessages.map(messageData =&gt; <div key="{messageData.message}">\r\n            <alert variant="{messageData.alertVariant}">\r\n              {messageData.message}\r\n            </alert>\r\n          </div>)}\r\n        </div>\r\n      \r\n    </row>\r\n  );\r\n};\r\n","import { Anchor } from \"react-bootstrap\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ninterface IProductCardNameWidgetProps {\r\n  productName: string;\r\n  productSeoUrl: string;\r\n  rows?: number;\r\n  index?: number;\r\n}\r\n\r\nexport const ProductCardNameWidget = (props: IProductCardNameWidgetProps): JSX.Element =&gt; {\r\n  const { productName, productSeoUrl, rows, index } = props;\r\n  const cefConfig = useCefConfig();\r\n  if (!productSeoUrl) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <anchor\r\n \"productdetail\")}="" aria-label="{productName}\r\n" classname='\"text-decoration-none' href="{corsLink(cefConfig," id="{`productCatalogDetailsLinkFor_${productName}`}\r\n" product-card-name\"\r\n="" productseourl,="" title="{productName}\r\n">\r\n      <span 2}`}="" ??="" classname="{`rows-${rows" data-sid="{`cardProductName_${index}`}">\r\n        {productName}\r\n      </span>\r\n    \r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { CalculatedPrices, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\ninterface IProductCardPricingWidgetProps {\r\n  product: ProductModel;\r\n  displayStyle?: string;\r\n}\r\n\r\nexport const ProductCardPricingWidget = (props: IProductCardPricingWidgetProps): JSX.Element =&gt; {\r\n  const { product, displayStyle } = props;\r\n\r\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\r\n\r\n  const { viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n\r\n  if (viewState.running || !product || !product.readPrices || product.readPrices().loading) {\r\n    return <loadingwidget>;\r\n  }\r\n\r\n  const showLoginRequired = cefConfig?.loginForPricing.enabled &amp;&amp; !currentUser;\r\n\r\n  if (showLoginRequired) {\r\n    return (\r\n      &lt;&gt;\r\n        <button\r\n =="" classname='\"nav-link' id='\"btLoginForPricing\"\r\n' onclick="{()" p-0="" pointer="" text-capitalize\"\r\n="" variant='\"secondary\"\r\n'> setShowLoginModal(true)}&gt;\r\n          {t(\"ui.storefront.searchCatalog.loginToViewPricing\")}»\r\n        \r\n        <loginmodal\r\n =="" onconfirm="{()" show="{showLoginModal}\r\n"> {\r\n            setShowLoginModal(false);\r\n          }}\r\n          onCancel={() =&gt; setShowLoginModal(false)}\r\n        /&gt;\r\n      \r\n    );\r\n  }\r\n\r\n  let prices: CalculatedPrices = null;\r\n  if (\r\n    product?.ProductAssociations?.length\r\n    &amp;&amp; product.ProductAssociations.every(p =&gt; p.readPrices)\r\n  ) {\r\n    const sortedProductAssociations = product.ProductAssociations.sort(associatedProduct =&gt; {\r\n      const prdt = associatedProduct.Slave as ProductModel;\r\n      const prdtPrices = prdt.readPrices();\r\n\r\n      return prdtPrices.sale ? prdtPrices.sale : prdtPrices.base;\r\n    });\r\n    // Cheapest?\r\n    const cheapestProduct = sortedProductAssociations[0].Slave as ProductModel;\r\n    prices = cheapestProduct.readPrices();\r\n  }\r\n  prices = product.readPrices();\r\n\r\n  if (displayStyle === \"multiLevel\") {\r\n    return (\r\n      <row classname='\"text-center' id='\"multiLevelPriceTextWrapper\"' product-pricing\"="">\r\n        {prices.haveMsrp\r\n          &amp;&amp; \r\n            <div classname='\"w-49' d-inline-block\"="">\r\n              {t(\"ui.storefront.product.detail.featuredProducts.listPrice\")}\r\n            </div>\r\n            <div classname='\"w-49' d-inline-block="" text-end\"="">\r\n              {currencyFormatter.format(prices.msrp)}\r\n            </div>\r\n          \r\n        }\r\n        {prices.haveReduction\r\n          &amp;&amp; \r\n            <div classname='\"w-49' d-inline-block\"="">\r\n              {t(\"ui.storefront.product.detail.featuredProducts.ReductionPrice\")}\r\n            </div>\r\n            <div classname='\"w-49' d-inline-block="" text-end\"="">\r\n              {currencyFormatter.format(prices.reduction)}\r\n            </div>\r\n          \r\n        }\r\n        {/* Store's normal selling price */}\r\n        {prices.haveBase\r\n          &amp;&amp; \r\n            <div ${prices.issale="" :="" ?="" \"\"}`}="" \"strike-through\"="" classname="{`bold" d-inline-block="" w-49="">\r\n              {t(\"ui.storefront.product.detail.featuredProducts.ourPrice\")}\r\n            </div>\r\n            <div\r\n ${\r\n="" :="" ?="" \"\"\r\n="" \"strike-through\"="" classname="{`bold" d-inline-block="" prices.issale="" text-end="" w-49="" }`}="">\r\n              {currencyFormatter.format(prices.base)}\r\n            \r\n          \r\n        }\r\n        {/* Sale Price when on sale, or the normal selling price when not on sale */}\r\n        {prices.haveSale\r\n          &amp;&amp; \r\n            <div ${prices.issale="" :="" ?="" \"\"}`}="" \"text-danger\"="" big="" classname="{`bold" d-inline-block="" w-49="">\r\n              {t(\r\n                prices.isSale ? \"ui.storefront.common.SalePrice\" : \"ui.storefront.catalog.YourPrice\"\r\n              )}\r\n            </div>\r\n            <div\r\n ${\r\n="" :="" ?="" \"\"\r\n="" \"text-danger\"="" big="" classname="{`bold" d-inline-block="" prices.issale="" text-end="" w-49="" }`}="">\r\n              {currencyFormatter.format(prices.isSale ? prices.sale : prices.base)}\r\n            \r\n          \r\n        }\r\n        {/* Savings amount from normal selling price (or list if set) */}\r\n        \r\n          <div classname='\"w-49' d-inline-block="" italic\"="">\r\n            {t(\"ui.storefront.common.Saving.Plural\")}\r\n          </div>\r\n          {!prices.isSale &amp;&amp; <div classname='\"w-49' d-inline-block="" italic="" text-end\"="">‐</div>}\r\n          {prices.isSale\r\n            &amp;&amp; <div classname='\"w-49' d-inline-block="" italic="" text-end\"="">\r\n              <span>{currencyFormatter.format(prices.amountOff)}</span> \r\n              <span>{Math.round(prices.percentOff)}</span>%\r\n            </div>\r\n          }\r\n        \r\n      </div\r\n></div\r\n></row>\r\n    );\r\n  }\r\n\r\n  const smaller = displayStyle === \"sideBySideSmaller\";\r\n\r\n  return (\r\n    <row 80="" classname='\"text-center' flex-column="" id='\"sideBySidePriceTextWrapper\"' justify-content-center\"\r\n="" minheight:="" product-pricing="" style="{{" }}\r\n="">\r\n      {!prices.haveBase &amp;&amp; !prices.haveSale\r\n        &amp;&amp; \r\n          {t(\"ui.storefront.common.Free\")}\r\n        \r\n      }\r\n      {/* Store's normal selling price */}\r\n      {prices.haveBase\r\n        &amp;&amp; <col\r\n :="" ?="" \"bold="" \"strike-through="" big\"\r\n="" classname="{\r\n" id='\"ProductCardPrice\"\r\n' prices.issale\r\n="" small\"\r\n="" smaller\r\n="" text-muted="" very-big\"\r\n="" xs="{12}\r\n" }="">\r\n          {prices.base &gt; 0\r\n            ? currencyFormatter.format(prices.base)\r\n            : smaller\r\n              ? \"Inquire\"\r\n              : \"Inquire for Price\"}\r\n        \r\n      }\r\n      {/* Sale Price when on sale, hidden if not */}\r\n      {prices.isSale\r\n        &amp;&amp; \r\n          {currencyFormatter.format(prices.sale)}\r\n        \r\n      }\r\n      {/* Savings amount from normal selling price (or list if set) */}\r\n      {prices.isSale\r\n        &amp;&amp; \r\n          <span>{currencyFormatter.format(prices.amountOff)}</span> / \r\n          <span>{Math.round(prices.percentOff)}</span>% {t(\"ui.storefront.common.Off\")}\r\n        \r\n      }\r\n    </col\r\n></row>\r\n  );\r\n};\r\n\r\nProductCardPricingWidget.defaultProps = {\r\n  displayStyle: \"sideBySide\"\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\n\r\ninterface IProductCardSkuWidgetProps {\r\n  productID: number;\r\n  customKey: string;\r\n  hideLabels?: boolean;\r\n}\r\n\r\nexport const ProductCardSkuWidget = (props: IProductCardSkuWidgetProps): JSX.Element =&gt; {\r\n  const { productID, customKey, hideLabels } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <div classname='\"product-sku' p-0\"="" rows-1="">\r\n      {!hideLabels\r\n        &amp;&amp; <span id='\"CatalogProductCardSkuText\"'>{t(\"ui.storefront.cart.SKU\")}</span>\r\n      }\r\n       <span\r\n id="{`lblProductSku${productID}`}">\r\n        {customKey}\r\n      \r\n    </span\r\n></div>\r\n  );\r\n};\r\n","import { Alert } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport _ from \"lodash\";\r\n\r\ninterface IProductCardStockWidgetProps {\r\n  product: ProductModel | SalesItemBaseModel<appliedsalesorderitemdiscountmodel>;\r\n  hideStock?: boolean;\r\n  countStoreStockOnly?: boolean;\r\n  alertClasses?: string;\r\n}\r\n\r\nexport const ProductCardStockWidget = (props: IProductCardStockWidgetProps): JSX.Element =&gt; {\r\n  const { product, hideStock, countStoreStockOnly, alertClasses } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const { viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n\r\n  const hideStockInternal = !cefConfig.featureSet.inventory.enabled\r\n    || hideStock\r\n    || cefConfig.loginForInventory.enabled &amp;&amp; !currentUser\r\n    || false;\r\n\r\n  const isVariantMaster = (product as ProductModel).TypeKey === \"VARIANT-MASTER\";\r\n  return (\r\n    &lt;&gt;\r\n      {!isVariantMaster\r\n      &amp;&amp; !hideStockInternal\r\n      &amp;&amp; !viewState.running\r\n      &amp;&amp; _.isFunction(product.readInventory)\r\n      &amp;&amp; !product.readInventory().loading\r\n        ? &lt;&gt;\r\n          {product.readInventory().IsUnlimitedStock\r\n            ? <alert\r\n ??="" \"p-0="" bg-transparent="" border-0="" classname="{alertClasses" d-inline-block\"}\r\n="" id="{`InventoryUnlimitedStatusText_${product.CustomKey}`}" variant='\"success\"\r\n'>\r\n              {t(\"ui.storefront.common.Unlimited\")}\r\n            \r\n            : <span>\r\n              {product.readInventory().IsOutOfStock\r\n                ? &lt;&gt;\r\n                  {product.readInventory().AllowBackOrder\r\n                    ? <alert\r\n ??="" \"p-0="" bg-transparent="" border-0="" classname="{alertClasses" d-inline-block\"}\r\n="" id="{`InventoryBackorderStatusText_${product.CustomKey}`}" variant='\"warning\"\r\n'>\r\n                      <span>{t(\"ui.storefront.common.OnBackorder\")}</span>\r\n                    \r\n                    : <alert\r\n ??="" \"p-0="" bg-transparent="" border-0="" classname="{alertClasses" d-inline-block\"}\r\n="" id="{`InventoryOutOfStockStatusText_${product.CustomKey}`}" variant='\"danger\"\r\n'>\r\n                      <span>{t(\"ui.storefront.common.OutOfStock\")}</span>\r\n                    \r\n                  }\r\n                \r\n                : <alert ??="" \"p-0="" bg-transparent="" border-0="" classname="{alertClasses" d-inline-block\"}="" variant='\"success\"'>\r\n                  {countStoreStockOnly\r\n                    ? <span>\r\n                      {/* @ts-ignore */}\r\n                      {product.inventoryObject.storeQty}\r\n                    </span>\r\n                    : <span>{product.readInventory().QuantityOnHand || 0}</span>\r\n                  }\r\n                   \r\n                  <span id="{`InventoryInStockStatusText_${product.CustomKey}`}">\r\n                    {t(\"ui.storefront.common.InStock\")}\r\n                  </span>\r\n                </alert>\r\n              }\r\n            </alert\r\n></alert\r\n></span>\r\n          }\r\n          {viewState.running &amp;&amp; <loadingwidget message="{viewState.waitMessage}" overlay="{true}">}\r\n        \r\n        : null}\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\n// http://stackoverflow.com/questions/46190574/how-to-import-signalr-in-react-component\r\nimport { JsonHubProtocol, HubConnectionState, HubConnectionBuilder, LogLevel } from \"@microsoft/signalr\";\r\n\r\nasync function startSignalRConnection(connection) {\r\n  try {\r\n    await connection.start();\r\n    console.assert(connection.state === HubConnectionState.Connected);\r\n    console.log(\"SignalR connection established\");\r\n  } catch (err) {\r\n    console.assert(connection.state === HubConnectionState.Disconnected);\r\n    console.error(\"SignalR Connection Error: \", err);\r\n    setTimeout(() =&gt; startSignalRConnection(connection), 5000);\r\n  }\r\n  if (connection.state === HubConnectionState.Connected) {\r\n    return connection;\r\n  }\r\n  return null;\r\n}\r\n\r\n// Set up a SignalR connection to the specified hub URL, and actionEventMap.\r\n// actionEventMap should be an object mapping event names, to eventHandlers that will\r\n// be dispatched with the message body.\r\nexport const setupSignalRConnection = async (cefConfig) =&gt; {\r\n  const connectionHub = cefConfig.featureSet.signalR.root + cefConfig.featureSet.signalR.path + '/hubs';\r\n\r\n  // create the connection instance\r\n  // withAutomaticReconnect will automatically try to reconnect\r\n  // and generate a new socket connection if needed\r\n\r\n  const connection = new HubConnectionBuilder()\r\n    .withUrl(connectionHub)\r\n    .withAutomaticReconnect()\r\n    .withHubProtocol(new JsonHubProtocol())\r\n    .configureLogging(LogLevel.Information)\r\n    .build();\r\n\r\n  // Note: to keep the connection open the serverTimeout should be\r\n  // larger than the KeepAlive value that is set on the server\r\n  // keepAliveIntervalInMilliseconds default is 15000 and we are using default\r\n  // serverTimeoutInMilliseconds default is 30000 and we are using 60000 set below\r\n  connection.serverTimeoutInMilliseconds = 60000;\r\n\r\n  // re-establish the connection if connection dropped\r\n  connection.onclose(error =&gt; {\r\n    console.assert(connection.state === HubConnectionState.Disconnected);\r\n    console.log(\"Connection closed due to error. Try refreshing this page to restart the connection\", error);\r\n  });\r\n\r\n  connection.onreconnecting(error =&gt; {\r\n    console.assert(connection.state === HubConnectionState.Reconnecting);\r\n    console.log(\"Connection lost due to error. Reconnecting.\", error);\r\n  });\r\n\r\n  connection.onreconnected(connectionId =&gt; {\r\n    console.assert(connection.state === HubConnectionState.Connected);\r\n    console.log(\"Connection reestablished. Connected with connectionId\", connectionId);\r\n  });\r\n\r\n  await startSignalRConnection(connection);\r\n\r\n  return connection;\r\n};\r\n","/**\r\n * @file _api/cvApi._DtoClasses.ts\r\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Endpoints generated based on C# routes.\r\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\r\n */\r\nimport {\r\n\tAmARelationshipTableModel,\r\n\tHaveJsonAttributesBaseModel,\r\n\tHaveATypeModel,\r\n\tPagedResultsBase,\r\n\tAmAStoredFileRelationshipTableModel,\r\n\tHaveSeoBaseModel,\r\n\tIImageBaseModel,\r\n\tAmFilterableByAccountBaseModel,\r\n\tHaveNotesBaseModel,\r\n\tHaveImagesBaseModel,\r\n\tHaveStoredFilesBaseModel,\r\n\tAmFilterableByBrandsBaseModel,\r\n\tAmFilterableByFranchisesBaseModel,\r\n\tAmFilterableByProductsBaseModel,\r\n\tAmFilterableByStoresBaseModel,\r\n\tAmFilterableByUsersBaseModel,\r\n\tAmFilterableByVendorsBaseModel,\r\n\tHaveAStatusModel,\r\n\tAmFilterableByBrandBaseSearchModel,\r\n\tAmFilterableByFranchiseBaseSearchModel,\r\n\tAmFilterableByProductBaseSearchModel,\r\n\tAmFilterableByStoreBaseSearchModel,\r\n\tAmFilterableByUserBaseSearchModel,\r\n\tAmFilterableByVendorBaseSearchModel,\r\n\tHaveAStatusSearchModel,\r\n\tHaveATypeSearchModel,\r\n\tAmFilterableByAccountsBaseModel,\r\n\tAppliedDiscountBaseModel,\r\n\tHaveANullableContactBaseModel,\r\n\tHaveAContactBaseSearchModel,\r\n\tSearchViewModelBase,\r\n\tAmFilterableByUserBaseModel,\r\n\tAmFilterableByBrandBaseModel,\r\n\tAmFilterableByCategoriesBaseModel,\r\n\tHaveOrderMinimumsBaseModel,\r\n\tHaveFreeShippingMinimumsBaseModel,\r\n\tAmFilterableByAccountBaseSearchModel,\r\n\tAmFilterableByCategoryBaseSearchModel,\r\n\tSalesCollectionBaseModelT,\r\n\tHaveAStateModel,\r\n\tAmFilterableByNullableAccountBaseModel,\r\n\tAmFilterableByNullableBrandBaseModel,\r\n\tAmFilterableByNullableFranchiseBaseModel,\r\n\tAmFilterableByNullableStoreBaseModel,\r\n\tAmFilterableByNullableUserBaseModel,\r\n\tAmFilterableByCategoryBaseModel,\r\n\tHaveAParentBaseModel,\r\n\tHaveRequiresRolesBaseModel,\r\n\tAmFilterableByManufacturersBaseModel,\r\n\tAmFilterableByFranchiseBaseModel,\r\n\tAmFilterableByManufacturerBaseSearchModel,\r\n\tAmFilterableByProductBaseModel,\r\n\tHaveDimensionsBaseModel,\r\n\tHaveNullableDimensionsBaseModel,\r\n\tHaveAStateSearchModel,\r\n\tDictionary,\r\n\tHaveAContactBaseModel,\r\n\tGuid,\r\n\tKeyValuePair,\r\n\tSalesItemBaseModel,\r\n\tIAuthTokens,\r\n} from \"./cvApi.shared\";\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface AccountAssociationModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel>, HaveATypeModel<typemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface AccountAssociationTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface AccountContactModel extends AmARelationshipTableNameableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tMasterName?: string;\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n\tIsBilling?: boolean;\r\n\tIsPrimary?: boolean;\r\n\tTransmittedToERP?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface AccountFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link AmFilterableByAccountBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface AccountImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByAccountBaseModel, HaveATypeModel<typemodel> {\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveImagesBaseModel<accountimagemodel>}\r\n * @see {@link HaveStoredFilesBaseModel<accountfilemodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandaccountmodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchiseaccountmodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<accountproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storeaccountmodel>}\r\n * @see {@link AmFilterableByUsersBaseModel<usermodel>}\r\n * @see {@link AmFilterableByVendorsBaseModel<vendoraccountmodel>}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface AccountModel extends NameableBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<accountimagemodel>, HaveStoredFilesBaseModel<accountfilemodel>, AmFilterableByBrandsBaseModel<brandaccountmodel>, AmFilterableByFranchisesBaseModel<franchiseaccountmodel>, AmFilterableByProductsBaseModel<accountproductmodel>, AmFilterableByStoresBaseModel<storeaccountmodel>, AmFilterableByUsersBaseModel<usermodel>, AmFilterableByVendorsBaseModel<vendoraccountmodel>, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tAccountAssociations?: Array<accountassociationmodel>;\r\n\tIsOnHold?: boolean;\r\n\tIsTaxable?: boolean;\r\n\tAccountContacts?: Array<accountcontactmodel>;\r\n\tAccountPricePoints?: Array<accountpricepointmodel>;\r\n\tCredit?: number;\r\n\tCreditCurrencyID?: number;\r\n\tCreditCurrencyKey?: string;\r\n\tCreditCurrencyName?: string;\r\n\tCreditCurrency?: CurrencyModel;\r\n\tSageID?: string;\r\n\tTaxEntityUseCode?: string;\r\n\tTaxExemptionNo?: string;\r\n\tToken?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<accountmodel>}\r\n * @public\r\n */\r\nexport interface AccountPagedResults extends PagedResultsBase<accountmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<pricepointmodel>}\r\n * @public\r\n */\r\nexport interface AccountPricePointModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<pricepointmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface AccountProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel>, HaveATypeModel<typemodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link AmFilterableByVendorBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface AccountSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\r\n\tAccessibleFromAccountID?: number;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tIsOnHold?: boolean;\r\n\tIsTaxable?: boolean;\r\n\tMinCredit?: number;\r\n\tMaxCredit?: number;\r\n\tMatchCredit?: number;\r\n\tMatchCreditIncludeNull?: boolean;\r\n\tCreditCurrencyID?: number;\r\n\tCreditCurrencyIDIncludeNull?: boolean;\r\n\tSageID?: string;\r\n\tSageIDStrict?: boolean;\r\n\tSageIDIncludeNull?: boolean;\r\n\tTaxEntityUseCode?: string;\r\n\tTaxEntityUseCodeStrict?: boolean;\r\n\tTaxEntityUseCodeIncludeNull?: boolean;\r\n\tTaxExemptionNo?: string;\r\n\tTaxExemptionNoStrict?: boolean;\r\n\tTaxExemptionNoIncludeNull?: boolean;\r\n\tToken?: string;\r\n\tTokenStrict?: boolean;\r\n\tTokenIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface AccountStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface AccountTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface AccountWebhookReturn {\r\n\taccount_id?: number; // Name format overridden\r\n\tcompany?: string; // Name format overridden\r\n\taddress?: string; // Name format overridden\r\n\tcity?: string; // Name format overridden\r\n\tstate?: string; // Name format overridden\r\n\tpostal_code?: string; // Name format overridden\r\n\tcountry?: string; // Name format overridden\r\n\tphone?: string; // Name format overridden\r\n\taccount_type?: string; // Name format overridden\r\n\turl?: string; // Name format overridden\r\n\tcompany_type?: string; // Name format overridden\r\n\tinc_country?: string; // Name format overridden\r\n\tinc_state?: string; // Name format overridden\r\n\tcreated?: Date; // Name format overridden\r\n\turi?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @public\r\n */\r\nexport interface AdAccountModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<brandmodel>}\r\n * @public\r\n */\r\nexport interface AdBrandModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<brandmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface AddressModel extends BaseModel {\r\n\tCountryID?: number;\r\n\tCountryKey?: string;\r\n\tCountryName?: string;\r\n\tCountryCode?: string;\r\n\tCountry?: CountryModel;\r\n\tLatitude?: number;\r\n\tLongitude?: number;\r\n\tRegionID?: number;\r\n\tRegionKey?: string;\r\n\tRegionName?: string;\r\n\tRegionCode?: string;\r\n\tRegion?: RegionModel;\r\n\tCity?: string;\r\n\tCompany?: string;\r\n\tCountryCustom?: string;\r\n\tPostalCode?: string;\r\n\tRegionCustom?: string;\r\n\tStreet1?: string;\r\n\tStreet2?: string;\r\n\tStreet3?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface AddressValidationResultModel {\r\n\tAccountContactID?: number;\r\n\tContactID?: number;\r\n\tAddressID?: number;\r\n\tIsValid: boolean;\r\n\tMessage?: string;\r\n\tSourceAddress?: AddressModel;\r\n\tMergedAddress?: AddressModel;\r\n\tValidatedAddress?: AddressModel;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<franchisemodel>}\r\n * @public\r\n */\r\nexport interface AdFranchiseModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<franchisemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface AdImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveImagesBaseModel<adimagemodel>}\r\n * @see {@link AmFilterableByAccountsBaseModel<adaccountmodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<adbrandmodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<adfranchisemodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<adstoremodel>}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface AdModel extends NameableBaseModel, HaveImagesBaseModel<adimagemodel>, AmFilterableByAccountsBaseModel<adaccountmodel>, AmFilterableByBrandsBaseModel<adbrandmodel>, AmFilterableByFranchisesBaseModel<adfranchisemodel>, AmFilterableByStoresBaseModel<adstoremodel>, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tImpressionCounterID?: number;\r\n\tImpressionCounterKey?: string;\r\n\tImpressionCounter?: CounterModel;\r\n\tClickCounterID?: number;\r\n\tClickCounterKey?: string;\r\n\tClickCounter?: CounterModel;\r\n\tEndDate?: Date;\r\n\tExpirationDate?: Date;\r\n\tStartDate?: Date;\r\n\tWeight?: number;\r\n\tAdZones?: Array<adzonemodel>;\r\n\tCampaignAds?: Array<campaignadmodel>;\r\n\tCaption?: string;\r\n\tTargetURL?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<storemodel>}\r\n * @public\r\n */\r\nexport interface AdStoreModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<storemodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface AdZoneAccessModel extends NameableBaseModel {\r\n\tExpired: boolean;\r\n\tUniqueAdLimitReached: boolean;\r\n\tImpressionLimitReached: boolean;\r\n\tClickLimitReached: boolean;\r\n\tCanAddAds: boolean;\r\n\tImpressionCounterID?: number;\r\n\tImpressionCounterKey?: string;\r\n\tImpressionCounter?: CounterModel;\r\n\tClickCounterID?: number;\r\n\tClickCounterKey?: string;\r\n\tClickCounter?: CounterModel;\r\n\tEndDate?: Date;\r\n\tStartDate?: Date;\r\n\tAdZones?: Array<adzonemodel>;\r\n\tClickLimit?: number;\r\n\tImpressionLimit?: number;\r\n\tUniqueAdLimit?: number;\r\n\tSubscriptionID?: number;\r\n\tSubscriptionKey?: string;\r\n\tSubscriptionName?: string;\r\n\tSubscription?: SubscriptionModel;\r\n\tZoneID?: number;\r\n\tZoneKey?: string;\r\n\tZoneName?: string;\r\n\tZone?: ZoneModel;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<zonemodel>}\r\n * @public\r\n */\r\nexport interface AdZoneModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<zonemodel> {\r\n\tImpressionCounterID?: number;\r\n\tImpressionCounterKey?: string;\r\n\tImpressionCounter?: CounterModel;\r\n\tClickCounterID?: number;\r\n\tClickCounterKey?: string;\r\n\tClickCounter?: CounterModel;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tAdZoneAccessID?: number;\r\n\tAdZoneAccessKey?: string;\r\n\tAdZoneAccessName?: string;\r\n\tAdZoneAccess?: AdZoneAccessModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<adzonemodel>}\r\n * @public\r\n */\r\nexport interface AdZonePagedResults extends PagedResultsBase<adzonemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface AdZoneSearchModel extends AmARelationshipTableBaseSearchModel {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tAdZoneAccessID?: number;\r\n\tAdZoneAccessIDIncludeNull?: boolean;\r\n\tClickCounterID?: number;\r\n\tClickCounterIDIncludeNull?: boolean;\r\n\tImpressionCounterID?: number;\r\n\tImpressionCounterIDIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AggregateRangeBase}\r\n * @public\r\n */\r\nexport interface AggregatePricingRange extends AggregateRangeBase {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface AggregateRangeBase {\r\n\tFrom?: number;\r\n\tTo?: number;\r\n\tLabel?: string;\r\n\tDocCount?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AggregateRangeBase}\r\n * @public\r\n */\r\nexport interface AggregateRatingRange extends AggregateRangeBase {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface AggregateTree {\r\n\tKey?: string;\r\n\tDocCount?: number;\r\n\tDocCountErrorUpperBound?: number;\r\n\tHasChildren: boolean;\r\n\tChildren?: Array<aggregatetree>;\r\n\tSumOtherDocCount?: number;\r\n\tOriginalDocCount?: number;\r\n\tMergedDocCount?: number;\r\n\tSuspectedThisLevelDocCount?: number;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface AmARelationshipTableBaseModel extends BaseModel {\r\n\tMasterID?: number;\r\n\tMasterKey?: string;\r\n\tSlaveID?: number;\r\n\tSlaveKey?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @public\r\n */\r\nexport interface AmARelationshipTableBaseSearchModel extends BaseSearchModel {\r\n\tMasterID?: number;\r\n\tMasterIDs?: Array<number>;\r\n\tMasterKey?: string;\r\n\tSlaveID?: number;\r\n\tSlaveIDs?: Array<number>;\r\n\tSlaveKey?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface AmARelationshipTableNameableBaseModel extends AmARelationshipTableBaseModel, NameableBaseModel {\r\n\tName?: string;\r\n\tDescription?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface AnswerModel extends BaseModel {\r\n\tOptionID: number;\r\n\tOptionKey?: string;\r\n\tOption?: QuestionOptionModel;\r\n\tQuestionID: number;\r\n\tQuestionKey?: string;\r\n\tQuestion?: QuestionModel;\r\n\tUserID: number;\r\n\tUserKey?: string;\r\n\tUserUserName?: string;\r\n\tUser?: UserModel;\r\n\tAdditionalInformation?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ApiKeyWebhookReturn {\r\n\tapi_key?: string; // Name format overridden\r\n\taccount_id?: string; // Name format overridden\r\n\tuser_id?: string; // Name format overridden\r\n\twebhook?: string; // Name format overridden\r\n\tcreated?: Date; // Name format overridden\r\n\turi?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedCartDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedCartItemDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedPurchaseOrderDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedPurchaseOrderItemDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesInvoiceDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesInvoiceItemDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesOrderDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesOrderItemDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesQuoteDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesQuoteItemDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesReturnDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSalesReturnItemDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSampleRequestDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AppliedDiscountBaseModel}\r\n * @public\r\n */\r\nexport interface AppliedSampleRequestItemDiscountModel extends AmARelationshipTableBaseModel, AppliedDiscountBaseModel {\r\n\tDiscountIsAutoApplied: boolean;\r\n\tTargetApplicationsUsed?: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface AppointmentModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tCalendars?: Array<calendarappointmentmodel>;\r\n\tAppointmentEnd?: Date;\r\n\tAppointmentStart?: Date;\r\n\tSalesOrderID?: number;\r\n\tSalesOrderKey?: string;\r\n\tSalesOrder?: SalesOrderModel;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface AttributeGroupModel extends TypableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<attributegroupmodel>}\r\n * @public\r\n */\r\nexport interface AttributeGroupPagedResults extends PagedResultsBase<attributegroupmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface AttributeGroupSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface AttributeTabModel extends TypableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<attributetabmodel>}\r\n * @public\r\n */\r\nexport interface AttributeTabPagedResults extends PagedResultsBase<attributetabmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface AttributeTabSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface AttributeTypeModel extends TypableBaseModel {\r\n\tGeneralAttributes?: Array<generalattributemodel>;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<attributetypemodel>}\r\n * @public\r\n */\r\nexport interface AttributeTypePagedResults extends PagedResultsBase<attributetypemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface AttributeTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface AuctionCatalogSearchForm extends SearchFormBase {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface AuctionIndexableModel extends IndexableModelBase {\r\n\tBidCount: number;\r\n\tClosesAt?: Date;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandauctionmodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchiseauctionmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storeauctionmodel>}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @public\r\n */\r\nexport interface AuctionModel extends NameableBaseModel, AmFilterableByBrandsBaseModel<brandauctionmodel>, AmFilterableByFranchisesBaseModel<franchiseauctionmodel>, AmFilterableByStoresBaseModel<storeauctionmodel>, HaveAStatusModel, HaveATypeModel<typemodel>, HaveANullableContactBaseModel {\r\n\tAccountID: number;\r\n\tAccountKey?: string;\r\n\tAccountName?: string;\r\n\tAccount?: AccountModel;\r\n\tClosesAt?: Date;\r\n\tFee?: number;\r\n\tIncrementProfileID?: number;\r\n\tIncrementProfileKey?: string;\r\n\tIncrementProfileName?: string;\r\n\tIncrementProfile?: IncrementProfileModel;\r\n\tOpensAt?: Date;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<auctionmodel>}\r\n * @public\r\n */\r\nexport interface AuctionPagedResults extends PagedResultsBase<auctionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @see {@link HaveAContactBaseSearchModel}\r\n * @public\r\n */\r\nexport interface AuctionSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\r\n\tUserID?: number;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tContactIDIncludeNull?: boolean;\r\n\tContactKeyStrict?: boolean;\r\n\tContactKeyIncludeNull?: boolean;\r\n\tContactFirstNameStrict?: boolean;\r\n\tContactFirstNameIncludeNull?: boolean;\r\n\tContactLastNameStrict?: boolean;\r\n\tContactLastNameIncludeNull?: boolean;\r\n\tContactPhoneStrict?: boolean;\r\n\tContactPhoneIncludeNull?: boolean;\r\n\tContactFaxStrict?: boolean;\r\n\tContactFaxIncludeNull?: boolean;\r\n\tContactEmailStrict?: boolean;\r\n\tContactEmailIncludeNull?: boolean;\r\n\tAccountID?: number;\r\n\tMinClosesAt?: Date;\r\n\tMaxClosesAt?: Date;\r\n\tMatchClosesAt?: Date;\r\n\tMatchClosesAtIncludeNull?: boolean;\r\n\tMinFee?: number;\r\n\tMaxFee?: number;\r\n\tMatchFee?: number;\r\n\tMatchFeeIncludeNull?: boolean;\r\n\tIncrementProfileID?: number;\r\n\tIncrementProfileIDIncludeNull?: boolean;\r\n\tMinOpensAt?: Date;\r\n\tMaxOpensAt?: Date;\r\n\tMatchOpensAt?: Date;\r\n\tMatchOpensAtIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<auctioncatalogsearchform,auctionindexablemodel>}\r\n * @public\r\n */\r\nexport interface AuctionSearchViewModel extends SearchViewModelBase<auctioncatalogsearchform,auctionindexablemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface AuctionSuggestResult extends SuggestResultBase {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface AuthenticateResponse {\r\n\tUserId?: string;\r\n\tSessionId?: string;\r\n\tUserName?: string;\r\n\tDisplayName?: string;\r\n\tReferrerUrl?: string;\r\n\tBearerToken?: string;\r\n\tRefreshToken?: string;\r\n\tResponseStatus?: ResponseStatus;\r\n\tMeta?: Dictionary<string>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface AuthUserSession {\r\n\tReferrerUrl?: string;\r\n\tId?: string;\r\n\tUserAuthId?: string;\r\n\tUserAuthName?: string;\r\n\tUserName?: string;\r\n\tTwitterUserId?: string;\r\n\tTwitterScreenName?: string;\r\n\tFacebookUserId?: string;\r\n\tFacebookUserName?: string;\r\n\tFirstName?: string;\r\n\tLastName?: string;\r\n\tDisplayName?: string;\r\n\tCompany?: string;\r\n\tEmail?: string;\r\n\tPrimaryEmail?: string;\r\n\tPhoneNumber?: string;\r\n\tBirthDate?: Date;\r\n\tBirthDateRaw?: string;\r\n\tAddress?: string;\r\n\tAddress2?: string;\r\n\tCity?: string;\r\n\tState?: string;\r\n\tCountry?: string;\r\n\tCulture?: string;\r\n\tFullName?: string;\r\n\tGender?: string;\r\n\tLanguage?: string;\r\n\tMailAddress?: string;\r\n\tNickname?: string;\r\n\tPostalCode?: string;\r\n\tTimeZone?: string;\r\n\tRequestTokenSecret?: string;\r\n\tCreatedAt: Date;\r\n\tLastModified: Date;\r\n\tRoles?: Array<string>;\r\n\tPermissions?: Array<string>;\r\n\tIsAuthenticated: boolean;\r\n\tFromToken: boolean;\r\n\tProfileUrl?: string;\r\n\tSequence?: string;\r\n\tTag: number;\r\n\tAuthProvider?: string;\r\n\tProviderOAuthAccess?: Array<iauthtokens>;\r\n\tMeta?: Dictionary<string>;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface BadgeImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveImagesBaseModel<badgeimagemodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface BadgeModel extends NameableBaseModel, HaveImagesBaseModel<badgeimagemodel>, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link HaveJsonAttributesBaseModel}\r\n * @public\r\n */\r\nexport interface BaseModel extends HaveJsonAttributesBaseModel {\r\n\tID: number;\r\n\tCustomKey?: string;\r\n\tActive: boolean;\r\n\tCreatedDate: Date;\r\n\tUpdatedDate?: Date;\r\n\tHash?: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface BaseSearchModel {\r\n\tID?: number;\r\n\tIDs?: Array<number>;\r\n\tExcludedID?: number;\r\n\tNotIDs?: Array<number>;\r\n\tActive?: boolean;\r\n\tCustomKey?: string;\r\n\tCustomKeyStrict?: boolean;\r\n\tCustomKeys?: Array<string>;\r\n\tCustomKeysStrict?: boolean;\r\n\tIDOrCustomKey?: string;\r\n\tModifiedSince?: Date;\r\n\tMinUpdatedOrCreatedDate?: Date;\r\n\tMaxUpdatedOrCreatedDate?: Date;\r\n\tPaging?: Paging;\r\n\tGroupings?: Array<grouping>;\r\n\tSorts?: Array<sort>;\r\n\tJsonAttributes?: Dictionary<array<string>&gt;;\r\n\tAsListing?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link AmFilterableByUserBaseModel}\r\n * @public\r\n */\r\nexport interface BidModel extends BaseModel, AmFilterableByUserBaseModel {\r\n\tUserUserName?: string;\r\n\tCurrentBid?: number;\r\n\tLotID?: number;\r\n\tLotKey?: string;\r\n\tLotName?: string;\r\n\tLot?: LotModel;\r\n\tMaxBid?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<bidmodel>}\r\n * @public\r\n */\r\nexport interface BidPagedResults extends PagedResultsBase<bidmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @public\r\n */\r\nexport interface BidSearchModel extends BaseSearchModel, AmFilterableByUserBaseSearchModel {\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tMinCurrentBid?: number;\r\n\tMaxCurrentBid?: number;\r\n\tMatchCurrentBid?: number;\r\n\tMatchCurrentBidIncludeNull?: boolean;\r\n\tLotID?: number;\r\n\tLotIDIncludeNull?: boolean;\r\n\tMinMaxBid?: number;\r\n\tMaxMaxBid?: number;\r\n\tMatchMaxBid?: number;\r\n\tMatchMaxBidIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @public\r\n */\r\nexport interface BrandAccountModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n\tPricePointID?: number;\r\n\tPricePointKey?: string;\r\n\tPricePointName?: string;\r\n\tPricePointDisplayName?: string;\r\n\tPricePointTranslationKey?: string;\r\n\tPricePointSortOrder?: number;\r\n\tPricePoint?: PricePointModel;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<auctionmodel>}\r\n * @public\r\n */\r\nexport interface BrandAuctionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<auctionmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<categorymodel>}\r\n * @public\r\n */\r\nexport interface BrandCategoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<categorymodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<currencymodel>}\r\n * @public\r\n */\r\nexport interface BrandCurrencyModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<currencymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsPrimary?: boolean;\r\n\tOverrideUnicodeSymbolValue?: number;\r\n\tOverrideDecimalPlaceAccuracy?: number;\r\n\tOverrideUseSeparator?: boolean;\r\n\tCustomName?: string;\r\n\tCustomTranslationKey?: string;\r\n\tOverrideHtmlCharacterCode?: string;\r\n\tOverrideHtmlDecimalCharacterCode?: string;\r\n\tOverrideHtmlSeparatorCharacterCode?: string;\r\n\tOverrideRawCharacter?: string;\r\n\tOverrideRawDecimalCharacter?: string;\r\n\tOverrideRawSeparatorCharacter?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<brandcurrencymodel>}\r\n * @public\r\n */\r\nexport interface BrandCurrencyPagedResults extends PagedResultsBase<brandcurrencymodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @public\r\n */\r\nexport interface BrandCurrencySearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByBrandBaseSearchModel {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tIsPrimary?: boolean;\r\n\tMinOverrideUnicodeSymbolValue?: number;\r\n\tMaxOverrideUnicodeSymbolValue?: number;\r\n\tMatchOverrideUnicodeSymbolValue?: number;\r\n\tMinOverrideDecimalPlaceAccuracy?: number;\r\n\tMaxOverrideDecimalPlaceAccuracy?: number;\r\n\tMatchOverrideDecimalPlaceAccuracy?: number;\r\n\tMatchOverrideDecimalPlaceAccuracyIncludeNull?: boolean;\r\n\tOverrideUseSeparator?: boolean;\r\n\tOverrideUseSeparatorIncludeNull?: boolean;\r\n\tCustomName?: string;\r\n\tCustomNameStrict?: boolean;\r\n\tCustomNameIncludeNull?: boolean;\r\n\tCustomTranslationKey?: string;\r\n\tCustomTranslationKeyStrict?: boolean;\r\n\tCustomTranslationKeyIncludeNull?: boolean;\r\n\tOverrideHtmlCharacterCode?: string;\r\n\tOverrideHtmlCharacterCodeStrict?: boolean;\r\n\tOverrideHtmlCharacterCodeIncludeNull?: boolean;\r\n\tOverrideHtmlDecimalCharacterCode?: string;\r\n\tOverrideHtmlDecimalCharacterCodeStrict?: boolean;\r\n\tOverrideHtmlDecimalCharacterCodeIncludeNull?: boolean;\r\n\tOverrideHtmlSeparatorCharacterCode?: string;\r\n\tOverrideHtmlSeparatorCharacterCodeStrict?: boolean;\r\n\tOverrideHtmlSeparatorCharacterCodeIncludeNull?: boolean;\r\n\tOverrideRawCharacter?: string;\r\n\tOverrideRawCharacterStrict?: boolean;\r\n\tOverrideRawCharacterIncludeNull?: boolean;\r\n\tOverrideRawDecimalCharacter?: string;\r\n\tOverrideRawDecimalCharacterStrict?: boolean;\r\n\tOverrideRawDecimalCharacterIncludeNull?: boolean;\r\n\tOverrideRawSeparatorCharacter?: string;\r\n\tOverrideRawSeparatorCharacterStrict?: boolean;\r\n\tOverrideRawSeparatorCharacterIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<franchisemodel>}\r\n * @public\r\n */\r\nexport interface BrandFranchiseModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<franchisemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link AmFilterableByBrandBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface BrandImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByBrandBaseModel, HaveATypeModel<typemodel> {\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<inventorylocationmodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface BrandInventoryLocationModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<inventorylocationmodel>, HaveATypeModel<typemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<languagemodel>}\r\n * @public\r\n */\r\nexport interface BrandLanguageModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<languagemodel> {\r\n\tMasterName?: string;\r\n\tOverrideISO639_1_2002?: string;\r\n\tOverrideISO639_2_1998?: string;\r\n\tOverrideISO639_3_2007?: string;\r\n\tOverrideISO639_5_2008?: string;\r\n\tOverrideLocale?: string;\r\n\tOverrideUnicodeName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<brandlanguagemodel>}\r\n * @public\r\n */\r\nexport interface BrandLanguagePagedResults extends PagedResultsBase<brandlanguagemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @public\r\n */\r\nexport interface BrandLanguageSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByBrandBaseSearchModel {\r\n\tMasterName?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tOverrideISO639_1_2002?: string;\r\n\tOverrideISO639_1_2002Strict?: boolean;\r\n\tOverrideISO639_1_2002IncludeNull?: boolean;\r\n\tOverrideISO639_2_1998?: string;\r\n\tOverrideISO639_2_1998Strict?: boolean;\r\n\tOverrideISO639_2_1998IncludeNull?: boolean;\r\n\tOverrideISO639_3_2007?: string;\r\n\tOverrideISO639_3_2007Strict?: boolean;\r\n\tOverrideISO639_3_2007IncludeNull?: boolean;\r\n\tOverrideISO639_5_2008?: string;\r\n\tOverrideISO639_5_2008Strict?: boolean;\r\n\tOverrideISO639_5_2008IncludeNull?: boolean;\r\n\tOverrideLocale?: string;\r\n\tOverrideLocaleStrict?: boolean;\r\n\tOverrideLocaleIncludeNull?: boolean;\r\n\tOverrideUnicodeName?: string;\r\n\tOverrideUnicodeNameStrict?: boolean;\r\n\tOverrideUnicodeNameIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<manufacturermodel>}\r\n * @public\r\n */\r\nexport interface BrandManufacturerModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<manufacturermodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveImagesBaseModel<brandimagemodel>}\r\n * @see {@link AmFilterableByAccountsBaseModel<brandaccountmodel>}\r\n * @see {@link AmFilterableByCategoriesBaseModel<brandcategorymodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<brandfranchisemodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<brandproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<brandstoremodel>}\r\n * @see {@link AmFilterableByUsersBaseModel<brandusermodel>}\r\n * @see {@link HaveOrderMinimumsBaseModel}\r\n * @see {@link HaveFreeShippingMinimumsBaseModel}\r\n * @public\r\n */\r\nexport interface BrandModel extends NameableBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<brandimagemodel>, AmFilterableByAccountsBaseModel<brandaccountmodel>, AmFilterableByCategoriesBaseModel<brandcategorymodel>, AmFilterableByFranchisesBaseModel<brandfranchisemodel>, AmFilterableByProductsBaseModel<brandproductmodel>, AmFilterableByStoresBaseModel<brandstoremodel>, AmFilterableByUsersBaseModel<brandusermodel>, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\r\n\tBrandCurrencies?: Array<brandcurrencymodel>;\r\n\tBrandInventoryLocations?: Array<brandinventorylocationmodel>;\r\n\tBrandLanguages?: Array<brandlanguagemodel>;\r\n\tBrandSiteDomains?: Array<brandsitedomainmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<brandmodel>}\r\n * @public\r\n */\r\nexport interface BrandPagedResults extends PagedResultsBase<brandmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @public\r\n */\r\nexport interface BrandProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n\tPriceBase?: number;\r\n\tPriceMsrp?: number;\r\n\tPriceReduction?: number;\r\n\tPriceSale?: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByCategoryBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @public\r\n */\r\nexport interface BrandSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel {\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmount?: number;\r\n\tMaxMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmount?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmount?: number;\r\n\tMaxMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountAfter?: number;\r\n\tMaxMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\r\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferProductID?: number;\r\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmount?: number;\r\n\tMaxMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountAfter?: number;\r\n\tMaxMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\r\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferProductID?: number;\r\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessage?: string;\r\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<sitedomainmodel>}\r\n * @public\r\n */\r\nexport interface BrandSiteDomainModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<sitedomainmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<brandsitedomainmodel>}\r\n * @public\r\n */\r\nexport interface BrandSiteDomainPagedResults extends PagedResultsBase<brandsitedomainmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @public\r\n */\r\nexport interface BrandSiteDomainSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByBrandBaseSearchModel {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<storemodel>}\r\n * @public\r\n */\r\nexport interface BrandStoreModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<storemodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface BrandUserModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tSlaveUserName?: string;\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<vendormodel>}\r\n * @public\r\n */\r\nexport interface BrandVendorModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<vendormodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface BulkOrderHeadersModel {\r\n\tFileHeaders?: Array<string>;\r\n\tSystemHeaders?: Array<string>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CalculatedInventory {\r\n\tProductID: number;\r\n\tIsDiscontinued: boolean;\r\n\tIsUnlimitedStock: boolean;\r\n\tIsOutOfStock: boolean;\r\n\tQuantityPresent?: number;\r\n\tQuantityAllocated?: number;\r\n\tQuantityOnHand?: number;\r\n\tMaximumPurchaseQuantity?: number;\r\n\tMaximumPurchaseQuantityIfPastPurchased?: number;\r\n\tAllowBackOrder: boolean;\r\n\tMaximumBackOrderPurchaseQuantity?: number;\r\n\tMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\r\n\tMaximumBackOrderPurchaseQuantityGlobal?: number;\r\n\tAllowPreSale: boolean;\r\n\tPreSellEndDate?: Date;\r\n\tQuantityPreSellable?: number;\r\n\tQuantityPreSold?: number;\r\n\tMaximumPrePurchaseQuantity?: number;\r\n\tMaximumPrePurchaseQuantityIfPastPurchased?: number;\r\n\tMaximumPrePurchaseQuantityGlobal?: number;\r\n\tRelevantLocations?: Array<productinventorylocationsectionmodel>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CalculatedPrice {\r\n\tBasePrice: number;\r\n\tSalePrice?: number;\r\n\tMsrpPrice?: number;\r\n\tReductionPrice?: number;\r\n\tPricingProvider?: string;\r\n\tPriceKey?: string;\r\n\tPriceKeyAlt?: string;\r\n\tRelevantRules?: Array<pricerulemodel>;\r\n\tUsedRules?: Array<pricerulemodel>;\r\n\tIsValid: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<appointmentmodel>}\r\n * @public\r\n */\r\nexport interface CalendarAppointmentModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<appointmentmodel> {\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface CalendarModel extends BaseModel {\r\n\tAppointments?: Array<calendarappointmentmodel>;\r\n\tAccountID: number;\r\n\tAccountKey?: string;\r\n\tAccountName?: string;\r\n\tAccount?: AccountModel;\r\n\tFridayHoursEnd?: number;\r\n\tFridayHoursStart?: number;\r\n\tMondayHoursEnd?: number;\r\n\tMondayHoursStart?: number;\r\n\tSaturdayHoursEnd?: number;\r\n\tSaturdayHoursStart?: number;\r\n\tSundayHoursEnd?: number;\r\n\tSundayHoursStart?: number;\r\n\tThursdayHoursEnd?: number;\r\n\tThursdayHoursStart?: number;\r\n\tTuesdayHoursEnd?: number;\r\n\tTuesdayHoursStart?: number;\r\n\tWednesdayHoursEnd?: number;\r\n\tWednesdayHoursStart?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<admodel>}\r\n * @public\r\n */\r\nexport interface CampaignAdModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<admodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CampaignModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tCampaignAds?: Array<campaignadmodel>;\r\n\tActualEnd?: Date;\r\n\tActualStart?: Date;\r\n\tBudgetedCost?: number;\r\n\tCreatedByUserID?: number;\r\n\tCreatedByUserKey?: string;\r\n\tCreatedByUserUserName?: string;\r\n\tCreatedByUser?: UserModel;\r\n\tExchangeRate?: number;\r\n\tExpectedResponse?: number;\r\n\tExpectedRevenue?: number;\r\n\tIsTemplate?: boolean;\r\n\tOtherCost?: number;\r\n\tProposedEnd?: Date;\r\n\tProposedStart?: Date;\r\n\tTotalActualCost?: number;\r\n\tTotalCampaignActivityActualCost?: number;\r\n\tUTCConversionTimeZoneCode?: number;\r\n\tCodeName?: string;\r\n\tMessage?: string;\r\n\tObjective?: string;\r\n\tPromotionCodeName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface CartContactModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CartEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface CartFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesitembasemodel<appliedcartitemdiscountmodel>&gt;}\r\n * @public\r\n */\r\nexport interface CartItemPagedResults extends PagedResultsBase<salesitembasemodel<appliedcartitemdiscountmodel>&gt; {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseModelT<carttypemodel,cartcontactmodel,carteventmodel,appliedcartdiscountmodel,appliedcartitemdiscountmodel,cartfilemodel>}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveStoredFilesBaseModel<cartfilemodel>}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface CartModel extends SalesCollectionBaseModelT<carttypemodel,cartcontactmodel,carteventmodel,appliedcartdiscountmodel,appliedcartitemdiscountmodel,cartfilemodel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<cartfilemodel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tNothingToShip: boolean;\r\n\tRequestedShipDate?: Date;\r\n\tSubtotalDiscountsModifier?: number;\r\n\tSubtotalDiscountsModifierMode?: number;\r\n\tSubtotalFeesModifier?: number;\r\n\tSubtotalFeesModifierMode?: number;\r\n\tSubtotalHandlingModifier?: number;\r\n\tSubtotalHandlingModifierMode?: number;\r\n\tSubtotalShippingModifier?: number;\r\n\tSubtotalShippingModifierMode?: number;\r\n\tSubtotalTaxesModifier?: number;\r\n\tSubtotalTaxesModifierMode?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statemodel>}\r\n * @public\r\n */\r\nexport interface CartStatePagedResults extends PagedResultsBase<statemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface CartStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CartTotals {\r\n\tSubTotal?: number;\r\n\tShipping?: number;\r\n\tHandling?: number;\r\n\tFees?: number;\r\n\tDiscounts?: number;\r\n\tTax?: number;\r\n\tTotal: number;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @public\r\n */\r\nexport interface CartTypeModel extends TypableBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\r\n\tCreatedByUserID?: number;\r\n\tCreatedByUserKey?: string;\r\n\tCreatedByUserUserName?: string;\r\n\tCreatedByUser?: UserModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<carttypemodel>}\r\n * @public\r\n */\r\nexport interface CartTypePagedResults extends PagedResultsBase<carttypemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface CartTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tCreatedByUserID?: number;\r\n\tCreatedByUserIDIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface CategoryCatalogSearchForm extends SearchFormBase {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface CategoryFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n\tMasterSeoUrl?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link AmFilterableByCategoryBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CategoryImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByCategoryBaseModel, HaveATypeModel<typemodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<categoryimagemodel>}\r\n * @public\r\n */\r\nexport interface CategoryImagePagedResults extends PagedResultsBase<categoryimagemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByCategoryBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface CategoryImageSearchModel extends NameableBaseSearchModel, AmFilterableByCategoryBaseSearchModel, HaveATypeSearchModel {\r\n\tIsPrimary?: boolean;\r\n\tOriginalIsStoredInDB?: boolean;\r\n\tThumbnailIsStoredInDB?: boolean;\r\n\tMinLatitude?: number;\r\n\tMaxLatitude?: number;\r\n\tMatchLatitude?: number;\r\n\tMatchLatitudeIncludeNull?: boolean;\r\n\tMinLongitude?: number;\r\n\tMaxLongitude?: number;\r\n\tMatchLongitude?: number;\r\n\tMatchLongitudeIncludeNull?: boolean;\r\n\tMasterID?: number;\r\n\tMasterIDIncludeNull?: boolean;\r\n\tMinMediaDate?: Date;\r\n\tMaxMediaDate?: Date;\r\n\tMatchMediaDate?: Date;\r\n\tMatchMediaDateIncludeNull?: boolean;\r\n\tMinOriginalHeight?: number;\r\n\tMaxOriginalHeight?: number;\r\n\tMatchOriginalHeight?: number;\r\n\tMatchOriginalHeightIncludeNull?: boolean;\r\n\tMinOriginalWidth?: number;\r\n\tMaxOriginalWidth?: number;\r\n\tMatchOriginalWidth?: number;\r\n\tMatchOriginalWidthIncludeNull?: boolean;\r\n\tMinSortOrder?: number;\r\n\tMaxSortOrder?: number;\r\n\tMatchSortOrder?: number;\r\n\tMatchSortOrderIncludeNull?: boolean;\r\n\tMinThumbnailHeight?: number;\r\n\tMaxThumbnailHeight?: number;\r\n\tMatchThumbnailHeight?: number;\r\n\tMatchThumbnailHeightIncludeNull?: boolean;\r\n\tMinThumbnailWidth?: number;\r\n\tMaxThumbnailWidth?: number;\r\n\tMatchThumbnailWidth?: number;\r\n\tMatchThumbnailWidthIncludeNull?: boolean;\r\n\tAuthor?: string;\r\n\tAuthorStrict?: boolean;\r\n\tAuthorIncludeNull?: boolean;\r\n\tCopyright?: string;\r\n\tCopyrightStrict?: boolean;\r\n\tCopyrightIncludeNull?: boolean;\r\n\tDisplayName?: string;\r\n\tDisplayNameStrict?: boolean;\r\n\tDisplayNameIncludeNull?: boolean;\r\n\tLocation?: string;\r\n\tLocationStrict?: boolean;\r\n\tLocationIncludeNull?: boolean;\r\n\tOriginalFileFormat?: string;\r\n\tOriginalFileFormatStrict?: boolean;\r\n\tOriginalFileFormatIncludeNull?: boolean;\r\n\tOriginalFileName?: string;\r\n\tOriginalFileNameStrict?: boolean;\r\n\tOriginalFileNameIncludeNull?: boolean;\r\n\tSeoTitle?: string;\r\n\tSeoTitleStrict?: boolean;\r\n\tSeoTitleIncludeNull?: boolean;\r\n\tThumbnailFileFormat?: string;\r\n\tThumbnailFileFormatStrict?: boolean;\r\n\tThumbnailFileFormatIncludeNull?: boolean;\r\n\tThumbnailFileName?: string;\r\n\tThumbnailFileNameStrict?: boolean;\r\n\tThumbnailFileNameIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface CategoryIndexableModel extends IndexableModelBase {\r\n\tCategory?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAParentBaseModel<categorymodel>}\r\n * @see {@link HaveSeoBaseModel}\r\n * @see {@link HaveImagesBaseModel<categoryimagemodel>}\r\n * @see {@link HaveStoredFilesBaseModel<categoryfilemodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandcategorymodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchisecategorymodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<productcategorymodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storecategorymodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveOrderMinimumsBaseModel}\r\n * @see {@link HaveFreeShippingMinimumsBaseModel}\r\n * @see {@link HaveRequiresRolesBaseModel}\r\n * @public\r\n */\r\nexport interface CategoryModel extends NameableBaseModel, HaveAParentBaseModel<categorymodel>, HaveSeoBaseModel, HaveImagesBaseModel<categoryimagemodel>, HaveStoredFilesBaseModel<categoryfilemodel>, AmFilterableByBrandsBaseModel<brandcategorymodel>, AmFilterableByFranchisesBaseModel<franchisecategorymodel>, AmFilterableByProductsBaseModel<productcategorymodel>, AmFilterableByStoresBaseModel<storecategorymodel>, HaveATypeModel<typemodel>, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel, HaveRequiresRolesBaseModel {\r\n\tReviews?: Array<reviewmodel>;\r\n\tParentName?: string;\r\n\tParentSeoUrl?: string;\r\n\tIncludeInMenu?: boolean;\r\n\tIsVisible?: boolean;\r\n\tHandlingCharge?: number;\r\n\tRestockingFeeAmount?: number;\r\n\tRestockingFeeAmountCurrencyID?: number;\r\n\tRestockingFeeAmountCurrencyKey?: string;\r\n\tRestockingFeeAmountCurrencyName?: string;\r\n\tRestockingFeeAmountCurrency?: CurrencyModel;\r\n\tRestockingFeePercent?: number;\r\n\tSortOrder?: number;\r\n\tDisplayName?: string;\r\n\tFooterContent?: string;\r\n\tHeaderContent?: string;\r\n\tSidebarContent?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<categorymodel>}\r\n * @public\r\n */\r\nexport interface CategoryPagedResults extends PagedResultsBase<categorymodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface CategorySearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveATypeSearchModel {\r\n\tExcludeProductCategories?: boolean;\r\n\tParentSEOURL?: string;\r\n\tChildJsonAttributes?: Dictionary<array<string>&gt;;\r\n\tHasProductsUnderAnotherCategoryID?: number;\r\n\tHasProductsUnderAnotherCategoryKey?: string;\r\n\tHasProductsUnderAnotherCategoryName?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tSeoKeywords?: string;\r\n\tSeoKeywordsStrict?: boolean;\r\n\tSeoKeywordsIncludeNull?: boolean;\r\n\tSeoUrl?: string;\r\n\tSeoUrlStrict?: boolean;\r\n\tSeoUrlIncludeNull?: boolean;\r\n\tSeoDescription?: string;\r\n\tSeoDescriptionStrict?: boolean;\r\n\tSeoDescriptionIncludeNull?: boolean;\r\n\tSeoMetaData?: string;\r\n\tSeoMetaDataStrict?: boolean;\r\n\tSeoMetaDataIncludeNull?: boolean;\r\n\tSeoPageTitle?: string;\r\n\tSeoPageTitleStrict?: boolean;\r\n\tSeoPageTitleIncludeNull?: boolean;\r\n\tParentID?: number;\r\n\tParentIDIncludeNull?: boolean;\r\n\tParentKey?: string;\r\n\tDisregardParents?: boolean;\r\n\tHasChildren?: boolean;\r\n\tIncludeChildrenInResults: boolean;\r\n\tChildID?: number;\r\n\tChildKey?: string;\r\n\tIncludeInMenu?: boolean;\r\n\tIsVisible?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\r\n\tMinHandlingCharge?: number;\r\n\tMaxHandlingCharge?: number;\r\n\tMatchHandlingCharge?: number;\r\n\tMatchHandlingChargeIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmount?: number;\r\n\tMaxMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmount?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmount?: number;\r\n\tMaxMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountAfter?: number;\r\n\tMaxMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\r\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferProductID?: number;\r\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmount?: number;\r\n\tMaxMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountAfter?: number;\r\n\tMaxMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\r\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferProductID?: number;\r\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinRestockingFeeAmount?: number;\r\n\tMaxRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\r\n\tRestockingFeeAmountCurrencyID?: number;\r\n\tRestockingFeeAmountCurrencyIDIncludeNull?: boolean;\r\n\tMinRestockingFeePercent?: number;\r\n\tMaxRestockingFeePercent?: number;\r\n\tMatchRestockingFeePercent?: number;\r\n\tMatchRestockingFeePercentIncludeNull?: boolean;\r\n\tMinSortOrder?: number;\r\n\tMaxSortOrder?: number;\r\n\tMatchSortOrder?: number;\r\n\tMatchSortOrderIncludeNull?: boolean;\r\n\tDisplayName?: string;\r\n\tDisplayNameStrict?: boolean;\r\n\tDisplayNameIncludeNull?: boolean;\r\n\tFooterContent?: string;\r\n\tFooterContentStrict?: boolean;\r\n\tFooterContentIncludeNull?: boolean;\r\n\tHeaderContent?: string;\r\n\tHeaderContentStrict?: boolean;\r\n\tHeaderContentIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessage?: string;\r\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tRequiresRoles?: string;\r\n\tRequiresRolesStrict?: boolean;\r\n\tRequiresRolesIncludeNull?: boolean;\r\n\tRequiresRolesAlt?: string;\r\n\tRequiresRolesAltStrict?: boolean;\r\n\tRequiresRolesAltIncludeNull?: boolean;\r\n\tSidebarContent?: string;\r\n\tSidebarContentStrict?: boolean;\r\n\tSidebarContentIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<categorycatalogsearchform,categoryindexablemodel>}\r\n * @public\r\n */\r\nexport interface CategorySearchViewModel extends SearchViewModelBase<categorycatalogsearchform,categoryindexablemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface CategorySuggestResult extends SuggestResultBase {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface CategoryTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CEFActionResponse {\r\n\tActionSucceeded: boolean;\r\n\tMessages?: Array<string>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutModel {\r\n\tWithTaxes?: CheckoutWithTaxes;\r\n\tWithCartInfo?: CheckoutWithCartInfo;\r\n\tWithUserInfo?: CheckoutWithUserInfo;\r\n\tPayByWalletEntry?: CheckoutPayByWalletEntry;\r\n\tPayByCreditCard?: CheckoutPayByCreditCard;\r\n\tPayByECheck?: CheckoutPayByECheck;\r\n\tPayByBillMeLater?: CheckoutPayByBillMeLater;\r\n\tPayByPayPal?: CheckoutPayByPayPal;\r\n\tPayByPayoneer?: CheckoutPayByPayoneer;\r\n\tReferringStoreID?: number;\r\n\tReferringBrandID?: number;\r\n\tAffiliateAccountKey?: string;\r\n\tSalesOrderID?: number;\r\n\tShipping?: ContactModel;\r\n\tSpecialInstructions?: string;\r\n\tIsSameAsBilling?: boolean;\r\n\tBilling?: ContactModel;\r\n\tPaymentStyle?: string;\r\n\tIsPartialPayment?: boolean;\r\n\tAmount?: number;\r\n\tCurrencyKey?: string;\r\n\tCategoryIDs?: Array<number>;\r\n\tFileNames?: Array<string>;\r\n\tSerializableAttributes?: SerializableAttributesDictionary;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutPayByBillMeLater {\r\n\tCustomerPurchaseOrderNumber?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutPayByCreditCard {\r\n\tCardType?: string;\r\n\tCardReferenceName?: string;\r\n\tCardHolderName?: string;\r\n\tCardNumber?: string;\r\n\tCVV?: string;\r\n\tExpirationMonth?: number;\r\n\tExpirationYear?: number;\r\n\tCardToken?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutPayByECheck {\r\n\tAccountReferenceName?: string;\r\n\tAccountHolderName?: string;\r\n\tAccountNumber?: string;\r\n\tRoutingNumber?: string;\r\n\tBankName?: string;\r\n\tAccountType?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutPayByPayoneer {\r\n\tPayoneerAccountID?: number;\r\n\tPayoneerCustomerID?: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutPayByPayPal {\r\n\tCancelUrl?: string;\r\n\tReturnUrl?: string;\r\n\tPayerID?: string;\r\n\tPayPalToken?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutPayByWalletEntry {\r\n\tWalletID?: number;\r\n\tWalletToken?: string;\r\n\tWalletCVV?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutResult {\r\n\tSucceeded: boolean;\r\n\tWarningMessage?: string;\r\n\tErrorMessage?: string;\r\n\tOrderID?: number;\r\n\tQuoteID?: number;\r\n\tPaymentTransactionID?: string;\r\n\tToken?: string;\r\n\tWarningMessages?: Array<string>;\r\n\tErrorMessages?: Array<string>;\r\n\tOrderIDs?: Array<number>;\r\n\tQuoteIDs?: Array<number>;\r\n\tPaymentTransactionIDs?: Array<string>;\r\n\tTokens?: Array<string>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutWithCartInfo {\r\n\tCartID?: number;\r\n\tCartTypeName?: string;\r\n\tCartSessionID?: Guid;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutWithTaxes {\r\n\tVatID?: string;\r\n\tTaxExemptionNumber?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface CheckoutWithUserInfo {\r\n\tUserID?: number;\r\n\tIsNewAccount?: boolean;\r\n\tUserName?: string;\r\n\tPassword?: string;\r\n\tExternalUserID?: string;\r\n}\r\n\r\nexport enum CompareOperator {\r\n\tUndefined,\r\n\tLessThan,\r\n\tLessThanOrEqualTo,\r\n\tGreaterThan,\r\n\tGreaterThanOrEqualTo,\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ContactImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveImagesBaseModel<contactimagemodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ContactModel extends BaseModel, HaveImagesBaseModel<contactimagemodel>, HaveATypeModel<typemodel> {\r\n\tAddressID?: number;\r\n\tAddressKey?: string;\r\n\tAddress?: AddressModel;\r\n\tEmail1?: string;\r\n\tFax1?: string;\r\n\tFirstName?: string;\r\n\tFullName?: string;\r\n\tLastName?: string;\r\n\tMiddleName?: string;\r\n\tPhone1?: string;\r\n\tPhone2?: string;\r\n\tPhone3?: string;\r\n\tWebsite1?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface ContactTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link AmFilterableByUsersBaseModel<conversationusermodel>}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @public\r\n */\r\nexport interface ConversationModel extends BaseModel, AmFilterableByUsersBaseModel<conversationusermodel>, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\r\n\tMessagesCount?: number;\r\n\tConversationUsersCount?: number;\r\n\tConversationUserUsernames?: Array<string>;\r\n\tMessages?: Array<messagemodel>;\r\n\tCopyUserWhenEnded?: boolean;\r\n\tHasEnded?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<conversationmodel>}\r\n * @public\r\n */\r\nexport interface ConversationPagedResults extends PagedResultsBase<conversationmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @public\r\n */\r\nexport interface ConversationSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel {\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tCopyUserWhenEnded?: boolean;\r\n\tCopyUserWhenEndedIncludeNull?: boolean;\r\n\tHasEnded?: boolean;\r\n\tHasEndedIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface ConversationUserModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tSlaveUserName?: string;\r\n\tIsTyping?: boolean;\r\n\tLastHeartbeat?: Date;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CounterLogModel extends BaseModel, HaveATypeModel<typemodel> {\r\n\tCounterID: number;\r\n\tCounterKey?: string;\r\n\tCounter?: CounterModel;\r\n\tValue?: number;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CounterModel extends BaseModel, HaveATypeModel<typemodel> {\r\n\tCounterLogs?: Array<counterlogmodel>;\r\n\tValue?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<currencymodel>}\r\n * @public\r\n */\r\nexport interface CountryCurrencyModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<currencymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CountryImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<languagemodel>}\r\n * @public\r\n */\r\nexport interface CountryLanguageModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<languagemodel> {\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveImagesBaseModel<countryimagemodel>}\r\n * @public\r\n */\r\nexport interface CountryModel extends NameableBaseModel, HaveImagesBaseModel<countryimagemodel> {\r\n\tCurrencies?: Array<countrycurrencymodel>;\r\n\tLanguages?: Array<countrylanguagemodel>;\r\n\tISO3166Numeric?: number;\r\n\tCode?: string;\r\n\tISO3166Alpha2?: string;\r\n\tISO3166Alpha3?: string;\r\n\tPhonePrefix?: string;\r\n\tPhoneRegEx?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<countrymodel>}\r\n * @public\r\n */\r\nexport interface CountryPagedResults extends PagedResultsBase<countrymodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface CountrySearchModel extends NameableBaseSearchModel {\r\n\tMinISO3166Numeric?: number;\r\n\tMaxISO3166Numeric?: number;\r\n\tMatchISO3166Numeric?: number;\r\n\tMatchISO3166NumericIncludeNull?: boolean;\r\n\tCode?: string;\r\n\tCodeStrict?: boolean;\r\n\tCodeIncludeNull?: boolean;\r\n\tISO3166Alpha2?: string;\r\n\tISO3166Alpha2Strict?: boolean;\r\n\tISO3166Alpha2IncludeNull?: boolean;\r\n\tISO3166Alpha3?: string;\r\n\tISO3166Alpha3Strict?: boolean;\r\n\tISO3166Alpha3IncludeNull?: boolean;\r\n\tPhonePrefix?: string;\r\n\tPhonePrefixStrict?: boolean;\r\n\tPhonePrefixIncludeNull?: boolean;\r\n\tPhoneRegEx?: string;\r\n\tPhoneRegExStrict?: boolean;\r\n\tPhoneRegExIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CreditModel extends NameableBaseModel, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableUserBaseModel, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tUserUserName?: string;\r\n\tCreditPayments?: Array<creditpaymentmodel>;\r\n\tAmountRemaining?: number;\r\n\tCurrencyID?: number;\r\n\tCurrencyKey?: string;\r\n\tCurrencyName?: string;\r\n\tCurrency?: CurrencyModel;\r\n\tOriginalAmount?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<creditmodel>}\r\n * @public\r\n */\r\nexport interface CreditPagedResults extends PagedResultsBase<creditmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<creditmodel>}\r\n * @public\r\n */\r\nexport interface CreditPaymentModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<creditmodel> {\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface CreditSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tMinAmountRemaining?: number;\r\n\tMaxAmountRemaining?: number;\r\n\tMatchAmountRemaining?: number;\r\n\tMatchAmountRemainingIncludeNull?: boolean;\r\n\tCurrencyID?: number;\r\n\tCurrencyIDIncludeNull?: boolean;\r\n\tMinOriginalAmount?: number;\r\n\tMaxOriginalAmount?: number;\r\n\tMatchOriginalAmount?: number;\r\n\tMatchOriginalAmountIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface CreditStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface CurrencyImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveImagesBaseModel<currencyimagemodel>}\r\n * @public\r\n */\r\nexport interface CurrencyModel extends NameableBaseModel, HaveImagesBaseModel<currencyimagemodel> {\r\n\tUnicodeSymbolValue?: number;\r\n\tDecimalPlaceAccuracy?: number;\r\n\tISO4217Numeric?: number;\r\n\tUseSeparator?: boolean;\r\n\tHtmlCharacterCode?: string;\r\n\tHtmlDecimalCharacterCode?: string;\r\n\tHtmlSeparatorCharacterCode?: string;\r\n\tISO4217Alpha?: string;\r\n\tRawCharacter?: string;\r\n\tRawDecimalCharacter?: string;\r\n\tRawSeparatorCharacter?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<currencymodel>}\r\n * @public\r\n */\r\nexport interface CurrencyPagedResults extends PagedResultsBase<currencymodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface CurrencySearchModel extends NameableBaseSearchModel {\r\n\tMinUnicodeSymbolValue?: number;\r\n\tMaxUnicodeSymbolValue?: number;\r\n\tMatchUnicodeSymbolValue?: number;\r\n\tMinDecimalPlaceAccuracy?: number;\r\n\tMaxDecimalPlaceAccuracy?: number;\r\n\tMatchDecimalPlaceAccuracy?: number;\r\n\tMatchDecimalPlaceAccuracyIncludeNull?: boolean;\r\n\tMinISO4217Numeric?: number;\r\n\tMaxISO4217Numeric?: number;\r\n\tMatchISO4217Numeric?: number;\r\n\tMatchISO4217NumericIncludeNull?: boolean;\r\n\tUseSeparator?: boolean;\r\n\tUseSeparatorIncludeNull?: boolean;\r\n\tHtmlCharacterCode?: string;\r\n\tHtmlCharacterCodeStrict?: boolean;\r\n\tHtmlCharacterCodeIncludeNull?: boolean;\r\n\tHtmlDecimalCharacterCode?: string;\r\n\tHtmlDecimalCharacterCodeStrict?: boolean;\r\n\tHtmlDecimalCharacterCodeIncludeNull?: boolean;\r\n\tHtmlSeparatorCharacterCode?: string;\r\n\tHtmlSeparatorCharacterCodeStrict?: boolean;\r\n\tHtmlSeparatorCharacterCodeIncludeNull?: boolean;\r\n\tISO4217Alpha?: string;\r\n\tISO4217AlphaStrict?: boolean;\r\n\tISO4217AlphaIncludeNull?: boolean;\r\n\tRawCharacter?: string;\r\n\tRawCharacterStrict?: boolean;\r\n\tRawCharacterIncludeNull?: boolean;\r\n\tRawDecimalCharacter?: string;\r\n\tRawDecimalCharacterStrict?: boolean;\r\n\tRawDecimalCharacterIncludeNull?: boolean;\r\n\tRawSeparatorCharacter?: string;\r\n\tRawSeparatorCharacterStrict?: boolean;\r\n\tRawSeparatorCharacterIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @public\r\n */\r\nexport interface DiscountAccountModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<typemodel>}\r\n * @public\r\n */\r\nexport interface DiscountAccountTypeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<typemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<brandmodel>}\r\n * @public\r\n */\r\nexport interface DiscountBrandModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<brandmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<categorymodel>}\r\n * @public\r\n */\r\nexport interface DiscountCategoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<categorymodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface DiscountCodeModel extends BaseModel {\r\n\tDiscountID: number;\r\n\tDiscountKey?: string;\r\n\tDiscountName?: string;\r\n\tDiscount?: DiscountModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUserUserName?: string;\r\n\tUser?: UserModel;\r\n\tCode?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<countrymodel>}\r\n * @public\r\n */\r\nexport interface DiscountCountryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<countrymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<franchisemodel>}\r\n * @public\r\n */\r\nexport interface DiscountFranchiseModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<franchisemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<manufacturermodel>}\r\n * @public\r\n */\r\nexport interface DiscountManufacturerModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<manufacturermodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByAccountsBaseModel<discountaccountmodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<discountbrandmodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<discountfranchisemodel>}\r\n * @see {@link AmFilterableByManufacturersBaseModel<discountmanufacturermodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<discountproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<discountstoremodel>}\r\n * @see {@link AmFilterableByUsersBaseModel<discountusermodel>}\r\n * @see {@link AmFilterableByVendorsBaseModel<discountvendormodel>}\r\n * @public\r\n */\r\nexport interface DiscountModel extends NameableBaseModel, AmFilterableByAccountsBaseModel<discountaccountmodel>, AmFilterableByBrandsBaseModel<discountbrandmodel>, AmFilterableByFranchisesBaseModel<discountfranchisemodel>, AmFilterableByManufacturersBaseModel<discountmanufacturermodel>, AmFilterableByProductsBaseModel<discountproductmodel>, AmFilterableByStoresBaseModel<discountstoremodel>, AmFilterableByUsersBaseModel<discountusermodel>, AmFilterableByVendorsBaseModel<discountvendormodel> {\r\n\tDiscountCompareOperator: CompareOperator;\r\n\tDiscountTypeID: number;\r\n\tDiscountTotal: number;\r\n\tCanCombine?: boolean;\r\n\tIsAutoApplied?: boolean;\r\n\tThresholdAmount?: number;\r\n\tValue?: number;\r\n\tAccountTypes?: Array<discountaccounttypemodel>;\r\n\tCategories?: Array<discountcategorymodel>;\r\n\tCodes?: Array<discountcodemodel>;\r\n\tCountries?: Array<discountcountrymodel>;\r\n\tProductTypes?: Array<discountproducttypemodel>;\r\n\tShipCarrierMethods?: Array<discountshipcarriermethodmodel>;\r\n\tUserRoles?: Array<discountuserrolemodel>;\r\n\tRoundingOperation?: number;\r\n\tValueType?: number;\r\n\tBuyXValue?: number;\r\n\tEndDate?: Date;\r\n\tGetYValue?: number;\r\n\tPriority?: number;\r\n\tRoundingType?: number;\r\n\tStartDate?: Date;\r\n\tUsageLimitGlobally?: number;\r\n\tUsageLimitPerAccount?: number;\r\n\tUsageLimitPerCart?: number;\r\n\tUsageLimitPerUser?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @public\r\n */\r\nexport interface DiscountProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<typemodel>}\r\n * @public\r\n */\r\nexport interface DiscountProductTypeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<typemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface DiscountsForInvoice {\r\n\tDiscounts?: Array<appliedsalesinvoicediscountmodel>;\r\n\tItemDiscounts?: Array<appliedsalesinvoiceitemdiscountmodel>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface DiscountsForOrderResponse {\r\n\tDiscounts?: Array<appliedsalesorderdiscountmodel>;\r\n\tItemDiscounts?: Array<appliedsalesorderitemdiscountmodel>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface DiscountsForQuote {\r\n\tDiscounts?: Array<appliedsalesquotediscountmodel>;\r\n\tItemDiscounts?: Array<appliedsalesquoteitemdiscountmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<shipcarriermethodmodel>}\r\n * @public\r\n */\r\nexport interface DiscountShipCarrierMethodModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<shipcarriermethodmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<storemodel>}\r\n * @public\r\n */\r\nexport interface DiscountStoreModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<storemodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface DiscountUserModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tSlaveUserName?: string;\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface DiscountUserRoleModel extends BaseModel {\r\n\tMasterID: number;\r\n\tMasterKey?: string;\r\n\tMasterName?: string;\r\n\tMaster?: DiscountModel;\r\n\tRoleName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<vendormodel>}\r\n * @public\r\n */\r\nexport interface DiscountVendorModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<vendormodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface DisplayableBaseModel extends NameableBaseModel {\r\n\tDisplayName?: string;\r\n\tSortOrder?: number;\r\n\tTranslationKey?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface DisplayableBaseSearchModel extends NameableBaseSearchModel {\r\n\tDisplayName?: string;\r\n\tDisplayNameStrict?: boolean;\r\n\tDisplayNameIncludeNull?: boolean;\r\n\tTranslationKey?: string;\r\n\tTranslationKeyStrict?: boolean;\r\n\tTranslationKeyIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<currencymodel>}\r\n * @public\r\n */\r\nexport interface DistrictCurrencyModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<currencymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface DistrictImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<languagemodel>}\r\n * @public\r\n */\r\nexport interface DistrictLanguageModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<languagemodel> {\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveImagesBaseModel<districtimagemodel>}\r\n * @public\r\n */\r\nexport interface DistrictModel extends NameableBaseModel, HaveImagesBaseModel<districtimagemodel> {\r\n\tCurrencies?: Array<districtcurrencymodel>;\r\n\tLanguages?: Array<districtlanguagemodel>;\r\n\tCountryID: number;\r\n\tCountryKey?: string;\r\n\tCountryName?: string;\r\n\tCountryCode?: string;\r\n\tCountry?: CountryModel;\r\n\tRegionID?: number;\r\n\tRegionKey?: string;\r\n\tRegionName?: string;\r\n\tRegionCode?: string;\r\n\tRegion?: RegionModel;\r\n\tCode?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<districtmodel>}\r\n * @public\r\n */\r\nexport interface DistrictPagedResults extends PagedResultsBase<districtmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface DistrictSearchModel extends NameableBaseSearchModel {\r\n\tCountryID?: number;\r\n\tRegionID?: number;\r\n\tRegionIDIncludeNull?: boolean;\r\n\tCode?: string;\r\n\tCodeStrict?: boolean;\r\n\tCodeIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface EndUserEventRequest {\r\n\tVisitorID?: number;\r\n\tVisitorKey?: string;\r\n\tVisitorName?: string;\r\n\tVisitor?: VisitorModel;\r\n\tVisitID?: number;\r\n\tVisitKey?: string;\r\n\tVisitName?: string;\r\n\tVisit?: VisitModel;\r\n\tEventID?: number;\r\n\tEventKey?: string;\r\n\tEventName?: string;\r\n\tEvent?: EventModel;\r\n\tPageViewID?: number;\r\n\tPageViewKey?: string;\r\n\tPageViewName?: string;\r\n\tPageView?: PageViewModel;\r\n\tPageViewEventID?: number;\r\n\tPageViewEventKey?: string;\r\n\tPageViewEvent?: PageViewEventModel;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface EndUserEventResponse {\r\n\tVisitorID?: number;\r\n\tVisitID?: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @public\r\n */\r\nexport interface EventModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<typemodel>, HaveANullableContactBaseModel {\r\n\tAddressID?: number;\r\n\tAddressKey?: string;\r\n\tAddress?: AddressModel;\r\n\tIPOrganizationID?: number;\r\n\tIPOrganizationKey?: string;\r\n\tIPOrganizationName?: string;\r\n\tIPOrganization?: IPOrganizationModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUser?: UserModel;\r\n\tCampaignID?: number;\r\n\tCampaign?: CampaignModel;\r\n\tCampaignKey?: string;\r\n\tCampaignName?: string;\r\n\tSiteDomainID?: number;\r\n\tSiteDomain?: SiteDomainModel;\r\n\tSiteDomainKey?: string;\r\n\tSiteDomainName?: string;\r\n\tVisitorID?: number;\r\n\tVisitor?: VisitorModel;\r\n\tVisitorKey?: string;\r\n\tVisitorName?: string;\r\n\tContainsSocialProfile?: boolean;\r\n\tDelta?: number;\r\n\tDidBounce?: boolean;\r\n\tDuration?: number;\r\n\tEndedOn?: Date;\r\n\tIsFirstTrigger?: boolean;\r\n\tScore?: number;\r\n\tSource?: number;\r\n\tStartedOn?: Date;\r\n\tTotalTriggers?: number;\r\n\tVisitID?: number;\r\n\tVisitKey?: string;\r\n\tVisitName?: string;\r\n\tVisit?: VisitModel;\r\n\tBrowser?: string;\r\n\tEntryPage?: string;\r\n\tExitPage?: string;\r\n\tFlash?: string;\r\n\tIPAddress?: string;\r\n\tKeywords?: string;\r\n\tLanguage?: string;\r\n\tOperatingSystem?: string;\r\n\tPartitionKey?: string;\r\n\tReferrer?: string;\r\n\tReferringHost?: string;\r\n\tRowKey?: string;\r\n\tTime?: string;\r\n}\r\n\r\nexport enum FileEntityType {\r\n\tImageAccount,\r\n\tImageAd,\r\n\tImageBrand,\r\n\tImageFranchise,\r\n\tImageCalendarEvent,\r\n\tImageCategory,\r\n\tImageCountry,\r\n\tImageCurrency,\r\n\tImageLanguage,\r\n\tImageManufacturer,\r\n\tImageProduct,\r\n\tImageRegion,\r\n\tImageStore,\r\n\tImageUser,\r\n\tImageVendor,\r\n\tStoredFileAccount,\r\n\tStoredFileCalendarEvent,\r\n\tStoredFileCart,\r\n\tStoredFileCategory,\r\n\tStoredFileEmailQueueAttachment,\r\n\tStoredFileMessageAttachment,\r\n\tStoredFileProduct,\r\n\tStoredFilePurchaseOrder,\r\n\tStoredFileSalesInvoice,\r\n\tStoredFileSalesOrder,\r\n\tStoredFileSalesQuote,\r\n\tStoredFileSalesReturn,\r\n\tStoredFileSampleRequest,\r\n\tStoredFileUser,\r\n\tImportExcel,\r\n\tImportProduct,\r\n\tImportProductPricePoint,\r\n\tImportSalesQuote,\r\n\tImportUser,\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @public\r\n */\r\nexport interface FranchiseAccountModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tHasAccessToFranchise?: boolean;\r\n\tPricePointID?: number;\r\n\tPricePointKey?: string;\r\n\tPricePointName?: string;\r\n\tPricePointDisplayName?: string;\r\n\tPricePointTranslationKey?: string;\r\n\tPricePointSortOrder?: number;\r\n\tPricePoint?: PricePointModel;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<auctionmodel>}\r\n * @public\r\n */\r\nexport interface FranchiseAuctionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<auctionmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface FranchiseCatalogSearchForm extends SearchFormBase {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<categorymodel>}\r\n * @public\r\n */\r\nexport interface FranchiseCategoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<categorymodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<franchisecategorymodel>}\r\n * @public\r\n */\r\nexport interface FranchiseCategoryPagedResults extends PagedResultsBase<franchisecategorymodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @see {@link AmFilterableByCategoryBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @public\r\n */\r\nexport interface FranchiseCategorySearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<countrymodel>}\r\n * @public\r\n */\r\nexport interface FranchiseCountryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<countrymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<currencymodel>}\r\n * @public\r\n */\r\nexport interface FranchiseCurrencyModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<currencymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsPrimary?: boolean;\r\n\tOverrideUnicodeSymbolValue?: number;\r\n\tOverrideDecimalPlaceAccuracy?: number;\r\n\tOverrideUseSeparator?: boolean;\r\n\tCustomName?: string;\r\n\tCustomTranslationKey?: string;\r\n\tOverrideHtmlCharacterCode?: string;\r\n\tOverrideHtmlDecimalCharacterCode?: string;\r\n\tOverrideHtmlSeparatorCharacterCode?: string;\r\n\tOverrideRawCharacter?: string;\r\n\tOverrideRawDecimalCharacter?: string;\r\n\tOverrideRawSeparatorCharacter?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<districtmodel>}\r\n * @public\r\n */\r\nexport interface FranchiseDistrictModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<districtmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link AmFilterableByFranchiseBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface FranchiseImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByFranchiseBaseModel, HaveATypeModel<typemodel> {\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface FranchiseIndexableModel extends IndexableModelBase {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<inventorylocationmodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface FranchiseInventoryLocationModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<inventorylocationmodel>, HaveATypeModel<typemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<languagemodel>}\r\n * @public\r\n */\r\nexport interface FranchiseLanguageModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<languagemodel> {\r\n\tMasterName?: string;\r\n\tOverrideISO639_1_2002?: string;\r\n\tOverrideISO639_2_1998?: string;\r\n\tOverrideISO639_3_2007?: string;\r\n\tOverrideISO639_5_2008?: string;\r\n\tOverrideLocale?: string;\r\n\tOverrideUnicodeName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<manufacturermodel>}\r\n * @public\r\n */\r\nexport interface FranchiseManufacturerModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<manufacturermodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveImagesBaseModel<franchiseimagemodel>}\r\n * @see {@link AmFilterableByAccountsBaseModel<franchiseaccountmodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandfranchisemodel>}\r\n * @see {@link AmFilterableByCategoriesBaseModel<franchisecategorymodel>}\r\n * @see {@link AmFilterableByManufacturersBaseModel<franchisemanufacturermodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<franchiseproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<franchisestoremodel>}\r\n * @see {@link AmFilterableByUsersBaseModel<franchiseusermodel>}\r\n * @see {@link AmFilterableByVendorsBaseModel<franchisevendormodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveOrderMinimumsBaseModel}\r\n * @see {@link HaveFreeShippingMinimumsBaseModel}\r\n * @public\r\n */\r\nexport interface FranchiseModel extends NameableBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<franchiseimagemodel>, AmFilterableByAccountsBaseModel<franchiseaccountmodel>, AmFilterableByBrandsBaseModel<brandfranchisemodel>, AmFilterableByCategoriesBaseModel<franchisecategorymodel>, AmFilterableByManufacturersBaseModel<franchisemanufacturermodel>, AmFilterableByProductsBaseModel<franchiseproductmodel>, AmFilterableByStoresBaseModel<franchisestoremodel>, AmFilterableByUsersBaseModel<franchiseusermodel>, AmFilterableByVendorsBaseModel<franchisevendormodel>, HaveATypeModel<typemodel>, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\r\n\tFranchiseCountries?: Array<franchisecountrymodel>;\r\n\tFranchiseCurrencies?: Array<franchisecurrencymodel>;\r\n\tFranchiseDistricts?: Array<franchisedistrictmodel>;\r\n\tFranchiseInventoryLocations?: Array<franchiseinventorylocationmodel>;\r\n\tFranchiseLanguages?: Array<franchiselanguagemodel>;\r\n\tFranchiseRegions?: Array<franchiseregionmodel>;\r\n\tFranchiseSiteDomains?: Array<franchisesitedomainmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<franchisemodel>}\r\n * @public\r\n */\r\nexport interface FranchisePagedResults extends PagedResultsBase<franchisemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @public\r\n */\r\nexport interface FranchiseProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n\tPriceBase?: number;\r\n\tPriceMsrp?: number;\r\n\tPriceReduction?: number;\r\n\tPriceSale?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<regionmodel>}\r\n * @public\r\n */\r\nexport interface FranchiseRegionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<regionmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByCategoryBaseSearchModel}\r\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link AmFilterableByVendorBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface FranchiseSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveATypeSearchModel {\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmount?: number;\r\n\tMaxMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmount?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmount?: number;\r\n\tMaxMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountAfter?: number;\r\n\tMaxMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\r\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferProductID?: number;\r\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmount?: number;\r\n\tMaxMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountAfter?: number;\r\n\tMaxMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\r\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferProductID?: number;\r\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessage?: string;\r\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<franchisecatalogsearchform,franchiseindexablemodel>}\r\n * @public\r\n */\r\nexport interface FranchiseSearchViewModel extends SearchViewModelBase<franchisecatalogsearchform,franchiseindexablemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<sitedomainmodel>}\r\n * @public\r\n */\r\nexport interface FranchiseSiteDomainModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<sitedomainmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<storemodel>}\r\n * @public\r\n */\r\nexport interface FranchiseStoreModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<storemodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface FranchiseSuggestResult extends SuggestResultBase {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface FranchiseUserModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tSlaveUserName?: string;\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<vendormodel>}\r\n * @public\r\n */\r\nexport interface FranchiseVendorModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<vendormodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @see {@link HaveATypeModel<attributetypemodel>}\r\n * @public\r\n */\r\nexport interface GeneralAttributeModel extends TypableBaseModel, HaveATypeModel<attributetypemodel> {\r\n\tHideFromCatalogViews?: boolean;\r\n\tHideFromProductDetailView?: boolean;\r\n\tHideFromStorefront?: boolean;\r\n\tHideFromSuppliers?: boolean;\r\n\tIsComparable?: boolean;\r\n\tIsFilter?: boolean;\r\n\tIsMarkup?: boolean;\r\n\tIsPredefined?: boolean;\r\n\tIsTab?: boolean;\r\n\tAttributeGroupID?: number;\r\n\tAttributeGroupKey?: string;\r\n\tAttributeGroupName?: string;\r\n\tAttributeGroupDisplayName?: string;\r\n\tAttributeGroupTranslationKey?: string;\r\n\tAttributeGroupSortOrder?: number;\r\n\tAttributeGroup?: AttributeGroupModel;\r\n\tAttributeTabID?: number;\r\n\tAttributeTabKey?: string;\r\n\tAttributeTabName?: string;\r\n\tAttributeTabDisplayName?: string;\r\n\tAttributeTabTranslationKey?: string;\r\n\tAttributeTabSortOrder?: number;\r\n\tAttributeTab?: AttributeTabModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<generalattributemodel>}\r\n * @public\r\n */\r\nexport interface GeneralAttributePagedResults extends PagedResultsBase<generalattributemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface GeneralAttributePredefinedOptionModel extends BaseModel {\r\n\tAttributeID: number;\r\n\tAttributeKey?: string;\r\n\tAttributeName?: string;\r\n\tAttributeDisplayName?: string;\r\n\tAttributeTranslationKey?: string;\r\n\tAttributeSortOrder?: number;\r\n\tAttribute?: GeneralAttributeModel;\r\n\tSortOrder?: number;\r\n\tUofM?: string;\r\n\tValue?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<generalattributepredefinedoptionmodel>}\r\n * @public\r\n */\r\nexport interface GeneralAttributePredefinedOptionPagedResults extends PagedResultsBase<generalattributepredefinedoptionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @public\r\n */\r\nexport interface GeneralAttributePredefinedOptionSearchModel extends BaseSearchModel {\r\n\tAttributeID?: number;\r\n\tMinSortOrder?: number;\r\n\tMaxSortOrder?: number;\r\n\tMatchSortOrder?: number;\r\n\tMatchSortOrderIncludeNull?: boolean;\r\n\tUofM?: string;\r\n\tUofMStrict?: boolean;\r\n\tUofMIncludeNull?: boolean;\r\n\tValue?: string;\r\n\tValueStrict?: boolean;\r\n\tValueIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface GeneralAttributeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveATypeSearchModel {\r\n\tIncludeGeneralWithTypeName?: boolean;\r\n\tGroup?: string;\r\n\tAttributeGroupKey?: string;\r\n\tAttributeGroupName?: string;\r\n\tAttributeGroupDisplayName?: string;\r\n\tAttributeTabKey?: string;\r\n\tAttributeTabName?: string;\r\n\tAttributeTabDisplayName?: string;\r\n\tHideFromCatalogViews?: boolean;\r\n\tHideFromProductDetailView?: boolean;\r\n\tHideFromStorefront?: boolean;\r\n\tHideFromSuppliers?: boolean;\r\n\tIsComparable?: boolean;\r\n\tIsFilter?: boolean;\r\n\tIsMarkup?: boolean;\r\n\tIsPredefined?: boolean;\r\n\tIsTab?: boolean;\r\n\tAttributeGroupID?: number;\r\n\tAttributeGroupIDIncludeNull?: boolean;\r\n\tAttributeTabID?: number;\r\n\tAttributeTabIDIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface Grouping {\r\n\tfield?: string; // Name format overridden\r\n\tserverField?: string; // Name format overridden\r\n\torder?: number; // Name format overridden\r\n\tsortOrder?: number; // Name format overridden\r\n\tdir?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAParentBaseModel<groupmodel>}\r\n * @see {@link AmFilterableByUsersBaseModel<groupusermodel>}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface GroupModel extends NameableBaseModel, HaveAParentBaseModel<groupmodel>, AmFilterableByUsersBaseModel<groupusermodel>, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tParentName?: string;\r\n\tGroupOwnerID?: number;\r\n\tGroupOwnerKey?: string;\r\n\tGroupOwnerUserName?: string;\r\n\tGroupOwner?: UserModel;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface GroupUserModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tSlaveUserName?: string;\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsCartLookupBase {\r\n\tStoreID?: number;\r\n\tFranchiseID?: number;\r\n\tBrandID?: number;\r\n}\r\n\r\n/**\r\n * @see {@link ImplementsCartLookupBase}\r\n * @public\r\n */\r\nexport interface ImplementsCartLookupForStorefrontBase extends ImplementsCartLookupBase {\r\n\tTypeName?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsDisplayNameBase {\r\n\tDisplayName?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsIDBase {\r\n\tID?: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsIDOnBodyBase {\r\n\tID?: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsKeyBase {\r\n\tKey?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsKeyOnQueryBase {\r\n\tKey?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsNameBase {\r\n\tName?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsSeoUrlBase {\r\n\tSeoUrl?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsTypeNameBase {\r\n\tTypeName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link ImplementsCartLookupForStorefrontBase}\r\n * @public\r\n */\r\nexport interface ImplementsTypeNameForStorefrontBase extends ImplementsCartLookupForStorefrontBase {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface IncrementProfileModel extends NameableBaseModel {\r\n\tIncrementSteps?: Array<incrementstepmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface IncrementStepModel extends BaseModel {\r\n\tIncrement?: number;\r\n\tStart?: number;\r\n\tIncrementProfileID: number;\r\n\tIncrementProfileKey?: string;\r\n\tIncrementProfileName?: string;\r\n\tIncrementProfile?: IncrementProfileModel;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface IndexableAttributeObjectFilter {\r\n\tID: number;\r\n\tKey?: string;\r\n\tValue?: string;\r\n\tUofM?: string;\r\n\tSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableBadgeFilter extends IndexableFilterBase {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableBrandFilter extends IndexableFilterBase {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface IndexableCategoryFilter {\r\n\tCategoryName?: string;\r\n\tCategoryDisplayName?: string;\r\n\tCategoryParent1Name?: string;\r\n\tCategoryParent2Name?: string;\r\n\tCategoryParent3Name?: string;\r\n\tCategoryParent4Name?: string;\r\n\tCategoryParent5Name?: string;\r\n\tCategoryParent6Name?: string;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableDistrictFilter extends IndexableFilterBase {\r\n\tDocCount?: number;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableDistrictModel extends IndexableFilterBase {\r\n\tDocCount?: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface IndexableFilterBase {\r\n\tID: number;\r\n\tKey?: string;\r\n\tName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableFranchiseFilter extends IndexableFilterBase {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableLotData extends IndexableFilterBase {\r\n\tClosesAt?: Date;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableManufacturerFilter extends IndexableFilterBase {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface IndexableModelBase {\r\n\tSuggest?: any;\r\n\tSuggestedByName?: any;\r\n\tSuggestedByDescription?: any;\r\n\tSuggestedByCustomKey?: any;\r\n\tSuggestedByQueryableSerializableAttributes?: any;\r\n\tSuggestedByBrand?: any;\r\n\tSuggestedByCategory?: any;\r\n\tSuggestedByFranchise?: any;\r\n\tSuggestedByManufacturer?: any;\r\n\tSuggestedByProduct?: any;\r\n\tSuggestedByStore?: any;\r\n\tSuggestedByVendor?: any;\r\n\tID: number;\r\n\tCustomKey?: string;\r\n\tActive: boolean;\r\n\tCreatedDate: Date;\r\n\tUpdatedDate?: Date;\r\n\tName?: string;\r\n\tDescription?: string;\r\n\tFilterableJsonAttributes?: string;\r\n\tQueryableJsonAttributes?: string;\r\n\tFilterableAttributes?: Array<indexableattributeobjectfilter>;\r\n\tQueryableAttributes?: Array<indexableattributeobjectfilter>;\r\n\tQueryableSerializableAttributeValuesAggregate?: string;\r\n\tHasBrands: boolean;\r\n\tBrands?: Array<indexablebrandfilter>;\r\n\tHasCategories: boolean;\r\n\tCategoryNamePrimary?: string;\r\n\tCategoryNameSecondary?: string;\r\n\tCategoryNameTertiary?: string;\r\n\tCategories?: Array<indexablecategoryfilter>;\r\n\tHasFranchises: boolean;\r\n\tFranchises?: Array<indexablefranchisefilter>;\r\n\tContactID?: number;\r\n\tContactKey?: string;\r\n\tContactPhone?: string;\r\n\tContactFax?: string;\r\n\tContactEmail?: string;\r\n\tContactFirstName?: string;\r\n\tContactLastName?: string;\r\n\tContactCity?: string;\r\n\tContactCountryID?: number;\r\n\tContactRegionID?: number;\r\n\tContactRegionName?: string;\r\n\tHasDistricts: boolean;\r\n\tDistricts?: Array<indexabledistrictfilter>;\r\n\tContactDistrictID?: number;\r\n\tLatitude?: number;\r\n\tLongitude?: number;\r\n\tHasManufacturers: boolean;\r\n\tManufacturers?: Array<indexablemanufacturerfilter>;\r\n\tPricingToIndexAs: number;\r\n\tHasProducts: boolean;\r\n\tProducts?: Array<indexableproductfilter>;\r\n\tRatingToIndexAs: number;\r\n\tRequiresRoles?: string;\r\n\tRequiresRolesList?: Array<indexablerolefilter>;\r\n\tRequiresRolesAlt?: string;\r\n\tRequiresRolesListAlt?: Array<indexablerolefilter>;\r\n\tSeoKeywords?: string;\r\n\tSeoUrl?: string;\r\n\tSeoDescription?: string;\r\n\tSeoMetaData?: string;\r\n\tSeoPageTitle?: string;\r\n\tHasStores: boolean;\r\n\tStores?: Array<indexablestorefilter>;\r\n\tTypeID?: number;\r\n\tTypeKey?: string;\r\n\tTypeName?: string;\r\n\tTypeSortOrder: number;\r\n\tHasVendors: boolean;\r\n\tVendors?: Array<indexablevendorfilter>;\r\n\tSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableProductFilter extends IndexableFilterBase {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableRegionModel extends IndexableFilterBase {\r\n\tDocCount?: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface IndexableRoleFilter {\r\n\tRoleName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableStoreFilter extends IndexableFilterBase {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableTypeModel extends IndexableFilterBase {\r\n\tSortOrder: number;\r\n\tCount: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface IndexableVariantAttributesFilter {\r\n\tID: number;\r\n\tJsonAttributes?: string;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableVendorFilter extends IndexableFilterBase {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandinventorylocationmodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchiseinventorylocationmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storeinventorylocationmodel>}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @public\r\n */\r\nexport interface InventoryLocationModel extends NameableBaseModel, AmFilterableByBrandsBaseModel<brandinventorylocationmodel>, AmFilterableByFranchisesBaseModel<franchiseinventorylocationmodel>, AmFilterableByStoresBaseModel<storeinventorylocationmodel>, HaveANullableContactBaseModel {\r\n\tRegions?: Array<inventorylocationregionmodel>;\r\n\tSections?: Array<inventorylocationsectionmodel>;\r\n\tUsers?: Array<inventorylocationusermodel>;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<inventorylocationmodel>}\r\n * @public\r\n */\r\nexport interface InventoryLocationPagedResults extends PagedResultsBase<inventorylocationmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<regionmodel>}\r\n * @public\r\n */\r\nexport interface InventoryLocationRegionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<regionmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<inventorylocationregionmodel>}\r\n * @public\r\n */\r\nexport interface InventoryLocationRegionPagedResults extends PagedResultsBase<inventorylocationregionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface InventoryLocationRegionSearchModel extends AmARelationshipTableBaseSearchModel {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link HaveAContactBaseSearchModel}\r\n * @public\r\n */\r\nexport interface InventoryLocationSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveAContactBaseSearchModel {\r\n\tCountryName?: string;\r\n\tStateName?: string;\r\n\tPostalCode?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tContactIDIncludeNull?: boolean;\r\n\tContactKeyStrict?: boolean;\r\n\tContactKeyIncludeNull?: boolean;\r\n\tContactFirstNameStrict?: boolean;\r\n\tContactFirstNameIncludeNull?: boolean;\r\n\tContactLastNameStrict?: boolean;\r\n\tContactLastNameIncludeNull?: boolean;\r\n\tContactPhoneStrict?: boolean;\r\n\tContactPhoneIncludeNull?: boolean;\r\n\tContactFaxStrict?: boolean;\r\n\tContactFaxIncludeNull?: boolean;\r\n\tContactEmailStrict?: boolean;\r\n\tContactEmailIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface InventoryLocationSectionModel extends NameableBaseModel {\r\n\tProductInventoryLocationSections?: Array<productinventorylocationsectionmodel>;\r\n\tInventoryLocationID: number;\r\n\tInventoryLocationKey?: string;\r\n\tInventoryLocationName?: string;\r\n\tInventoryLocation?: InventoryLocationModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<inventorylocationsectionmodel>}\r\n * @public\r\n */\r\nexport interface InventoryLocationSectionPagedResults extends PagedResultsBase<inventorylocationsectionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface InventoryLocationSectionSearchModel extends NameableBaseSearchModel {\r\n\tInventoryLocationName?: string;\r\n\tInventoryLocationID?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface InventoryLocationUserModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @public\r\n */\r\nexport interface IPOrganizationModel extends NameableBaseModel, HaveAStatusModel {\r\n\tAddressID?: number;\r\n\tAddressKey?: string;\r\n\tAddress?: AddressModel;\r\n\tPrimaryUserID?: number;\r\n\tPrimaryUserKey?: string;\r\n\tPrimaryUserUserName?: string;\r\n\tPrimaryUser?: UserModel;\r\n\tScore?: number;\r\n\tIPAddress?: string;\r\n\tVisitorKey?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface LanguageImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveImagesBaseModel<languageimagemodel>}\r\n * @public\r\n */\r\nexport interface LanguageModel extends BaseModel, HaveImagesBaseModel<languageimagemodel> {\r\n\tISO639_1_2002?: string;\r\n\tISO639_2_1998?: string;\r\n\tISO639_3_2007?: string;\r\n\tISO639_5_2008?: string;\r\n\tLocale?: string;\r\n\tUnicodeName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<languagemodel>}\r\n * @public\r\n */\r\nexport interface LanguagePagedResults extends PagedResultsBase<languagemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @public\r\n */\r\nexport interface LanguageSearchModel extends BaseSearchModel {\r\n\tISO639_1_2002?: string;\r\n\tISO639_1_2002Strict?: boolean;\r\n\tISO639_1_2002IncludeNull?: boolean;\r\n\tISO639_2_1998?: string;\r\n\tISO639_2_1998Strict?: boolean;\r\n\tISO639_2_1998IncludeNull?: boolean;\r\n\tISO639_3_2007?: string;\r\n\tISO639_3_2007Strict?: boolean;\r\n\tISO639_3_2007IncludeNull?: boolean;\r\n\tISO639_5_2008?: string;\r\n\tISO639_5_2008Strict?: boolean;\r\n\tISO639_5_2008IncludeNull?: boolean;\r\n\tLocale?: string;\r\n\tLocaleStrict?: boolean;\r\n\tLocaleIncludeNull?: boolean;\r\n\tUnicodeName?: string;\r\n\tUnicodeNameStrict?: boolean;\r\n\tUnicodeNameIncludeNull?: boolean;\r\n}\r\n\r\nexport enum LocatorUnits {\r\n\tMiles,\r\n\tKilometers,\r\n\tMeters,\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface LotCatalogSearchForm extends SearchFormBase {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface LotIndexableModel extends IndexableModelBase {\r\n\tBidCount: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByProductBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface LotModel extends NameableBaseModel, AmFilterableByProductBaseModel, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tHighestBid?: BidModel;\r\n\tBuyNowAvailable?: boolean;\r\n\tAccountID: number;\r\n\tAccountKey?: string;\r\n\tAccountName?: string;\r\n\tAccount?: AccountModel;\r\n\tAuctionID?: number;\r\n\tAuctionKey?: string;\r\n\tAuctionName?: string;\r\n\tAuction?: AuctionModel;\r\n\tClosesAt?: Date;\r\n\tFee?: number;\r\n\tIncrementProfileID?: number;\r\n\tIncrementProfileKey?: string;\r\n\tIncrementProfileName?: string;\r\n\tIncrementProfile?: IncrementProfileModel;\r\n\tOpensAt?: Date;\r\n\tReservePrice?: number;\r\n\tStartingPrice?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<lotmodel>}\r\n * @public\r\n */\r\nexport interface LotPagedResults extends PagedResultsBase<lotmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface LotSearchModel extends NameableBaseSearchModel, AmFilterableByProductBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\r\n\tBuyNowAvailable?: boolean;\r\n\tAccountID?: number;\r\n\tAuctionID?: number;\r\n\tAuctionIDIncludeNull?: boolean;\r\n\tMinClosesAt?: Date;\r\n\tMaxClosesAt?: Date;\r\n\tMatchClosesAt?: Date;\r\n\tMatchClosesAtIncludeNull?: boolean;\r\n\tMinFee?: number;\r\n\tMaxFee?: number;\r\n\tMatchFee?: number;\r\n\tMatchFeeIncludeNull?: boolean;\r\n\tIncrementProfileID?: number;\r\n\tIncrementProfileIDIncludeNull?: boolean;\r\n\tMinOpensAt?: Date;\r\n\tMaxOpensAt?: Date;\r\n\tMatchOpensAt?: Date;\r\n\tMatchOpensAtIncludeNull?: boolean;\r\n\tMinReservePrice?: number;\r\n\tMaxReservePrice?: number;\r\n\tMatchReservePrice?: number;\r\n\tMatchReservePriceIncludeNull?: boolean;\r\n\tMinStartingPrice?: number;\r\n\tMaxStartingPrice?: number;\r\n\tMatchStartingPrice?: number;\r\n\tMatchStartingPriceIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<lotcatalogsearchform,lotindexablemodel>}\r\n * @public\r\n */\r\nexport interface LotSearchViewModel extends SearchViewModelBase<lotcatalogsearchform,lotindexablemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface LotSuggestResult extends SuggestResultBase {\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface ManufacturerCatalogSearchForm extends SearchFormBase {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ManufacturerImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface ManufacturerIndexableModel extends IndexableModelBase {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveImagesBaseModel<manufacturerimagemodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandmanufacturermodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchisemanufacturermodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<manufacturerproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storemanufacturermodel>}\r\n * @see {@link AmFilterableByVendorsBaseModel<vendormanufacturermodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @see {@link HaveOrderMinimumsBaseModel}\r\n * @see {@link HaveFreeShippingMinimumsBaseModel}\r\n * @public\r\n */\r\nexport interface ManufacturerModel extends NameableBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<manufacturerimagemodel>, AmFilterableByBrandsBaseModel<brandmanufacturermodel>, AmFilterableByFranchisesBaseModel<franchisemanufacturermodel>, AmFilterableByProductsBaseModel<manufacturerproductmodel>, AmFilterableByStoresBaseModel<storemanufacturermodel>, AmFilterableByVendorsBaseModel<vendormanufacturermodel>, HaveATypeModel<typemodel>, HaveANullableContactBaseModel, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\r\n\tReviews?: Array<reviewmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<manufacturermodel>}\r\n * @public\r\n */\r\nexport interface ManufacturerPagedResults extends PagedResultsBase<manufacturermodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @public\r\n */\r\nexport interface ManufacturerProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByVendorBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @see {@link HaveAContactBaseSearchModel}\r\n * @public\r\n */\r\nexport interface ManufacturerSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\r\n\tAddressID?: number;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tContactIDIncludeNull?: boolean;\r\n\tContactKeyStrict?: boolean;\r\n\tContactKeyIncludeNull?: boolean;\r\n\tContactFirstNameStrict?: boolean;\r\n\tContactFirstNameIncludeNull?: boolean;\r\n\tContactLastNameStrict?: boolean;\r\n\tContactLastNameIncludeNull?: boolean;\r\n\tContactPhoneStrict?: boolean;\r\n\tContactPhoneIncludeNull?: boolean;\r\n\tContactFaxStrict?: boolean;\r\n\tContactFaxIncludeNull?: boolean;\r\n\tContactEmailStrict?: boolean;\r\n\tContactEmailIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmount?: number;\r\n\tMaxMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmount?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmount?: number;\r\n\tMaxMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountAfter?: number;\r\n\tMaxMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\r\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferProductID?: number;\r\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmount?: number;\r\n\tMaxMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountAfter?: number;\r\n\tMaxMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\r\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferProductID?: number;\r\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessage?: string;\r\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<manufacturercatalogsearchform,manufacturerindexablemodel>}\r\n * @public\r\n */\r\nexport interface ManufacturerSearchViewModel extends SearchViewModelBase<manufacturercatalogsearchform,manufacturerindexablemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface ManufacturerSuggestResult extends SuggestResultBase {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<membershiplevelmodel>}\r\n * @public\r\n */\r\nexport interface MembershipAdZoneAccessByLevelModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<membershiplevelmodel> {\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n\tSubscriberCountThreshold?: number;\r\n\tUniqueAdLimit?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<adzoneaccessmodel>}\r\n * @public\r\n */\r\nexport interface MembershipAdZoneAccessModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<adzoneaccessmodel> {\r\n\tMasterName?: string;\r\n\tMasterDisplayName?: string;\r\n\tMasterTranslationKey?: string;\r\n\tMasterSortOrder?: number;\r\n\tSlaveName?: string;\r\n\tMembershipAdZoneAccessByLevels?: Array<membershipadzoneaccessbylevelmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface MembershipLevelModel extends TypableBaseModel {\r\n\tMembershipAdZoneAccessByLevels?: Array<membershipadzoneaccessbylevelmodel>;\r\n\tMembershipID: number;\r\n\tMembershipKey?: string;\r\n\tMembershipName?: string;\r\n\tMembershipDisplayName?: string;\r\n\tMembershipTranslationKey?: string;\r\n\tMembershipSortOrder?: number;\r\n\tMembership?: MembershipModel;\r\n\tRolesApplied?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<membershiplevelmodel>}\r\n * @public\r\n */\r\nexport interface MembershipLevelPagedResults extends PagedResultsBase<membershiplevelmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface MembershipLevelSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tMembershipID?: number;\r\n\tRolesApplied?: string;\r\n\tRolesAppliedStrict?: boolean;\r\n\tRolesAppliedIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface MembershipModel extends TypableBaseModel {\r\n\tIsContractual?: boolean;\r\n\tMembershipLevels?: Array<membershiplevelmodel>;\r\n\tMembershipRepeatTypes?: Array<membershiprepeattypemodel>;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<membershipmodel>}\r\n * @public\r\n */\r\nexport interface MembershipPagedResults extends PagedResultsBase<membershipmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<typemodel>}\r\n * @public\r\n */\r\nexport interface MembershipRepeatTypeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<typemodel> {\r\n\tMasterName?: string;\r\n\tMasterDisplayName?: string;\r\n\tMasterTranslationKey?: string;\r\n\tMasterSortOrder?: number;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface MembershipSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tIsContractual?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface MenuCategoryModel {\r\n\tID?: number;\r\n\tCustomKey?: string;\r\n\tName?: string;\r\n\tDisplayName?: string;\r\n\tSeoUrl?: string;\r\n\tSortOrder?: number;\r\n\tPrimaryImageFileName?: string;\r\n\tDescription?: string;\r\n\tHasChildren: boolean;\r\n\tChildren?: Array<menucategorymodel>;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface MessageAttachmentModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n\tCreatedByUserID: number;\r\n\tCreatedByUserKey?: string;\r\n\tCreatedByUserUserName?: string;\r\n\tCreatedByUser?: UserModel;\r\n\tUpdatedByUserID?: number;\r\n\tUpdatedByUserKey?: string;\r\n\tUpdatedByUserUserName?: string;\r\n\tUpdatedByUser?: UserModel;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @public\r\n */\r\nexport interface MessageModel extends BaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\r\n\tSentByUserContactFirstName?: string;\r\n\tSentByUserContactLastName?: string;\r\n\tIsReplyAllAllowed?: boolean;\r\n\tMessageAttachments?: Array<messageattachmentmodel>;\r\n\tMessageRecipients?: Array<messagerecipientmodel>;\r\n\tConversationID?: number;\r\n\tConversationKey?: string;\r\n\tConversation?: ConversationModel;\r\n\tSentByUserID?: number;\r\n\tSentByUserKey?: string;\r\n\tSentByUserUserName?: string;\r\n\tSentByUser?: UserModel;\r\n\tBody?: string;\r\n\tContext?: string;\r\n\tSubject?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<messagemodel>}\r\n * @public\r\n */\r\nexport interface MessagePagedResults extends PagedResultsBase<messagemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface MessageRecipientModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tSlaveUserName?: string;\r\n\tHasSentAnEmail?: boolean;\r\n\tIsArchived?: boolean;\r\n\tIsRead?: boolean;\r\n\tArchivedAt?: Date;\r\n\tEmailSentAt?: Date;\r\n\tGroupID?: number;\r\n\tGroupKey?: string;\r\n\tGroupName?: string;\r\n\tGroup?: GroupModel;\r\n\tReadAt?: Date;\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface MessageSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tSentFromOrToUserID?: number;\r\n\tSentFromUserID?: number;\r\n\tSentToUserID?: number;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tIsReplyAllAllowed?: boolean;\r\n\tConversationID?: number;\r\n\tConversationIDIncludeNull?: boolean;\r\n\tSentByUserID?: number;\r\n\tSentByUserIDIncludeNull?: boolean;\r\n\tBody?: string;\r\n\tBodyStrict?: boolean;\r\n\tBodyIncludeNull?: boolean;\r\n\tContext?: string;\r\n\tContextStrict?: boolean;\r\n\tContextIncludeNull?: boolean;\r\n\tSubject?: string;\r\n\tSubjectStrict?: boolean;\r\n\tSubjectIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface MFARequirementsModel {\r\n\tPhone: boolean;\r\n\tEmail: boolean;\r\n\tPhoneLastFour?: string;\r\n\tEmailFirstAndLastFour?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface NameableBaseModel extends BaseModel {\r\n\tName?: string;\r\n\tDescription?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @public\r\n */\r\nexport interface NameableBaseSearchModel extends BaseSearchModel {\r\n\tName?: string;\r\n\tNameStrict?: boolean;\r\n\tDescription?: string;\r\n\tCustomKeyOrName?: string;\r\n\tCustomKeyOrNameOrDescription?: string;\r\n\tIDOrCustomKeyOrName?: string;\r\n\tIDOrCustomKeyOrNameOrDescription?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveATypeModel<notetypemodel>}\r\n * @public\r\n */\r\nexport interface NoteModel extends BaseModel, HaveATypeModel<notetypemodel> {\r\n\tCreatedByUserContactFirstName?: string;\r\n\tCreatedByUserContactLastName?: string;\r\n\tAccountID?: number;\r\n\tAccountKey?: string;\r\n\tAccountName?: string;\r\n\tBrandID?: number;\r\n\tBrandKey?: string;\r\n\tBrandName?: string;\r\n\tCartID?: number;\r\n\tCartKey?: string;\r\n\tCartItemID?: number;\r\n\tCartItemKey?: string;\r\n\tCartItemName?: string;\r\n\tCreatedByUserID?: number;\r\n\tCreatedByUserKey?: string;\r\n\tCreatedByUserUserName?: string;\r\n\tCreatedByUser?: UserModel;\r\n\tFranchiseID?: number;\r\n\tFranchiseKey?: string;\r\n\tFranchiseName?: string;\r\n\tManufacturerID?: number;\r\n\tManufacturerKey?: string;\r\n\tManufacturerName?: string;\r\n\tPurchaseOrderID?: number;\r\n\tPurchaseOrderKey?: string;\r\n\tPurchaseOrderItemID?: number;\r\n\tPurchaseOrderItemKey?: string;\r\n\tPurchaseOrderItemName?: string;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupKey?: string;\r\n\tSalesInvoiceID?: number;\r\n\tSalesInvoiceKey?: string;\r\n\tSalesInvoiceItemID?: number;\r\n\tSalesInvoiceItemKey?: string;\r\n\tSalesInvoiceItemName?: string;\r\n\tSalesOrderID?: number;\r\n\tSalesOrderKey?: string;\r\n\tSalesOrderItemID?: number;\r\n\tSalesOrderItemKey?: string;\r\n\tSalesOrderItemName?: string;\r\n\tSalesQuoteID?: number;\r\n\tSalesQuoteKey?: string;\r\n\tSalesQuoteItemID?: number;\r\n\tSalesQuoteItemKey?: string;\r\n\tSalesQuoteItemName?: string;\r\n\tSalesReturnID?: number;\r\n\tSalesReturnKey?: string;\r\n\tSalesReturnItemID?: number;\r\n\tSalesReturnItemKey?: string;\r\n\tSalesReturnItemName?: string;\r\n\tSampleRequestID?: number;\r\n\tSampleRequestKey?: string;\r\n\tSampleRequestItemID?: number;\r\n\tSampleRequestItemKey?: string;\r\n\tSampleRequestItemName?: string;\r\n\tStoreID?: number;\r\n\tStoreKey?: string;\r\n\tStoreName?: string;\r\n\tStoreSeoUrl?: string;\r\n\tUpdatedByUserID?: number;\r\n\tUpdatedByUserKey?: string;\r\n\tUpdatedByUserUserName?: string;\r\n\tUpdatedByUser?: UserModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUserUserName?: string;\r\n\tVendorID?: number;\r\n\tVendorKey?: string;\r\n\tVendorName?: string;\r\n\tNote1?: string;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface NoteTypeModel extends TypableBaseModel {\r\n\tIsCustomer?: boolean;\r\n\tIsPublic?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<notetypemodel>}\r\n * @public\r\n */\r\nexport interface NoteTypePagedResults extends PagedResultsBase<notetypemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface NoteTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tIsCustomer?: boolean;\r\n\tIsPublic?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface OrderEventWebhookReturn {\r\n\tevent_id: number; // Name format overridden\r\n\torder_id: number; // Name format overridden\r\n\taccount_id: number; // Name format overridden\r\n\tuser_id: number; // Name format overridden\r\n\ttype: number; // Name format overridden\r\n\tentity_id?: string; // Name format overridden\r\n\tdescription?: string; // Name format overridden\r\n\tcreated: Date; // Name format overridden\r\n\turi?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface OrderWebhookReturn {\r\n\torder_id?: number; // Name format overridden\r\n\taccount_id?: number; // Name format overridden\r\n\tbuyer_account_id?: number; // Name format overridden\r\n\tbuyer_id?: number; // Name format overridden\r\n\tcurrency?: string; // Name format overridden\r\n\ttype?: number; // Name format overridden\r\n\tstatus?: number; // Name format overridden\r\n\tstatus_name?: string; // Name format overridden\r\n\tamount?: number; // Name format overridden\r\n\tbalance?: number; // Name format overridden\r\n\tavailable_balance?: number; // Name format overridden\r\n\tsummary?: string; // Name format overridden\r\n\tdescription?: string; // Name format overridden\r\n\tinvoice_num?: string; // Name format overridden\r\n\tpurchase_order_num?: string; // Name format overridden\r\n\tstatus_change?: Date; // Name format overridden\r\n\tcreated?: Date; // Name format overridden\r\n\turi?: string; // Name format overridden\r\n\tparent_order_id?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveDimensionsBaseModel}\r\n * @public\r\n */\r\nexport interface PackageModel extends NameableBaseModel, HaveATypeModel<typemodel>, HaveDimensionsBaseModel {\r\n\tIsCustom?: boolean;\r\n\tDimensionalWeight?: number;\r\n\tDimensionalWeightUnitOfMeasure?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface PackageTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<eventmodel>}\r\n * @public\r\n */\r\nexport interface PageViewEventModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<eventmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @public\r\n */\r\nexport interface PageViewModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<typemodel>, HaveANullableContactBaseModel {\r\n\tAddressID?: number;\r\n\tAddressKey?: string;\r\n\tAddress?: AddressModel;\r\n\tIPOrganizationID?: number;\r\n\tIPOrganizationKey?: string;\r\n\tIPOrganizationName?: string;\r\n\tIPOrganization?: IPOrganizationModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUser?: UserModel;\r\n\tCampaignID?: number;\r\n\tCampaign?: CampaignModel;\r\n\tCampaignKey?: string;\r\n\tCampaignName?: string;\r\n\tSiteDomainID?: number;\r\n\tSiteDomain?: SiteDomainModel;\r\n\tSiteDomainKey?: string;\r\n\tSiteDomainName?: string;\r\n\tVisitorID?: number;\r\n\tVisitor?: VisitorModel;\r\n\tVisitorKey?: string;\r\n\tVisitorName?: string;\r\n\tCategoryID?: number;\r\n\tCategoryKey?: string;\r\n\tCategoryName?: string;\r\n\tCategorySeoUrl?: string;\r\n\tCategory?: CategoryModel;\r\n\tContainsSocialProfile?: boolean;\r\n\tDelta?: number;\r\n\tDidBounce?: boolean;\r\n\tDuration?: number;\r\n\tEndedOn?: Date;\r\n\tIsFirstTrigger?: boolean;\r\n\tProductID?: number;\r\n\tProductKey?: string;\r\n\tProductName?: string;\r\n\tProductSeoUrl?: string;\r\n\tProduct?: ProductModel;\r\n\tScore?: number;\r\n\tSource?: number;\r\n\tStartedOn?: Date;\r\n\tTotalTriggers?: number;\r\n\tViewedOn?: Date;\r\n\tBrowser?: string;\r\n\tEntryPage?: string;\r\n\tExitPage?: string;\r\n\tFlash?: string;\r\n\tIPAddress?: string;\r\n\tKeywords?: string;\r\n\tLanguage?: string;\r\n\tOperatingSystem?: string;\r\n\tPartitionKey?: string;\r\n\tReferrer?: string;\r\n\tReferringHost?: string;\r\n\tRowKey?: string;\r\n\tTime?: string;\r\n\tTitle?: string;\r\n\tURI?: string;\r\n\tVisitKey?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface Paging {\r\n\tSize?: number;\r\n\tStartIndex?: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface PaymentMethodModel extends NameableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<paymentmethodmodel>}\r\n * @public\r\n */\r\nexport interface PaymentMethodPagedResults extends PagedResultsBase<paymentmethodmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface PaymentMethodSearchModel extends NameableBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface PaymentModel extends BaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tRoutingNumber?: string;\r\n\tAccountNumber?: string;\r\n\tCardNumber?: string;\r\n\tCardType?: string;\r\n\tCardHolderName?: string;\r\n\tZip?: string;\r\n\tToken?: string;\r\n\tInvoiceNumber?: string;\r\n\tPurchaseOrderNumber?: string;\r\n\tTransactionID?: string;\r\n\tReference1?: string;\r\n\tReference2?: string;\r\n\tReference3?: string;\r\n\tPaymentDate?: Date;\r\n\tPayoneerAccountID?: number;\r\n\tPayoneerCustomerID?: number;\r\n\tCardTypeID?: number;\r\n\tWalletID?: number;\r\n\tReferenceName?: string;\r\n\tAmount?: number;\r\n\tAuthDate?: Date;\r\n\tAuthorized?: boolean;\r\n\tBillingContactID?: number;\r\n\tBillingContactKey?: string;\r\n\tBillingContact?: ContactModel;\r\n\tCurrencyID?: number;\r\n\tCurrencyKey?: string;\r\n\tCurrencyName?: string;\r\n\tCurrency?: CurrencyModel;\r\n\tExpirationMonth?: number;\r\n\tExpirationYear?: number;\r\n\tPaymentMethodID?: number;\r\n\tPaymentMethodKey?: string;\r\n\tPaymentMethodName?: string;\r\n\tPaymentMethod?: PaymentMethodModel;\r\n\tReceived?: boolean;\r\n\tReceivedDate?: Date;\r\n\tStatusDate?: Date;\r\n\tAccountNumberLast4?: string;\r\n\tAuthCode?: string;\r\n\tBankName?: string;\r\n\tCardMask?: string;\r\n\tCheckNumber?: string;\r\n\tCVV?: string;\r\n\tExternalCustomerID?: string;\r\n\tExternalPaymentID?: string;\r\n\tLast4CardDigits?: string;\r\n\tPaymentData?: string;\r\n\tReferenceNo?: string;\r\n\tResponse?: string;\r\n\tRoutingNumberLast4?: string;\r\n\tTransactionNumber?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<paymentmodel>}\r\n * @public\r\n */\r\nexport interface PaymentPagedResults extends PagedResultsBase<paymentmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface PaymentStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface PaymentTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface PhonePrefixLookupModel extends BaseModel {\r\n\tCountryID?: number;\r\n\tCountryKey?: string;\r\n\tCountryName?: string;\r\n\tCountryCode?: string;\r\n\tCountry?: CountryModel;\r\n\tRegionID?: number;\r\n\tRegionKey?: string;\r\n\tRegionName?: string;\r\n\tRegionCode?: string;\r\n\tRegion?: RegionModel;\r\n\tCityName?: string;\r\n\tPrefix?: string;\r\n\tTimeZone?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<phoneprefixlookupmodel>}\r\n * @public\r\n */\r\nexport interface PhonePrefixLookupPagedResults extends PagedResultsBase<phoneprefixlookupmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<productmodel>}\r\n * @public\r\n */\r\nexport interface PreviouslyOrderedProductPagedResults extends PagedResultsBase<productmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface PricePointModel extends TypableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<pricepointmodel>}\r\n * @public\r\n */\r\nexport interface PricePointPagedResults extends PagedResultsBase<pricepointmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface PricePointSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleAccountModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<typemodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleAccountTypeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<typemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<brandmodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleBrandModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<brandmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<categorymodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleCategoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<categorymodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<countrymodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleCountryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<countrymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<franchisemodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleFranchiseModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<franchisemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<manufacturermodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleManufacturerModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<manufacturermodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByAccountsBaseModel<priceruleaccountmodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<pricerulebrandmodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<pricerulefranchisemodel>}\r\n * @see {@link AmFilterableByManufacturersBaseModel<pricerulemanufacturermodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<priceruleproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<pricerulestoremodel>}\r\n * @see {@link AmFilterableByVendorsBaseModel<pricerulevendormodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleModel extends NameableBaseModel, AmFilterableByAccountsBaseModel<priceruleaccountmodel>, AmFilterableByBrandsBaseModel<pricerulebrandmodel>, AmFilterableByFranchisesBaseModel<pricerulefranchisemodel>, AmFilterableByManufacturersBaseModel<pricerulemanufacturermodel>, AmFilterableByProductsBaseModel<priceruleproductmodel>, AmFilterableByStoresBaseModel<pricerulestoremodel>, AmFilterableByVendorsBaseModel<pricerulevendormodel> {\r\n\tIsExclusive?: boolean;\r\n\tIsMarkup?: boolean;\r\n\tIsOnlyForAnonymousUsers?: boolean;\r\n\tIsPercentage?: boolean;\r\n\tUsePriceBase?: boolean;\r\n\tPriceAdjustment?: number;\r\n\tPriceRuleAccountTypes?: Array<priceruleaccounttypemodel>;\r\n\tPriceRuleCategories?: Array<pricerulecategorymodel>;\r\n\tPriceRuleCountries?: Array<pricerulecountrymodel>;\r\n\tPriceRuleProductTypes?: Array<priceruleproducttypemodel>;\r\n\tPriceRuleUserRoles?: Array<priceruleuserrolemodel>;\r\n\tCurrencyID?: number;\r\n\tCurrencyKey?: string;\r\n\tCurrencyName?: string;\r\n\tCurrency?: CurrencyModel;\r\n\tEndDate?: Date;\r\n\tMaxQuantity?: number;\r\n\tMinQuantity?: number;\r\n\tPriority?: number;\r\n\tStartDate?: Date;\r\n\tUnitOfMeasure?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<pricerulemodel>}\r\n * @public\r\n */\r\nexport interface PriceRulePagedResults extends PagedResultsBase<pricerulemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tOverridePrice?: boolean;\r\n\tOverrideBasePrice?: number;\r\n\tOverrideSalePrice?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<typemodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleProductTypeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<typemodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByVendorBaseSearchModel}\r\n * @public\r\n */\r\nexport interface PriceRuleSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByVendorBaseSearchModel {\r\n\tPriority?: number;\r\n\tMinQuantityMin?: number;\r\n\tMinQuantityMax?: number;\r\n\tMaxQuantityMin?: number;\r\n\tMaxQuantityMax?: number;\r\n\tStartDateMin?: Date;\r\n\tStartDateMax?: Date;\r\n\tEndDateMin?: Date;\r\n\tEndDateMax?: Date;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tIsExclusive?: boolean;\r\n\tIsMarkup?: boolean;\r\n\tIsOnlyForAnonymousUsers?: boolean;\r\n\tIsPercentage?: boolean;\r\n\tUsePriceBase?: boolean;\r\n\tMinPriceAdjustment?: number;\r\n\tMaxPriceAdjustment?: number;\r\n\tMatchPriceAdjustment?: number;\r\n\tCurrencyID?: number;\r\n\tCurrencyIDIncludeNull?: boolean;\r\n\tMinEndDate?: Date;\r\n\tMaxEndDate?: Date;\r\n\tMatchEndDate?: Date;\r\n\tMatchEndDateIncludeNull?: boolean;\r\n\tMinMaxQuantity?: number;\r\n\tMaxMaxQuantity?: number;\r\n\tMatchMaxQuantity?: number;\r\n\tMatchMaxQuantityIncludeNull?: boolean;\r\n\tMinMinQuantity?: number;\r\n\tMaxMinQuantity?: number;\r\n\tMatchMinQuantity?: number;\r\n\tMatchMinQuantityIncludeNull?: boolean;\r\n\tMinPriority?: number;\r\n\tMaxPriority?: number;\r\n\tMatchPriority?: number;\r\n\tMatchPriorityIncludeNull?: boolean;\r\n\tMinStartDate?: Date;\r\n\tMaxStartDate?: Date;\r\n\tMatchStartDate?: Date;\r\n\tMatchStartDateIncludeNull?: boolean;\r\n\tUnitOfMeasure?: string;\r\n\tUnitOfMeasureStrict?: boolean;\r\n\tUnitOfMeasureIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<storemodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleStoreModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<storemodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface PriceRuleUserRoleModel extends BaseModel {\r\n\tPriceRuleID: number;\r\n\tPriceRuleKey?: string;\r\n\tPriceRuleName?: string;\r\n\tPriceRule?: PriceRuleModel;\r\n\tRoleName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<vendormodel>}\r\n * @public\r\n */\r\nexport interface PriceRuleVendorModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<vendormodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductAssociationModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel>, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel, HaveATypeModel<typemodel> {\r\n\tMasterPrimaryImageFileName?: string;\r\n\tMasterIsVisible: boolean;\r\n\tMasterSerializableAttributes?: SerializableAttributesDictionary;\r\n\tSlavePrimaryImageFileName?: string;\r\n\tSlaveIsVisible: boolean;\r\n\tSlaveSerializableAttributes?: SerializableAttributesDictionary;\r\n\tMasterName?: string;\r\n\tMasterSeoUrl?: string;\r\n\tSlaveName?: string;\r\n\tSlaveSeoUrl?: string;\r\n\tQuantity?: number;\r\n\tSortOrder?: number;\r\n\tUnitOfMeasure?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductAssociationTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ProductByCategoryModel {\r\n\tCategoryID?: number;\r\n\tCategoryName?: string;\r\n\tSortOrder?: number;\r\n\tProducts?: Array<productmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface ProductCatalogSearchForm extends SearchFormBase {\r\n\tBrandName?: string;\r\n\tWithLots?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<categorymodel>}\r\n * @public\r\n */\r\nexport interface ProductCategoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<categorymodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface ProductCategorySelectorModel extends NameableBaseModel {\r\n\tSeoUrl?: string;\r\n\tParentID?: number;\r\n\tSortOrder?: number;\r\n\tHasChildren?: boolean;\r\n\tIsSelfSelected: boolean;\r\n\tIsChildSelected: boolean;\r\n\tChildren?: Array<productcategoryselectormodel>;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByProductBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductDownloadModel extends NameableBaseModel, AmFilterableByProductBaseModel, HaveATypeModel<typemodel> {\r\n\tIsAbsoluteUrl?: boolean;\r\n\tAbsoluteUrl?: string;\r\n\tRelativeUrl?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductDownloadTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface ProductFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n\tMasterSeoUrl?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<productimagemodel>}\r\n * @public\r\n */\r\nexport interface ProductImagePagedResults extends PagedResultsBase<productimagemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface ProductImageSearchModel extends NameableBaseSearchModel, HaveATypeSearchModel {\r\n\tIsPrimary?: boolean;\r\n\tOriginalIsStoredInDB?: boolean;\r\n\tThumbnailIsStoredInDB?: boolean;\r\n\tMinLatitude?: number;\r\n\tMaxLatitude?: number;\r\n\tMatchLatitude?: number;\r\n\tMatchLatitudeIncludeNull?: boolean;\r\n\tMinLongitude?: number;\r\n\tMaxLongitude?: number;\r\n\tMatchLongitude?: number;\r\n\tMatchLongitudeIncludeNull?: boolean;\r\n\tMasterID?: number;\r\n\tMasterIDIncludeNull?: boolean;\r\n\tMinMediaDate?: Date;\r\n\tMaxMediaDate?: Date;\r\n\tMatchMediaDate?: Date;\r\n\tMatchMediaDateIncludeNull?: boolean;\r\n\tMinOriginalHeight?: number;\r\n\tMaxOriginalHeight?: number;\r\n\tMatchOriginalHeight?: number;\r\n\tMatchOriginalHeightIncludeNull?: boolean;\r\n\tMinOriginalWidth?: number;\r\n\tMaxOriginalWidth?: number;\r\n\tMatchOriginalWidth?: number;\r\n\tMatchOriginalWidthIncludeNull?: boolean;\r\n\tMinSortOrder?: number;\r\n\tMaxSortOrder?: number;\r\n\tMatchSortOrder?: number;\r\n\tMatchSortOrderIncludeNull?: boolean;\r\n\tMinThumbnailHeight?: number;\r\n\tMaxThumbnailHeight?: number;\r\n\tMatchThumbnailHeight?: number;\r\n\tMatchThumbnailHeightIncludeNull?: boolean;\r\n\tMinThumbnailWidth?: number;\r\n\tMaxThumbnailWidth?: number;\r\n\tMatchThumbnailWidth?: number;\r\n\tMatchThumbnailWidthIncludeNull?: boolean;\r\n\tAuthor?: string;\r\n\tAuthorStrict?: boolean;\r\n\tAuthorIncludeNull?: boolean;\r\n\tCopyright?: string;\r\n\tCopyrightStrict?: boolean;\r\n\tCopyrightIncludeNull?: boolean;\r\n\tDisplayName?: string;\r\n\tDisplayNameStrict?: boolean;\r\n\tDisplayNameIncludeNull?: boolean;\r\n\tLocation?: string;\r\n\tLocationStrict?: boolean;\r\n\tLocationIncludeNull?: boolean;\r\n\tOriginalFileFormat?: string;\r\n\tOriginalFileFormatStrict?: boolean;\r\n\tOriginalFileFormatIncludeNull?: boolean;\r\n\tOriginalFileName?: string;\r\n\tOriginalFileNameStrict?: boolean;\r\n\tOriginalFileNameIncludeNull?: boolean;\r\n\tSeoTitle?: string;\r\n\tSeoTitleStrict?: boolean;\r\n\tSeoTitleIncludeNull?: boolean;\r\n\tThumbnailFileFormat?: string;\r\n\tThumbnailFileFormatStrict?: boolean;\r\n\tThumbnailFileFormatIncludeNull?: boolean;\r\n\tThumbnailFileName?: string;\r\n\tThumbnailFileNameStrict?: boolean;\r\n\tThumbnailFileNameIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductImageTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface ProductIndexableModel extends IndexableModelBase {\r\n\tSuggestedByBrandName?: any;\r\n\tSuggestedByManufacturerPartNumber?: any;\r\n\tSuggestedByShortDescription?: any;\r\n\tManufacturerPartNumber?: string;\r\n\tShortDescription?: string;\r\n\tBrandName?: string;\r\n\tBrandNameAgg?: string;\r\n\tIsVisible: boolean;\r\n\tIsQuotable?: boolean;\r\n\tIsTaxable?: boolean;\r\n\tIsSale?: boolean;\r\n\tIsFreeShipping?: boolean;\r\n\tUnitOfMeasure?: string;\r\n\tAvailableStartDate?: Date;\r\n\tAvailableEndDate?: Date;\r\n\tWeight?: number;\r\n\tWeightUnitOfMeasure?: string;\r\n\tWidth?: number;\r\n\tWidthUnitOfMeasure?: string;\r\n\tDepth?: number;\r\n\tDepthUnitOfMeasure?: string;\r\n\tHeight?: number;\r\n\tHeightUnitOfMeasure?: string;\r\n\tTotalPurchasedAmount?: number;\r\n\tTotalPurchasedAmountCurrencyID?: number;\r\n\tTotalPurchasedQuantity?: number;\r\n\tProductVariantAttributes?: Array<indexablevariantattributesfilter>;\r\n\tHasLot: boolean;\r\n\tLotData?: IndexableLotData;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<inventorylocationsectionmodel>}\r\n * @public\r\n */\r\nexport interface ProductInventoryLocationSectionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<inventorylocationsectionmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tQuantity?: number;\r\n\tQuantityAllocated?: number;\r\n\tQuantityBroken?: number;\r\n\tQuantityPreSold?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<productinventorylocationsectionmodel>}\r\n * @public\r\n */\r\nexport interface ProductInventoryLocationSectionPagedResults extends PagedResultsBase<productinventorylocationsectionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @public\r\n */\r\nexport interface ProductInventoryLocationSectionSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByProductBaseSearchModel {\r\n\tInventoryLocationID?: number;\r\n\tInventoryLocationKey?: string;\r\n\tInventoryLocationName?: string;\r\n\tHasBrokenQuantity?: boolean;\r\n\tHasPreSoldQuantity?: boolean;\r\n\tStoreID?: number;\r\n\tStoreIDs?: Array<number>;\r\n\tProductIDs?: Array<number>;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tMinQuantity?: number;\r\n\tMaxQuantity?: number;\r\n\tMatchQuantity?: number;\r\n\tMatchQuantityIncludeNull?: boolean;\r\n\tMinQuantityAllocated?: number;\r\n\tMaxQuantityAllocated?: number;\r\n\tMatchQuantityAllocated?: number;\r\n\tMatchQuantityAllocatedIncludeNull?: boolean;\r\n\tMinQuantityBroken?: number;\r\n\tMaxQuantityBroken?: number;\r\n\tMatchQuantityBroken?: number;\r\n\tMatchQuantityBrokenIncludeNull?: boolean;\r\n\tMinQuantityPreSold?: number;\r\n\tMaxQuantityPreSold?: number;\r\n\tMatchQuantityPreSold?: number;\r\n\tMatchQuantityPreSoldIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<membershiplevelmodel>}\r\n * @public\r\n */\r\nexport interface ProductMembershipLevelModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<membershiplevelmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n\tSubscriptions?: Array<subscriptionmodel>;\r\n\tMembershipRepeatTypeID: number;\r\n\tMembershipRepeatTypeKey?: string;\r\n\tMembershipRepeatType?: MembershipRepeatTypeModel;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @see {@link HaveImagesBaseModel<productimagemodel>}\r\n * @see {@link HaveStoredFilesBaseModel<productfilemodel>}\r\n * @see {@link AmFilterableByAccountsBaseModel<accountproductmodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandproductmodel>}\r\n * @see {@link AmFilterableByCategoriesBaseModel<productcategorymodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchiseproductmodel>}\r\n * @see {@link AmFilterableByManufacturersBaseModel<manufacturerproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storeproductmodel>}\r\n * @see {@link AmFilterableByVendorsBaseModel<vendorproductmodel>}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveNullableDimensionsBaseModel}\r\n * @see {@link HaveRequiresRolesBaseModel}\r\n * @public\r\n */\r\nexport interface ProductModel extends NameableBaseModel, HaveSeoBaseModel, HaveImagesBaseModel<productimagemodel>, HaveStoredFilesBaseModel<productfilemodel>, AmFilterableByAccountsBaseModel<accountproductmodel>, AmFilterableByBrandsBaseModel<brandproductmodel>, AmFilterableByCategoriesBaseModel<productcategorymodel>, AmFilterableByFranchisesBaseModel<franchiseproductmodel>, AmFilterableByManufacturersBaseModel<manufacturerproductmodel>, AmFilterableByStoresBaseModel<storeproductmodel>, AmFilterableByVendorsBaseModel<vendorproductmodel>, HaveAStatusModel, HaveATypeModel<typemodel>, HaveNullableDimensionsBaseModel, HaveRequiresRolesBaseModel {\r\n\tProductsAssociatedWith?: Array<productassociationmodel>;\r\n\tIsVendorAdmin?: boolean;\r\n\tVendorAdminID?: number;\r\n\tIsManufacturerAdmin?: boolean;\r\n\tManufacturerAdminID?: number;\r\n\tLotID?: number;\r\n\tLotKey?: string;\r\n\tLotName?: string;\r\n\tLot?: LotModel;\r\n\tReviews?: Array<reviewmodel>;\r\n\tAllowBackOrder?: boolean;\r\n\tAllowPreSale?: boolean;\r\n\tDocumentRequiredForPurchaseOverrideFeeIsPercent?: boolean;\r\n\tDropShipOnly?: boolean;\r\n\tIsDiscontinued?: boolean;\r\n\tIsEligibleForReturn?: boolean;\r\n\tIsFreeShipping?: boolean;\r\n\tIsTaxable?: boolean;\r\n\tIsUnlimitedStock?: boolean;\r\n\tIsVisible?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeIsPercent?: boolean;\r\n\tNothingToShip?: boolean;\r\n\tShippingLeadTimeIsCalendarDays?: boolean;\r\n\tProductAssociations?: Array<productassociationmodel>;\r\n\tProductDownloads?: Array<productdownloadmodel>;\r\n\tProductMembershipLevels?: Array<productmembershiplevelmodel>;\r\n\tProductNotifications?: Array<productnotificationmodel>;\r\n\tProductRestrictions?: Array<productrestrictionmodel>;\r\n\tProductShipCarrierMethods?: Array<productshipcarriermethodmodel>;\r\n\tProductSubscriptionTypes?: Array<productsubscriptiontypemodel>;\r\n\tAvailableEndDate?: Date;\r\n\tAvailableStartDate?: Date;\r\n\tDocumentRequiredForPurchaseOverrideFee?: number;\r\n\tFlatShippingCharge?: number;\r\n\tHandlingCharge?: number;\r\n\tKitBaseQuantityPriceMultiplier?: number;\r\n\tMasterPackID?: number;\r\n\tMasterPackKey?: string;\r\n\tMasterPackName?: string;\r\n\tMasterPack?: PackageModel;\r\n\tMaximumBackOrderPurchaseQuantity?: number;\r\n\tMaximumBackOrderPurchaseQuantityGlobal?: number;\r\n\tMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\r\n\tMaximumPrePurchaseQuantity?: number;\r\n\tMaximumPrePurchaseQuantityGlobal?: number;\r\n\tMaximumPrePurchaseQuantityIfPastPurchased?: number;\r\n\tMaximumPurchaseQuantity?: number;\r\n\tMaximumPurchaseQuantityIfPastPurchased?: number;\r\n\tMinimumPurchaseQuantity?: number;\r\n\tMinimumPurchaseQuantityIfPastPurchased?: number;\r\n\tMustPurchaseInMultiplesOfAmount?: number;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFee?: number;\r\n\tPackageID?: number;\r\n\tPackageKey?: string;\r\n\tPackageName?: string;\r\n\tPackage?: PackageModel;\r\n\tPalletID?: number;\r\n\tPalletKey?: string;\r\n\tPalletName?: string;\r\n\tPallet?: PackageModel;\r\n\tPreSellEndDate?: Date;\r\n\tQuantityLayersPerPallet?: number;\r\n\tQuantityMasterPackLayersPerPallet?: number;\r\n\tQuantityMasterPackPerLayer?: number;\r\n\tQuantityMasterPackPerPallet?: number;\r\n\tQuantityPerLayer?: number;\r\n\tQuantityPerMasterPack?: number;\r\n\tQuantityPerPallet?: number;\r\n\tRestockingFeeAmount?: number;\r\n\tRestockingFeeAmountCurrencyID?: number;\r\n\tRestockingFeeAmountCurrencyKey?: string;\r\n\tRestockingFeeAmountCurrencyName?: string;\r\n\tRestockingFeeAmountCurrency?: CurrencyModel;\r\n\tRestockingFeePercent?: number;\r\n\tShippingLeadTimeDays?: number;\r\n\tSortOrder?: number;\r\n\tTotalPurchasedAmount?: number;\r\n\tTotalPurchasedAmountCurrencyID?: number;\r\n\tTotalPurchasedAmountCurrencyKey?: string;\r\n\tTotalPurchasedAmountCurrencyName?: string;\r\n\tTotalPurchasedAmountCurrency?: CurrencyModel;\r\n\tTotalPurchasedQuantity?: number;\r\n\tBrandName?: string;\r\n\tDocumentRequiredForPurchase?: string;\r\n\tDocumentRequiredForPurchaseExpiredWarningMessage?: string;\r\n\tDocumentRequiredForPurchaseMissingWarningMessage?: string;\r\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessage?: string;\r\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessage?: string;\r\n\tIndexSynonyms?: string;\r\n\tManufacturerPartNumber?: string;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessage?: string;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessage?: string;\r\n\tMustPurchaseInMultiplesOfAmountWarningMessage?: string;\r\n\tShortDescription?: string;\r\n\tTaxCode?: string;\r\n\tUnitOfMeasure?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByProductBaseModel}\r\n * @public\r\n */\r\nexport interface ProductNotificationModel extends NameableBaseModel, AmFilterableByProductBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<productmodel>}\r\n * @public\r\n */\r\nexport interface ProductPagedResults extends PagedResultsBase<productmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link AmFilterableByProductBaseModel}\r\n * @public\r\n */\r\nexport interface ProductRestrictionModel extends BaseModel, AmFilterableByProductBaseModel {\r\n\tCanPurchaseDomestically?: boolean;\r\n\tCanPurchaseInternationally?: boolean;\r\n\tCanPurchaseIntraRegion?: boolean;\r\n\tCanShipDomestically?: boolean;\r\n\tCanShipInternationally?: boolean;\r\n\tCanShipIntraRegion?: boolean;\r\n\tOverrideWithAccountTypeID?: number;\r\n\tOverrideWithAccountTypeKey?: string;\r\n\tOverrideWithAccountTypeName?: string;\r\n\tOverrideWithAccountTypeDisplayName?: string;\r\n\tOverrideWithAccountTypeTranslationKey?: string;\r\n\tOverrideWithAccountTypeSortOrder?: number;\r\n\tOverrideWithAccountType?: TypeModel;\r\n\tRestrictionsApplyToCountryID?: number;\r\n\tRestrictionsApplyToCountryKey?: string;\r\n\tRestrictionsApplyToCountryName?: string;\r\n\tRestrictionsApplyToCountryCode?: string;\r\n\tRestrictionsApplyToCountry?: CountryModel;\r\n\tRestrictionsApplyToRegionID?: number;\r\n\tRestrictionsApplyToRegionKey?: string;\r\n\tRestrictionsApplyToRegionName?: string;\r\n\tRestrictionsApplyToRegionCode?: string;\r\n\tRestrictionsApplyToRegion?: RegionModel;\r\n\tOverrideWithRoles?: string;\r\n\tRestrictionsApplyToCity?: string;\r\n\tRestrictionsApplyToPostalCode?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface ProductReviewInformationModel extends BaseModel {\r\n\tProductID: number;\r\n\tReviewTypeID?: number;\r\n\tValue?: number;\r\n\tCount: number;\r\n\tReviews?: Array<reviewmodel>;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByCategoryBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByVendorBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface ProductSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\r\n\tHasAnyAncestorCategoryID?: number;\r\n\tParentCategories?: Array<number>;\r\n\tSearchTerm?: string;\r\n\tPrice?: number;\r\n\tWeight?: number;\r\n\tCategoryTypeName?: string;\r\n\tKeywords?: string;\r\n\tComparisonIDs?: Array<number>;\r\n\tProductIDs?: Array<number>;\r\n\tBrandCategoryIDs?: Array<number>;\r\n\tCategoryJsonAttributes?: Dictionary<array<string>&gt;;\r\n\tIsVendorAdmin?: boolean;\r\n\tVendorAdminID?: number;\r\n\tIsManufacturerAdmin?: boolean;\r\n\tManufacturerAdminID?: number;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tSeoKeywords?: string;\r\n\tSeoKeywordsStrict?: boolean;\r\n\tSeoKeywordsIncludeNull?: boolean;\r\n\tSeoUrl?: string;\r\n\tSeoUrlStrict?: boolean;\r\n\tSeoUrlIncludeNull?: boolean;\r\n\tSeoDescription?: string;\r\n\tSeoDescriptionStrict?: boolean;\r\n\tSeoDescriptionIncludeNull?: boolean;\r\n\tSeoMetaData?: string;\r\n\tSeoMetaDataStrict?: boolean;\r\n\tSeoMetaDataIncludeNull?: boolean;\r\n\tSeoPageTitle?: string;\r\n\tSeoPageTitleStrict?: boolean;\r\n\tSeoPageTitleIncludeNull?: boolean;\r\n\tAllowBackOrder?: boolean;\r\n\tAllowPreSale?: boolean;\r\n\tDocumentRequiredForPurchaseOverrideFeeIsPercent?: boolean;\r\n\tDropShipOnly?: boolean;\r\n\tIsDiscontinued?: boolean;\r\n\tIsEligibleForReturn?: boolean;\r\n\tIsFreeShipping?: boolean;\r\n\tIsTaxable?: boolean;\r\n\tIsUnlimitedStock?: boolean;\r\n\tIsVisible?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeIsPercent?: boolean;\r\n\tNothingToShip?: boolean;\r\n\tShippingLeadTimeIsCalendarDays?: boolean;\r\n\tMinAvailableEndDate?: Date;\r\n\tMaxAvailableEndDate?: Date;\r\n\tMatchAvailableEndDate?: Date;\r\n\tMatchAvailableEndDateIncludeNull?: boolean;\r\n\tMinAvailableStartDate?: Date;\r\n\tMaxAvailableStartDate?: Date;\r\n\tMatchAvailableStartDate?: Date;\r\n\tMatchAvailableStartDateIncludeNull?: boolean;\r\n\tMinDepth?: number;\r\n\tMaxDepth?: number;\r\n\tMatchDepth?: number;\r\n\tMatchDepthIncludeNull?: boolean;\r\n\tMinDocumentRequiredForPurchaseOverrideFee?: number;\r\n\tMaxDocumentRequiredForPurchaseOverrideFee?: number;\r\n\tMatchDocumentRequiredForPurchaseOverrideFee?: number;\r\n\tMatchDocumentRequiredForPurchaseOverrideFeeIncludeNull?: boolean;\r\n\tMinFlatShippingCharge?: number;\r\n\tMaxFlatShippingCharge?: number;\r\n\tMatchFlatShippingCharge?: number;\r\n\tMatchFlatShippingChargeIncludeNull?: boolean;\r\n\tMinHandlingCharge?: number;\r\n\tMaxHandlingCharge?: number;\r\n\tMatchHandlingCharge?: number;\r\n\tMatchHandlingChargeIncludeNull?: boolean;\r\n\tMinHeight?: number;\r\n\tMaxHeight?: number;\r\n\tMatchHeight?: number;\r\n\tMatchHeightIncludeNull?: boolean;\r\n\tMinKitBaseQuantityPriceMultiplier?: number;\r\n\tMaxKitBaseQuantityPriceMultiplier?: number;\r\n\tMatchKitBaseQuantityPriceMultiplier?: number;\r\n\tMatchKitBaseQuantityPriceMultiplierIncludeNull?: boolean;\r\n\tMasterPackID?: number;\r\n\tMasterPackIDIncludeNull?: boolean;\r\n\tMinMaximumBackOrderPurchaseQuantity?: number;\r\n\tMaxMaximumBackOrderPurchaseQuantity?: number;\r\n\tMatchMaximumBackOrderPurchaseQuantity?: number;\r\n\tMatchMaximumBackOrderPurchaseQuantityIncludeNull?: boolean;\r\n\tMinMaximumBackOrderPurchaseQuantityGlobal?: number;\r\n\tMaxMaximumBackOrderPurchaseQuantityGlobal?: number;\r\n\tMatchMaximumBackOrderPurchaseQuantityGlobal?: number;\r\n\tMatchMaximumBackOrderPurchaseQuantityGlobalIncludeNull?: boolean;\r\n\tMinMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\r\n\tMaxMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMaximumBackOrderPurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\r\n\tMinMaximumPrePurchaseQuantity?: number;\r\n\tMaxMaximumPrePurchaseQuantity?: number;\r\n\tMatchMaximumPrePurchaseQuantity?: number;\r\n\tMatchMaximumPrePurchaseQuantityIncludeNull?: boolean;\r\n\tMinMaximumPrePurchaseQuantityGlobal?: number;\r\n\tMaxMaximumPrePurchaseQuantityGlobal?: number;\r\n\tMatchMaximumPrePurchaseQuantityGlobal?: number;\r\n\tMatchMaximumPrePurchaseQuantityGlobalIncludeNull?: boolean;\r\n\tMinMaximumPrePurchaseQuantityIfPastPurchased?: number;\r\n\tMaxMaximumPrePurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMaximumPrePurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMaximumPrePurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\r\n\tMinMaximumPurchaseQuantity?: number;\r\n\tMaxMaximumPurchaseQuantity?: number;\r\n\tMatchMaximumPurchaseQuantity?: number;\r\n\tMatchMaximumPurchaseQuantityIncludeNull?: boolean;\r\n\tMinMaximumPurchaseQuantityIfPastPurchased?: number;\r\n\tMaxMaximumPurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMaximumPurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMaximumPurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\r\n\tMinMinimumPurchaseQuantity?: number;\r\n\tMaxMinimumPurchaseQuantity?: number;\r\n\tMatchMinimumPurchaseQuantity?: number;\r\n\tMatchMinimumPurchaseQuantityIncludeNull?: boolean;\r\n\tMinMinimumPurchaseQuantityIfPastPurchased?: number;\r\n\tMaxMinimumPurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMinimumPurchaseQuantityIfPastPurchased?: number;\r\n\tMatchMinimumPurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\r\n\tMinMustPurchaseInMultiplesOfAmount?: number;\r\n\tMaxMustPurchaseInMultiplesOfAmount?: number;\r\n\tMatchMustPurchaseInMultiplesOfAmount?: number;\r\n\tMatchMustPurchaseInMultiplesOfAmountIncludeNull?: boolean;\r\n\tMinMustPurchaseInMultiplesOfAmountOverrideFee?: number;\r\n\tMaxMustPurchaseInMultiplesOfAmountOverrideFee?: number;\r\n\tMatchMustPurchaseInMultiplesOfAmountOverrideFee?: number;\r\n\tMatchMustPurchaseInMultiplesOfAmountOverrideFeeIncludeNull?: boolean;\r\n\tPackageID?: number;\r\n\tPackageIDIncludeNull?: boolean;\r\n\tPalletID?: number;\r\n\tPalletIDIncludeNull?: boolean;\r\n\tMinPreSellEndDate?: Date;\r\n\tMaxPreSellEndDate?: Date;\r\n\tMatchPreSellEndDate?: Date;\r\n\tMatchPreSellEndDateIncludeNull?: boolean;\r\n\tMinPriceBase?: number;\r\n\tMaxPriceBase?: number;\r\n\tMatchPriceBase?: number;\r\n\tMatchPriceBaseIncludeNull?: boolean;\r\n\tMinPriceMsrp?: number;\r\n\tMaxPriceMsrp?: number;\r\n\tMatchPriceMsrp?: number;\r\n\tMatchPriceMsrpIncludeNull?: boolean;\r\n\tMinPriceReduction?: number;\r\n\tMaxPriceReduction?: number;\r\n\tMatchPriceReduction?: number;\r\n\tMatchPriceReductionIncludeNull?: boolean;\r\n\tMinPriceSale?: number;\r\n\tMaxPriceSale?: number;\r\n\tMatchPriceSale?: number;\r\n\tMatchPriceSaleIncludeNull?: boolean;\r\n\tMinQuantityLayersPerPallet?: number;\r\n\tMaxQuantityLayersPerPallet?: number;\r\n\tMatchQuantityLayersPerPallet?: number;\r\n\tMatchQuantityLayersPerPalletIncludeNull?: boolean;\r\n\tMinQuantityMasterPackLayersPerPallet?: number;\r\n\tMaxQuantityMasterPackLayersPerPallet?: number;\r\n\tMatchQuantityMasterPackLayersPerPallet?: number;\r\n\tMatchQuantityMasterPackLayersPerPalletIncludeNull?: boolean;\r\n\tMinQuantityMasterPackPerLayer?: number;\r\n\tMaxQuantityMasterPackPerLayer?: number;\r\n\tMatchQuantityMasterPackPerLayer?: number;\r\n\tMatchQuantityMasterPackPerLayerIncludeNull?: boolean;\r\n\tMinQuantityMasterPackPerPallet?: number;\r\n\tMaxQuantityMasterPackPerPallet?: number;\r\n\tMatchQuantityMasterPackPerPallet?: number;\r\n\tMatchQuantityMasterPackPerPalletIncludeNull?: boolean;\r\n\tMinQuantityPerLayer?: number;\r\n\tMaxQuantityPerLayer?: number;\r\n\tMatchQuantityPerLayer?: number;\r\n\tMatchQuantityPerLayerIncludeNull?: boolean;\r\n\tMinQuantityPerMasterPack?: number;\r\n\tMaxQuantityPerMasterPack?: number;\r\n\tMatchQuantityPerMasterPack?: number;\r\n\tMatchQuantityPerMasterPackIncludeNull?: boolean;\r\n\tMinQuantityPerPallet?: number;\r\n\tMaxQuantityPerPallet?: number;\r\n\tMatchQuantityPerPallet?: number;\r\n\tMatchQuantityPerPalletIncludeNull?: boolean;\r\n\tMinRestockingFeeAmount?: number;\r\n\tMaxRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\r\n\tRestockingFeeAmountCurrencyID?: number;\r\n\tRestockingFeeAmountCurrencyIDIncludeNull?: boolean;\r\n\tMinRestockingFeePercent?: number;\r\n\tMaxRestockingFeePercent?: number;\r\n\tMatchRestockingFeePercent?: number;\r\n\tMatchRestockingFeePercentIncludeNull?: boolean;\r\n\tMinShippingLeadTimeDays?: number;\r\n\tMaxShippingLeadTimeDays?: number;\r\n\tMatchShippingLeadTimeDays?: number;\r\n\tMatchShippingLeadTimeDaysIncludeNull?: boolean;\r\n\tMinSortOrder?: number;\r\n\tMaxSortOrder?: number;\r\n\tMatchSortOrder?: number;\r\n\tMatchSortOrderIncludeNull?: boolean;\r\n\tMinStockQuantity?: number;\r\n\tMaxStockQuantity?: number;\r\n\tMatchStockQuantity?: number;\r\n\tMatchStockQuantityIncludeNull?: boolean;\r\n\tMinStockQuantityAllocated?: number;\r\n\tMaxStockQuantityAllocated?: number;\r\n\tMatchStockQuantityAllocated?: number;\r\n\tMatchStockQuantityAllocatedIncludeNull?: boolean;\r\n\tMinStockQuantityPreSold?: number;\r\n\tMaxStockQuantityPreSold?: number;\r\n\tMatchStockQuantityPreSold?: number;\r\n\tMatchStockQuantityPreSoldIncludeNull?: boolean;\r\n\tMinTotalPurchasedAmount?: number;\r\n\tMaxTotalPurchasedAmount?: number;\r\n\tMatchTotalPurchasedAmount?: number;\r\n\tMatchTotalPurchasedAmountIncludeNull?: boolean;\r\n\tTotalPurchasedAmountCurrencyID?: number;\r\n\tTotalPurchasedAmountCurrencyIDIncludeNull?: boolean;\r\n\tMinTotalPurchasedQuantity?: number;\r\n\tMaxTotalPurchasedQuantity?: number;\r\n\tMatchTotalPurchasedQuantity?: number;\r\n\tMatchTotalPurchasedQuantityIncludeNull?: boolean;\r\n\tMinWeight?: number;\r\n\tMaxWeight?: number;\r\n\tMatchWeight?: number;\r\n\tMatchWeightIncludeNull?: boolean;\r\n\tMinWidth?: number;\r\n\tMaxWidth?: number;\r\n\tMatchWidth?: number;\r\n\tMatchWidthIncludeNull?: boolean;\r\n\tDepthUnitOfMeasure?: string;\r\n\tDepthUnitOfMeasureStrict?: boolean;\r\n\tDepthUnitOfMeasureIncludeNull?: boolean;\r\n\tDocumentRequiredForPurchase?: string;\r\n\tDocumentRequiredForPurchaseStrict?: boolean;\r\n\tDocumentRequiredForPurchaseIncludeNull?: boolean;\r\n\tDocumentRequiredForPurchaseExpiredWarningMessage?: string;\r\n\tDocumentRequiredForPurchaseExpiredWarningMessageStrict?: boolean;\r\n\tDocumentRequiredForPurchaseExpiredWarningMessageIncludeNull?: boolean;\r\n\tDocumentRequiredForPurchaseMissingWarningMessage?: string;\r\n\tDocumentRequiredForPurchaseMissingWarningMessageStrict?: boolean;\r\n\tDocumentRequiredForPurchaseMissingWarningMessageIncludeNull?: boolean;\r\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessage?: string;\r\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessage?: string;\r\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessageStrict?: boolean;\r\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tHeightUnitOfMeasure?: string;\r\n\tHeightUnitOfMeasureStrict?: boolean;\r\n\tHeightUnitOfMeasureIncludeNull?: boolean;\r\n\tIndexSynonyms?: string;\r\n\tIndexSynonymsStrict?: boolean;\r\n\tIndexSynonymsIncludeNull?: boolean;\r\n\tManufacturerPartNumber?: string;\r\n\tManufacturerPartNumberStrict?: boolean;\r\n\tManufacturerPartNumberIncludeNull?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessage?: string;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessage?: string;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountWarningMessage?: string;\r\n\tMustPurchaseInMultiplesOfAmountWarningMessageStrict?: boolean;\r\n\tMustPurchaseInMultiplesOfAmountWarningMessageIncludeNull?: boolean;\r\n\tRequiresRoles?: string;\r\n\tRequiresRolesStrict?: boolean;\r\n\tRequiresRolesIncludeNull?: boolean;\r\n\tRequiresRolesAlt?: string;\r\n\tRequiresRolesAltStrict?: boolean;\r\n\tRequiresRolesAltIncludeNull?: boolean;\r\n\tShortDescription?: string;\r\n\tShortDescriptionStrict?: boolean;\r\n\tShortDescriptionIncludeNull?: boolean;\r\n\tTaxCode?: string;\r\n\tTaxCodeStrict?: boolean;\r\n\tTaxCodeIncludeNull?: boolean;\r\n\tUnitOfMeasure?: string;\r\n\tUnitOfMeasureStrict?: boolean;\r\n\tUnitOfMeasureIncludeNull?: boolean;\r\n\tWeightUnitOfMeasure?: string;\r\n\tWeightUnitOfMeasureStrict?: boolean;\r\n\tWeightUnitOfMeasureIncludeNull?: boolean;\r\n\tWidthUnitOfMeasure?: string;\r\n\tWidthUnitOfMeasureStrict?: boolean;\r\n\tWidthUnitOfMeasureIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<productcatalogsearchform,productindexablemodel>}\r\n * @public\r\n */\r\nexport interface ProductSearchViewModel extends SearchViewModelBase<productcatalogsearchform,productindexablemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<shipcarriermethodmodel>}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @public\r\n */\r\nexport interface ProductShipCarrierMethodModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<shipcarriermethodmodel>, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tPrice?: number;\r\n\tCurrencyID?: number;\r\n\tCurrencyKey?: string;\r\n\tCurrencyName?: string;\r\n\tCurrency?: CurrencyModel;\r\n\tFrom?: Date;\r\n\tMaxQuantity?: number;\r\n\tMinQuantity?: number;\r\n\tTo?: Date;\r\n\tUnitOfMeasure?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface ProductStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductSubscriptionTypeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<typemodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n\tSubscriptionTypeRepeatTypeID: number;\r\n\tSubscriptionTypeRepeatTypeKey?: string;\r\n\tSubscriptionTypeRepeatType?: SubscriptionTypeRepeatTypeModel;\r\n\tSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface ProductSuggestResult extends SuggestResultBase {\r\n\tBrandName?: string;\r\n\tManufacturerPartNumber?: string;\r\n\tTotalPurchasedQuantity?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface ProductTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface PurchaseOrderContactModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface PurchaseOrderEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface PurchaseOrderFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseModelT<typemodel,purchaseordercontactmodel,purchaseordereventmodel,appliedpurchaseorderdiscountmodel,appliedpurchaseorderitemdiscountmodel,purchaseorderfilemodel>}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveStoredFilesBaseModel<purchaseorderfilemodel>}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface PurchaseOrderModel extends SalesCollectionBaseModelT<typemodel,purchaseordercontactmodel,purchaseordereventmodel,appliedpurchaseorderdiscountmodel,appliedpurchaseorderitemdiscountmodel,purchaseorderfilemodel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<purchaseorderfilemodel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tSalesOrderIDs?: Array<number>;\r\n\tAssociatedSalesOrders?: Array<salesorderpurchaseordermodel>;\r\n\tActualReceiptDate?: Date;\r\n\tEstimatedReceiptDate?: Date;\r\n\tInventoryLocationID?: number;\r\n\tInventoryLocationKey?: string;\r\n\tInventoryLocationName?: string;\r\n\tInventoryLocation?: InventoryLocationModel;\r\n\tReleaseDate?: Date;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupKey?: string;\r\n\tSalesGroup?: SalesGroupModel;\r\n\tShipCarrierID?: number;\r\n\tShipCarrierKey?: string;\r\n\tShipCarrierName?: string;\r\n\tShipCarrier?: ShipCarrierModel;\r\n\tVendorID?: number;\r\n\tVendorKey?: string;\r\n\tVendorName?: string;\r\n\tVendor?: VendorModel;\r\n\tTrackingNumber?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface QuestionModel extends BaseModel, AmFilterableByNullableBrandBaseModel, HaveATypeModel<typemodel> {\r\n\tOptions?: Array<questionoptionmodel>;\r\n\tNextQuestionID?: number;\r\n\tNextQuestionKey?: string;\r\n\tNextQuestion?: QuestionModel;\r\n\tQuestionTranslationKey?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface QuestionOptionModel extends BaseModel {\r\n\tRequiresAdditionalInformation?: boolean;\r\n\tQuestionID: number;\r\n\tQuestionKey?: string;\r\n\tQuestion?: QuestionModel;\r\n\tFollowUpQuestionID?: number;\r\n\tFollowUpQuestionKey?: string;\r\n\tFollowUpQuestion?: QuestionModel;\r\n\tOptionTranslationKey?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<questionmodel>}\r\n * @public\r\n */\r\nexport interface QuestionPagedResults extends PagedResultsBase<questionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface QuestionSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, HaveATypeSearchModel {\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tNextQuestionID?: number;\r\n\tNextQuestionIDIncludeNull?: boolean;\r\n\tQuestionTranslationKey?: string;\r\n\tQuestionTranslationKeyStrict?: boolean;\r\n\tQuestionTranslationKeyIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface QuickOrderFormProductsModel {\r\n\tHeaders?: Array<string>;\r\n\tProductsByCategory?: Array<productbycategorymodel>;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface RateQuoteModel extends NameableBaseModel {\r\n\tShipCarrierID: number;\r\n\tShipCarrierKey?: string;\r\n\tShipCarrierName?: string;\r\n\tSelected?: boolean;\r\n\tShipCarrierMethodID: number;\r\n\tShipCarrierMethodKey?: string;\r\n\tShipCarrierMethodName?: string;\r\n\tShipCarrierMethod?: ShipCarrierMethodModel;\r\n\tCartHash?: number;\r\n\tCartID?: number;\r\n\tCartKey?: string;\r\n\tEstimatedDeliveryDate?: Date;\r\n\tPurchaseOrderID?: number;\r\n\tPurchaseOrderKey?: string;\r\n\tRate?: number;\r\n\tRateTimestamp?: Date;\r\n\tSalesInvoiceID?: number;\r\n\tSalesInvoiceKey?: string;\r\n\tSalesOrderID?: number;\r\n\tSalesOrderKey?: string;\r\n\tSalesQuoteID?: number;\r\n\tSalesQuoteKey?: string;\r\n\tSalesReturnID?: number;\r\n\tSalesReturnKey?: string;\r\n\tSampleRequestID?: number;\r\n\tSampleRequestKey?: string;\r\n\tTargetShippingDate?: Date;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<currencymodel>}\r\n * @public\r\n */\r\nexport interface RegionCurrencyModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<currencymodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface RegionImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<languagemodel>}\r\n * @public\r\n */\r\nexport interface RegionLanguageModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<languagemodel> {\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveImagesBaseModel<regionimagemodel>}\r\n * @public\r\n */\r\nexport interface RegionModel extends NameableBaseModel, HaveImagesBaseModel<regionimagemodel> {\r\n\tCurrencies?: Array<regioncurrencymodel>;\r\n\tLanguages?: Array<regionlanguagemodel>;\r\n\tCountryID: number;\r\n\tCountryKey?: string;\r\n\tCountryName?: string;\r\n\tCountryCode?: string;\r\n\tCountry?: CountryModel;\r\n\tCode?: string;\r\n\tISO31661?: string;\r\n\tISO31662?: string;\r\n\tISO3166Alpha2?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<regionmodel>}\r\n * @public\r\n */\r\nexport interface RegionPagedResults extends PagedResultsBase<regionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface RegionSearchModel extends NameableBaseSearchModel {\r\n\tRegionID?: number;\r\n\tCountryID?: number;\r\n\tCode?: string;\r\n\tCodeStrict?: boolean;\r\n\tCodeIncludeNull?: boolean;\r\n\tISO31661?: string;\r\n\tISO31661Strict?: boolean;\r\n\tISO31661IncludeNull?: boolean;\r\n\tISO31662?: string;\r\n\tISO31662Strict?: boolean;\r\n\tISO31662IncludeNull?: boolean;\r\n\tISO3166Alpha2?: string;\r\n\tISO3166Alpha2Strict?: boolean;\r\n\tISO3166Alpha2IncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface RepeatTypeModel extends TypableBaseModel {\r\n\tSubscriptionTypeRepeatTypes?: Array<subscriptiontyperepeattypemodel>;\r\n\tInitialBonusBillingPeriods?: number;\r\n\tRepeatableBillingPeriods?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<repeattypemodel>}\r\n * @public\r\n */\r\nexport interface RepeatTypePagedResults extends PagedResultsBase<repeattypemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface RepeatTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tMinInitialBonusBillingPeriods?: number;\r\n\tMaxInitialBonusBillingPeriods?: number;\r\n\tMatchInitialBonusBillingPeriods?: number;\r\n\tMatchInitialBonusBillingPeriodsIncludeNull?: boolean;\r\n\tMinRepeatableBillingPeriods?: number;\r\n\tMaxRepeatableBillingPeriods?: number;\r\n\tMatchRepeatableBillingPeriods?: number;\r\n\tMatchRepeatableBillingPeriodsIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ResponseError {\r\n\tErrorCode?: string;\r\n\tFieldName?: string;\r\n\tMessage?: string;\r\n\tMeta?: Dictionary<string>;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ResponseStatus {\r\n\tErrorCode?: string;\r\n\tMessage?: string;\r\n\tStackTrace?: string;\r\n\tErrors?: Array<responseerror>;\r\n\tMeta?: Dictionary<string>;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ReviewModel extends NameableBaseModel, HaveATypeModel<typemodel> {\r\n\tApproved?: boolean;\r\n\tValue?: number;\r\n\tSubmittedByUserID: number;\r\n\tSubmittedByUserKey?: string;\r\n\tSubmittedByUserUserName?: string;\r\n\tSubmittedByUser?: UserModel;\r\n\tApprovedByUserID?: number;\r\n\tApprovedByUserKey?: string;\r\n\tApprovedByUserUserName?: string;\r\n\tApprovedByUser?: UserModel;\r\n\tApprovedDate?: Date;\r\n\tCategoryID?: number;\r\n\tCategoryKey?: string;\r\n\tCategoryName?: string;\r\n\tCategorySeoUrl?: string;\r\n\tCategory?: CategoryModel;\r\n\tManufacturerID?: number;\r\n\tManufacturerKey?: string;\r\n\tManufacturerName?: string;\r\n\tManufacturer?: ManufacturerModel;\r\n\tProductID?: number;\r\n\tProductKey?: string;\r\n\tProductName?: string;\r\n\tProductSeoUrl?: string;\r\n\tProduct?: ProductModel;\r\n\tSortOrder?: number;\r\n\tStoreID?: number;\r\n\tStoreKey?: string;\r\n\tStoreName?: string;\r\n\tStoreSeoUrl?: string;\r\n\tStore?: StoreModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUserUserName?: string;\r\n\tUser?: UserModel;\r\n\tVendorID?: number;\r\n\tVendorKey?: string;\r\n\tVendorName?: string;\r\n\tComment?: string;\r\n\tLocation?: string;\r\n\tTitle?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface ReviewTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface SalesCollectionBaseModel extends BaseModel, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tTotals?: CartTotals;\r\n\tUserUsername?: string;\r\n\tBillingContactPhone?: string;\r\n\tBillingContactFax?: string;\r\n\tBillingContactEmail?: string;\r\n\tBillingContactFirstName?: string;\r\n\tBillingContactLastName?: string;\r\n\tShippingContactPhone?: string;\r\n\tShippingContactFax?: string;\r\n\tShippingContactEmail?: string;\r\n\tShippingContactFirstName?: string;\r\n\tShippingContactLastName?: string;\r\n\tRateQuotes?: Array<ratequotemodel>;\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveAStateSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesCollectionBaseSearchModel extends BaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\r\n\tStateID?: number;\r\n\tStateIDs?: Array<number>;\r\n\tExcludedStateID?: number;\r\n\tExcludedStateIDs?: Array<number>;\r\n\tStateKey?: string;\r\n\tStateKeys?: Array<string>;\r\n\tExcludedStateKey?: string;\r\n\tExcludedStateKeys?: Array<string>;\r\n\tStateName?: string;\r\n\tStateNames?: Array<string>;\r\n\tExcludedStateName?: string;\r\n\tExcludedStateNames?: Array<string>;\r\n\tStateDisplayName?: string;\r\n\tStateDisplayNames?: Array<string>;\r\n\tExcludedStateDisplayName?: string;\r\n\tExcludedStateDisplayNames?: Array<string>;\r\n\tStateTranslationKey?: string;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tUserExternalID?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tMinDate?: Date;\r\n\tMaxDate?: Date;\r\n\tPhone?: string;\r\n\tFirstName?: string;\r\n\tLastName?: string;\r\n\tEmail?: string;\r\n\tPostalCode?: string;\r\n\tProductKey?: string;\r\n\tProductIDs?: Array<number>;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesEventBaseModel extends NameableBaseModel, HaveATypeModel<typemodel> {\r\n\tOldStateID?: number;\r\n\tNewStateID?: number;\r\n\tOldStatusID?: number;\r\n\tNewStatusID?: number;\r\n\tOldTypeID?: number;\r\n\tNewTypeID?: number;\r\n\tOldHash?: number;\r\n\tNewHash?: number;\r\n\tOldRecordSerialized?: string;\r\n\tNewRecordSerialized?: string;\r\n\tMasterID: number;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesEventBaseSearchModel extends NameableBaseSearchModel, HaveATypeSearchModel {\r\n\tMasterID?: number;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @public\r\n */\r\nexport interface SalesGroupModel extends BaseModel, HaveNotesBaseModel, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel {\r\n\tPurchaseOrders?: Array<purchaseordermodel>;\r\n\tSalesInvoices?: Array<salesinvoicemodel>;\r\n\tSalesOrderMasters?: Array<salesordermodel>;\r\n\tSalesQuoteRequestMasters?: Array<salesquotemodel>;\r\n\tSalesQuoteRequestSubs?: Array<salesquotemodel>;\r\n\tSalesQuoteResponseMasters?: Array<salesquotemodel>;\r\n\tSalesQuoteResponseSubs?: Array<salesquotemodel>;\r\n\tSalesReturns?: Array<salesreturnmodel>;\r\n\tSampleRequests?: Array<samplerequestmodel>;\r\n\tSubSalesOrders?: Array<salesordermodel>;\r\n\tBillingContactID?: number;\r\n\tBillingContactKey?: string;\r\n\tBillingContact?: ContactModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesgroupmodel>}\r\n * @public\r\n */\r\nexport interface SalesGroupPagedResults extends PagedResultsBase<salesgroupmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @public\r\n */\r\nexport interface SalesGroupSearchModel extends BaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel {\r\n\tAccountIDOrCustomKeyOrName?: string;\r\n\tBillingContactKey?: string;\r\n\tSalesQuoteID?: number;\r\n\tSalesQuoteKey?: string;\r\n\tSalesOrderID?: number;\r\n\tSalesOrderKey?: string;\r\n\tPurchaseOrderID?: number;\r\n\tPurchaseOrderKey?: string;\r\n\tSalesInvoiceID?: number;\r\n\tSalesInvoiceKey?: string;\r\n\tSalesReturnID?: number;\r\n\tSalesReturnKey?: string;\r\n\tSampleRequestID?: number;\r\n\tSampleRequestKey?: string;\r\n\tMinDate?: Date;\r\n\tMaxDate?: Date;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tBillingContactID?: number;\r\n\tBillingContactIDIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoiceContactModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoiceEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<typemodel> {\r\n\tOldBalanceDue?: number;\r\n\tNewBalanceDue?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesinvoiceeventmodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoiceEventPagedResults extends PagedResultsBase<salesinvoiceeventmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesInvoiceEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface SalesInvoiceFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseModelT<typemodel,salesinvoicecontactmodel,salesinvoiceeventmodel,appliedsalesinvoicediscountmodel,appliedsalesinvoiceitemdiscountmodel,salesinvoicefilemodel>}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveStoredFilesBaseModel<salesinvoicefilemodel>}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface SalesInvoiceModel extends SalesCollectionBaseModelT<typemodel,salesinvoicecontactmodel,salesinvoiceeventmodel,appliedsalesinvoicediscountmodel,appliedsalesinvoiceitemdiscountmodel,salesinvoicefilemodel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<salesinvoicefilemodel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tSendCreationNotification?: boolean;\r\n\tAssociatedSalesOrders?: Array<salesordersalesinvoicemodel>;\r\n\tSalesInvoicePayments?: Array<salesinvoicepaymentmodel>;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupKey?: string;\r\n\tSalesGroup?: SalesGroupModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesinvoicemodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoicePagedResults extends PagedResultsBase<salesinvoicemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<paymentmodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoicePaymentModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<paymentmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface SalesInvoicePaymentSearchModel extends AmARelationshipTableBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveAStateSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesInvoiceSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\r\n\tMinSubtotalDiscounts?: number;\r\n\tMaxSubtotalDiscounts?: number;\r\n\tMatchSubtotalDiscounts?: number;\r\n\tMinSubtotalFees?: number;\r\n\tMaxSubtotalFees?: number;\r\n\tMatchSubtotalFees?: number;\r\n\tMinSubtotalHandling?: number;\r\n\tMaxSubtotalHandling?: number;\r\n\tMatchSubtotalHandling?: number;\r\n\tMinSubtotalItems?: number;\r\n\tMaxSubtotalItems?: number;\r\n\tMatchSubtotalItems?: number;\r\n\tMinSubtotalShipping?: number;\r\n\tMaxSubtotalShipping?: number;\r\n\tMatchSubtotalShipping?: number;\r\n\tMinSubtotalTaxes?: number;\r\n\tMaxSubtotalTaxes?: number;\r\n\tMatchSubtotalTaxes?: number;\r\n\tMinTotal?: number;\r\n\tMaxTotal?: number;\r\n\tMatchTotal?: number;\r\n\tMinBalanceDue?: number;\r\n\tMaxBalanceDue?: number;\r\n\tMatchBalanceDue?: number;\r\n\tMatchBalanceDueIncludeNull?: boolean;\r\n\tBillingContactID?: number;\r\n\tBillingContactIDIncludeNull?: boolean;\r\n\tMinDueDate?: Date;\r\n\tMaxDueDate?: Date;\r\n\tMatchDueDate?: Date;\r\n\tMatchDueDateIncludeNull?: boolean;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupIDIncludeNull?: boolean;\r\n\tShippingContactID?: number;\r\n\tShippingContactIDIncludeNull?: boolean;\r\n\tShippingSameAsBilling?: boolean;\r\n\tShippingSameAsBillingIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statemodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoiceStatePagedResults extends PagedResultsBase<statemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoiceStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesInvoiceTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @public\r\n */\r\nexport interface SalesItemBaseSearchModel extends NameableBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByUserBaseSearchModel {\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tSku?: string;\r\n\tOriginalCurrencyID?: number;\r\n\tSellingCurrencyID?: number;\r\n\tUserExternalID?: string;\r\n\tMasterID?: number;\r\n\tMasterKey?: string;\r\n\tMasterTypeName?: string;\r\n\tCartSessionID?: Guid;\r\n\tTrackingNumber?: string;\r\n\tCartUserID?: number;\r\n\tForceUniqueLineItemKey?: string;\r\n\tForceUniqueLineItemKeyMatchNulls?: boolean;\r\n\tMinQuantity?: number;\r\n\tMaxQuantity?: number;\r\n\tMatchQuantity?: number;\r\n\tMinUnitCorePrice?: number;\r\n\tMaxUnitCorePrice?: number;\r\n\tMatchUnitCorePrice?: number;\r\n\tOriginalCurrencyIDIncludeNull?: boolean;\r\n\tProductIDIncludeNull?: boolean;\r\n\tMinQuantityBackOrdered?: number;\r\n\tMaxQuantityBackOrdered?: number;\r\n\tMatchQuantityBackOrdered?: number;\r\n\tMatchQuantityBackOrderedIncludeNull?: boolean;\r\n\tMinQuantityPreSold?: number;\r\n\tMaxQuantityPreSold?: number;\r\n\tMatchQuantityPreSold?: number;\r\n\tMatchQuantityPreSoldIncludeNull?: boolean;\r\n\tSellingCurrencyIDIncludeNull?: boolean;\r\n\tMinUnitCorePriceInSellingCurrency?: number;\r\n\tMaxUnitCorePriceInSellingCurrency?: number;\r\n\tMatchUnitCorePriceInSellingCurrency?: number;\r\n\tMatchUnitCorePriceInSellingCurrencyIncludeNull?: boolean;\r\n\tMinUnitSoldPrice?: number;\r\n\tMaxUnitSoldPrice?: number;\r\n\tMatchUnitSoldPrice?: number;\r\n\tMatchUnitSoldPriceIncludeNull?: boolean;\r\n\tMinUnitSoldPriceInSellingCurrency?: number;\r\n\tMaxUnitSoldPriceInSellingCurrency?: number;\r\n\tMatchUnitSoldPriceInSellingCurrency?: number;\r\n\tMatchUnitSoldPriceInSellingCurrencyIncludeNull?: boolean;\r\n\tForceUniqueLineItemKeyStrict?: boolean;\r\n\tForceUniqueLineItemKeyIncludeNull?: boolean;\r\n\tSkuStrict?: boolean;\r\n\tSkuIncludeNull?: boolean;\r\n\tUnitOfMeasure?: string;\r\n\tUnitOfMeasureStrict?: boolean;\r\n\tUnitOfMeasureIncludeNull?: boolean;\r\n\tMinUnitSoldPriceModifier?: number;\r\n\tMaxUnitSoldPriceModifier?: number;\r\n\tMatchUnitSoldPriceModifier?: number;\r\n\tMatchUnitSoldPriceModifierIncludeNull?: boolean;\r\n\tMinUnitSoldPriceModifierMode?: number;\r\n\tMaxUnitSoldPriceModifierMode?: number;\r\n\tMatchUnitSoldPriceModifierMode?: number;\r\n\tMatchUnitSoldPriceModifierModeIncludeNull?: boolean;\r\n\tMinDateReceived?: Date;\r\n\tMaxDateReceived?: Date;\r\n\tMatchDateReceived?: Date;\r\n\tMatchDateReceivedIncludeNull?: boolean;\r\n\tMinRestockingFeeAmount?: number;\r\n\tMaxRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\r\n\tSalesReturnReasonID?: number;\r\n\tSalesReturnReasonIDIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesItemTargetBaseModel extends BaseModel, HaveATypeModel<typemodel> {\r\n\tQuantity: number;\r\n\tNothingToShip: boolean;\r\n\tMasterID: number;\r\n\tDestinationContactID: number;\r\n\tDestinationContactKey?: string;\r\n\tDestinationContact?: ContactModel;\r\n\tOriginProductInventoryLocationSectionID?: number;\r\n\tOriginProductInventoryLocationSectionKey?: string;\r\n\tOriginProductInventoryLocationSection?: ProductInventoryLocationSectionModel;\r\n\tOriginStoreProductID?: number;\r\n\tOriginStoreProductKey?: string;\r\n\tOriginStoreProduct?: StoreProductModel;\r\n\tBrandProductID?: number;\r\n\tBrandProductKey?: string;\r\n\tBrandProduct?: BrandProductModel;\r\n\tOriginVendorProductID?: number;\r\n\tOriginVendorProductKey?: string;\r\n\tOriginVendorProduct?: VendorProductModel;\r\n\tSelectedRateQuoteID?: number;\r\n\tSelectedRateQuoteKey?: string;\r\n\tSelectedRateQuoteName?: string;\r\n\tSelectedRateQuote?: RateQuoteModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesItemTargetTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderContactModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<typemodel> {\r\n\tOldBalanceDue?: number;\r\n\tNewBalanceDue?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesordereventmodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderEventPagedResults extends PagedResultsBase<salesordereventmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesOrderEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface SalesOrderFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseModelT<typemodel,salesordercontactmodel,salesordereventmodel,appliedsalesorderdiscountmodel,appliedsalesorderitemdiscountmodel,salesorderfilemodel>}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveStoredFilesBaseModel<salesorderfilemodel>}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface SalesOrderModel extends SalesCollectionBaseModelT<typemodel,salesordercontactmodel,salesordereventmodel,appliedsalesorderdiscountmodel,appliedsalesorderitemdiscountmodel,salesorderfilemodel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<salesorderfilemodel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tAssociatedPurchaseOrders?: Array<salesorderpurchaseordermodel>;\r\n\tAssociatedSalesInvoices?: Array<salesordersalesinvoicemodel>;\r\n\tAssociatedSalesQuotes?: Array<salesquotesalesordermodel>;\r\n\tAssociatedSalesReturns?: Array<salesreturnsalesordermodel>;\r\n\tSalesOrderPayments?: Array<salesorderpaymentmodel>;\r\n\tActualShipDate?: Date;\r\n\tInventoryLocationID?: number;\r\n\tInventoryLocationKey?: string;\r\n\tInventoryLocationName?: string;\r\n\tInventoryLocation?: InventoryLocationModel;\r\n\tOrderApprovedDate?: Date;\r\n\tOrderCommitmentDate?: Date;\r\n\tRequestedShipDate?: Date;\r\n\tRequiredShipDate?: Date;\r\n\tSalesGroupAsMasterID?: number;\r\n\tSalesGroupAsMasterKey?: string;\r\n\tSalesGroupAsMaster?: SalesGroupModel;\r\n\tSalesGroupAsSubID?: number;\r\n\tSalesGroupAsSubKey?: string;\r\n\tSalesGroupAsSub?: SalesGroupModel;\r\n\tPaymentTransactionID?: string;\r\n\tPurchaseOrderNumber?: string;\r\n\tTaxTransactionID?: string;\r\n\tTrackingNumber?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesordermodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderPagedResults extends PagedResultsBase<salesordermodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<paymentmodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderPaymentModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<paymentmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<purchaseordermodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderPurchaseOrderModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<purchaseordermodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<salesinvoicemodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderSalesInvoiceModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<salesinvoicemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveAStateSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesOrderSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\r\n\tHasSalesGroupAsMaster?: boolean;\r\n\tHasSalesGroupAsSub?: boolean;\r\n\tMinSubtotalDiscounts?: number;\r\n\tMaxSubtotalDiscounts?: number;\r\n\tMatchSubtotalDiscounts?: number;\r\n\tMinSubtotalFees?: number;\r\n\tMaxSubtotalFees?: number;\r\n\tMatchSubtotalFees?: number;\r\n\tMinSubtotalHandling?: number;\r\n\tMaxSubtotalHandling?: number;\r\n\tMatchSubtotalHandling?: number;\r\n\tMinSubtotalItems?: number;\r\n\tMaxSubtotalItems?: number;\r\n\tMatchSubtotalItems?: number;\r\n\tMinSubtotalShipping?: number;\r\n\tMaxSubtotalShipping?: number;\r\n\tMatchSubtotalShipping?: number;\r\n\tMinSubtotalTaxes?: number;\r\n\tMaxSubtotalTaxes?: number;\r\n\tMatchSubtotalTaxes?: number;\r\n\tMinTotal?: number;\r\n\tMaxTotal?: number;\r\n\tMatchTotal?: number;\r\n\tMinActualShipDate?: Date;\r\n\tMaxActualShipDate?: Date;\r\n\tMatchActualShipDate?: Date;\r\n\tMatchActualShipDateIncludeNull?: boolean;\r\n\tMinBalanceDue?: number;\r\n\tMaxBalanceDue?: number;\r\n\tMatchBalanceDue?: number;\r\n\tMatchBalanceDueIncludeNull?: boolean;\r\n\tBillingContactID?: number;\r\n\tBillingContactIDIncludeNull?: boolean;\r\n\tMinDueDate?: Date;\r\n\tMaxDueDate?: Date;\r\n\tMatchDueDate?: Date;\r\n\tMatchDueDateIncludeNull?: boolean;\r\n\tInventoryLocationID?: number;\r\n\tInventoryLocationIDIncludeNull?: boolean;\r\n\tMinOrderApprovedDate?: Date;\r\n\tMaxOrderApprovedDate?: Date;\r\n\tMatchOrderApprovedDate?: Date;\r\n\tMatchOrderApprovedDateIncludeNull?: boolean;\r\n\tMinOrderCommitmentDate?: Date;\r\n\tMaxOrderCommitmentDate?: Date;\r\n\tMatchOrderCommitmentDate?: Date;\r\n\tMatchOrderCommitmentDateIncludeNull?: boolean;\r\n\tMinRequestedShipDate?: Date;\r\n\tMaxRequestedShipDate?: Date;\r\n\tMatchRequestedShipDate?: Date;\r\n\tMatchRequestedShipDateIncludeNull?: boolean;\r\n\tMinRequiredShipDate?: Date;\r\n\tMaxRequiredShipDate?: Date;\r\n\tMatchRequiredShipDate?: Date;\r\n\tMatchRequiredShipDateIncludeNull?: boolean;\r\n\tSalesGroupAsMasterID?: number;\r\n\tSalesGroupAsMasterIDIncludeNull?: boolean;\r\n\tSalesGroupAsSubID?: number;\r\n\tSalesGroupAsSubIDIncludeNull?: boolean;\r\n\tShippingContactID?: number;\r\n\tShippingContactIDIncludeNull?: boolean;\r\n\tShippingSameAsBilling?: boolean;\r\n\tShippingSameAsBillingIncludeNull?: boolean;\r\n\tPaymentTransactionID?: string;\r\n\tPaymentTransactionIDStrict?: boolean;\r\n\tPaymentTransactionIDIncludeNull?: boolean;\r\n\tPurchaseOrderNumber?: string;\r\n\tPurchaseOrderNumberStrict?: boolean;\r\n\tPurchaseOrderNumberIncludeNull?: boolean;\r\n\tTaxTransactionID?: string;\r\n\tTaxTransactionIDStrict?: boolean;\r\n\tTaxTransactionIDIncludeNull?: boolean;\r\n\tTrackingNumber?: string;\r\n\tTrackingNumberStrict?: boolean;\r\n\tTrackingNumberIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statemodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderStatePagedResults extends PagedResultsBase<statemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesOrderTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<categorymodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteCategoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<categorymodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteContactModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesquoteeventmodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteEventPagedResults extends PagedResultsBase<salesquoteeventmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesQuoteEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface SalesQuoteFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseModelT<typemodel,salesquotecontactmodel,salesquoteeventmodel,appliedsalesquotediscountmodel,appliedsalesquoteitemdiscountmodel,salesquotefilemodel>}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveStoredFilesBaseModel<salesquotefilemodel>}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface SalesQuoteModel extends SalesCollectionBaseModelT<typemodel,salesquotecontactmodel,salesquoteeventmodel,appliedsalesquotediscountmodel,appliedsalesquoteitemdiscountmodel,salesquotefilemodel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<salesquotefilemodel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tAssociatedSalesOrders?: Array<salesquotesalesordermodel>;\r\n\tSalesQuoteCategories?: Array<salesquotecategorymodel>;\r\n\tRequestedShipDate?: Date;\r\n\tResponseAsStoreID?: number;\r\n\tResponseAsStoreKey?: string;\r\n\tResponseAsStoreName?: string;\r\n\tResponseAsStoreSeoUrl?: string;\r\n\tResponseAsStore?: StoreModel;\r\n\tResponseAsVendorID?: number;\r\n\tResponseAsVendorKey?: string;\r\n\tResponseAsVendorName?: string;\r\n\tResponseAsVendor?: VendorModel;\r\n\tSalesGroupAsRequestMasterID?: number;\r\n\tSalesGroupAsRequestMasterKey?: string;\r\n\tSalesGroupAsRequestMaster?: SalesGroupModel;\r\n\tSalesGroupAsRequestSubID?: number;\r\n\tSalesGroupAsRequestSubKey?: string;\r\n\tSalesGroupAsRequestSub?: SalesGroupModel;\r\n\tSalesGroupAsResponseMasterID?: number;\r\n\tSalesGroupAsResponseMasterKey?: string;\r\n\tSalesGroupAsResponseMaster?: SalesGroupModel;\r\n\tSalesGroupAsResponseSubID?: number;\r\n\tSalesGroupAsResponseSubKey?: string;\r\n\tSalesGroupAsResponseSub?: SalesGroupModel;\r\n\tSubtotalDiscountsModifier?: number;\r\n\tSubtotalDiscountsModifierMode?: number;\r\n\tSubtotalFeesModifier?: number;\r\n\tSubtotalFeesModifierMode?: number;\r\n\tSubtotalHandlingModifier?: number;\r\n\tSubtotalHandlingModifierMode?: number;\r\n\tSubtotalShippingModifier?: number;\r\n\tSubtotalShippingModifierMode?: number;\r\n\tSubtotalTaxesModifier?: number;\r\n\tSubtotalTaxesModifierMode?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesquotemodel>}\r\n * @public\r\n */\r\nexport interface SalesQuotePagedResults extends PagedResultsBase<salesquotemodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface SalesQuoteSalesGroupIdentifiers {\r\n\tOrderID: number;\r\n\tInvoiceID?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<salesordermodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteSalesOrderModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<salesordermodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveAStateSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesQuoteSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\r\n\tCategoryIDs?: Array<number>;\r\n\tHasSalesGroupAsMaster?: boolean;\r\n\tHasSalesGroupAsSub?: boolean;\r\n\tHasSalesGroupAsResponse?: boolean;\r\n\tHasSalesGroupAsRequest?: boolean;\r\n\tMinSubtotalDiscounts?: number;\r\n\tMaxSubtotalDiscounts?: number;\r\n\tMatchSubtotalDiscounts?: number;\r\n\tMinSubtotalFees?: number;\r\n\tMaxSubtotalFees?: number;\r\n\tMatchSubtotalFees?: number;\r\n\tMinSubtotalHandling?: number;\r\n\tMaxSubtotalHandling?: number;\r\n\tMatchSubtotalHandling?: number;\r\n\tMinSubtotalItems?: number;\r\n\tMaxSubtotalItems?: number;\r\n\tMatchSubtotalItems?: number;\r\n\tMinSubtotalShipping?: number;\r\n\tMaxSubtotalShipping?: number;\r\n\tMatchSubtotalShipping?: number;\r\n\tMinSubtotalTaxes?: number;\r\n\tMaxSubtotalTaxes?: number;\r\n\tMatchSubtotalTaxes?: number;\r\n\tMinTotal?: number;\r\n\tMaxTotal?: number;\r\n\tMatchTotal?: number;\r\n\tBillingContactID?: number;\r\n\tBillingContactIDIncludeNull?: boolean;\r\n\tMinDueDate?: Date;\r\n\tMaxDueDate?: Date;\r\n\tMatchDueDate?: Date;\r\n\tMatchDueDateIncludeNull?: boolean;\r\n\tMinRequestedShipDate?: Date;\r\n\tMaxRequestedShipDate?: Date;\r\n\tMatchRequestedShipDate?: Date;\r\n\tMatchRequestedShipDateIncludeNull?: boolean;\r\n\tResponseAsStoreID?: number;\r\n\tResponseAsStoreIDIncludeNull?: boolean;\r\n\tResponseAsVendorID?: number;\r\n\tResponseAsVendorIDIncludeNull?: boolean;\r\n\tSalesGroupAsRequestMasterID?: number;\r\n\tSalesGroupAsRequestMasterIDIncludeNull?: boolean;\r\n\tSalesGroupAsRequestSubID?: number;\r\n\tSalesGroupAsRequestSubIDIncludeNull?: boolean;\r\n\tSalesGroupAsResponseMasterID?: number;\r\n\tSalesGroupAsResponseMasterIDIncludeNull?: boolean;\r\n\tSalesGroupAsResponseSubID?: number;\r\n\tSalesGroupAsResponseSubIDIncludeNull?: boolean;\r\n\tShippingContactID?: number;\r\n\tShippingContactIDIncludeNull?: boolean;\r\n\tShippingSameAsBilling?: boolean;\r\n\tShippingSameAsBillingIncludeNull?: boolean;\r\n\tMinSubtotalDiscountsModifier?: number;\r\n\tMaxSubtotalDiscountsModifier?: number;\r\n\tMatchSubtotalDiscountsModifier?: number;\r\n\tMatchSubtotalDiscountsModifierIncludeNull?: boolean;\r\n\tMinSubtotalDiscountsModifierMode?: number;\r\n\tMaxSubtotalDiscountsModifierMode?: number;\r\n\tMatchSubtotalDiscountsModifierMode?: number;\r\n\tMatchSubtotalDiscountsModifierModeIncludeNull?: boolean;\r\n\tMinSubtotalFeesModifier?: number;\r\n\tMaxSubtotalFeesModifier?: number;\r\n\tMatchSubtotalFeesModifier?: number;\r\n\tMatchSubtotalFeesModifierIncludeNull?: boolean;\r\n\tMinSubtotalFeesModifierMode?: number;\r\n\tMaxSubtotalFeesModifierMode?: number;\r\n\tMatchSubtotalFeesModifierMode?: number;\r\n\tMatchSubtotalFeesModifierModeIncludeNull?: boolean;\r\n\tMinSubtotalHandlingModifier?: number;\r\n\tMaxSubtotalHandlingModifier?: number;\r\n\tMatchSubtotalHandlingModifier?: number;\r\n\tMatchSubtotalHandlingModifierIncludeNull?: boolean;\r\n\tMinSubtotalHandlingModifierMode?: number;\r\n\tMaxSubtotalHandlingModifierMode?: number;\r\n\tMatchSubtotalHandlingModifierMode?: number;\r\n\tMatchSubtotalHandlingModifierModeIncludeNull?: boolean;\r\n\tMinSubtotalShippingModifier?: number;\r\n\tMaxSubtotalShippingModifier?: number;\r\n\tMatchSubtotalShippingModifier?: number;\r\n\tMatchSubtotalShippingModifierIncludeNull?: boolean;\r\n\tMinSubtotalShippingModifierMode?: number;\r\n\tMaxSubtotalShippingModifierMode?: number;\r\n\tMatchSubtotalShippingModifierMode?: number;\r\n\tMatchSubtotalShippingModifierModeIncludeNull?: boolean;\r\n\tMinSubtotalTaxesModifier?: number;\r\n\tMaxSubtotalTaxesModifier?: number;\r\n\tMatchSubtotalTaxesModifier?: number;\r\n\tMatchSubtotalTaxesModifierIncludeNull?: boolean;\r\n\tMinSubtotalTaxesModifierMode?: number;\r\n\tMaxSubtotalTaxesModifierMode?: number;\r\n\tMatchSubtotalTaxesModifierMode?: number;\r\n\tMatchSubtotalTaxesModifierModeIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statemodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteStatePagedResults extends PagedResultsBase<statemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface SalesQuoteStatusUpdate {\r\n\tQuoteID: number;\r\n\tNote?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesQuoteTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnContactModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesreturneventmodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnEventPagedResults extends PagedResultsBase<salesreturneventmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesReturnEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface SalesReturnFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseModelT<typemodel,salesreturncontactmodel,salesreturneventmodel,appliedsalesreturndiscountmodel,appliedsalesreturnitemdiscountmodel,salesreturnfilemodel>}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveStoredFilesBaseModel<salesreturnfilemodel>}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface SalesReturnModel extends SalesCollectionBaseModelT<typemodel,salesreturncontactmodel,salesreturneventmodel,appliedsalesreturndiscountmodel,appliedsalesreturnitemdiscountmodel,salesreturnfilemodel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<salesreturnfilemodel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tSalesOrderIDs?: Array<number>;\r\n\tAssociatedSalesOrders?: Array<salesreturnsalesordermodel>;\r\n\tSalesReturnPayments?: Array<salesreturnpaymentmodel>;\r\n\tActualShipDate?: Date;\r\n\tRefundAmount?: number;\r\n\tRequestedShipDate?: Date;\r\n\tRequiredShipDate?: Date;\r\n\tReturnApprovedDate?: Date;\r\n\tReturnCommitmentDate?: Date;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupKey?: string;\r\n\tSalesGroup?: SalesGroupModel;\r\n\tPurchaseOrderNumber?: string;\r\n\tRefundTransactionID?: string;\r\n\tTaxTransactionID?: string;\r\n\tTrackingNumber?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesreturnmodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnPagedResults extends PagedResultsBase<salesreturnmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<paymentmodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnPaymentModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<paymentmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface SalesReturnReasonModel extends TypableBaseModel {\r\n\tIsRestockingFeeApplicable?: boolean;\r\n\tRestockingFeeAmount?: number;\r\n\tRestockingFeeAmountCurrencyID?: number;\r\n\tRestockingFeeAmountCurrencyKey?: string;\r\n\tRestockingFeeAmountCurrencyName?: string;\r\n\tRestockingFeeAmountCurrency?: CurrencyModel;\r\n\tRestockingFeePercent?: number;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<salesreturnreasonmodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnReasonPagedResults extends PagedResultsBase<salesreturnreasonmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface SalesReturnReasonSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tIsRestockingFeeApplicable?: boolean;\r\n\tMinRestockingFeeAmount?: number;\r\n\tMaxRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmount?: number;\r\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\r\n\tRestockingFeeAmountCurrencyID?: number;\r\n\tRestockingFeeAmountCurrencyIDIncludeNull?: boolean;\r\n\tMinRestockingFeePercent?: number;\r\n\tMaxRestockingFeePercent?: number;\r\n\tMatchRestockingFeePercent?: number;\r\n\tMatchRestockingFeePercentIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<salesordermodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnSalesOrderModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<salesordermodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveAStateSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SalesReturnSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\r\n\tStatusExclusion?: string;\r\n\tSalesOrderID?: number;\r\n\tMinSubtotalDiscounts?: number;\r\n\tMaxSubtotalDiscounts?: number;\r\n\tMatchSubtotalDiscounts?: number;\r\n\tMinSubtotalFees?: number;\r\n\tMaxSubtotalFees?: number;\r\n\tMatchSubtotalFees?: number;\r\n\tMinSubtotalHandling?: number;\r\n\tMaxSubtotalHandling?: number;\r\n\tMatchSubtotalHandling?: number;\r\n\tMinSubtotalItems?: number;\r\n\tMaxSubtotalItems?: number;\r\n\tMatchSubtotalItems?: number;\r\n\tMinSubtotalShipping?: number;\r\n\tMaxSubtotalShipping?: number;\r\n\tMatchSubtotalShipping?: number;\r\n\tMinSubtotalTaxes?: number;\r\n\tMaxSubtotalTaxes?: number;\r\n\tMatchSubtotalTaxes?: number;\r\n\tMinTotal?: number;\r\n\tMaxTotal?: number;\r\n\tMatchTotal?: number;\r\n\tMinActualShipDate?: Date;\r\n\tMaxActualShipDate?: Date;\r\n\tMatchActualShipDate?: Date;\r\n\tMatchActualShipDateIncludeNull?: boolean;\r\n\tMinBalanceDue?: number;\r\n\tMaxBalanceDue?: number;\r\n\tMatchBalanceDue?: number;\r\n\tMatchBalanceDueIncludeNull?: boolean;\r\n\tBillingContactID?: number;\r\n\tBillingContactIDIncludeNull?: boolean;\r\n\tMinDueDate?: Date;\r\n\tMaxDueDate?: Date;\r\n\tMatchDueDate?: Date;\r\n\tMatchDueDateIncludeNull?: boolean;\r\n\tMinRefundAmount?: number;\r\n\tMaxRefundAmount?: number;\r\n\tMatchRefundAmount?: number;\r\n\tMatchRefundAmountIncludeNull?: boolean;\r\n\tMinRequestedShipDate?: Date;\r\n\tMaxRequestedShipDate?: Date;\r\n\tMatchRequestedShipDate?: Date;\r\n\tMatchRequestedShipDateIncludeNull?: boolean;\r\n\tMinRequiredShipDate?: Date;\r\n\tMaxRequiredShipDate?: Date;\r\n\tMatchRequiredShipDate?: Date;\r\n\tMatchRequiredShipDateIncludeNull?: boolean;\r\n\tMinReturnApprovedDate?: Date;\r\n\tMaxReturnApprovedDate?: Date;\r\n\tMatchReturnApprovedDate?: Date;\r\n\tMatchReturnApprovedDateIncludeNull?: boolean;\r\n\tMinReturnCommitmentDate?: Date;\r\n\tMaxReturnCommitmentDate?: Date;\r\n\tMatchReturnCommitmentDate?: Date;\r\n\tMatchReturnCommitmentDateIncludeNull?: boolean;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupIDIncludeNull?: boolean;\r\n\tShippingContactID?: number;\r\n\tShippingContactIDIncludeNull?: boolean;\r\n\tShippingSameAsBilling?: boolean;\r\n\tShippingSameAsBillingIncludeNull?: boolean;\r\n\tPurchaseOrderNumber?: string;\r\n\tPurchaseOrderNumberStrict?: boolean;\r\n\tPurchaseOrderNumberIncludeNull?: boolean;\r\n\tRefundTransactionID?: string;\r\n\tRefundTransactionIDStrict?: boolean;\r\n\tRefundTransactionIDIncludeNull?: boolean;\r\n\tTaxTransactionID?: string;\r\n\tTaxTransactionIDStrict?: boolean;\r\n\tTaxTransactionIDIncludeNull?: boolean;\r\n\tTrackingNumber?: string;\r\n\tTrackingNumberStrict?: boolean;\r\n\tTrackingNumberIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statemodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnStatePagedResults extends PagedResultsBase<statemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface SalesReturnTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface SampleRequestContactModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SalesEventBaseModel}\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SampleRequestEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface SampleRequestFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseModelT<typemodel,samplerequestcontactmodel,samplerequesteventmodel,appliedsamplerequestdiscountmodel,appliedsamplerequestitemdiscountmodel,samplerequestfilemodel>}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveStoredFilesBaseModel<samplerequestfilemodel>}\r\n * @see {@link AmFilterableByNullableAccountBaseModel}\r\n * @see {@link AmFilterableByNullableBrandBaseModel}\r\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\r\n * @see {@link AmFilterableByNullableStoreBaseModel}\r\n * @see {@link AmFilterableByNullableUserBaseModel}\r\n * @public\r\n */\r\nexport interface SampleRequestModel extends SalesCollectionBaseModelT<typemodel,samplerequestcontactmodel,samplerequesteventmodel,appliedsamplerequestdiscountmodel,appliedsamplerequestitemdiscountmodel,samplerequestfilemodel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<samplerequestfilemodel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\r\n\tSalesGroupID?: number;\r\n\tSalesGroupKey?: string;\r\n\tSalesGroup?: SalesGroupModel;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<samplerequestmodel>}\r\n * @public\r\n */\r\nexport interface SampleRequestPagedResults extends PagedResultsBase<samplerequestmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SalesCollectionBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveAStateSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SampleRequestSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\r\n\tMinSubtotalDiscounts?: number;\r\n\tMaxSubtotalDiscounts?: number;\r\n\tMatchSubtotalDiscounts?: number;\r\n\tMinSubtotalFees?: number;\r\n\tMaxSubtotalFees?: number;\r\n\tMatchSubtotalFees?: number;\r\n\tMinSubtotalHandling?: number;\r\n\tMaxSubtotalHandling?: number;\r\n\tMatchSubtotalHandling?: number;\r\n\tMinSubtotalItems?: number;\r\n\tMaxSubtotalItems?: number;\r\n\tMatchSubtotalItems?: number;\r\n\tMinSubtotalShipping?: number;\r\n\tMaxSubtotalShipping?: number;\r\n\tMatchSubtotalShipping?: number;\r\n\tMinSubtotalTaxes?: number;\r\n\tMaxSubtotalTaxes?: number;\r\n\tMatchSubtotalTaxes?: number;\r\n\tMinTotal?: number;\r\n\tMaxTotal?: number;\r\n\tMatchTotal?: number;\r\n\tBillingContactID?: number;\r\n\tBillingContactIDIncludeNull?: boolean;\r\n\tMinDueDate?: Date;\r\n\tMaxDueDate?: Date;\r\n\tMatchDueDate?: Date;\r\n\tMatchDueDateIncludeNull?: boolean;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupIDIncludeNull?: boolean;\r\n\tShippingContactID?: number;\r\n\tShippingContactIDIncludeNull?: boolean;\r\n\tShippingSameAsBilling?: boolean;\r\n\tShippingSameAsBillingIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statemodel>}\r\n * @public\r\n */\r\nexport interface SampleRequestStatePagedResults extends PagedResultsBase<statemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface SampleRequestStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface SampleRequestTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface SearchFormBase {\r\n\tPage: number;\r\n\tPageSize: number;\r\n\tPageSetSize: number;\r\n\tPageFormat?: string;\r\n\tSort: SearchSort;\r\n\tName?: string;\r\n\tQuery?: string;\r\n\tAttributesAny?: Dictionary<array<string>&gt;;\r\n\tAttributesAll?: Dictionary<array<string>&gt;;\r\n\tBrandID?: number;\r\n\tBrandIDsAny?: Array<number>;\r\n\tBrandIDsAll?: Array<number>;\r\n\tForcedCategory?: string;\r\n\tCategory?: string;\r\n\tCategoriesAny?: Array<string>;\r\n\tCategoriesAll?: Array<string>;\r\n\tDistrictID?: number;\r\n\tDistrictIDsAny?: Array<number>;\r\n\tDistrictIDsAll?: Array<number>;\r\n\tCity?: string;\r\n\tFranchiseID?: number;\r\n\tFranchiseIDsAny?: Array<number>;\r\n\tFranchiseIDsAll?: Array<number>;\r\n\tManufacturerID?: number;\r\n\tManufacturerIDsAny?: Array<number>;\r\n\tManufacturerIDsAll?: Array<number>;\r\n\tPricingRanges?: Array<string>;\r\n\tProductID?: number;\r\n\tProductIDsAny?: Array<number>;\r\n\tProductIDsAll?: Array<number>;\r\n\tRatingRanges?: Array<string>;\r\n\tRegionID?: number;\r\n\tRegionIDsAny?: Array<number>;\r\n\tRole?: string;\r\n\tRolesAny?: Array<string>;\r\n\tRolesAll?: Array<string>;\r\n\tStoreID?: number;\r\n\tStoreIDsAny?: Array<number>;\r\n\tStoreIDsAll?: Array<number>;\r\n\tTypeID?: number;\r\n\tTypeIDsAny?: Array<number>;\r\n\tVendorID?: number;\r\n\tVendorIDsAny?: Array<number>;\r\n\tVendorIDsAll?: Array<number>;\r\n}\r\n\r\nexport enum SearchSort {\r\n\tRelevance,\r\n\tPopular,\r\n\tRecent,\r\n\tNameAscending,\r\n\tNameDescending,\r\n\tPricingAscending,\r\n\tPricingDescending,\r\n\tRatingAscending,\r\n\tRatingDescending,\r\n\tDefined,\r\n\tClosingSoon,\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface SerializableAttributeObject {\r\n\tID: number;\r\n\tKey?: string;\r\n\tValue?: string;\r\n\tUofM?: string;\r\n\tSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link Dictionary<serializableattributeobject>}\r\n * @public\r\n */\r\nexport class SerializableAttributesDictionary extends Dictionary<serializableattributeobject> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface ShipCarrierMethodModel extends NameableBaseModel {\r\n\tShipCarrierID: number;\r\n\tShipCarrierKey?: string;\r\n\tShipCarrierName?: string;\r\n\tShipCarrier?: ShipCarrierModel;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @public\r\n */\r\nexport interface ShipCarrierModel extends NameableBaseModel, HaveANullableContactBaseModel {\r\n\tIsInbound?: boolean;\r\n\tIsOutbound?: boolean;\r\n\tShipCarrierMethods?: Array<shipcarriermethodmodel>;\r\n\tPickupTime?: Date;\r\n\tAccountNumber?: string;\r\n\tAuthentication?: string;\r\n\tPointOfContact?: string;\r\n\tSalesRep?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @public\r\n */\r\nexport interface ShipmentEventModel extends BaseModel {\r\n\tEventDate?: Date;\r\n\tAddressID: number;\r\n\tAddressKey?: string;\r\n\tAddress?: AddressModel;\r\n\tShipmentID: number;\r\n\tShipmentKey?: string;\r\n\tShipment?: ShipmentModel;\r\n\tNote?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ShipmentModel extends BaseModel, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tShipmentEvents?: Array<shipmenteventmodel>;\r\n\tDestinationContactID: number;\r\n\tDestinationContactKey?: string;\r\n\tDestinationContact?: ContactModel;\r\n\tOriginContactID: number;\r\n\tOriginContactKey?: string;\r\n\tOriginContact?: ContactModel;\r\n\tDateDelivered?: Date;\r\n\tEstimatedDeliveryDate?: Date;\r\n\tInventoryLocationSectionID?: number;\r\n\tInventoryLocationSectionKey?: string;\r\n\tInventoryLocationSectionName?: string;\r\n\tInventoryLocationSection?: InventoryLocationSectionModel;\r\n\tNegotiatedRate?: number;\r\n\tPublishedRate?: number;\r\n\tShipCarrierID?: number;\r\n\tShipCarrierKey?: string;\r\n\tShipCarrierName?: string;\r\n\tShipCarrier?: ShipCarrierModel;\r\n\tShipCarrierMethodID?: number;\r\n\tShipCarrierMethodKey?: string;\r\n\tShipCarrierMethodName?: string;\r\n\tShipCarrierMethod?: ShipCarrierMethodModel;\r\n\tShipDate?: Date;\r\n\tTargetShippingDate?: Date;\r\n\tVendorID?: number;\r\n\tVendorKey?: string;\r\n\tVendorName?: string;\r\n\tVendor?: VendorModel;\r\n\tDestination?: string;\r\n\tReference1?: string;\r\n\tReference2?: string;\r\n\tReference3?: string;\r\n\tTrackingNumber?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface ShipmentStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface ShipmentTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandsitedomainmodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchisesitedomainmodel>}\r\n * @public\r\n */\r\nexport interface SiteDomainModel extends NameableBaseModel, AmFilterableByBrandsBaseModel<brandsitedomainmodel>, AmFilterableByFranchisesBaseModel<franchisesitedomainmodel> {\r\n\tSiteDomainSocialProviders?: Array<sitedomainsocialprovidermodel>;\r\n\tAlternateUrl1?: string;\r\n\tAlternateUrl2?: string;\r\n\tAlternateUrl3?: string;\r\n\tCatalogContent?: string;\r\n\tFooterContent?: string;\r\n\tHeaderContent?: string;\r\n\tSideBarContent?: string;\r\n\tUrl?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<sitedomainmodel>}\r\n * @public\r\n */\r\nexport interface SiteDomainPagedResults extends PagedResultsBase<sitedomainmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @public\r\n */\r\nexport interface SiteDomainSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel {\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tAlternateUrl1?: string;\r\n\tAlternateUrl1Strict?: boolean;\r\n\tAlternateUrl1IncludeNull?: boolean;\r\n\tAlternateUrl2?: string;\r\n\tAlternateUrl2Strict?: boolean;\r\n\tAlternateUrl2IncludeNull?: boolean;\r\n\tAlternateUrl3?: string;\r\n\tAlternateUrl3Strict?: boolean;\r\n\tAlternateUrl3IncludeNull?: boolean;\r\n\tCatalogContent?: string;\r\n\tCatalogContentStrict?: boolean;\r\n\tCatalogContentIncludeNull?: boolean;\r\n\tFooterContent?: string;\r\n\tFooterContentStrict?: boolean;\r\n\tFooterContentIncludeNull?: boolean;\r\n\tHeaderContent?: string;\r\n\tHeaderContentStrict?: boolean;\r\n\tHeaderContentIncludeNull?: boolean;\r\n\tSideBarContent?: string;\r\n\tSideBarContentStrict?: boolean;\r\n\tSideBarContentIncludeNull?: boolean;\r\n\tUrl?: string;\r\n\tUrlStrict?: boolean;\r\n\tUrlIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<socialprovidermodel>}\r\n * @public\r\n */\r\nexport interface SiteDomainSocialProviderModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<socialprovidermodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tScript?: string;\r\n\tUrlValues?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface SocialProviderModel extends NameableBaseModel {\r\n\tSiteDomainSocialProviders?: Array<sitedomainsocialprovidermodel>;\r\n\tUrl?: string;\r\n\tUrlFormat?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface Sort {\r\n\tfield?: string; // Name format overridden\r\n\tserverField?: string; // Name format overridden\r\n\torder?: number; // Name format overridden\r\n\tdir?: string; // Name format overridden\r\n}\r\n\r\n/**\r\n * @see {@link DisplayableBaseModel}\r\n * @public\r\n */\r\nexport interface StateableBaseModel extends DisplayableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link DisplayableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface StateableBaseSearchModel extends DisplayableBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link StateableBaseModel}\r\n * @public\r\n */\r\nexport interface StateModel extends StateableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link StateableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface StateSearchModel extends StateableBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link DisplayableBaseModel}\r\n * @public\r\n */\r\nexport interface StatusableBaseModel extends DisplayableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link DisplayableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface StatusableBaseSearchModel extends DisplayableBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link StatusableBaseModel}\r\n * @public\r\n */\r\nexport interface StatusModel extends StatusableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link StatusableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface StatusSearchModel extends StatusableBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @public\r\n */\r\nexport interface StoreAccountModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tHasAccessToStore?: boolean;\r\n\tPricePointID?: number;\r\n\tPricePointKey?: string;\r\n\tPricePointName?: string;\r\n\tPricePointDisplayName?: string;\r\n\tPricePointTranslationKey?: string;\r\n\tPricePointSortOrder?: number;\r\n\tPricePoint?: PricePointModel;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<auctionmodel>}\r\n * @public\r\n */\r\nexport interface StoreAuctionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<auctionmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<badgemodel>}\r\n * @public\r\n */\r\nexport interface StoreBadgeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<badgemodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface StoreCatalogSearchForm extends SearchFormBase {\r\n\tBadgeID?: number;\r\n\tBadgeIDsAny?: Array<number>;\r\n\tBadgeIDsAll?: Array<number>;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<categorymodel>}\r\n * @public\r\n */\r\nexport interface StoreCategoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<categorymodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmARelationshipTableModel<contactmodel>}\r\n * @public\r\n */\r\nexport interface StoreContactModel extends AmARelationshipTableNameableBaseModel, AmARelationshipTableModel<contactmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlavePhone?: string;\r\n\tSlaveFax?: string;\r\n\tSlaveEmail?: string;\r\n\tSlaveFirstName?: string;\r\n\tSlaveLastName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<countrymodel>}\r\n * @public\r\n */\r\nexport interface StoreCountryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<countrymodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface StoredFileModel extends NameableBaseModel {\r\n\tBytes?: Array<number>;\r\n\tIsStoredInDB?: boolean;\r\n\tSortOrder?: number;\r\n\tAuthor?: string;\r\n\tCopyright?: string;\r\n\tDisplayName?: string;\r\n\tFileFormat?: string;\r\n\tFileName?: string;\r\n\tSeoTitle?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<districtmodel>}\r\n * @public\r\n */\r\nexport interface StoreDistrictModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<districtmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface StoreImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface StoreIndexableModel extends IndexableModelBase {\r\n\tSuggestedByBadges?: any;\r\n\tBadges?: Array<indexablebadgefilter>;\r\n\tSlogan?: string;\r\n\tMissionStatement?: string;\r\n\tExternalUrl?: string;\r\n\tAbout?: string;\r\n\tOverview?: string;\r\n\tOperatingHoursTimeZoneId?: string;\r\n\tOperatingHoursMondayStart?: number;\r\n\tOperatingHoursMondayEnd?: number;\r\n\tOperatingHoursTuesdayStart?: number;\r\n\tOperatingHoursTuesdayEnd?: number;\r\n\tOperatingHoursWednesdayStart?: number;\r\n\tOperatingHoursWednesdayEnd?: number;\r\n\tOperatingHoursThursdayStart?: number;\r\n\tOperatingHoursThursdayEnd?: number;\r\n\tOperatingHoursFridayStart?: number;\r\n\tOperatingHoursFridayEnd?: number;\r\n\tOperatingHoursSaturdayStart?: number;\r\n\tOperatingHoursSaturdayEnd?: number;\r\n\tOperatingHoursSundayStart?: number;\r\n\tOperatingHoursSundayEnd?: number;\r\n\tOperatingHoursClosedStatement?: string;\r\n\tCurrencyID?: number;\r\n\tCurrencyKey?: string;\r\n\tCurrencyName?: string;\r\n\tLanguageID?: number;\r\n\tLanguageKey?: string;\r\n\tLanguageName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<inventorylocationmodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface StoreInventoryLocationModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<inventorylocationmodel>, HaveATypeModel<typemodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface StoreInventoryLocationsMatrixModel {\r\n\tStoreID?: number;\r\n\tStoreKey?: string;\r\n\tStoreName?: string;\r\n\tInternalInventoryLocationID?: number;\r\n\tInternalInventoryLocationKey?: string;\r\n\tInternalInventoryLocationName?: string;\r\n\tDistributionCenterInventoryLocationID?: number;\r\n\tDistributionCenterInventoryLocationKey?: string;\r\n\tDistributionCenterInventoryLocationName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface StoreInventoryLocationTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<manufacturermodel>}\r\n * @public\r\n */\r\nexport interface StoreManufacturerModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<manufacturermodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveImagesBaseModel<storeimagemodel>}\r\n * @see {@link AmFilterableByAccountsBaseModel<storeaccountmodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandstoremodel>}\r\n * @see {@link AmFilterableByCategoriesBaseModel<storecategorymodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchisestoremodel>}\r\n * @see {@link AmFilterableByManufacturersBaseModel<storemanufacturermodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<storeproductmodel>}\r\n * @see {@link AmFilterableByUsersBaseModel<storeusermodel>}\r\n * @see {@link AmFilterableByVendorsBaseModel<storevendormodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @see {@link HaveOrderMinimumsBaseModel}\r\n * @see {@link HaveFreeShippingMinimumsBaseModel}\r\n * @public\r\n */\r\nexport interface StoreModel extends NameableBaseModel, HaveSeoBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<storeimagemodel>, AmFilterableByAccountsBaseModel<storeaccountmodel>, AmFilterableByBrandsBaseModel<brandstoremodel>, AmFilterableByCategoriesBaseModel<storecategorymodel>, AmFilterableByFranchisesBaseModel<franchisestoremodel>, AmFilterableByManufacturersBaseModel<storemanufacturermodel>, AmFilterableByProductsBaseModel<storeproductmodel>, AmFilterableByUsersBaseModel<storeusermodel>, AmFilterableByVendorsBaseModel<storevendormodel>, HaveATypeModel<typemodel>, HaveANullableContactBaseModel, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\r\n\tDistance?: number;\r\n\tReviews?: Array<reviewmodel>;\r\n\tStoreBadges?: Array<storebadgemodel>;\r\n\tStoreContacts?: Array<storecontactmodel>;\r\n\tStoreCountries?: Array<storecountrymodel>;\r\n\tStoreDistricts?: Array<storedistrictmodel>;\r\n\tStoreInventoryLocations?: Array<storeinventorylocationmodel>;\r\n\tStoreRegions?: Array<storeregionmodel>;\r\n\tStoreSubscriptions?: Array<storesubscriptionmodel>;\r\n\tDisplayInStorefront?: boolean;\r\n\tEndDate?: Date;\r\n\tLanguageID?: number;\r\n\tLanguageKey?: string;\r\n\tLanguage?: LanguageModel;\r\n\tOperatingHoursFridayEnd?: number;\r\n\tOperatingHoursFridayStart?: number;\r\n\tOperatingHoursMondayEnd?: number;\r\n\tOperatingHoursMondayStart?: number;\r\n\tOperatingHoursSaturdayEnd?: number;\r\n\tOperatingHoursSaturdayStart?: number;\r\n\tOperatingHoursSundayEnd?: number;\r\n\tOperatingHoursSundayStart?: number;\r\n\tOperatingHoursThursdayEnd?: number;\r\n\tOperatingHoursThursdayStart?: number;\r\n\tOperatingHoursTuesdayEnd?: number;\r\n\tOperatingHoursTuesdayStart?: number;\r\n\tOperatingHoursWednesdayEnd?: number;\r\n\tOperatingHoursWednesdayStart?: number;\r\n\tSortOrder?: number;\r\n\tStartDate?: Date;\r\n\tAbout?: string;\r\n\tExternalUrl?: string;\r\n\tMissionStatement?: string;\r\n\tOperatingHoursClosedStatement?: string;\r\n\tOperatingHoursTimeZoneId?: string;\r\n\tOverview?: string;\r\n\tSlogan?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<storemodel>}\r\n * @public\r\n */\r\nexport interface StorePagedResults extends PagedResultsBase<storemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @public\r\n */\r\nexport interface StoreProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tIsVisibleIn?: boolean;\r\n\tPriceBase?: number;\r\n\tPriceMsrp?: number;\r\n\tPriceReduction?: number;\r\n\tPriceSale?: number;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<regionmodel>}\r\n * @public\r\n */\r\nexport interface StoreRegionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<regionmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<storeregionmodel>}\r\n * @public\r\n */\r\nexport interface StoreRegionPagedResults extends PagedResultsBase<storeregionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface StoreRegionSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByCategoryBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @see {@link AmFilterableByVendorBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @see {@link HaveAContactBaseSearchModel}\r\n * @public\r\n */\r\nexport interface StoreSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByUserBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\r\n\tHostUrl?: string;\r\n\tZipCode?: string;\r\n\tLatitude?: number;\r\n\tLongitude?: number;\r\n\tRadius?: number;\r\n\tUnits?: LocatorUnits;\r\n\tRegionID?: number;\r\n\tStoreContactRegionID?: number;\r\n\tCountryID?: number;\r\n\tStoreContactCountryID?: number;\r\n\tCity?: string;\r\n\tStoreContactCity?: string;\r\n\tSortByMembershipLevel?: boolean;\r\n\tDistrictID?: number;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n\tContactIDIncludeNull?: boolean;\r\n\tContactKeyStrict?: boolean;\r\n\tContactKeyIncludeNull?: boolean;\r\n\tContactFirstNameStrict?: boolean;\r\n\tContactFirstNameIncludeNull?: boolean;\r\n\tContactLastNameStrict?: boolean;\r\n\tContactLastNameIncludeNull?: boolean;\r\n\tContactPhoneStrict?: boolean;\r\n\tContactPhoneIncludeNull?: boolean;\r\n\tContactFaxStrict?: boolean;\r\n\tContactFaxIncludeNull?: boolean;\r\n\tContactEmailStrict?: boolean;\r\n\tContactEmailIncludeNull?: boolean;\r\n\tSeoKeywords?: string;\r\n\tSeoKeywordsStrict?: boolean;\r\n\tSeoKeywordsIncludeNull?: boolean;\r\n\tSeoUrl?: string;\r\n\tSeoUrlStrict?: boolean;\r\n\tSeoUrlIncludeNull?: boolean;\r\n\tSeoDescription?: string;\r\n\tSeoDescriptionStrict?: boolean;\r\n\tSeoDescriptionIncludeNull?: boolean;\r\n\tSeoMetaData?: string;\r\n\tSeoMetaDataStrict?: boolean;\r\n\tSeoMetaDataIncludeNull?: boolean;\r\n\tSeoPageTitle?: string;\r\n\tSeoPageTitleStrict?: boolean;\r\n\tSeoPageTitleIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\r\n\tDisplayInStorefront?: boolean;\r\n\tDisplayInStorefrontIncludeNull?: boolean;\r\n\tMinEndDate?: Date;\r\n\tMaxEndDate?: Date;\r\n\tMatchEndDate?: Date;\r\n\tMatchEndDateIncludeNull?: boolean;\r\n\tLanguageID?: number;\r\n\tLanguageIDIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmount?: number;\r\n\tMaxMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmount?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmount?: number;\r\n\tMaxMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountAfter?: number;\r\n\tMaxMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\r\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferProductID?: number;\r\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmount?: number;\r\n\tMaxMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountAfter?: number;\r\n\tMaxMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\r\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferProductID?: number;\r\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinOperatingHoursFridayEnd?: number;\r\n\tMaxOperatingHoursFridayEnd?: number;\r\n\tMatchOperatingHoursFridayEnd?: number;\r\n\tMatchOperatingHoursFridayEndIncludeNull?: boolean;\r\n\tMinOperatingHoursFridayStart?: number;\r\n\tMaxOperatingHoursFridayStart?: number;\r\n\tMatchOperatingHoursFridayStart?: number;\r\n\tMatchOperatingHoursFridayStartIncludeNull?: boolean;\r\n\tMinOperatingHoursMondayEnd?: number;\r\n\tMaxOperatingHoursMondayEnd?: number;\r\n\tMatchOperatingHoursMondayEnd?: number;\r\n\tMatchOperatingHoursMondayEndIncludeNull?: boolean;\r\n\tMinOperatingHoursMondayStart?: number;\r\n\tMaxOperatingHoursMondayStart?: number;\r\n\tMatchOperatingHoursMondayStart?: number;\r\n\tMatchOperatingHoursMondayStartIncludeNull?: boolean;\r\n\tMinOperatingHoursSaturdayEnd?: number;\r\n\tMaxOperatingHoursSaturdayEnd?: number;\r\n\tMatchOperatingHoursSaturdayEnd?: number;\r\n\tMatchOperatingHoursSaturdayEndIncludeNull?: boolean;\r\n\tMinOperatingHoursSaturdayStart?: number;\r\n\tMaxOperatingHoursSaturdayStart?: number;\r\n\tMatchOperatingHoursSaturdayStart?: number;\r\n\tMatchOperatingHoursSaturdayStartIncludeNull?: boolean;\r\n\tMinOperatingHoursSundayEnd?: number;\r\n\tMaxOperatingHoursSundayEnd?: number;\r\n\tMatchOperatingHoursSundayEnd?: number;\r\n\tMatchOperatingHoursSundayEndIncludeNull?: boolean;\r\n\tMinOperatingHoursSundayStart?: number;\r\n\tMaxOperatingHoursSundayStart?: number;\r\n\tMatchOperatingHoursSundayStart?: number;\r\n\tMatchOperatingHoursSundayStartIncludeNull?: boolean;\r\n\tMinOperatingHoursThursdayEnd?: number;\r\n\tMaxOperatingHoursThursdayEnd?: number;\r\n\tMatchOperatingHoursThursdayEnd?: number;\r\n\tMatchOperatingHoursThursdayEndIncludeNull?: boolean;\r\n\tMinOperatingHoursThursdayStart?: number;\r\n\tMaxOperatingHoursThursdayStart?: number;\r\n\tMatchOperatingHoursThursdayStart?: number;\r\n\tMatchOperatingHoursThursdayStartIncludeNull?: boolean;\r\n\tMinOperatingHoursTuesdayEnd?: number;\r\n\tMaxOperatingHoursTuesdayEnd?: number;\r\n\tMatchOperatingHoursTuesdayEnd?: number;\r\n\tMatchOperatingHoursTuesdayEndIncludeNull?: boolean;\r\n\tMinOperatingHoursTuesdayStart?: number;\r\n\tMaxOperatingHoursTuesdayStart?: number;\r\n\tMatchOperatingHoursTuesdayStart?: number;\r\n\tMatchOperatingHoursTuesdayStartIncludeNull?: boolean;\r\n\tMinOperatingHoursWednesdayEnd?: number;\r\n\tMaxOperatingHoursWednesdayEnd?: number;\r\n\tMatchOperatingHoursWednesdayEnd?: number;\r\n\tMatchOperatingHoursWednesdayEndIncludeNull?: boolean;\r\n\tMinOperatingHoursWednesdayStart?: number;\r\n\tMaxOperatingHoursWednesdayStart?: number;\r\n\tMatchOperatingHoursWednesdayStart?: number;\r\n\tMatchOperatingHoursWednesdayStartIncludeNull?: boolean;\r\n\tMinSortOrder?: number;\r\n\tMaxSortOrder?: number;\r\n\tMatchSortOrder?: number;\r\n\tMatchSortOrderIncludeNull?: boolean;\r\n\tMinStartDate?: Date;\r\n\tMaxStartDate?: Date;\r\n\tMatchStartDate?: Date;\r\n\tMatchStartDateIncludeNull?: boolean;\r\n\tAbout?: string;\r\n\tAboutStrict?: boolean;\r\n\tAboutIncludeNull?: boolean;\r\n\tExternalUrl?: string;\r\n\tExternalUrlStrict?: boolean;\r\n\tExternalUrlIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessage?: string;\r\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tMissionStatement?: string;\r\n\tMissionStatementStrict?: boolean;\r\n\tMissionStatementIncludeNull?: boolean;\r\n\tOperatingHoursClosedStatement?: string;\r\n\tOperatingHoursClosedStatementStrict?: boolean;\r\n\tOperatingHoursClosedStatementIncludeNull?: boolean;\r\n\tOperatingHoursTimeZoneId?: string;\r\n\tOperatingHoursTimeZoneIdStrict?: boolean;\r\n\tOperatingHoursTimeZoneIdIncludeNull?: boolean;\r\n\tOverview?: string;\r\n\tOverviewStrict?: boolean;\r\n\tOverviewIncludeNull?: boolean;\r\n\tSlogan?: string;\r\n\tSloganStrict?: boolean;\r\n\tSloganIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<storecatalogsearchform,storeindexablemodel>}\r\n * @public\r\n */\r\nexport interface StoreSearchViewModel extends SearchViewModelBase<storecatalogsearchform,storeindexablemodel> {\r\n\tBadgeIDs?: Dictionary<number>;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<subscriptionmodel>}\r\n * @public\r\n */\r\nexport interface StoreSubscriptionModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<subscriptionmodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface StoreSuggestResult extends SuggestResultBase {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface StoreTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<usermodel>}\r\n * @public\r\n */\r\nexport interface StoreUserModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<usermodel> {\r\n\tMasterSeoUrl?: string;\r\n\tSlaveUserName?: string;\r\n\tMasterName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<storeusermodel>}\r\n * @public\r\n */\r\nexport interface StoreUserPagedResults extends PagedResultsBase<storeusermodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link AmFilterableByUserBaseSearchModel}\r\n * @public\r\n */\r\nexport interface StoreUserSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel {\r\n\tMasterName?: string;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tUserIDIncludeNull?: boolean;\r\n\tUserIDOrCustomKeyOrUserName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<vendormodel>}\r\n * @public\r\n */\r\nexport interface StoreVendorModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<vendormodel> {\r\n\tMasterSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<paymentmodel>}\r\n * @public\r\n */\r\nexport interface SubscriptionHistoryModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<paymentmodel> {\r\n\tMasterName?: string;\r\n\tPaymentSuccess?: boolean;\r\n\tPaymentDate?: Date;\r\n\tBillingPeriodsPaid?: number;\r\n\tMemo?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<subscriptionhistorymodel>}\r\n * @public\r\n */\r\nexport interface SubscriptionHistoryPagedResults extends PagedResultsBase<subscriptionhistorymodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseSearchModel}\r\n * @public\r\n */\r\nexport interface SubscriptionHistorySearchModel extends AmARelationshipTableBaseSearchModel {\r\n\tMinDate?: Date;\r\n\tMaxDate?: Date;\r\n\tPaymentID?: number;\r\n\tSubscriptionID?: number;\r\n\tSucceededState?: boolean;\r\n\tMasterName?: string;\r\n\tPaymentSuccess?: boolean;\r\n\tMinPaymentDate?: Date;\r\n\tMaxPaymentDate?: Date;\r\n\tMatchPaymentDate?: Date;\r\n\tMinBillingPeriodsPaid?: number;\r\n\tMaxBillingPeriodsPaid?: number;\r\n\tMatchBillingPeriodsPaid?: number;\r\n\tMemo?: string;\r\n\tMemoStrict?: boolean;\r\n\tMemoIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<subscriptiontypemodel>}\r\n * @public\r\n */\r\nexport interface SubscriptionModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<subscriptiontypemodel> {\r\n\tAutoRenew?: boolean;\r\n\tCanUpgrade?: boolean;\r\n\tIsAutoRefill?: boolean;\r\n\tMemberSince?: Date;\r\n\tStartsOn?: Date;\r\n\tFee?: number;\r\n\tSubscriptionHistories?: Array<subscriptionhistorymodel>;\r\n\tBillingPeriodsPaid?: number;\r\n\tBillingPeriodsTotal?: number;\r\n\tRepeatTypeID: number;\r\n\tRepeatTypeKey?: string;\r\n\tRepeatTypeName?: string;\r\n\tRepeatTypeDisplayName?: string;\r\n\tRepeatTypeTranslationKey?: string;\r\n\tRepeatTypeSortOrder?: number;\r\n\tRepeatType?: RepeatTypeModel;\r\n\tAccountID?: number;\r\n\tAccountKey?: string;\r\n\tAccountName?: string;\r\n\tAccount?: AccountModel;\r\n\tCreditUponUpgrade?: number;\r\n\tEndsOn?: Date;\r\n\tLastPaidDate?: Date;\r\n\tProductMembershipLevelID?: number;\r\n\tProductMembershipLevelKey?: string;\r\n\tProductMembershipLevel?: ProductMembershipLevelModel;\r\n\tProductSubscriptionTypeID?: number;\r\n\tProductSubscriptionTypeKey?: string;\r\n\tProductSubscriptionType?: ProductSubscriptionTypeModel;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupKey?: string;\r\n\tSalesGroup?: SalesGroupModel;\r\n\tSalesInvoiceID?: number;\r\n\tSalesInvoiceKey?: string;\r\n\tSalesInvoice?: SalesInvoiceModel;\r\n\tSalesOrderID?: number;\r\n\tSalesOrderKey?: string;\r\n\tSalesOrder?: SalesOrderModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUserUserName?: string;\r\n\tUser?: UserModel;\r\n\tMemo?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<subscriptionmodel>}\r\n * @public\r\n */\r\nexport interface SubscriptionPagedResults extends PagedResultsBase<subscriptionmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @public\r\n */\r\nexport interface SubscriptionSearchModel extends NameableBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\r\n\tMinCoverDate?: Date;\r\n\tMaxCoverDate?: Date;\r\n\tCanUpgradeState?: boolean;\r\n\tAutoRenewState?: boolean;\r\n\tPaymentID?: number;\r\n\tPaymentTypeID?: number;\r\n\tAccountKey?: string;\r\n\tUserKey?: string;\r\n\tAutoRenew?: boolean;\r\n\tCanUpgrade?: boolean;\r\n\tIsAutoRefill?: boolean;\r\n\tMinMemberSince?: Date;\r\n\tMaxMemberSince?: Date;\r\n\tMatchMemberSince?: Date;\r\n\tMinStartsOn?: Date;\r\n\tMaxStartsOn?: Date;\r\n\tMatchStartsOn?: Date;\r\n\tMinFee?: number;\r\n\tMaxFee?: number;\r\n\tMatchFee?: number;\r\n\tMinBillingPeriodsPaid?: number;\r\n\tMaxBillingPeriodsPaid?: number;\r\n\tMatchBillingPeriodsPaid?: number;\r\n\tMinBillingPeriodsTotal?: number;\r\n\tMaxBillingPeriodsTotal?: number;\r\n\tMatchBillingPeriodsTotal?: number;\r\n\tRepeatTypeID?: number;\r\n\tAccountID?: number;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tMinCreditUponUpgrade?: number;\r\n\tMaxCreditUponUpgrade?: number;\r\n\tMatchCreditUponUpgrade?: number;\r\n\tMatchCreditUponUpgradeIncludeNull?: boolean;\r\n\tMinEndsOn?: Date;\r\n\tMaxEndsOn?: Date;\r\n\tMatchEndsOn?: Date;\r\n\tMatchEndsOnIncludeNull?: boolean;\r\n\tMinLastPaidDate?: Date;\r\n\tMaxLastPaidDate?: Date;\r\n\tMatchLastPaidDate?: Date;\r\n\tMatchLastPaidDateIncludeNull?: boolean;\r\n\tProductMembershipLevelID?: number;\r\n\tProductMembershipLevelIDIncludeNull?: boolean;\r\n\tProductSubscriptionTypeID?: number;\r\n\tProductSubscriptionTypeIDIncludeNull?: boolean;\r\n\tSalesGroupID?: number;\r\n\tSalesGroupIDIncludeNull?: boolean;\r\n\tSalesInvoiceID?: number;\r\n\tSalesInvoiceIDIncludeNull?: boolean;\r\n\tSalesOrderID?: number;\r\n\tSalesOrderIDIncludeNull?: boolean;\r\n\tUserID?: number;\r\n\tUserIDIncludeNull?: boolean;\r\n\tMemo?: string;\r\n\tMemoStrict?: boolean;\r\n\tMemoIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface SubscriptionStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface SubscriptionTypeModel extends TypableBaseModel {\r\n\tSubscriptionTypeRepeatTypes?: Array<subscriptiontyperepeattypemodel>;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<subscriptiontypemodel>}\r\n * @public\r\n */\r\nexport interface SubscriptionTypePagedResults extends PagedResultsBase<subscriptiontypemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<typemodel>}\r\n * @public\r\n */\r\nexport interface SubscriptionTypeRepeatTypeModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<typemodel> {\r\n\tMasterName?: string;\r\n\tMasterDisplayName?: string;\r\n\tMasterTranslationKey?: string;\r\n\tMasterSortOrder?: number;\r\n\tSlaveName?: string;\r\n\tSlaveDisplayName?: string;\r\n\tSlaveTranslationKey?: string;\r\n\tSlaveSortOrder?: number;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface SubscriptionTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface SuggestResultBase {\r\n\tID?: number;\r\n\tName?: string;\r\n\tCustomKey?: string;\r\n\tSeoUrl?: string;\r\n\tSummary?: string;\r\n\tScore: number;\r\n\tQueryableAttributes?: Dictionary<string>;\r\n}\r\n\r\n/**\r\n * @see {@link DisplayableBaseModel}\r\n * @public\r\n */\r\nexport interface TypableBaseModel extends DisplayableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link DisplayableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface TypableBaseSearchModel extends DisplayableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n\tStoreIDIncludeNull?: boolean;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseModel}\r\n * @public\r\n */\r\nexport interface TypeModel extends TypableBaseModel {\r\n}\r\n\r\n/**\r\n * @see {@link TypableBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @public\r\n */\r\nexport interface TypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\r\n}\r\n\r\nexport enum UploadStatus {\r\n\tNone,\r\n\tCreated,\r\n\tInProgress,\r\n\tCompleted,\r\n\tFailed,\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableNameableBaseModel}\r\n * @see {@link AmAStoredFileRelationshipTableModel}\r\n * @see {@link HaveSeoBaseModel}\r\n * @public\r\n */\r\nexport interface UserFileModel extends AmARelationshipTableNameableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\r\n\tMasterUserName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link AmFilterableByUserBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface UserImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByUserBaseModel, HaveATypeModel<typemodel> {\r\n\tMasterUserName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link BaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveImagesBaseModel<userimagemodel>}\r\n * @see {@link HaveStoredFilesBaseModel<userfilemodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandusermodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchiseusermodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storeusermodel>}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveAContactBaseModel}\r\n * @public\r\n */\r\nexport interface UserModel extends BaseModel, HaveNotesBaseModel, HaveImagesBaseModel<userimagemodel>, HaveStoredFilesBaseModel<userfilemodel>, AmFilterableByBrandsBaseModel<brandusermodel>, AmFilterableByFranchisesBaseModel<franchiseusermodel>, AmFilterableByStoresBaseModel<storeusermodel>, HaveAStatusModel, HaveATypeModel<typemodel>, HaveAContactBaseModel {\r\n\tOverridePassword?: string;\r\n\tSendCreationNotification?: boolean;\r\n\tReviews?: Array<reviewmodel>;\r\n\tEmailConfirmed?: boolean;\r\n\tIsApproved?: boolean;\r\n\tIsSMSAllowed?: boolean;\r\n\tPhoneNumberConfirmed?: boolean;\r\n\tRequirePasswordChangeOnNextLogin?: boolean;\r\n\tTwoFactorEnabled?: boolean;\r\n\tUseAutoPay?: boolean;\r\n\tAccountID?: number;\r\n\tAccountKey?: string;\r\n\tAccountName?: string;\r\n\tAccount?: AccountModel;\r\n\tCurrencyID?: number;\r\n\tCurrencyKey?: string;\r\n\tCurrencyName?: string;\r\n\tCurrency?: CurrencyModel;\r\n\tDateOfBirth?: Date;\r\n\tLanguageID?: number;\r\n\tLanguageKey?: string;\r\n\tLanguage?: LanguageModel;\r\n\tPreferredStoreID?: number;\r\n\tPreferredStoreKey?: string;\r\n\tPreferredStoreName?: string;\r\n\tPreferredStoreSeoUrl?: string;\r\n\tPreferredStore?: StoreModel;\r\n\tUserOnlineStatusID?: number;\r\n\tUserOnlineStatusKey?: string;\r\n\tUserOnlineStatusName?: string;\r\n\tUserOnlineStatusDisplayName?: string;\r\n\tUserOnlineStatusTranslationKey?: string;\r\n\tUserOnlineStatusSortOrder?: number;\r\n\tUserOnlineStatus?: StatusModel;\r\n\tDisplayName?: string;\r\n\tEmail?: string;\r\n\tGender?: string;\r\n\tPhoneNumber?: string;\r\n\tUserName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface UserOnlineStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<usermodel>}\r\n * @public\r\n */\r\nexport interface UserPagedResults extends PagedResultsBase<usermodel> {\r\n}\r\n\r\n/**\r\n * @see {@link BaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link HaveAStatusSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @see {@link HaveAContactBaseSearchModel}\r\n * @public\r\n */\r\nexport interface UserSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\r\n\tName?: string;\r\n\tFirstName?: string;\r\n\tLastName?: string;\r\n\tAccountName?: string;\r\n\tAccountKey?: string;\r\n\tAccessibleFromAccountID?: number;\r\n\tUserNameOrContactName?: string;\r\n\tUserNameOrCustomKeyOrEmailOrContactName?: string;\r\n\tIDOrUserNameOrCustomKeyOrEmailOrContactName?: string;\r\n\tUserNameOrCustomKeyOrEmail?: string;\r\n\tUserNameOrEmail?: string;\r\n\tOnlineStatusID?: number;\r\n\tAccessibleLevels?: number;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tContactIDIncludeNull?: boolean;\r\n\tContactKeyStrict?: boolean;\r\n\tContactKeyIncludeNull?: boolean;\r\n\tContactFirstNameStrict?: boolean;\r\n\tContactFirstNameIncludeNull?: boolean;\r\n\tContactLastNameStrict?: boolean;\r\n\tContactLastNameIncludeNull?: boolean;\r\n\tContactPhoneStrict?: boolean;\r\n\tContactPhoneIncludeNull?: boolean;\r\n\tContactFaxStrict?: boolean;\r\n\tContactFaxIncludeNull?: boolean;\r\n\tContactEmailStrict?: boolean;\r\n\tContactEmailIncludeNull?: boolean;\r\n\tEmailConfirmed?: boolean;\r\n\tIsApproved?: boolean;\r\n\tIsSMSAllowed?: boolean;\r\n\tLockoutEnabled?: boolean;\r\n\tPhoneNumberConfirmed?: boolean;\r\n\tRequirePasswordChangeOnNextLogin?: boolean;\r\n\tTwoFactorEnabled?: boolean;\r\n\tUseAutoPay?: boolean;\r\n\tMinAccessFailedCount?: number;\r\n\tMaxAccessFailedCount?: number;\r\n\tMatchAccessFailedCount?: number;\r\n\tAccountID?: number;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tCurrencyID?: number;\r\n\tCurrencyIDIncludeNull?: boolean;\r\n\tMinDateOfBirth?: Date;\r\n\tMaxDateOfBirth?: Date;\r\n\tMatchDateOfBirth?: Date;\r\n\tMatchDateOfBirthIncludeNull?: boolean;\r\n\tLanguageID?: number;\r\n\tLanguageIDIncludeNull?: boolean;\r\n\tMinLockoutEndDateUtc?: Date;\r\n\tMaxLockoutEndDateUtc?: Date;\r\n\tMatchLockoutEndDateUtc?: Date;\r\n\tMatchLockoutEndDateUtcIncludeNull?: boolean;\r\n\tPreferredStoreID?: number;\r\n\tPreferredStoreIDIncludeNull?: boolean;\r\n\tUserOnlineStatusID?: number;\r\n\tUserOnlineStatusIDIncludeNull?: boolean;\r\n\tAccessToken?: string;\r\n\tAccessTokenStrict?: boolean;\r\n\tAccessTokenIncludeNull?: boolean;\r\n\tDisplayName?: string;\r\n\tDisplayNameStrict?: boolean;\r\n\tDisplayNameIncludeNull?: boolean;\r\n\tEmail?: string;\r\n\tEmailStrict?: boolean;\r\n\tEmailIncludeNull?: boolean;\r\n\tGender?: string;\r\n\tGenderStrict?: boolean;\r\n\tGenderIncludeNull?: boolean;\r\n\tPasswordHash?: string;\r\n\tPasswordHashStrict?: boolean;\r\n\tPasswordHashIncludeNull?: boolean;\r\n\tPhoneNumber?: string;\r\n\tPhoneNumberStrict?: boolean;\r\n\tPhoneNumberIncludeNull?: boolean;\r\n\tSecurityStamp?: string;\r\n\tSecurityStampStrict?: boolean;\r\n\tSecurityStampIncludeNull?: boolean;\r\n\tUserName?: string;\r\n\tUserNameStrict?: boolean;\r\n\tUserNameIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<statusmodel>}\r\n * @public\r\n */\r\nexport interface UserStatusPagedResults extends PagedResultsBase<statusmodel> {\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<typemodel>}\r\n * @public\r\n */\r\nexport interface UserTypePagedResults extends PagedResultsBase<typemodel> {\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface UserTypingStatus {\r\n\tUserID: number;\r\n\tUserName?: string;\r\n\tStatus: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<accountmodel>}\r\n * @public\r\n */\r\nexport interface VendorAccountModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<accountmodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link SearchFormBase}\r\n * @public\r\n */\r\nexport interface VendorCatalogSearchForm extends SearchFormBase {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link IImageBaseModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface VendorImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<typemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link IndexableModelBase}\r\n * @public\r\n */\r\nexport interface VendorIndexableModel extends IndexableModelBase {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<manufacturermodel>}\r\n * @public\r\n */\r\nexport interface VendorManufacturerModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<manufacturermodel> {\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @see {@link HaveImagesBaseModel<vendorimagemodel>}\r\n * @see {@link AmFilterableByAccountsBaseModel<vendoraccountmodel>}\r\n * @see {@link AmFilterableByBrandsBaseModel<brandvendormodel>}\r\n * @see {@link AmFilterableByFranchisesBaseModel<franchisevendormodel>}\r\n * @see {@link AmFilterableByManufacturersBaseModel<vendormanufacturermodel>}\r\n * @see {@link AmFilterableByProductsBaseModel<vendorproductmodel>}\r\n * @see {@link AmFilterableByStoresBaseModel<storevendormodel>}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @see {@link HaveOrderMinimumsBaseModel}\r\n * @see {@link HaveFreeShippingMinimumsBaseModel}\r\n * @public\r\n */\r\nexport interface VendorModel extends NameableBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<vendorimagemodel>, AmFilterableByAccountsBaseModel<vendoraccountmodel>, AmFilterableByBrandsBaseModel<brandvendormodel>, AmFilterableByFranchisesBaseModel<franchisevendormodel>, AmFilterableByManufacturersBaseModel<vendormanufacturermodel>, AmFilterableByProductsBaseModel<vendorproductmodel>, AmFilterableByStoresBaseModel<storevendormodel>, HaveATypeModel<typemodel>, HaveANullableContactBaseModel, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\r\n\tReviews?: Array<reviewmodel>;\r\n\tAllowDropShip?: boolean;\r\n\tMustResetPassword?: boolean;\r\n\tPurchaseOrders?: Array<purchaseordermodel>;\r\n\tShipments?: Array<shipmentmodel>;\r\n\tDefaultDiscount?: number;\r\n\tRecommendedPurchaseOrderDollarAmount?: number;\r\n\tAccountNumber?: string;\r\n\tEmailSubject?: string;\r\n\tNotes1?: string;\r\n\tPasswordHash?: string;\r\n\tSecurityToken?: string;\r\n\tSendMethod?: string;\r\n\tShipTo?: string;\r\n\tShipViaNotes?: string;\r\n\tSignBy?: string;\r\n\tTermNotes?: string;\r\n\tTerms?: string;\r\n\tUserName?: string;\r\n}\r\n\r\n/**\r\n * @see {@link PagedResultsBase<vendormodel>}\r\n * @public\r\n */\r\nexport interface VendorPagedResults extends PagedResultsBase<vendormodel> {\r\n}\r\n\r\n/**\r\n * @see {@link AmARelationshipTableBaseModel}\r\n * @see {@link AmARelationshipTableModel<productmodel>}\r\n * @public\r\n */\r\nexport interface VendorProductModel extends AmARelationshipTableBaseModel, AmARelationshipTableModel<productmodel> {\r\n\tSlaveSeoUrl?: string;\r\n\tMasterName?: string;\r\n\tSlaveName?: string;\r\n\tActualCost?: number;\r\n\tCostMultiplier?: number;\r\n\tInventoryCount?: number;\r\n\tListedPrice?: number;\r\n\tMaximumInventory?: number;\r\n\tMinimumInventory?: number;\r\n\tBin?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseSearchModel}\r\n * @see {@link AmFilterableByAccountBaseSearchModel}\r\n * @see {@link AmFilterableByBrandBaseSearchModel}\r\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\r\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\r\n * @see {@link AmFilterableByProductBaseSearchModel}\r\n * @see {@link AmFilterableByStoreBaseSearchModel}\r\n * @see {@link HaveATypeSearchModel}\r\n * @see {@link HaveAContactBaseSearchModel}\r\n * @public\r\n */\r\nexport interface VendorSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\r\n\tNotes?: string;\r\n\tAddressID?: number;\r\n\tTermID?: number;\r\n\tVendorsShipViaID?: number;\r\n\tAccountIDIncludeNull?: boolean;\r\n\tAccountNameStrict?: boolean;\r\n\tAccountNameIncludeNull?: boolean;\r\n\tAccountIDOrCustomKeyOrNameOrDescription?: string;\r\n\tBrandIDIncludeNull?: boolean;\r\n\tBrandNameStrict?: boolean;\r\n\tBrandNameIncludeNull?: boolean;\r\n\tFranchiseIDIncludeNull?: boolean;\r\n\tFranchiseNameStrict?: boolean;\r\n\tFranchiseNameIncludeNull?: boolean;\r\n\tStoreIDIncludeNull?: boolean;\r\n\tStoreAnyDistrictID?: number;\r\n\tStoreAnyZipCode?: string;\r\n\tStoreAnyLatitude?: number;\r\n\tStoreAnyLongitude?: number;\r\n\tStoreAnyRadius?: number;\r\n\tStoreAnyUnits?: LocatorUnits;\r\n\tContactIDIncludeNull?: boolean;\r\n\tContactKeyStrict?: boolean;\r\n\tContactKeyIncludeNull?: boolean;\r\n\tContactFirstNameStrict?: boolean;\r\n\tContactFirstNameIncludeNull?: boolean;\r\n\tContactLastNameStrict?: boolean;\r\n\tContactLastNameIncludeNull?: boolean;\r\n\tContactPhoneStrict?: boolean;\r\n\tContactPhoneIncludeNull?: boolean;\r\n\tContactFaxStrict?: boolean;\r\n\tContactFaxIncludeNull?: boolean;\r\n\tContactEmailStrict?: boolean;\r\n\tContactEmailIncludeNull?: boolean;\r\n\tAllowDropShip?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\r\n\tMustResetPassword?: boolean;\r\n\tMinDefaultDiscount?: number;\r\n\tMaxDefaultDiscount?: number;\r\n\tMatchDefaultDiscount?: number;\r\n\tMatchDefaultDiscountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmount?: number;\r\n\tMaxMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmount?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmount?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\r\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\r\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmount?: number;\r\n\tMaxMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmount?: number;\r\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountAfter?: number;\r\n\tMaxMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfter?: number;\r\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\r\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountBufferProductID?: number;\r\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\r\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmount?: number;\r\n\tMaxMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmount?: number;\r\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountAfter?: number;\r\n\tMaxMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfter?: number;\r\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\r\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountBufferProductID?: number;\r\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\r\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\r\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\r\n\tMinRecommendedPurchaseOrderDollarAmount?: number;\r\n\tMaxRecommendedPurchaseOrderDollarAmount?: number;\r\n\tMatchRecommendedPurchaseOrderDollarAmount?: number;\r\n\tMatchRecommendedPurchaseOrderDollarAmountIncludeNull?: boolean;\r\n\tAccountNumber?: string;\r\n\tAccountNumberStrict?: boolean;\r\n\tAccountNumberIncludeNull?: boolean;\r\n\tEmailSubject?: string;\r\n\tEmailSubjectStrict?: boolean;\r\n\tEmailSubjectIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessage?: string;\r\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessage?: string;\r\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\r\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\r\n\tNotes1?: string;\r\n\tNotes1Strict?: boolean;\r\n\tNotes1IncludeNull?: boolean;\r\n\tPasswordHash?: string;\r\n\tPasswordHashStrict?: boolean;\r\n\tPasswordHashIncludeNull?: boolean;\r\n\tSecurityToken?: string;\r\n\tSecurityTokenStrict?: boolean;\r\n\tSecurityTokenIncludeNull?: boolean;\r\n\tSendMethod?: string;\r\n\tSendMethodStrict?: boolean;\r\n\tSendMethodIncludeNull?: boolean;\r\n\tShipTo?: string;\r\n\tShipToStrict?: boolean;\r\n\tShipToIncludeNull?: boolean;\r\n\tShipViaNotes?: string;\r\n\tShipViaNotesStrict?: boolean;\r\n\tShipViaNotesIncludeNull?: boolean;\r\n\tSignBy?: string;\r\n\tSignByStrict?: boolean;\r\n\tSignByIncludeNull?: boolean;\r\n\tTermNotes?: string;\r\n\tTermNotesStrict?: boolean;\r\n\tTermNotesIncludeNull?: boolean;\r\n\tTerms?: string;\r\n\tTermsStrict?: boolean;\r\n\tTermsIncludeNull?: boolean;\r\n\tUserName?: string;\r\n\tUserNameStrict?: boolean;\r\n\tUserNameIncludeNull?: boolean;\r\n}\r\n\r\n/**\r\n * @see {@link SearchViewModelBase<vendorcatalogsearchform,vendorindexablemodel>}\r\n * @public\r\n */\r\nexport interface VendorSearchViewModel extends SearchViewModelBase<vendorcatalogsearchform,vendorindexablemodel> {\r\n}\r\n\r\n/**\r\n * @see {@link SuggestResultBase}\r\n * @public\r\n */\r\nexport interface VendorSuggestResult extends SuggestResultBase {\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveANullableContactBaseModel}\r\n * @public\r\n */\r\nexport interface VisitModel extends NameableBaseModel, HaveAStatusModel, HaveANullableContactBaseModel {\r\n\tAddressID?: number;\r\n\tAddressKey?: string;\r\n\tAddress?: AddressModel;\r\n\tIPOrganizationID?: number;\r\n\tIPOrganizationKey?: string;\r\n\tIPOrganizationName?: string;\r\n\tIPOrganization?: IPOrganizationModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUser?: UserModel;\r\n\tCampaignID?: number;\r\n\tCampaign?: CampaignModel;\r\n\tCampaignKey?: string;\r\n\tCampaignName?: string;\r\n\tSiteDomainID?: number;\r\n\tSiteDomain?: SiteDomainModel;\r\n\tSiteDomainKey?: string;\r\n\tSiteDomainName?: string;\r\n\tVisitorID?: number;\r\n\tVisitor?: VisitorModel;\r\n\tVisitorKey?: string;\r\n\tVisitorName?: string;\r\n\tEvents?: Array<eventmodel>;\r\n\tContainsSocialProfile?: boolean;\r\n\tDelta?: number;\r\n\tDidBounce?: boolean;\r\n\tDuration?: number;\r\n\tEndedOn?: Date;\r\n\tIsFirstTrigger?: boolean;\r\n\tScore?: number;\r\n\tSource?: number;\r\n\tStartedOn?: Date;\r\n\tTotalTriggers?: number;\r\n\tBrowser?: string;\r\n\tEntryPage?: string;\r\n\tExitPage?: string;\r\n\tFlash?: string;\r\n\tIPAddress?: string;\r\n\tKeywords?: string;\r\n\tLanguage?: string;\r\n\tOperatingSystem?: string;\r\n\tPartitionKey?: string;\r\n\tReferrer?: string;\r\n\tReferringHost?: string;\r\n\tRowKey?: string;\r\n\tTime?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface VisitorModel extends NameableBaseModel {\r\n\tAddressID?: number;\r\n\tAddressKey?: string;\r\n\tAddress?: AddressModel;\r\n\tIPOrganizationID?: number;\r\n\tIPOrganizationKey?: string;\r\n\tIPOrganizationName?: string;\r\n\tIPOrganization?: IPOrganizationModel;\r\n\tUserID?: number;\r\n\tUserKey?: string;\r\n\tUser?: UserModel;\r\n\tVisits?: Array<visitmodel>;\r\n\tScore?: number;\r\n\tIPAddress?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @public\r\n */\r\nexport interface WalletModel extends NameableBaseModel {\r\n\tIsDefault?: boolean;\r\n\tUserID: number;\r\n\tUserKey?: string;\r\n\tUserUserName?: string;\r\n\tUser?: UserModel;\r\n\tAccountContactID?: number;\r\n\tAccountContactKey?: string;\r\n\tAccountContactName?: string;\r\n\tAccountContact?: AccountContactModel;\r\n\tCurrencyID?: number;\r\n\tCurrencyKey?: string;\r\n\tCurrencyName?: string;\r\n\tCurrency?: CurrencyModel;\r\n\tExpirationMonth?: number;\r\n\tExpirationYear?: number;\r\n\tAccountNumber?: string;\r\n\tBankName?: string;\r\n\tCardHolderName?: string;\r\n\tCardType?: string;\r\n\tCreditCardNumber?: string;\r\n\tRoutingNumber?: string;\r\n\tToken?: string;\r\n}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveAStatusModel}\r\n * @see {@link HaveATypeModel<typemodel>}\r\n * @public\r\n */\r\nexport interface ZoneModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<typemodel> {\r\n\tAdZones?: Array<adzonemodel>;\r\n\tHeight?: number;\r\n\tWidth?: number;\r\n}\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { HubConnection } from \"@microsoft/signalr\";\r\nimport { useEffect, useState } from \"react\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport { setupSignalRConnection } from \"src/signalR/signalR\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ninterface ISignalRSliceState {\r\n  connection: HubConnection | null;\r\n}\r\n\r\nexport const signalRSlice = createSlice({\r\n  name: \"signalR\",\r\n  initialState: {\r\n    connection: null,\r\n  } as ISignalRSliceState,\r\n  reducers: {\r\n    setSignalRConnection: (state, action: PayloadAction<hubconnection>) =&gt; {\r\n      state.connection = action.payload;\r\n    }\r\n  }\r\n});\r\n\r\nexport const { setSignalRConnection } = signalRSlice.actions;\r\nexport const useSignalR = (): HubConnection | null =&gt; {\r\n  // const connection = useSelector((state: RootState) =&gt; state.signalR.connection);\r\n  const [ connection, setConnection ] = useState<hubconnection null="" |="">(null);\r\n  const cefConfig = useCefConfig();\r\n\r\n  useEffect(() =&gt; {\r\n    if (connection === null &amp;&amp; cefConfig) {\r\n      promiser.resolve(\r\n        \"initializeSignalR\",\r\n        () =&gt; setupSignalRConnection(cefConfig)\r\n      )\r\n        .then(r =&gt; {\r\n          setConnection(r);\r\n        })\r\n        .catch(err =&gt; {\r\n          console.error(err);\r\n        });\r\n    }\r\n  }, [ connection, cefConfig ]);\r\n\r\n  return connection;\r\n};\r\n\r\nexport default signalRSlice.reducer;\r\n","/* eslint-disable sort-keys */\r\nimport { LotModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useSignalR } from \"src/_redux/slices/signalRSlice\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nexport interface IBiddingFactory {\r\n  placeBid: (lotID: number, bidAmount?: number) =&gt; Promise<lotmodel>;\r\n  getQuickBidAmount: (lotID: number) =&gt; Promise<number>;\r\n  getCurrentLotData: (lotID: number) =&gt; Promise<lotmodel>;\r\n  getIncrement: (current: number, lot: LotModel) =&gt; number;\r\n  onLotUpdate: (lotID: number, action: (lot: LotModel) =&gt; void) =&gt; void;\r\n}\r\n\r\nexport const useBiddingFactory = (): IBiddingFactory | null =&gt; {\r\n  const [ biddingFactory, setBiddingFactory ] = useState<ibiddingfactory>(null);\r\n\r\n  const cefConfig = useCefConfig();\r\n  const signalR = useSignalR();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig || !signalR || biddingFactory !== null) {\r\n      return;\r\n    }\r\n    const factory = {\r\n      placeBid: (lotID: number, bidAmount?: number): Promise<lotmodel> =&gt; {\r\n        if (!lotID || lotID === 0) {\r\n          throw new Error(\"Invalid lot ID\");\r\n        }\r\n        return cvApi.auctions\r\n          .PlaceBid({ LotID: lotID, BidAmount: bidAmount })\r\n          .then(r =&gt; r?.data);\r\n      },\r\n\r\n      // eslint-disable-next-line arrow-body-style\r\n      getQuickBidAmount: (lotID: number): Promise<number> =&gt; {\r\n        return factory.getCurrentLotData(lotID).then(r =&gt; {\r\n          const current = r?.HighestBid?.CurrentBid ?? r?.StartingPrice;\r\n          if (!current) {\r\n            return 1;\r\n          }\r\n          return current + factory.getIncrement(current, r);\r\n        });\r\n      },\r\n\r\n      // eslint-disable-next-line arrow-body-style\r\n      getCurrentLotData: (lotID: number): Promise<lotmodel> =&gt; {\r\n        return promiser.resolve(\r\n          `currentLot${lotID}`,\r\n          () =&gt; cvApi.auctions.GetHighestBidForLot(lotID).then(r =&gt; r?.data)\r\n        );\r\n      },\r\n\r\n      getIncrement: (current: number, lot: LotModel): number =&gt; {\r\n        const set = (lot.IncrementProfile?.IncrementSteps ?? lot.Auction?.IncrementProfile?.IncrementSteps)\r\n          ?.map(x =&gt; ({ start: x.Start, increment: x.Increment }))\r\n          ?? [ ...cefConfig.featureSet.auctions.increments ];\r\n        const increments = set.sort((a, b) =&gt; b.start - a.start);\r\n        for (const increment of increments) {\r\n          if (current &gt;= increment.start) {\r\n            return increment.increment;\r\n          }\r\n        }\r\n        // Calculate bid increment here\r\n        return 1;\r\n      },\r\n\r\n      onLotUpdate: (lotID: number, action: (lot: LotModel) =&gt; void): void =&gt; {\r\n        // Subscribe to SignalR event for this lot\r\n        signalR.on(`ReceiveBidForLot${lotID}`, (newLot: LotModel) =&gt; {\r\n          const promiserKey = `currentLot${lotID}`;\r\n          promiser.flush(promiserKey);\r\n          promiser.resolve(promiserKey, () =&gt; Promise.resolve(newLot));\r\n          action(newLot);\r\n        });\r\n        // Broadcast the current bid immediately so each component doesn't have to explicitly ask for it\r\n        factory.getCurrentLotData(lotID)\r\n          .then(r =&gt; action(r))\r\n          .catch(err =&gt; console.error(err));\r\n      },\r\n    };\r\n    setBiddingFactory(factory);\r\n  }, [ cefConfig, signalR ]);\r\n\r\n  return biddingFactory;\r\n};\r\n","import { CSSProperties, useEffect, useState } from \"react\";\r\nimport Countdown, { CountdownRenderProps } from \"react-countdown\";\r\nimport { faCrown } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { LotModel, ProductModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useBiddingFactory } from \"src/_shared/customHooks/useBiddingFactory\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\ninterface IProductCardLotTimerWidgetProps {\r\n  product: ProductModel;\r\n}\r\n\r\nexport const ProductCardLotTimerWidget = (props: IProductCardLotTimerWidgetProps): JSX.Element =&gt; {\r\n  const [ lot, setLot ] = useState<lotmodel>(null);\r\n  const [ winningUserID, setWinningUserID ] = useState<number>(null);\r\n  const biddingFactory = useBiddingFactory();\r\n  const currentUser = useCurrentUser();\r\n\r\n  useEffect(() =&gt; {\r\n    if (biddingFactory &amp;&amp; props.product?.LotID) {\r\n      // Subscribe to updates for this lot\r\n      biddingFactory.onLotUpdate(props.product.LotID, (newLot: LotModel) =&gt; {\r\n        setLot(newLot);\r\n        setWinningUserID(newLot.HighestBid?.UserID);\r\n      });\r\n    }\r\n  }, [ biddingFactory ]);\r\n\r\n  if (!lot) {\r\n    return null;\r\n  }\r\n\r\n  const renderer = (data: CountdownRenderProps) =&gt; {\r\n    if (data.days &gt; 0) {\r\n      return <span>{data.days}d, {data.hours}h</span>;\r\n    }\r\n    return <span>{data.hours}h {data.minutes}m {data.seconds}s</span>;\r\n  };\r\n\r\n  const getCountdown = () =&gt; {\r\n    const opensAt = lot.OpensAt &amp;&amp; new Date(lot.OpensAt);\r\n    const closesAt = lot.ClosesAt &amp;&amp; new Date(lot.ClosesAt);\r\n    const hasClosedStatus = lot.StatusKey === \"Closed\";\r\n    if (!hasClosedStatus\r\n      &amp;&amp; opensAt\r\n      &amp;&amp; opensAt &gt; new Date()) {\r\n      // Render time to opening of the lot\r\n      return <span>Opens in <strong><countdown date="{opensAt}" renderer="{renderer}"></countdown></strong></span>;\r\n    }\r\n    if (!hasClosedStatus\r\n      &amp;&amp; closesAt\r\n      &amp;&amp; closesAt &gt; new Date()) {\r\n      return <span>Closes in <strong><countdown date="{closesAt}" renderer="{renderer}"></countdown></strong></span>;\r\n    }\r\n    return <span>Lot closed.</span>;\r\n  };\r\n\r\n  const getCrownStyle = (): CSSProperties =&gt; {\r\n    if (currentUser?.ID\r\n      &amp;&amp; currentUser.ID === winningUserID) {\r\n      return {};\r\n    }\r\n    return { visibility: \"hidden\" };\r\n  };\r\n\r\n  return (\r\n    <div classname='\"bg-light\"'>\r\n      <fontawesomeicon\r\n classname='\"float-end' icon="{faCrown}\r\n" my-auto\"\r\n="" style="{getCrownStyle()}/">\r\n      <div classname='\"text-center\"'>{getCountdown()}</div>\r\n    </fontawesomeicon\r\n></div>\r\n  );\r\n};\r\n","import _ from \"lodash\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\nexport const SalesItemQuantityLine = (props: {\r\n    salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel>,\r\n    excludeTotal?: boolean\r\n  }): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  return (\r\n    <span>\r\n      { !props.excludeTotal\r\n        &amp;&amp; &lt;&gt;{`${props.salesItem.TotalQuantity} `}\r\n      }\r\n      {_.isNumber(props.salesItem.QuantityBackOrdered) &amp;&amp; props.salesItem.QuantityBackOrdered &gt; 0\r\n        &amp;&amp; <span classname='\"text-nowrap\"'>\r\n          {`(${props.salesItem.QuantityBackOrdered ?? 0} ${t(\"ui.storefront.common.Backordered\")})`}\r\n        </span>\r\n      }\r\n    </span>\r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Anchor, Button, Card, Col, Form, InputGroup, ListGroup, Row, Table } from \"react-bootstrap\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { TotalsWidget } from \"src/Cart/views/TotalsWidget\";\r\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { AppliedCartItemDiscountModel, CartTotals } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { LoginForPricing } from \"src/Cart/views/LoginForPricing\";\r\nimport { ConfirmationModal, Modal } from \"src/_shared/modals\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { MiniCartDiscountListItem } from \"src/Cart/views/MiniCartDiscountListItem\";\r\nimport { CartValidator } from \"src/Cart/views/CartValidator\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { DateTime } from \"luxon\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets\";\r\nimport { SalesItemQuantityLine } from \"src/_shared/salesGroup/SalesItemQuantityLine\";\r\n\r\ninterface IMiniCartProps {\r\n  type: \"Cart\" | \"Quote Cart\";\r\n  totals: CartTotals;\r\n}\r\n\r\nexport const MiniCart = (props: IMiniCartProps): JSX.Element =&gt; {\r\n  const { type, totals } = props;\r\n\r\n  const [ showRemoveDiscountConfirmationModal, setShowRemoveDiscountConfirmationModal ]\r\n    = useState<boolean>(false);\r\n  const [ discountToRemove, setDiscountToRemove ] = useState<appliedcartitemdiscountmodel>(null);\r\n  const [ quantityOfItemsToShow, setQuantityOfItemsToShow ] = useState<number>(4);\r\n  const [ discountCode, setDiscountCode ] = useState<string>(\"\");\r\n  const [ showDiscountResponseModal, setShowDiscountResponseModal ] = useState<boolean>(false);\r\n  const [ discountResponseModalMessage, setDiscountResponseModalMessage ] = useState<string>(null);\r\n  const [ hasMissingPricing, setHasMissingPricing ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n  const cartToUse = useCart(type);\r\n  const cartFactory = useCartFactory();\r\n\r\n  // TODO: remove after typescript recognizes this exists\r\n  // @ts-ignore\r\n  if (!cefConfig?.featureSet?.carts?.miniCart?.enabled) {\r\n    if (cefConfig.debug) {\r\n      console.log(\"Attempted to render MiniCart when it is not enabled\");\r\n    }\r\n    return null;\r\n  }\r\n\r\n  if (!cartToUse?.SalesItems?.length) {\r\n    return (\r\n      <card classname='\"mb-3\"'>\r\n        <card.header classname='\"p-4\"'>\r\n          <h4>{t(\"ui.storefront.checkout.cartEmpty\")}</h4>\r\n        </card.header>\r\n      </card>\r\n    );\r\n  }\r\n\r\n  const removeCartItemDiscount = (discount: AppliedCartItemDiscountModel): void =&gt; {\r\n    setRunning();\r\n    cartFactory.removeDiscount(type, discount)\r\n      .then(() =&gt; {\r\n        setShowRemoveDiscountConfirmationModal(false);\r\n        setDiscountToRemove(null);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setShowRemoveDiscountConfirmationModal(false);\r\n        setDiscountToRemove(null);\r\n        setShowDiscountResponseModal(true);\r\n        setDiscountResponseModalMessage(t(\"ui.storefront.cart.RemoveDiscount.UnableToRemoveDiscount\"));\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const getAddCartDiscountErrMessage = (messages: string[]): string =&gt; {\r\n    if (messages?.length &gt; 1) {\r\n      const cleanMsgs: string[] = messages.map(m =&gt; m.replace(\"ERROR! \", \"\"));\r\n      for (let i = 0; i &lt; cleanMsgs.length; i++) {\r\n        const curMsg = cleanMsgs[i];\r\n        const isDate = Boolean(Date.parse(curMsg));\r\n        if (isDate) {\r\n          cleanMsgs[i] = DateTime.fromISO(curMsg).toFormat(\"ff\");\r\n        }\r\n      }\r\n      return cleanMsgs.join(\" \");\r\n    } else if (messages?.length === 1) {\r\n      return messages[0].replace(\"ERROR! \", \"\");\r\n    }\r\n    return t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\");\r\n  };\r\n\r\n  const addCartDiscount = () =&gt; {\r\n    if (!discountCode) {\r\n      return;\r\n    }\r\n    setRunning();\r\n    cartFactory.addDiscount(ServiceStrings.carts.types.cart, discountCode)\r\n      .then(res =&gt; {\r\n        if (!res?.ActionSucceeded) {\r\n          const properMsg = getAddCartDiscountErrMessage(res?.Messages);\r\n          setDiscountResponseModalMessage(properMsg);\r\n          setShowDiscountResponseModal(true);\r\n          throw t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\");\r\n        }\r\n        setDiscountCode(\"\");\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const orderDiscounts = cartToUse?.Discounts ? cartToUse.Discounts.filter(d =&gt; d.DiscountTypeID === 0) : [];\r\n  const shippingDiscounts = cartToUse?.Discounts\r\n    ? cartToUse.Discounts.filter(d =&gt; d.DiscountTypeID === 2)\r\n    : [];\r\n\r\n  const getFormattedPriceAndCheckMissingPricing = (val: number): string =&gt; {\r\n    if (!val) {\r\n      if (!hasMissingPricing) {\r\n        setHasMissingPricing(true);\r\n      }\r\n      return \"TBD\";\r\n    }\r\n    return currencyFormatter.format(val);\r\n  };\r\n\r\n  return (\r\n    <card classname='\"mb-3\"'>\r\n      <confirmationmodal\r\n =="" oncancel="{()" show="{showRemoveDiscountConfirmationModal}\r\n"> {\r\n          setShowRemoveDiscountConfirmationModal(false);\r\n          setDiscountToRemove(null);\r\n        }}\r\n        onConfirm={() =&gt; removeCartItemDiscount(discountToRemove)}\r\n        size=\"md\"\r\n        confirmBtnLabel={t(\"ui.storefront.common.Yes\")}\r\n        cancelBtnLabel={t(\"ui.storefront.common.No\")}&gt;\r\n        {viewState.running &amp;&amp; <loadingwidget overlay="{true}">}\r\n        {t(\"ui.storefront.discounts.AreYouSureYouWantToRemoveThisDiscount\")}\r\n      \r\n      <modal\r\n =="" oncancel="{()" show="{showDiscountResponseModal}\r\n"> {\r\n          setShowDiscountResponseModal(false);\r\n          setDiscountResponseModalMessage(null);\r\n        }}\r\n        size=\"md\"\r\n        modalBodyClasses=\"p-0\"&gt;\r\n        <div classname='\"p-3\"'>\r\n          {discountResponseModalMessage ?? t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\")}\r\n        </div>\r\n        <div classname='\"modal-footer\"'>\r\n          <button\r\n =="" onclick="{()" variant='\"primary\"\r\n'> {\r\n              setShowDiscountResponseModal(false);\r\n              setDiscountResponseModalMessage(null);\r\n            }}&gt;\r\n            {t(\"ui.storefront.common.OK\")}\r\n          \r\n        </button\r\n></div>\r\n      \r\n      <card.header>\r\n        <row>\r\n          \r\n            <h4 :="" =="=" ?="" \"order\"}summary`}="" \"quote\"="" classname='\"my-0\"' id="{`lbl${type" servicestrings.carts.types.quote="">\r\n              {t(\r\n                type === ServiceStrings.carts.types.cart\r\n                  ? \"ui.storefront.common.OrderSummary\"\r\n                  : \"ui.storefront.common.QuoteSummary\"\r\n              )}\r\n            </h4>\r\n          \r\n          \r\n            <button\r\n :="" ?="" as='\"a\"\r\n' cefconfig?.routes.cart.root\r\n="" cefconfig?.routes.quotecart.root)}\r\n="" classname='\"px-1' href="{corsLink(cefConfig," id='\"btnEditCart\"' py-0\"\r\n="" servicestrings.carts.types.cart\r\n="" type="==" variant='\"link\"\r\n'>\r\n              <i aria-hidden="{true}" classname='\"fal' fa-pencil-alt\"="">\r\n               \r\n              <span>\r\n                {t(\r\n                  type === ServiceStrings.carts.types.cart\r\n                    ? \"ui.storefront.checkout.checkoutPanels.editCart\"\r\n                    : \"ui.storefront.submitQuote.EditQuoteCart\"\r\n                )}\r\n              </span>\r\n            \r\n          \r\n        </i></button\r\n></row><i aria-hidden="{true}" classname='\"fal' fa-pencil-alt\"="">\r\n      </i></card.header><i aria-hidden="{true}" classname='\"fal' fa-pencil-alt\"="">\r\n      <card.body bg-medium="" classname='\"py-1' text-dark\"="">\r\n        <span classname='\"card-subtitle' fw-bold\"="">\r\n          {t(\"ui.storefront.product.catalog.results.quickView.Items\")}\r\n        </span>\r\n      </card.body>\r\n      <listgroup>\r\n        {cartToUse.SalesItems.slice(0, quantityOfItemsToShow).map(\r\n          (salesItem: SalesItemBaseModel<appliedcartitemdiscountmodel>, itemIndex: number) =&gt; {\r\n            const {\r\n              ID,\r\n              ProductName,\r\n              UnitSoldPrice,\r\n              UnitCorePrice,\r\n              Quantity,\r\n              QuantityBackOrdered,\r\n              QuantityPreSold,\r\n              ExtendedPrice,\r\n              Discounts,\r\n              ProductPrimaryImage\r\n            } = salesItem;\r\n            const totalQuantity = (Quantity ?? 0) + (QuantityBackOrdered ?? 0) + (QuantityPreSold ?? 0);\r\n            const discountTotal = Discounts\r\n              ? Discounts.reduce((curVal, accu) =&gt; curVal + accu.DiscountTotal, 0)\r\n              : 0;\r\n            return (\r\n              <listgroup.item classname='\"p-0\"' key="{ID}">\r\n                <row classname='\"gx-0\"'>\r\n                  \r\n                    <div classname='\"card-img\"' id="{`miniCartProductImageThumbnail${itemIndex}`}">\r\n                      <anchor\r\n \"primary\",="" \"productdetail\",="" classname='\"product-image' d-flex="" false,="" href="{corsLink(cefConfig," id="{`cartProductImageThumbnail${itemIndex}`}\r\n" justify-content-center\"="" null,="" salesitem.productseourl\r\n="" seourl:="" {\r\n="" })}\r\n="">\r\n                        <imagewithfallback\r\n 80,\r\n="" \"both\",\r\n="" \"pad\"\r\n="" alt="{ProductName}\r\n" camelcase\r\n="" classname='\"img-fluid\"\r\n' eslint-disable-next-line="" imageresizerparamsbody="{{\r\n" maxheight:="" maxwidth:="" mode:="" scale:="" src="{ProductPrimaryImage}\r\n" }}\r\n="">\r\n                      \r\n                    </imagewithfallback\r\n></anchor\r\n></div>\r\n                  \r\n                  \r\n                    <span classname='\"cart-item-label\"\r\n' data-sid="{`miniCartProductName_${itemIndex}`}\r\n" id="{`miniCartProductName_${itemIndex}`}">\r\n                      <productcardnamewidget\r\n productname="{ProductName}\r\n" productseourl="{salesItem.ProductSeoUrl}\r\n">\r\n                    </productcardnamewidget\r\n></span>\r\n                    {(!cefConfig?.loginForPricing?.enabled || currentUser)\r\n                      &amp;&amp; <row classname='\"gx-0\"'>\r\n                        \r\n                          <div\r\n classname='\"text-start' fw-bold\"\r\n="" id="{`MiniCartProductPriceText_${itemIndex}`}">\r\n                            {t(\"ui.storefront.common.Price\")}\r\n                          \r\n                          <div\r\n !="=" ${\r\n="" &&="" cart-price="" classname="{`text-start" d-block="" form-control-static="" id="{`cartProductPrice_${itemIndex}`}\r\n" price="" py-0="" text-muted="" unitcoreprice\r\n="" unitsoldprice="" unitsoldprice\r\n=""> 0\r\n                              || discountTotal &amp;&amp; discountTotal &lt; 0\r\n                                ? \"strike-through text-disabled\"\r\n                                : \"\"\r\n                            }`}&gt;\r\n                            {getFormattedPriceAndCheckMissingPricing(UnitCorePrice)}\r\n                          \r\n                          {UnitSoldPrice &amp;&amp; UnitSoldPrice &gt; 0 &amp;&amp; UnitSoldPrice !== UnitCorePrice\r\n                            &amp;&amp; <div\r\n ${\r\n="" 0="" :="" <="" ?="" \"\"\r\n="" \"strike-through="" cart-price="" classname="{`d-block" discounttotal="" form-control-static="" id='\"cartProductSalePrice_{{$itemIndex}}\"' price="" py-0="" text-danger="" text-disabled\"="" text-start="" }`}\r\n="">\r\n                              {getFormattedPriceAndCheckMissingPricing(UnitSoldPrice)}\r\n                            \r\n                          }\r\n                          {discountTotal &lt; 0\r\n                            &amp;&amp; <div\r\n cart-price="" classname='\"d-block' form-control-static="" price="" py-0\"="" text-left="" text-success="">\r\n                              {// eslint-disable-next-line @typescript-eslint/no-extra-parens, max-len\r\n                                getFormattedPriceAndCheckMissingPricing((UnitSoldPrice || UnitCorePrice || 0) + (discountTotal / totalQuantity))}\r\n                            \r\n                          }\r\n                        \r\n                        \r\n                          <div\r\n classname='\"text-center' fw-bold\"\r\n="" id="{`MiniCartProductQuantityText_${itemIndex}`}">\r\n                            {t(\"ui.storefront.common.Quantity\")}\r\n                          \r\n                          <div classname='\"text-center\"'>\r\n                            <salesitemquantityline salesitem="{salesItem}">\r\n                          </salesitemquantityline></div>\r\n                          {QuantityPreSold &gt; 0\r\n                            &amp;&amp; \r\n                              \r\n                                \r\n                                  \r\n                                  \r\n                                \r\n                              \r\n                            <table classname='\"small' mt-2\"=""><tbody><tr><td>{t(\"ui.storefront.common.PreSales\")}</td><td classname='\"text-muted\"'>{QuantityPreSold}</td></tr></tbody></table>\r\n                          }\r\n                        \r\n                        \r\n                          <div classname='\"text-end' fw-bold\"="">\r\n                            {t(\"ui.storefront.checkout.views.checkoutLabelItemTotal.avd\")}\r\n                          </div>\r\n                          <div\r\n !="=" ${\r\n="" &&="" classname="{`d-block" data-sid="{`cartProductSubtotalCore_${itemIndex}`}\r\n" font-weight-normal="" form-control-static="" id="{`cartProductSubtotalCore_${itemIndex}`}\r\n" py-0="" text-end="" text-muted="" unitcoreprice="" unitsoldprice=""> 0\r\n                              || discountTotal &lt; 0\r\n                                ? \"strike-through text-disabled\"\r\n                                : \"\"\r\n                            }`}&gt;\r\n                            {getFormattedPriceAndCheckMissingPricing(UnitCorePrice * totalQuantity)}\r\n                          \r\n                          {UnitCorePrice !== UnitSoldPrice &amp;&amp; UnitSoldPrice &gt; 0\r\n                            &amp;&amp; <div\r\n ${\r\n="" 0="" :="" <="" ?="" \"\"\r\n="" \"strike-through="" classname="{`d-block" discounttotal="" font-weight-normal="" form-control-static="" id="{`cartProductSubtotal_${itemIndex}`}" py-0="" text-danger="" text-disabled\"="" text-end="" }`}\r\n="">\r\n                              {getFormattedPriceAndCheckMissingPricing(ExtendedPrice)}\r\n                            \r\n                          }\r\n                          {discountTotal &lt; 0\r\n                            &amp;&amp; <div\r\n classname='\"d-block' font-weight-normal="" form-control-static="" id="{`cartProductSubtotalWithDiscounts${itemIndex}`}" py-0\"\r\n="" text-end="" text-success="">\r\n                              {getFormattedPriceAndCheckMissingPricing(ExtendedPrice + discountTotal)}\r\n                            \r\n                          }\r\n                        \r\n                      </div\r\n></div\r\n></div\r\n></div\r\n></div\r\n></div\r\n></div\r\n></div\r\n></row>\r\n                    }\r\n                    {cefConfig?.loginForPricing?.enabled &amp;&amp; !currentUser\r\n                      &amp;&amp; <loginforpricing>\r\n                    }\r\n                  \r\n                </loginforpricing></row>\r\n                {cefConfig.featureSet.discounts.enabled\r\n                  &amp;&amp; Discounts\r\n                  &amp;&amp; Discounts.length\r\n                  &amp;&amp; (cefConfig.loginForPricing.enabled || currentUser)\r\n                    &amp;&amp; <row classname='\"gx-0\"'>\r\n                      \r\n                        \r\n                          \r\n                            {Discounts.map((discount, discountIndex) =&gt; {\r\n                              const {\r\n                                SlaveName,\r\n                                DiscountIsAutoApplied,\r\n                                DiscountValueType,\r\n                                DiscountValue\r\n                              } = discount;\r\n                              return (\r\n                                \r\n                                  \r\n                                  \r\n                                \r\n                              );\r\n                            })}\r\n                          \r\n                        <table classname='\"Table-borderless' mb-2="" mx-3\"="" w-auto=""><tbody><tr key="{discount.ID}"><td classname='\"text-right' w-auto\"="">\r\n                                    <span\r\n 25\"="" `${itemindex}.${discountindex}`\r\n="" id="{`cartProductDiscountDescription_${\r\n" ng-bind='\"limitToEllipses:' title="{SlaveName}\r\n" }`}\r\n="">\r\n                                      {SlaveName.length &gt; 25\r\n                                        ? `${SlaveName.substr(0, 25)}...`\r\n                                        : SlaveName}\r\n                                    \r\n                                  </span\r\n></td><td classname='\"w-auto\"'>\r\n                                    {DiscountIsAutoApplied\r\n                                      ? <span>\r\n                                        <span\r\n classname='\"text-success\"' id="{`cartProductDiscountValue${itemIndex}.${discountIndex}`}\r\n">\r\n                                          {DiscountValueType === 1\r\n                                            ? currencyFormatter.format(DiscountValue)\r\n                                            : `${DiscountValue} %`}\r\n                                        </span\r\n></span>\r\n                                       \r\n                                        <span classname='\"text-success\"'>\r\n                                          {t(\"ui.storefront.common.Off\")}\r\n                                        </span>\r\n                                      \r\n                                      : <button\r\n =="" aria-label='{t(\"ui.storefront.cart.removeDiscountFromItem\")}\r\n' classname='\"top' id="{`btnRemoveDiscountFromItem${itemIndex}.${discountIndex}`}\r\n" onclick="{()" p-0="" text-nowrap\"\r\n="" title='{t(\"ui.storefront.cart.removeDiscountFromItem\")}\r\n' variant='\"link\"\r\n'> {\r\n                                          setShowRemoveDiscountConfirmationModal(true);\r\n                                          setDiscountToRemove(discount);\r\n                                        }}&gt;\r\n                                        <span\r\n classname='\"text-success\"' id="{`cartProductDiscountValue${itemIndex}.${discountIndex}`}\r\n">\r\n                                          {DiscountValueType === 1\r\n                                            ? currencyFormatter.format(DiscountValue)\r\n                                            : `${DiscountValue} %`}\r\n                                        \r\n                                       \r\n                                        <span classname='\"text-success\"'>\r\n                                          {t(\"ui.storefront.common.Off\")}\r\n                                        </span>\r\n                                       \r\n                                        <i classname='\"fal' fa-lg="" fa-trash="" text-danger\"="">\r\n                                        <span classname='\"sr-only\"'>\r\n                                          {t(\"ui.storefront.cart.removeDiscountFromItem\")}\r\n                                        </span>\r\n                                      \r\n                                    }\r\n                                  </i></span\r\n></button\r\n></td></tr></tbody></table>\r\n                      \r\n                    </row>\r\n                }\r\n              </listgroup.item>\r\n            );\r\n          }\r\n        )}\r\n        {cartToUse.SalesItems.length &gt; 4 &amp;&amp; quantityOfItemsToShow &lt; cartToUse.SalesItems.length\r\n          &amp;&amp; <listgroup.item classname='\"p-1\"'>\r\n            <button\r\n =="" aria-label='{t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\r\n' classname='\"w-100\"\r\n' onclick="{()" title='{t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\r\n' variant='\"secondary\"\r\n'> setQuantityOfItemsToShow(quantityOfItemsToShow + 4)}&gt;\r\n              {t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\r\n            \r\n          </button\r\n></listgroup.item>\r\n        }\r\n        {cartToUse.SalesItems.length &gt; 4 &amp;&amp; quantityOfItemsToShow &gt; 4\r\n          &amp;&amp; <listgroup.item classname='\"p-1\"' ng-if='\"cvmcCtrl.showShowLessButton\"'>\r\n            <button\r\n =="" aria-label='{t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\r\n' classname='\"w-100\"\r\n' onclick="{()" title='{t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\r\n' variant='\"secondary\"\r\n'> setQuantityOfItemsToShow(Math.max(4, quantityOfItemsToShow - 4))}&gt;\r\n              {t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\r\n            \r\n          </button\r\n></listgroup.item>\r\n        }\r\n      </appliedcartitemdiscountmodel></listgroup>\r\n      {cefConfig?.featureSet.discounts.enabled\r\n        &amp;&amp; (Boolean(orderDiscounts?.length) || Boolean(shippingDiscounts?.length))\r\n          &amp;&amp; <card.body bg-medium="" classname='\"py-1' text-dark\"="">\r\n            <span classname='\"card-subtitle' fw-bold\"="">\r\n              {t(\"ui.storefront.checkout.appliedDiscounts\")}\r\n            </span>\r\n          </card.body>\r\n      }\r\n      {cefConfig?.featureSet.discounts.enabled\r\n        &amp;&amp; (Boolean(orderDiscounts.length) || Boolean(shippingDiscounts.length))\r\n        &amp;&amp; (!cefConfig.loginForPricing.enabled || Boolean(currentUser))\r\n          &amp;&amp; <listgroup classname='\"list-group-flush\"' id='\"miniCartDiscounts\"'>\r\n            {orderDiscounts.map((orderDiscount, index) =&gt; <minicartdiscountlistitem\r\n =="" discount="{orderDiscount}\r\n" index="{index}\r\n" key="{orderDiscount.ID}\r\n" onremovediscountclicked="{discount" type='\"Order\"\r\n'> {\r\n                setShowRemoveDiscountConfirmationModal(true);\r\n                setDiscountToRemove(discount);\r\n              }}\r\n            /&gt;)}\r\n            {shippingDiscounts.map((shippingDiscount, index) =&gt; <minicartdiscountlistitem\r\n =="" discount="{shippingDiscount}\r\n" index="{index}\r\n" key="{shippingDiscount.ID}\r\n" onremovediscountclicked="{discount" type='\"Shipping\"\r\n'> {\r\n                setShowRemoveDiscountConfirmationModal(true);\r\n                setDiscountToRemove(discount);\r\n              }}\r\n            /&gt;)}\r\n          </minicartdiscountlistitem\r\n></minicartdiscountlistitem\r\n></listgroup>\r\n      }\r\n      <card.body bg-medium="" classname='\"py-1' text-dark\"="">\r\n        <span classname='\"card-subtitle' fw-bold\"="" id='\"MiniCartTotalsText\"'>\r\n          {t(\"ui.storefront.cart.widgets.totalsWidget.Totals\")}\r\n        </span>\r\n      </card.body>\r\n      {totals\r\n        &amp;&amp; <card.body classname='\"p-0\"'>\r\n          <totalswidget\r\n hasmissingpricing="{hasMissingPricing}\r\n" mb-0\"\r\n="" padalign="{true}\r\n" tableclasses='\"w-100' totals="{totals}\r\n" type="{type}\r\n">\r\n        </totalswidget\r\n></card.body>\r\n      }\r\n      {/* TODO: add || cartRes.validationResponse */}\r\n      {/*   Ng-if=\"cefConfig.featureSet.discounts.enabled &amp;&amp; type !== 'Quote Cart'\r\n      || cvCartService.validationResponse\" */}\r\n      {cefConfig?.featureSet?.discounts?.enabled &amp;&amp; type === ServiceStrings.carts.types.cart\r\n        &amp;&amp; <card.footer classname='\"p-3\"'>\r\n          <row>\r\n            {cefConfig.featureSet.discounts.enabled\r\n              &amp;&amp; \r\n                <h4 id='\"MiniCartDoYouHaveAnyDiscountsText\"'>\r\n                  {t(\"ui.storefront.checkout.discounts.DoYouHaveAnyDiscounts\")}\r\n                </h4>\r\n                <inputgroup classname='\"mb-1\"'>\r\n                  <form.control\r\n =="" id='\"txtCoupon\"\r\n' onkeydown="{e" placeholder='{t(\"ui.storefront.cart.enterCouponCode\")}\r\n' required="{true}\r\n" type='\"text\"\r\n'> {\r\n                      if (e.key === \"Enter\") {\r\n                        addCartDiscount();\r\n                        e.preventDefault();\r\n                      }\r\n                    }}\r\n                    onChange={e =&gt; setDiscountCode(e.target.value)}\r\n                    value={discountCode}\r\n                  /&gt;\r\n                  <div classname='\"input-group-append' input-group-btn\"="">\r\n                    <button\r\n =="" aria-label='{t(\"ui.storefront.cart.Apply\")}\r\n' disabled="{!discountCode}\r\n" id='\"btnApplyDiscountToCart\"\r\n' onclick="{()" title='{t(\"ui.storefront.cart.Apply\")}\r\n' variant='\"secondary\"\r\n'> addCartDiscount()}&gt;\r\n                      {t(\"ui.storefront.cart.Apply\")}\r\n                    \r\n                  </button\r\n></div>\r\n                </form.control\r\n></inputgroup>\r\n              \r\n            }\r\n            \r\n              <cartvalidator type="{type}">\r\n            \r\n          </cartvalidator></row>\r\n        </card.footer>\r\n      }\r\n    </i></modal\r\n></loadingwidget></confirmationmodal\r\n></card><i aria-hidden="{true}" classname='\"fal' fa-pencil-alt\"="">\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Alert } from \"react-bootstrap\";\r\nimport { CEFActionError } from \"src/_api/cvApi.shared\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { IHTTPResponse, ViewStateErrorArg } from \"src/_shared/customHooks/_customHooksTypes\";\r\ninterface IErrorViewProps {\r\n  error: IHTTPResponse | ViewStateErrorArg | CEFActionError | Array<viewstateerrorarg>;\r\n}\r\n\r\nexport const ErrorView = (props: IErrorViewProps): JSX.Element | null =&gt; {\r\n  const { error } = props;\r\n  const cefConfig = useCefConfig();\r\n  if (!error) {\r\n    return null;\r\n  }\r\n  if (cefConfig &amp;&amp; cefConfig.debug) {\r\n    console.error(error);\r\n  }\r\n  let errorText: string | null = null;\r\n  if (typeof error === \"string\") {\r\n    errorText = error;\r\n  } else if (Array.isArray(error)) {\r\n    errorText = error.join(\"\\n \");\r\n  } else if ((error as IHTTPResponse).ResponseStatus) {\r\n    errorText = (error as IHTTPResponse).ResponseStatus.Message;\r\n  }\r\n  // TODO: handle error is Promise\r\n  return (\r\n    <alert variant='\"danger\"'>\r\n      <span>{errorText}</span>\r\n    </alert>\r\n  );\r\n};\r\n","import { Fragment, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Nav, Row, Tab } from \"react-bootstrap\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { CategoryModel } from \"src/_api/cvApi.shared\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\n\r\nexport const Categories = (): JSX.Element =&gt; {\r\n  const [ categories, setCategories ] = useState<array<categorymodel>&gt;([]);\r\n  const [ lastHovered, setLastHovered ] = useState<string null="" |="">(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n\r\n  useEffect(() =&gt; {\r\n    getCategories();\r\n  }, []);\r\n\r\n  function getCategories(): void {\r\n    setRunning();\r\n    cvApi.categories\r\n      .GetCategoriesTwoLevelsFast()\r\n      .then(result =&gt; {\r\n        setCategories(result.data);\r\n        result.data.length &amp;&amp; setLastHovered(result.data.filter(x =&gt; x.HasChildren &amp;&amp; !x.ParentID)[0].Name);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to get categories\");\r\n      });\r\n  }\r\n\r\n  if (!categories || !categories.length) {\r\n    return <loadingwidget>;\r\n  }\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <div \"="" classname='\"mega-menu-tabset' d-flex="" flex-column="" flex-lg-row="" id='\"mega-menu-tabset\"' w-100="">\r\n        <nav border-right\"="" classname='\"nav-tabs' flex-column="" nav-stacked="" pt-1="">\r\n          <nav.item )}\r\n="" \"\"="" \"catalog\",\r\n="" as='\"a\"\r\n' category:="" cefconfig,\r\n="" cefconfig?.routes.catalog.root,\r\n="" classname='\"lg-small' data-sid='\"browseCategories\"\r\n' false,\r\n="" href="{corsLink(\r\n" null,\r\n="" p-lg-0\"="" py-1="" {="" }\r\n="">\r\n            <span classname='\"px-3' py-2="" text-uppercase\"="">\r\n              {t(\"ui.storefront.menu.menuRenderProductVerticalTab.BrowseCategories\")}\r\n            </span>\r\n          </nav.item>\r\n          <hr classname='\"m-2\"'/>\r\n          {categories !== null &amp;&amp; Array.isArray(categories)\r\n            ? categories.map((category, index): React.ReactNode =&gt; {\r\n              const { Name, CustomKey } = category;\r\n              if (category.ParentName) {\r\n                return null;\r\n              }\r\n              return (\r\n                <fragment key="{category.ID}">\r\n                  <nav.item\r\n ${lasthovered="==" :="" =="" ?="" \"\"}`}\r\n="" \"active\"="" as='\"a\"\r\n' classname="{`nav-link" d-lg-none="" data-sid="{`menuItem_${index}`}\r\n" href='\"#\"\r\n' name="" onmouseover="{()" p-0="" py-2=""> setLastHovered(Name)}\r\n                    onTouchEndCapture={() =&gt; setLastHovered(Name)}&gt;\r\n                    <span\r\n ${\r\n="" :="" ?="" \"\"\r\n="" \"active\"="" classname="{`cef-nav-item" dropdown-item="" lasthovered="==" name="" text-capitalize="" }`}="">\r\n                      {Name}\r\n                    \r\n                  \r\n                  <nav.item\r\n ${lasthovered="==" )}\r\n="" :="" =="" ?="" \"\"}`}\r\n="" \"active\"="" \"catalog\",\r\n="" \"primary\",\r\n="" `${name}|${customkey}`="" as='\"a\"\r\n' category:="" cefconfig,\r\n="" cefconfig?.routes.catalog.root,\r\n="" classname="{`nav-link" d-lg-block="" d-none="" data-sid="{`menuItem_${index}`}\r\n" false,\r\n="" href="{corsLink(\r\n" name="" onmouseover="{()" p-0="" {="" }\r\n=""> setLastHovered(Name)}\r\n                    onTouchEndCapture={() =&gt; setLastHovered(Name)}&gt;\r\n                    <span\r\n ${\r\n="" :="" ?="" \"\"\r\n="" \"active\"="" classname="{`cef-nav-item" dropdown-item="" lasthovered="==" name="" text-capitalize="" }`}="">\r\n                      {Name}\r\n                    \r\n                  \r\n                </span\r\n></nav.item\r\n></span\r\n></nav.item\r\n></fragment>\r\n              );\r\n            })\r\n            : null}\r\n        </nav>\r\n        <tab.content 0,="" 1,="" \"100%\"="" classname='\"p-4\"' flexbasis:="" flexgrow:="" maxwidth:="" style="{{" }}="">\r\n          {categories !== null\r\n            &amp;&amp; Array.isArray(categories)\r\n            &amp;&amp; categories.map((category): JSX.Element =&gt; {\r\n              const { Name, CustomKey } = category;\r\n              return (\r\n                <tab.pane\r\n =="=" active="{lastHovered" aria-labelledby="{`v-${Name}-tab`}" id="{`v-${Name}`}\r\n" key="{category.ID}\r\n" name}\r\n="">\r\n                  <row>\r\n                    \r\n                      <div classname='\"mb-3\"'>\r\n                        <span classname='\"dropdown-secondary-header' h2="" mb-2="" text-capitalize\"="">\r\n                          {Name}\r\n                        </span>\r\n                        <button\r\n )}="" \"catalog\",\r\n="" \"primary\",\r\n="" `${name}|${customkey}`\r\n="" as='\"a\"\r\n' category:="" cefconfig,\r\n="" cefconfig?.routes.catalog.root,\r\n="" classname='\"mb-2' false,\r\n="" href="{corsLink(\r\n" pb-0="" text-primary\"\r\n="" variant='\"link\"\r\n' {\r\n="" }\r\n="">\r\n                          {t(\"ui.storefront.menu.menuRenderVerticalTabPane.seeAll\")}\r\n                          <i classname='\"fal' fa-angle-double-right="" ms-1\"="">\r\n                        \r\n                      </i></button\r\n></div><i classname='\"fal' fa-angle-double-right="" ms-1\"="">\r\n                    \r\n                    {category.Children\r\n                      ? category.Children.map((child: CategoryModel): JSX.Element =&gt; <col\r\n classname='\"mb-2' dropdown-tertiary-container\"="" key="{child.ID}\r\n" lg="{3}\r\n" md="{6}\r\n" xs="{12}\r\n">\r\n                        <a )\r\n="" :="" ?="" \"catalog\",\r\n="" \"primary\",\r\n="" `${child.name}|${child.customkey}`\r\n="" category:="" cefconfig,\r\n="" cefconfig?.routes.catalog.root,\r\n="" child.serializableattributes?.['dotnetnukepage']?.value)\r\n="" child.serializableattributes?.['dotnetnukepage']?.value\r\n="" corslink(\r\n="" corslink(cefconfig,="" false,\r\n="" href="{\r\n" {\r\n="" }="" }\r\n="">\r\n                          <imagewithfallback\r\n 250,="" \"100%\",\r\n="" \"auto\",\r\n="" \"block\",\r\n="" \"both\"="" \"pad\",="" display:="" height:="" imageresizerparamsbody="{{" kind='\"categories\"\r\n' margin:="" maxwidth:="" mode:="" scale:="" src="{child.PrimaryImageFileName}\r\n" style="{{\r\n" width:="" }}="" }}\r\n="">\r\n                        </imagewithfallback\r\n></a>\r\n                        <h4 classname='\"dropdown-tertiary-header' my-2="" text-center="" text-lg-start\"="">\r\n                          <a\r\n )}="" \"catalog\",\r\n="" \"primary\",\r\n="" `${child.name}|${child.customkey}`\r\n="" category:="" cefconfig,\r\n="" cefconfig?.routes.catalog.root,\r\n="" classname='\"bold\"\r\n' false,\r\n="" href="{corsLink(\r\n" {\r\n="" }\r\n="">\r\n                            <span classname='\"text-capitalize\"'>{child.Name}</span>\r\n                          \r\n                        </a\r\n></h4>\r\n                      )\r\n                      : \r\n                        <p classname='\"h5' mb-2\"="">\r\n                          {t(\"ui.storefront.menu.menuRenderVerticalTabPane.noAdditionalCategories\")}\r\n                        </p>\r\n                      \r\n                    }\r\n                    <col\r\n classname='\"mb-2' dropdown-tertiary-container="" lg="{3}\r\n" mh-175px="" show-all-block\"="" sm="{6}\r\n" xs="{12}\r\n">\r\n                        <a )}\r\n="" \"catalog\",\r\n="" \"primary\",\r\n="" `${category.name}|${category.customkey}`\r\n="" category:="" cefconfig,\r\n="" cefconfig?.routes.catalog.root,\r\n="" classname='\"text-decoration-none\"' false,\r\n="" href="{corsLink(\r\n" {\r\n="" }\r\n="">\r\n                          See All <i classname='\"fa' fa-angle-double-right="" p-0\"="">\r\n                        </i></a><i classname='\"fa' fa-angle-double-right="" p-0\"="">\r\n                      \r\n                  </i></col\r\n></col\r\n></i></row><i classname='\"fal' fa-angle-double-right="" ms-1\"=""><i classname='\"fa' fa-angle-double-right="" p-0\"="">\r\n                \r\n              );\r\n            })}\r\n        </i></i></tab.pane\r\n></tab.content><i classname='\"fal' fa-angle-double-right="" ms-1\"=""><i classname='\"fa' fa-angle-double-right="" p-0\"="">\r\n      </i></i></div><i classname='\"fal' fa-angle-double-right="" ms-1\"=""><i classname='\"fa' fa-angle-double-right="" p-0\"="">\r\n      <errorview error="{viewState.errorMessage}">\r\n    \r\n  );\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Button, Dropdown } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { IDashboardSettings } from \"src/_shared/CefConfigTypes\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\r\n\r\nexport const MiniMenu = (): JSX.Element =&gt; {\r\n  const currentUser = useCurrentUser();\r\n  const cefConfig = useCefConfig();\r\n\r\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\r\n  const [ miniMenuLinks, setMiniMenuLinks ] = useState<array<idashboardsettings>&gt;([]);\r\n\r\n  const { t } = useTranslation();\r\n  const authFactory = useAuthFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (\r\n      cefConfig\r\n      &amp;&amp; cefConfig.dashboard\r\n      &amp;&amp; cefConfig.featureSet.login.enabled\r\n      &amp;&amp; currentUser\r\n    ) {\r\n      populateMiniMenuLinks();\r\n    }\r\n  }, [ cefConfig, currentUser ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (currentUser &amp;&amp; showLoginModal) {\r\n      setShowLoginModal(false);\r\n    }\r\n  }, [ currentUser ]);\r\n\r\n  async function populateMiniMenuLinks() {\r\n    const enabledLinks: Array<idashboardsettings> = cefConfig.dashboard\r\n      .reduce((curVal, newVal) =&gt; {\r\n        const combined = [ ...curVal, newVal ];\r\n        if (newVal.children) {\r\n          combined.push(...newVal.children.filter(Boolean));\r\n        }\r\n        return combined;\r\n      }, [])\r\n      .filter((x: IDashboardSettings) =&gt; x.enabled &amp;&amp; x.href)\r\n      .sort(\r\n        (linkOne: IDashboardSettings, linkTwo: IDashboardSettings) =&gt; linkOne.order - linkTwo.order\r\n      );\r\n    const linksToSet: Array<idashboardsettings> = await getUsableLinks(enabledLinks);\r\n    setMiniMenuLinks(linksToSet);\r\n  }\r\n\r\n  async function getUsableLinks(links: Array<idashboardsettings>) {\r\n    const linksToSet: Array<idashboardsettings> = [];\r\n    for (let i = 0; i &lt; links.length; i++) {\r\n      const link = links[i];\r\n      const roleRequired = link.reqAnyRoles &amp;&amp; link.reqAnyRoles.length;\r\n      const permissionRequired = link.reqAnyPerms &amp;&amp; link.reqAnyPerms.length;\r\n      if (!roleRequired &amp;&amp; !permissionRequired) {\r\n        linksToSet.push(link);\r\n        continue;\r\n      }\r\n      if (roleRequired) {\r\n        // eslint-disable-next-line no-await-in-loop\r\n        const roleResults = await Promise.all(link.reqAnyRoles.map(role =&gt; authFactory.hasRole(role)));\r\n        if (roleResults.includes(true)) {\r\n          linksToSet.push(link);\r\n          continue;\r\n        }\r\n      }\r\n      if (permissionRequired) {\r\n        // eslint-disable-next-line no-await-in-loop\r\n        const permissionResults = await Promise.all(link.reqAnyPerms.map(perm =&gt; authFactory.hasPermission(perm)));\r\n        if (permissionResults.includes(true)) {\r\n          linksToSet.push(link);\r\n        }\r\n      }\r\n    }\r\n    return linksToSet;\r\n  }\r\n\r\n  const logout = (e: React.MouseEvent<htmlanchorelement>) =&gt; {\r\n    authFactory.logout();\r\n    e.preventDefault();\r\n  };\r\n\r\n  if (cefConfig &amp;&amp; cefConfig.featureSet &amp;&amp; !cefConfig.featureSet.login.enabled) {\r\n    return null;\r\n  }\r\n\r\n  if (!currentUser?.Contact) {\r\n    return (\r\n      &lt;&gt;\r\n        <div classname='\"d-flex\"'>\r\n          <button\r\n =="" b-header-text="" classname='\"pointer' data-sid='\"btnMiniMenuLogin\"\r\n' onclick="{()" text-decoration-none\"\r\n="" text-gfs-blue="" text-gfs-hover-blue="" variant='\"link\"\r\n'> setShowLoginModal(true)}&gt;\r\n            {t(\"ui.storefront.user.login.SignIn\")}\r\n          \r\n          <span classname='\"px-2\"'>|</span>\r\n          <button\r\n =="" b-header-text="" classname='\"pointer' data-sid='\"btnMiniMenuRegister\"\r\n' onclick="{()" text-decoration-none\"\r\n="" text-gfs-blue="" text-gfs-hover-blue="" variant='\"link\"\r\n'> window.location.href = \"/Authentication/Registration\"}&gt;\r\n            {t(\"ui.storefront.common.Register\")}\r\n          \r\n        </button\r\n></button\r\n></div>\r\n        <loginmodal\r\n =="" onconfirm="{()" show="{showLoginModal}\r\n"> {\r\n            setShowLoginModal(false);\r\n          }}\r\n          onCancel={() =&gt; setShowLoginModal(false)}\r\n        /&gt;\r\n      \r\n    );\r\n  }\r\n\r\n  return (\r\n    <dropdown>\r\n      <dropdown.toggle\r\n aria-haspopup='\"true\"\r\n' aria-label='\"user-dropdown\"\r\n' classname='\"text-capitalize' data-reference='\"parent\"' data-sid='\"btnMiniMenuUserName\"\r\n' id='\"dropdownUser\"\r\n' text-decoration-none\"\r\n="" variant='\"link\"\r\n'>\r\n        <span b-header-text\"="" classname='\"control-label' data-sid='\"btnMiniMenuUserName\"' text-gfs-blue="">Welcome Back,\r\n          {` ${currentUser?.DisplayName ?? currentUser?.UserName}`} \r\n        </span>\r\n      \r\n      <dropdown.menu\r\n \"unset\"="" align='\"end\"\r\n' aria-labelledby='\"dropdownUser\"' classname='\"ar-3\"\r\n' left:="" style="{{" }}\r\n="">\r\n        {miniMenuLinks.length\r\n          ? miniMenuLinks.map(item =&gt;\r\n            // eslint-disable-next-line implicit-arrow-linebreak\r\n            <dropdown.item as='\"a\"\r\n' classname='\"px-2' data-sid="{`btnMiniMenu_${item.name}`}" href="{item.href}\r\n" key="{item.titleKey}\r\n" ps-3\"\r\n="" text-decoration-none="" text-gfs-blue="">\r\n              {t(item.titleKey)}\r\n            </dropdown.item>)\r\n          : <loadingwidget size='\"lg\"'>\r\n        }\r\n        <div classname='\"separator\"'>\r\n          <hr classname='\"m-0\"'/>\r\n        </div>\r\n        <div classname='\"log-item' dropdown-item="" pb-2="" pe-2\"="" ps-3="" pt-1="">\r\n          <a\r\n align-items-center="" classname='\"d-flex' href='\"/\"\r\n' justify-content-between="" onclick="{logout}" text-decoration-none\"\r\n="" text-gfs-blue="">\r\n            <span classname='\"text\"' data-sid='\"btnMiniMenu_Logout\"'>{t(\"ui.storefront.common.Logout\")}</span>\r\n            <i classname='\"icon-logout\"'></i>\r\n          \r\n        </a\r\n></div>\r\n      \r\n    </loadingwidget></dropdown.menu\r\n></dropdown.toggle\r\n></dropdown>\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Button, Card, useAccordionButton } from \"react-bootstrap\";\r\nimport \"src/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton.module.scss\";\r\nimport { ICatalogFilterHeaderButtonProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\r\n\r\nexport const CatalogFilterHeaderButton = (props: ICatalogFilterHeaderButtonProps): JSX.Element =&gt; {\r\n  const { icon, expandedFilterName, setExpandedFilterName, title } = props;\r\n  const onHeaderClicked = useAccordionButton(title);\r\n\r\n  return (\r\n    <card.title classname='\"catalog-filter-header' mb-0\"="">\r\n      <button\r\n 700="" =="" \"#1d3467\",="" \"1.3rem\",="" align-items-center="" catalogfilterheaderbutton`}\r\n="" classname="{`d-flex" color:="" fontsize:="" fontweight:="" justify-content-between\r\n="" onclick="{e" p-0="" size='\"lg\"\r\n' style="{{" text-decoration-none="" variant='\"none\"\r\n' w-100="" }}\r\n=""> {\r\n          onHeaderClicked(e);\r\n          setExpandedFilterName(expandedFilterName === title ? null : title);\r\n        }}&gt;\r\n        <span>\r\n          {icon &amp;&amp; <i classname="{`${icon}" fa-fw="" fa-sm`}="" me-2="">}\r\n\r\n          <span classname='\"small\"'>{title}</span>\r\n        </i></span><i classname="{`${icon}" fa-fw="" fa-sm`}="" me-2="">\r\n        <i\r\n ${\r\n="" :="" ?="" \"fa-minus\"="" \"fa-plus\"\r\n="" classname="{`fal" expandedfiltername="==" fa-fw="" float-right="" text-body="" title="" toggle-icon="" }`}\r\n="">\r\n      \r\n    </i\r\n></i></button\r\n></card.title><i classname="{`${icon}" fa-fw="" fa-sm`}="" me-2="">\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Accordion, Button, Card, Col, ListGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { CatalogFilterHeaderButton } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton\";\r\n\r\nexport interface ICatalogFilterListItem {\r\n  label: string;\r\n  formatLabel?: (label: string) =&gt; string;\r\n  callbackLabel?: string;\r\n  count?: number;\r\n  children?: ICatalogFilterListItem[];\r\n}\r\n\r\ninterface ICatalogFilterProps {\r\n  expandedFilterName: string;\r\n  setExpandedFilterName: (name: string) =&gt; void;\r\n  title: string;\r\n  icon?: string;\r\n  customBodyComponent?: JSX.Element;\r\n  list?: ICatalogFilterListItem[];\r\n  onListItemClicked?: (listItem: ICatalogFilterListItem) =&gt; void;\r\n  onListItemExpandBtnClicked?: (listItem: ICatalogFilterListItem) =&gt; void;\r\n  onCollapseAllClicked?: () =&gt; void;\r\n  onExpandAllClicked?: () =&gt; void;\r\n  isChildExpanded?: (listItem: ICatalogFilterListItem) =&gt; boolean;\r\n}\r\n\r\nexport const CatalogFilter = (props: ICatalogFilterProps): JSX.Element =&gt; {\r\n  const {\r\n    expandedFilterName,\r\n    setExpandedFilterName,\r\n    title,\r\n    icon,\r\n    customBodyComponent,\r\n    list,\r\n    onListItemClicked,\r\n    onListItemExpandBtnClicked,\r\n    onCollapseAllClicked,\r\n    onExpandAllClicked,\r\n    isChildExpanded\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <col\r\n md="{12}" sm="{6}\r\n" xs="{12}\r\n">\r\n      <card bg-transparent="" border-0\"="" classname='\"applied-filters' mb-1="">\r\n        <card.header bg-transparent="" border-0\"="" classname='\"p-2' text-body="">\r\n          <catalogfilterheaderbutton\r\n expandedfiltername="{expandedFilterName}\r\n" icon="{icon}\r\n" setexpandedfiltername="{setExpandedFilterName}\r\n" title="{title}\r\n">\r\n        </catalogfilterheaderbutton\r\n></card.header>\r\n        {/* TODO: kabob case event key */}\r\n        <accordion.collapse\r\n :="" =="=" ?="" \"\"}\r\n="" \"show\"="" classname="{expandedFilterName" eventkey="{`${title.toLowerCase()}-collapse`}" title="">\r\n          <card.body\r\n \"50vh\",="" \"scroll\"="" bg-transparent="" border-0\"\r\n="" classname='\"p-3' maxheight:="" overflowy:="" style="{{" }}="">\r\n            {customBodyComponent ?? (\r\n              <listgroup>\r\n                {list.map(listItem =&gt; {\r\n                  const { label, formatLabel, count, children } = listItem;\r\n                  return (\r\n                    <accordion.item\r\n border-0\"="" classname='\"bg-transparent' eventkey="{`${title.toLowerCase()}-collapse`}\r\n" key="{label}\r\n" p-0="">\r\n                      <div>\r\n                        <button\r\n =="" classname='\"p-0' form-check-label="" onclick="{_e" text-capitalize="" text-decoration-none="" text-start\"\r\n="" variant='\"link\"\r\n'> onListItemClicked(listItem)}&gt;\r\n                          <div>\r\n                            <span classname='\"text\"'>{formatLabel ? formatLabel(label) : label}</span>{\" \"}\r\n                            {typeof count === \"number\" &amp;&amp; <span classname='\"count\"'>({count})</span>}\r\n                          </div>\r\n                        \r\n                        {children &amp;&amp; (\r\n                          <button\r\n =="" classname='\"p-0\"\r\n' onclick="{()" variant='\"link\"\r\n'> onListItemExpandBtnClicked(listItem)}&gt;\r\n                            <i :="" ?="" \"fal="" classname="{isChildExpanded(listItem)" fa-minus="" fa-plus="" fa-sm\"="" fa-sm\"}="">\r\n                          \r\n                        )}\r\n                      </i></button\r\n></button\r\n></div><i :="" ?="" \"fal="" classname="{isChildExpanded(listItem)" fa-minus="" fa-plus="" fa-sm\"="" fa-sm\"}="">\r\n                      {children &amp;&amp; (\r\n                        <listgroup\r\n ${ischildexpanded(listitem)="" :="" ?="" \"\"}`}="" \"flex-start\"="" \"show\"="" alignitems:="" classname="{`collapse" collapse-list="" list-unstyled="" style="{{" }}\r\n="">\r\n                          {children.map(child =&gt; (\r\n                            <accordion.item\r\n classname='\"\"' eventkey="{child.label}\r\n" key="{child.label}\r\n">\r\n                              <button\r\n =="" btn="" btn-link-light\"\r\n="" classname='\"form-check-label' onclick="{e" text-capitalize="" text-decoration-none="" variant='\"link\"\r\n'> {\r\n                                  onListItemClicked(child);\r\n                                }}&gt;\r\n                                <span classname='\"text\"'>\r\n                                  {child.formatLabel ? child.formatLabel(child.label) : child.label}\r\n                                </span>\r\n                                {typeof child.count === \"number\" &amp;&amp; <span classname='\"count\"'> ({child.count})</span>}\r\n                              \r\n                            \r\n                          ))}\r\n                        </button\r\n></accordion.item\r\n></listgroup\r\n></i></accordion.item\r\n></listgroup><i :="" ?="" \"fal="" classname="{isChildExpanded(listItem)" fa-minus="" fa-plus="" fa-sm\"="" fa-sm\"}="">\r\n                      )}\r\n                    \r\n                  );\r\n                })}\r\n                {Boolean(onCollapseAllClicked) &amp;&amp; Boolean(onExpandAllClicked) &amp;&amp; (\r\n                  <listgroup.item border-0="" classname='\"bg-transparent' d-flex="" filter-item="" list-group-item="" m-0\"="" mt-3="" p-0="">\r\n                    <col\r\n classname='\"d-flex' sm="{3}\r\n" w-100\"="">\r\n                      <button\r\n =="" onclick="{_e" size='\"sm\"\r\n' variant='\"primary\"\r\n'> onCollapseAllClicked()}&gt;\r\n                        {t(\"ui.storefront.searchCatalog.filters.CollapseAll\")}\r\n                      \r\n                      <button\r\n =="" classname='\"ms-1\"\r\n' onclick="{_e" size='\"sm\"\r\n' variant='\"light\"\r\n'> onExpandAllClicked()}&gt;\r\n                        {t(\"ui.storefront.searchCatalog.filters.ExpandAll\")}\r\n                      \r\n                    \r\n                  </button\r\n></button\r\n></col\r\n></listgroup.item>\r\n                )}\r\n              \r\n            )}\r\n          \r\n        \r\n      </i></card.body\r\n></accordion.collapse\r\n></card><i :="" ?="" \"fal="" classname="{isChildExpanded(listItem)" fa-minus="" fa-plus="" fa-sm\"="" fa-sm\"}="">\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { IAttributesFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\r\nimport { CatalogFilter, ICatalogFilterListItem } from \"./CatalogFilter\";\r\n\r\nexport const AttributesFilter = (props: IAttributesFilterProps): JSX.Element =&gt; {\r\n  const { expandedFilterName, setExpandedFilterName, allAttributes, productSearchViewModel, onAttributeClicked } =\r\n    props;\r\n\r\n  const [expandedAttributes, setExpandedAttributes] = useState<string[]>([]);\r\n\r\n  const toggleExpansion = (listItem: ICatalogFilterListItem) =&gt; {\r\n    if (expandedAttributes.includes(listItem.label)) {\r\n      setExpandedAttributes(expandedAttributes.filter(a =&gt; a !== listItem.label));\r\n    } else {\r\n      setExpandedAttributes([...expandedAttributes, listItem.label]);\r\n    }\r\n  };\r\n\r\n  if (!productSearchViewModel?.Attributes) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <catalogfilter\r\n =="" expandedfiltername="{expandedFilterName}\r\n" list="{productSearchViewModel.Attributes.map(attr" setexpandedfiltername="{setExpandedFilterName}\r\n" title='\"Attributes\"\r\n'> {\r\n        const { Key, Value } = attr;\r\n        return {\r\n          label: Key,\r\n          children: Value\r\n            ? Value.map(c =&gt; ({\r\n                label: `${Key}|${c.Key}`,\r\n                formatLabel: (label: string) =&gt; label.split(\"|\")[1],\r\n                callbackLabel: Key,\r\n                count: c.Value\r\n              }))\r\n            : null\r\n        };\r\n      })}\r\n      onListItemClicked={listItem =&gt; {\r\n        const isChild = Boolean(listItem.callbackLabel);\r\n        if (isChild) {\r\n          // Of (parentKey (e.g. IsDigitalDownload), childKey (e.g. No))\r\n          const [parentKey, childKey] = listItem.label.split(\"|\");\r\n          onAttributeClicked(parentKey, childKey);\r\n          return;\r\n        }\r\n        toggleExpansion(listItem);\r\n      }}\r\n      onListItemExpandBtnClicked={toggleExpansion}\r\n      isChildExpanded={childListItem =&gt; expandedAttributes.includes(childListItem.label)}\r\n      onCollapseAllClicked={() =&gt; setExpandedAttributes([])}\r\n      onExpandAllClicked={() =&gt; setExpandedAttributes(allAttributes.map((a: GeneralAttributeModel) =&gt; a.CustomKey))}\r\n    /&gt;\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { AggregateTree } from \"src/_api/cvApi._DtoClasses\";\r\nimport { CatalogFilter } from \"./CatalogFilter\";\r\nimport { ICategoriesFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport const CategoriesFilter = (props: ICategoriesFilterProps): JSX.Element =&gt; {\r\n  const {\r\n    expandedFilterName,\r\n    setExpandedFilterName,\r\n    categoriesTree,\r\n    // TODO?: use allCategories,\r\n    onCategoryClicked\r\n  } = props;\r\n\r\n  const [expandedCategories, setExpandedCategories] = useState<string[]>([]);\r\n\r\n  const cefConfig = useCefConfig();\r\n\r\n  if (!categoriesTree?.Children) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <catalogfilter\r\n =="" expandedfiltername="{expandedFilterName}\r\n" oncollapseallclicked="{()" setexpandedfiltername="{setExpandedFilterName}\r\n" title='{\"Categories\"}\r\n'> setExpandedCategories([])}\r\n      onExpandAllClicked={() =&gt; setExpandedCategories(categoriesTree.Children.map((c: AggregateTree) =&gt; c.Key))}\r\n      list={categoriesTree.Children.filter(x =&gt; Boolean(x.Key)).map(category =&gt; {\r\n        const { Children, Key, DocCount } = category;\r\n        return {\r\n          label: Key,\r\n          formatLabel: (label: string) =&gt; label.split(\"|\")[0],\r\n          count: cefConfig?.catalog.filters.category.topLevelCategoryProductCounts.enabled ? DocCount : null,\r\n          children: Children\r\n            ? Children.map(c =&gt; ({\r\n                label: c.Key,\r\n                formatLabel: (label: string) =&gt; label.split(\"|\")[0],\r\n                count: cefConfig?.catalog.filters.category.subLevelCategoryProductCounts.enabled ? c.DocCount : null\r\n              }))\r\n            : null\r\n        };\r\n      })}\r\n      onListItemClicked={listItem =&gt; {\r\n        onCategoryClicked(listItem.label);\r\n      }}\r\n      onListItemExpandBtnClicked={listItem =&gt; {\r\n        if (expandedCategories.includes(listItem.label)) {\r\n          setExpandedCategories(expandedCategories.filter(c =&gt; c !== listItem.label));\r\n        } else {\r\n          setExpandedCategories([...expandedCategories, listItem.label]);\r\n        }\r\n      }}\r\n      isChildExpanded={childListItem =&gt; expandedCategories.includes(childListItem.label)}\r\n    /&gt;\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Fragment, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Accordion, Button, ListGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ICompareFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\r\nimport { CatalogFilter } from \"./CatalogFilter\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\n\r\nexport const CompareFilter = (props: ICompareFilterProps): JSX.Element =&gt; {\r\n  const compareCart = useCart(ServiceStrings.carts.types.compare);\r\n  const compareCartItems = compareCart?.SalesItems;\r\n  const { expandedFilterName, setExpandedFilterName } = props;\r\n\r\n  const [showClearCompareCartModal, setShowClearCompareCartModal] = useState(false);\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const history = useHistory();\r\n  const cartFactory = useCartFactory();\r\n\r\n  function removeAllItemsFromCompareCart(): void {\r\n    setRunning();\r\n    cartFactory\r\n      .clearCompare()\r\n      .then(() =&gt; {\r\n        setShowClearCompareCartModal(false);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to remove all items from compare cart\");\r\n      });\r\n  }\r\n\r\n  function removeItemFromCompareCart(productID: number): void {\r\n    setRunning();\r\n    cartFactory\r\n      .removeFromCompare(productID)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  return (\r\n    <fragment>\r\n      <confirmationmodal\r\n =="" cart\"\r\n="" compare="" oncancel="{()" onconfirm="{removeAllItemsFromCompareCart}\r\n" show="{showClearCompareCartModal}\r\n" title='\"Clear'> setShowClearCompareCartModal(false)}&gt;\r\n        <span classname='\"d-block' pb-1\"="">{t(\"ui.storefront.cart.AreYouSureYouWantToClearTheCart\")}</span>\r\n      \r\n      <catalogfilter\r\n (\r\n="" <loadingwidget="" ?="" custombodycomponent="{\r\n" expandedfiltername="{expandedFilterName}\r\n" setexpandedfiltername="{setExpandedFilterName}\r\n" title='\"Compare\"\r\n' viewstate.running="">\r\n          ) : (\r\n            &lt;&gt;\r\n              <listgroup\r\n as='\"ul\"\r\n' classname='\"collapse-filter' list-unstyled="" mb-0\"="">\r\n                {compareCartItems &amp;&amp; compareCartItems.length\r\n                  ? compareCartItems.map((salesItem): JSX.Element =&gt; {\r\n                      const { ProductID, ProductName, ProductSeoUrl } = salesItem;\r\n                      return (\r\n                        <accordion.item\r\n align-items-start="" bg-light="" border-0\"="" classname='\"d-flex' eventkey='\"compare-collapse\"\r\n' key="{ProductID}\r\n">\r\n                          <button\r\n =="" classname='\"' m-0="" me-1\"\r\n="" onclick="{()" p-0="" variant='\"light\"\r\n'> removeItemFromCompareCart(ProductID)}&gt;\r\n                            <i classname='\"fal' fa-times="" small\"="" text-danger="">\r\n                          \r\n                          <a\r\n \"productdetail\")}\r\n="" classname='\"product-name\"' href="{corsLink(cefConfig," productseourl,="">\r\n                            <span>{ProductName}</span>\r\n                          \r\n                        \r\n                      );\r\n                    })\r\n                  : t(\"ui.storefront.product.widgets.compare.noItemsHaveBeenSelected\")}\r\n              \r\n              <listgroup\r\n as='\"ul\"\r\n' bg-transparent\"="" classname='\"collapse-filter' list-unstyled="" mb-0="">\r\n                <accordion.item\r\n bg-transparent\"="" border-0="" classname='\"filter-item' d-flex="" eventkey='\"compare-collapse\"\r\n' mt-3="">\r\n                  <button\r\n 0)="" 1}\r\n="" <="" =="" ??="" classname='\"ms-1\"\r\n' disabled="{(compareCartItems?.length" onclick="{()" size='\"sm\"\r\n' variant='\"primary\"\r\n'> setShowClearCompareCartModal(true)}&gt;\r\n                    {t(\"ui.storefront.common.Clear\")}\r\n                  \r\n                  <button\r\n 0)="" 2}\r\n="" <="" =="" ??="" classname='\"ms-1\"\r\n' disabled="{(compareCartItems?.length" onclick="{()" size='\"sm\"\r\n' variant='\"light\"\r\n'> history.push(\"/catalog/compare\")}&gt;\r\n                    {t(\"ui.storefront.common.Compare\")}\r\n                  \r\n                \r\n              \r\n            \r\n          )\r\n        }\r\n      /&gt;\r\n    </button\r\n></button\r\n></accordion.item\r\n></listgroup\r\n></a\r\n></i></button\r\n></accordion.item\r\n></listgroup\r\n></catalogfilter\r\n></confirmationmodal\r\n></fragment><i classname='\"fal' fa-times="" small\"="" text-danger="">\r\n  );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"suggestionBtn\":\"SearchTermFilter_suggestionBtn__2rYr5\"};","import { useRef } from \"react\";\r\nimport { useDetectOutsideClick } from \"src/_shared/customHooks/useDetectOutsideClick\";\r\n\r\ninterface IOutsideClickDetectorProps {\r\n  onOutsideClicked: () =&gt; void;\r\n  children?: JSX.Element | JSX.Element[];\r\n}\r\n\r\nexport const OutsideClickDetector = (props: IOutsideClickDetectorProps): JSX.Element =&gt; {\r\n  const wrapperRef = useRef(null);\r\n  useDetectOutsideClick(wrapperRef, props.onOutsideClicked);\r\n  // NOTE: className only for finding in DOM\r\n  return <div classname='\"outside-click-detector\"' ref="{wrapperRef}">{props.children}</div>;\r\n};\r\n","import { MutableRefObject, useEffect } from \"react\";\r\n\r\nexport const useDetectOutsideClick = (ref: MutableRefObject<any>, onOutSideClicked: () =&gt; void): void =&gt; {\r\n  useEffect(() =&gt; {\r\n    function handleClickOutside(event: MouseEvent) {\r\n      if (ref.current &amp;&amp; !ref.current.contains(event.target)) {\r\n        onOutSideClicked();\r\n      }\r\n    }\r\n    document.addEventListener(\"mousedown\", handleClickOutside);\r\n    return () =&gt; {\r\n      // Unbind the event listener on clean up\r\n      document.removeEventListener(\"mousedown\", handleClickOutside);\r\n    };\r\n  }, [ ref ]);\r\n};\r\n","import { useEffect } from \"react\";\r\n\r\nexport const useDebounceWithCallback = <t>(value: T, callback: Function, delay?: number): void =&gt; {\r\n  useEffect(() =&gt; {\r\n    // eslint-disable-next-line no-undef\r\n    let timer: NodeJS.Timeout = null;\r\n    if (value !== undefined &amp;&amp; callback) {\r\n      timer = setTimeout(() =&gt; callback(), delay ?? 500);\r\n    }\r\n\r\n    return () =&gt; {\r\n      if (timer) {\r\n        clearTimeout(timer);\r\n      }\r\n    };\r\n  }, [ value, delay ]);\r\n};\r\n","import { Card, ListGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IAppliedFilterBlockProps {\r\n  titleKey: string;\r\n  titleId?: string;\r\n  content: React.ReactNode;\r\n}\r\n\r\nexport const AppliedFilterBlock = (props: IAppliedFilterBlockProps): JSX.Element =&gt; {\r\n  const { titleKey, titleId, content } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <listgroup\r\n \"50vh\",="" \"auto\"="" as='\"ul\"\r\n' classname='\"bg-light\"\r\n' maxheight:="" overflowy:="" style="{{" variant='\"flush\"\r\n' }}="">\r\n      <listgroup.item as='\"li\"' classname='\"p-2\"'>\r\n        <card.title as='\"h5\"\r\n' classname='\"mb-1\"\r\n' id="{titleId}">\r\n          {t(titleKey)}\r\n        </card.title>\r\n        {content}\r\n      </listgroup.item>\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Fragment, useState } from \"react\";\r\nimport { Button, Card, Col, ListGroup, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n  AttributesFilter,\r\n  BrandsFilter,\r\n  CategoriesFilter,\r\n  CompareFilter,\r\n  PriceRangesFilter,\r\n  ProductRatingsFilter,\r\n  SearchTermFilter\r\n} from \"src/Catalog/controls/CatalogFilterComponents\";\r\nimport { Dictionary, ProductSearchViewModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport {\r\n  AggregateRatingRange,\r\n  AppliedCartItemDiscountModel,\r\n  CategoryModel,\r\n  GeneralAttributeModel,\r\n  ProductCatalogSearchForm\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { AppliedFilterBlock } from \"src/Catalog/controls/CatalogFilterComponents/AppliedFilterBlock\";\r\n\r\n\r\ninterface ICatalogFiltersProps {\r\n  allCategories: CategoryModel[];\r\n  allAttributes: GeneralAttributeModel[];\r\n  // Redux\r\n  compareCartItems?: Array<salesitembasemodel<appliedcartitemdiscountmodel>&gt;;\r\n  productSearchViewModel: ProductSearchViewModel;\r\n  setProductSearchViewModel: React.Dispatch<react.setstateaction<productsearchviewmodel>&gt;;\r\n  multiFilterMode: \"multi-any\" | \"multi-all\";\r\n}\r\n\r\nexport const CatalogFilters = (props: ICatalogFiltersProps): JSX.Element =&gt; {\r\n  const { allCategories, allAttributes, productSearchViewModel, setProductSearchViewModel, multiFilterMode } = props;\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n  const [expandedFilterName, setExpandedFilterName] = useState(\r\n    productSearchViewModel?.Form?.Query ? \"Search Term\" : null\r\n  );\r\n\r\n  const onClickRemoveParam = (\r\n    param: keyof ProductCatalogSearchForm | Array<keyof productcatalogsearchform="">,\r\n    paramKey?: string\r\n  ): void =&gt; {\r\n    let form: ProductCatalogSearchForm = null;\r\n    try {\r\n      form = JSON.parse(JSON.stringify(productSearchViewModel?.Form));\r\n    } catch (err) {\r\n      return;\r\n    }\r\n    if (param instanceof Array) {\r\n      for (let i = 0; i &lt; param.length; i++) {\r\n        const p = param[i];\r\n        if (form[p]) {\r\n          delete form[p];\r\n        }\r\n      }\r\n    } else if (form[param]) {\r\n      delete form[param];\r\n    }\r\n    form.Page = 1;\r\n    setProductSearchViewModel({ ...productSearchViewModel, Form: form });\r\n  };\r\n\r\n  const alterSearchViewModelForm = (newForm: Partial<productcatalogsearchform>) =&gt; {\r\n    if (!newForm || !productSearchViewModel || !setProductSearchViewModel) {\r\n      return;\r\n    }\r\n    setProductSearchViewModel({\r\n      ...productSearchViewModel,\r\n      Form: {\r\n        ...productSearchViewModel?.Form,\r\n        Page: 1,\r\n        ...newForm\r\n      }\r\n    });\r\n  };\r\n\r\n  const alterAttribute = (changeType: \"push\" | \"pop\", attributeName: string, value: string): void =&gt; {\r\n    const formKey = multiFilterMode === \"multi-any\" ? \"AttributesAny\" : \"AttributesAll\";\r\n    const newAttributes: Dictionary<array<string>&gt; = { ...productSearchViewModel.Form[formKey] };\r\n    const attributeAlreadyIncluded =\r\n      productSearchViewModel?.Form[formKey] &amp;&amp;\r\n      productSearchViewModel.Form[formKey][attributeName] &amp;&amp;\r\n      productSearchViewModel.Form[formKey][attributeName].indexOf(value) &gt; -1;\r\n    if ((attributeAlreadyIncluded &amp;&amp; changeType === \"push\") || (!attributeAlreadyIncluded &amp;&amp; changeType === \"pop\")) {\r\n      return;\r\n    }\r\n    if (changeType === \"push\") {\r\n      if (!newAttributes[attributeName]) {\r\n        newAttributes[attributeName] = [];\r\n      }\r\n      newAttributes[attributeName].push(value);\r\n    } else {\r\n      newAttributes[attributeName] = newAttributes[attributeName].filter(x =&gt; x !== value);\r\n      if (newAttributes[attributeName].length &lt; 1) {\r\n        delete newAttributes[attributeName];\r\n      }\r\n      if (!Object.keys(newAttributes).length) {\r\n        onClickRemoveParam(\"AttributesAll\");\r\n        return;\r\n      }\r\n    }\r\n    alterSearchViewModelForm({\r\n      [formKey]: newAttributes\r\n    });\r\n  };\r\n\r\n  const filterProps = {\r\n    setExpandedFilterName,\r\n    expandedFilterName,\r\n    productSearchViewModel,\r\n    setProductSearchViewModel\r\n  };\r\n\r\n  const filterParamsExist =\r\n    Boolean(productSearchViewModel?.Form?.Category) ||\r\n    Boolean(productSearchViewModel?.Form?.Query) ||\r\n    Boolean(productSearchViewModel?.Form?.RatingRanges) ||\r\n    Boolean(productSearchViewModel?.Form?.PricingRanges) ||\r\n    Boolean(productSearchViewModel?.Form?.BrandName) ||\r\n    Boolean(productSearchViewModel?.Form?.AttributesAny) ||\r\n    Boolean(productSearchViewModel?.Form?.AttributesAll);\r\n  // Categories, Attributes, Compare\r\n  return (\r\n    &lt;&gt;\r\n      <col\r\n classname='\"bg-light\"' md="{12}\r\n" sm="{6}\r\n" xs="{12}\r\n">\r\n        <card bg-transparent\"="" border-0="" classname='\"applied-filters' mb-3="">\r\n          <card.header bg-text="" bg-transparent\"="" border-0="" classname='\"p-2' text-body="">\r\n            <i classname='\"fal' fa-filter="" fa-fw="" me-2\"="">\r\n            <span classname='\"filter-title\"'>{t(\"ui.storefront.searchCatalog.filers.YourAppliedFilters\")}</span>\r\n          </i></card.header><i classname='\"fal' fa-filter="" fa-fw="" me-2\"="">\r\n          {filterParamsExist ? null : (\r\n            <listgroup\r\n \"50vh\",="" \"auto\"="" as='\"ul\"\r\n' classname='\"bg-light\"\r\n' maxheight:="" overflowy:="" style="{{" variant='\"flush\"\r\n' }}="">\r\n              <listgroup.item\r\n as='\"li\"\r\n' classname='\"p-2\"'>\r\n                {t(\"ui.storefront.searchCatalog.filters.None\")}\r\n              \r\n            \r\n          )}\r\n          {productSearchViewModel?.Form?.Category &amp;&amp; (\r\n            <appliedfilterblock\r\n <button\r\n="" =="" classname='\"p-0' content="{\r\n" data-sid='\"AppliedFiltersCategoryType\"\r\n' onclick="{e" text-start\"\r\n="" titleid='\"AppliedFiltersCategoriesText\"\r\n' titlekey='\"ui.storefront.common.Category.Plural\"\r\n' variant='\"text\"\r\n' w-100=""> onClickRemoveParam(\"Category\")}&gt;\r\n                  <i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n                  {productSearchViewModel?.Form?.Category?.split(\"|\")[0]}\r\n                \r\n              }\r\n            /&gt;\r\n          )}\r\n          {productSearchViewModel?.Form?.Query &amp;&amp; (\r\n            <appliedfilterblock\r\n <button\r\n="" =="" classname='\"p-0' content="{\r\n" onclick="{()" text-start\"\r\n="" titleid='\"AppliedFiltersSearchTermText\"\r\n' titlekey='\"ui.storefront.searchCatalog.filters.SearchTerm\"\r\n' variant='\"\"\r\n' w-100=""> onClickRemoveParam(\"Query\")}&gt;\r\n                  <i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n                  {productSearchViewModel?.Form?.Query}\r\n                \r\n              }\r\n            /&gt;\r\n          )}\r\n          {productSearchViewModel?.Form?.RatingRanges?.length &amp;&amp; (\r\n            <appliedfilterblock\r\n content="{productSearchViewModel.Form.RatingRanges.map((range:" index:="" number)="" string,="" titleid='\"AppliedFiltersRatingRangesText\"\r\n' titlekey='\"ui.storefront.product.reviews.ratingSummary.productRating.Plural\"\r\n'> (\r\n                <fragment key="{range}">\r\n                  <button\r\n =="" classname='\"p-0' me-2="" onclick="{()" text-start\"\r\n="" variant='\"none\"\r\n'> onClickRemoveParam(\"RatingRanges\")}&gt;\r\n                    <i classname='\"fal' fa-times="" m-0\"="" text-danger="">\r\n                  \r\n                  <i classname='\"fal' fa-star="" me-1\"="">\r\n                  {range}\r\n                </i></i></button\r\n></fragment><i classname='\"fal' fa-times="" m-0\"="" text-danger=""><i classname='\"fal' fa-star="" me-1\"="">\r\n              ))}\r\n            /&gt;\r\n          )}\r\n          {productSearchViewModel?.Form?.PricingRanges &amp;&amp; (\r\n            <appliedfilterblock\r\n <button\r\n="" =="" \"left\"="" bg-white="" classname='\"p-0' content="{\r\n" onclick="{()" style="{{" text-start\"\r\n="" textalign:="" titleid='\"AppliedFiltersPricingRangesText\"\r\n' titlekey='\"ui.storefront.searchCatalog.filters.PriceRange.Plural\"\r\n' variant='\"\"\r\n' w-100="" }}\r\n=""> onClickRemoveParam(\"PricingRanges\")}&gt;\r\n                  <i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n                  {productSearchViewModel?.Form?.PricingRanges}\r\n                \r\n              }\r\n            /&gt;\r\n          )}\r\n          {productSearchViewModel?.Form?.BrandName &amp;&amp; (\r\n            <appliedfilterblock\r\n <button\r\n="" =="" \"left\"="" bg-white="" classname='\"p-0' content="{\r\n" onclick="{()" style="{{" text-start\"\r\n="" textalign:="" titleid='\"AppliedFiltersBrandNameText\"\r\n' titlekey='\"ui.storefront.searchCatalog.filters.BrandName\"\r\n' variant='\"\"\r\n' w-100="" }}\r\n=""> onClickRemoveParam(\"BrandName\")}&gt;\r\n                  <i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n                  {productSearchViewModel?.Form?.BrandName}\r\n                \r\n              }\r\n            /&gt;\r\n          )}\r\n          {(productSearchViewModel?.Form?.AttributesAll || productSearchViewModel?.Form?.AttributesAny) &amp;&amp; (\r\n            <appliedfilterblock\r\n content="{Object.keys(productSearchViewModel?.Form?.AttributesAll).map((key):" jsx.element="" titleid='\"AppliedFiltersAttributesText\"\r\n' titlekey='\"ui.storefront.common.Attribute.Plural\"\r\n'> {\r\n                const values: string[] = productSearchViewModel.Form.AttributesAll[key];\r\n                return (\r\n                  <div key="{key}">\r\n                    <span bg-white\"="" classname='\"pt-2'>{key}</span>\r\n                    {values.map((val: string) =&gt; (\r\n                      <listgroup.item\r\n border-0\"\r\n="" classname='\"p-0' key="{`${key}_${val}`}">\r\n                        <button\r\n =="" bg-white="" border-0="" classname='\"p-0' onclick="{e" text-start\"\r\n="" variant='\"\"\r\n' w-100=""> alterAttribute(\"pop\", key, val)}&gt;\r\n                          <small>\r\n                            <i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n                          </i></small><i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n                          {val}\r\n                        \r\n                      \r\n                    ))}\r\n                  </i></button\r\n></listgroup.item\r\n></div><i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n                );\r\n              })}\r\n            /&gt;\r\n          )}\r\n          <card.footer classname='\"p-1\"'>\r\n            <button\r\n =="" btn-link\"\r\n="" classname='\"w-100' disabled="{!filterParamsExist}\r\n" id='\"btnClearAllFilters\"\r\n' onclick="{()" size='\"sm\"\r\n' variant='\"\"\r\n'> {\r\n                const paramsToClear: Array<keyof productcatalogsearchform=""> = [\r\n                  \"AttributesAll\",\r\n                  \"Category\",\r\n                  \"Query\",\r\n                  \"RatingRanges\",\r\n                  \"PricingRanges\",\r\n                  \"BrandName\"\r\n                ];\r\n                onClickRemoveParam(paramsToClear);\r\n              }}&gt;\r\n              {t(\"ui.storefront.searchCatalog.filters.ClearAllFilters\")}\r\n            \r\n          </keyof></button\r\n></card.footer>\r\n        </i></appliedfilterblock\r\n></i></appliedfilterblock\r\n></i></appliedfilterblock\r\n></i></i></appliedfilterblock\r\n></i></appliedfilterblock\r\n></i></appliedfilterblock\r\n></listgroup.item\r\n></listgroup\r\n></i></card><i classname='\"fal' fa-filter="" fa-fw="" me-2\"=""><i classname='\"fal' fa-times="" me-1\"="" text-danger=""><i classname='\"fal' fa-times="" me-1\"="" text-danger=""><i classname='\"fal' fa-times="" m-0\"="" text-danger=""><i classname='\"fal' fa-star="" me-1\"=""><i classname='\"fal' fa-times="" me-1\"="" text-danger=""><i classname='\"fal' fa-times="" me-1\"="" text-danger=""><i classname='\"fal' fa-times="" me-1\"="" text-danger="">\r\n      \r\n      {/* <searchtermfilter\r\n =="" onsearchsubmitted="{query" {...filterprops}\r\n="">\r\n          alterSearchViewModelForm({\r\n            Category: undefined,\r\n            Query: query\r\n          })\r\n        }\r\n        currentFormQuery={productSearchViewModel?.Form?.Query}\r\n      /&gt; */}\r\n      {/* {cefConfig?.featureSet.reviews.enabled &amp;&amp;\r\n        productSearchViewModel?.RatingRanges?.some(range =&gt; range.DocCount &gt; 0) &amp;&amp; (\r\n          <productratingsfilter\r\n =="" onratingrangeclicked="{ranges" {...filterprops}\r\n="">\r\n              alterSearchViewModelForm({\r\n                RatingRanges: ranges,\r\n                Query: undefined\r\n              })\r\n            }\r\n            ratingRanges={productSearchViewModel.RatingRanges}\r\n            isChecked={(range: AggregateRatingRange) =&gt;\r\n              Array.isArray(productSearchViewModel?.Form.RatingRanges) &amp;&amp;\r\n              productSearchViewModel.Form.RatingRanges.includes(range.Label)\r\n            }\r\n          /&gt;\r\n        )} */}\r\n      {cefConfig?.featureSet.categories.enabled &amp;&amp;\r\n        productSearchViewModel?.CategoriesTree?.Children?.some(cat =&gt; cat.DocCount &gt; 0) &amp;&amp; (\r\n          <categoriesfilter\r\n =="" allcategories="{allCategories}\r\n" oncategoryclicked="{categoryKey" {...filterprops}\r\n="">\r\n              alterSearchViewModelForm({\r\n                Category: categoryKey,\r\n                Query: undefined\r\n              })\r\n            }\r\n            categoriesTree={productSearchViewModel?.CategoriesTree}\r\n          /&gt;\r\n        )}\r\n      {productSearchViewModel?.Attributes?.length &gt; 0 &amp;&amp; (\r\n        <attributesfilter\r\n allattributes="{allAttributes}\r\n" onattributeclicked="{(attributeName:" string)="" string,="" value:="" {...filterprops}\r\n=""> alterAttribute(\"push\", attributeName, value)}\r\n        /&gt;\r\n      )}\r\n      {/* {cefConfig?.featureSet.pricing.enabled &amp;&amp;\r\n        productSearchViewModel?.PricingRanges?.some(range =&gt; range.DocCount &gt; 0) &amp;&amp; (\r\n          <pricerangesfilter\r\n =="" onpricingrangeclicked="{ranges" {...filterprops}\r\n="">\r\n              alterSearchViewModelForm({\r\n                PricingRanges: ranges\r\n              })\r\n            }\r\n            pricingRanges={productSearchViewModel?.PricingRanges}\r\n          /&gt;\r\n        )} */}\r\n      {/* {Object.keys(productSearchViewModel?.BrandNames ?? {}).length &gt; 0 &amp;&amp; (\r\n        <brandsfilter\r\n =="" brands="{productSearchViewModel?.BrandNames}\r\n" onbrandnameclicked="{brandName" {...filterprops}\r\n=""> alterSearchViewModelForm({ BrandName: brandName })}\r\n        /&gt;\r\n      )} */}\r\n      {cefConfig?.featureSet.carts.compare.enabled &amp;&amp; <comparefilter {...filterprops}="">}\r\n    \r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Alert, Row } from \"react-bootstrap\";\r\nimport { ConfirmationModal } from \"src/_shared/modals\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\n\r\ninterface IAddToCartModalProps {\r\n  product: ProductModel;\r\n  show: boolean;\r\n  onCancel: Function;\r\n  messages?: string[];\r\n  cartTypeName: string;\r\n}\r\n\r\nexport const AddToCartModal = (props: IAddToCartModalProps): JSX.Element =&gt; {\r\n  const { product, show, onCancel, messages, cartTypeName } = props;\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n\r\n  const isForQuoteCart = cartTypeName === ServiceStrings.carts.types.quote;\r\n\r\n  const onViewCartClicked = () =&gt; {\r\n    if (isForQuoteCart) {\r\n      history.push(corsLink(cefConfig, cefConfig.routes.quoteCart.root, \"quoteCart\"));\r\n    } else {\r\n      history.push(corsLink(cefConfig, cefConfig.routes.cart.root, \"cart\"));\r\n    }\r\n    history.go(0);\r\n  };\r\n\r\n  const onContinueShoppingClicked = () =&gt; {\r\n    onCancel();\r\n  };\r\n\r\n  if (!product) {\r\n    return <div classname='\"d-none\"'></div>;\r\n  }\r\n\r\n  return (\r\n    <confirmationmodal\r\n :="" ?="" \"ui.storefront.carts.addtocartmodaltitle\")}\r\n="" \"ui.storefront.carts.addtoquotecartmodaltitle\"\r\n="" cancelbtnlabel='{t(\"ui.storefront.cart.continueShopping\")}\r\n' cancelbtnsid='\"btnAddToCartModalContinueShopping\"\r\n' confirmbtnlabel='{t(\"ui.storefront.cart.ViewCart\")}\r\n' confirmbtnsid='\"AddToCartModalGoToCart\"\r\n' oncancel="{onContinueShoppingClicked}\r\n" onconfirm="{onViewCartClicked}\r\n" show="{show}\r\n" size='\"lg\"' title="{t(isForQuoteCart\r\n">\r\n      <row>\r\n        <div :="" ?="" \"col-12\"="" \"hide\"}="" classname="{product">\r\n          <row>\r\n            <div classname='\"col-sm-4\"'>\r\n              <imagewithfallback\r\n 200,\r\n="" \"both\",\r\n="" \"pad\"\r\n="" alt="{product.Name}\r\n" classname='\"img-fluid' d-block="" imageresizerparamsbody="{{\r\n" maxheight:="" maxwidth:="" mode:="" mx-auto\"\r\n="" scale:="" src="{product.PrimaryImageFileName}\r\n" }}\r\n="">\r\n            </imagewithfallback\r\n></div>\r\n            <div classname='\"col-sm-8\"'>\r\n              <h4 classname='\"cef-confirmation-add-cart-title\"\r\n' data-sid='\"AddToCartModalProductText\"' id='\"AddToCartModalProductText\"\r\n'>\r\n                {product.Name}\r\n              </h4>\r\n            </div>\r\n          </row>\r\n        </div>\r\n        {/*\r\n          <div '12'}`}="" '4'="" :="" ?="" classname="{`text-center" col-sm-${product="">\r\n            <p classname='\"bold\"'>Cart Total</p>\r\n            <p cef-confirmation-add-cart-price\"\r\n="" classname='\"h3' globalizedcurrency\"="" id='\"productDetailAddToCartModalCartTotal\"\r\n' ng-bind='\"addToCartModalCtrl.cvCartService.carts[addToCartModalCtrl.type].Totals.Total' |="">\r\n            </p>\r\n          </div>\r\n        */}\r\n        {messages?.length\r\n          ? <div classname='\"col-12\"'>\r\n            {messages.map((msg: string, index: number) =&gt; {\r\n              let alertVariant = \"info\";\r\n              if (msg.toUpperCase().startsWith(\"ERROR\")) {\r\n                alertVariant = \"danger\";\r\n              }\r\n              if (msg.toUpperCase().startsWith(\"WARNING\")) {\r\n                alertVariant = \"warning\";\r\n              }\r\n              return (\r\n                <alert\r\n -="" 1="" :="" =="=" ?="" \"\"}\r\n="" \"mb-0\"="" `}="" classname="{`${index" id="{`AddToCartModalText_${index}`}\r\n" key="{msg}\r\n" messages.length="" variant="{alertVariant}\r\n">\r\n                  {msg}\r\n                \r\n              );\r\n            })}\r\n          </alert\r\n></div>\r\n          : null}\r\n      </row>\r\n    \r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Alert, Anchor, Col, Row } from \"react-bootstrap\";\r\nimport { ConfirmationModal } from \"src/_shared/modals\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\ninterface IAddAllToCartModalProps {\r\n  show: boolean;\r\n  onConfirm?: Function;\r\n  onCancel: Function;\r\n  messages?: string[];\r\n  cartType?: string;\r\n}\r\n\r\nexport const AddAllToCartModal = (\r\n  props: IAddAllToCartModalProps\r\n): JSX.Element =&gt; {\r\n  const { cartType, messages, onCancel, onConfirm, show } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n\r\n  const isForQuoteCart = cartType === ServiceStrings.carts.types.quote;\r\n\r\n  const onContinueShoppingClicked = () =&gt; {\r\n    onCancel();\r\n  };\r\n\r\n  return (\r\n    <confirmationmodal\r\n )}="" :="" ?="" \"add="" \"okay\"="" \"primary\"\r\n="" \"site\",\r\n="" \"ui.storefront.cart.viewcart\")}\r\n="" btn-primary\"\r\n="" cancelbtnlabel='{t(\"ui.storefront.cart.continueShopping\")}\r\n' cart="" cefconfig,\r\n="" cefconfig.routes.cart.root,\r\n="" cefconfig.routes.quotecart.root="" classname='\"btn' confirmbtnlabel="{t(onConfirm" confirmbutton="{&lt;Anchor\r\n" href="{corsLink(\r\n" isforquotecart="" quote="" result\"="" result\"}\r\n="" show="{show}\r\n" title="{isForQuoteCart" to="">\r\n        {t(\"ui.storefront.cart.ViewCart\")}\r\n      }\r\n      onCancel={onContinueShoppingClicked}\r\n      size=\"md\"&gt;\r\n      <row>\r\n        {messages?.length\r\n          ? \r\n            {messages.map((msg: string, index: number) =&gt; {\r\n              let alertClass = \"info\";\r\n              const [ firstWord ] = msg.split(\" \");\r\n              switch (firstWord.toUpperCase()) {\r\n                case \"ERROR\": {\r\n                  alertClass = \"danger\";\r\n                  break;\r\n                }\r\n                case \"WARNING\": {\r\n                  alertClass = \"warning\";\r\n                  break;\r\n                }\r\n                default: {\r\n                  break;\r\n                }\r\n              }\r\n              return (\r\n                <alert\r\n -="" 1="" :="" =="=" ?="" \"\"}="" \"mb-0\"="" classname="{index" id="{`AddAllToCartModalText_${index}`}\r\n" key="{msg}\r\n" messages.length="" variant="{alertClass}\r\n">\r\n                  {msg}\r\n                \r\n              );\r\n            })}\r\n          \r\n          : null}\r\n      </alert\r\n></row>\r\n    \r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ConfirmationModal } from \"src/_shared/modals\";\r\n\r\ninterface IRemoveFromCartModalProps {\r\n  productName: string;\r\n  show: boolean;\r\n  onConfirm: Function;\r\n  onCancel: Function;\r\n  cancelBtnLabel?: string;\r\n  parentRunning?: boolean;\r\n  cartTypeText: string;\r\n}\r\n\r\nexport const RemoveFromCartModal = (props: IRemoveFromCartModalProps): JSX.Element =&gt; {\r\n  const { productName, show, onConfirm, onCancel, cancelBtnLabel, parentRunning, cartTypeText } = props;\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <confirmationmodal\r\n ??="" cancelbtnlabel="{cancelBtnLabel" confirmbtnlabel='{t(\"ui.storefront.common.RemoveItem\")}\r\n' confirmbtnvariant='\"danger\"\r\n' confirmdisabled="{parentRunning}\r\n" oncancel="{onCancel}\r\n" onconfirm="{onConfirm}\r\n" show="{show}\r\n" size='\"md\"' t(\"ui.storefront.cart.continueshopping\")}\r\n="" title='{t(\"ui.storefront.common.RemoveItem\")}\r\n'>\r\n      <p id='\"lbRFCMContent\"'>\r\n        <span>{t(\"ui.storefront.cart.AreYouSureYouWantToRemove\")}</span>\r\n         \r\n        <b>{productName}</b>  from \r\n        <b>{cartTypeText}</b>?\r\n      </p>\r\n      {parentRunning &amp;&amp; <loadingwidget overlay="{true}">}\r\n    \r\n  );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"primary\":\"#1c3564\",\"secondary\":\"#1c3564\",\"success\":\"#31a746\",\"info\":\"#17a2b8\",\"warning\":\"#ffc107\",\"danger\":\"#dc3545\",\"primaryDark\":\"#162a50\",\"secondaryDark\":\"#162a50\",\"successDark\":\"#2b933e\",\"infoDark\":\"#148ea1\",\"warningDark\":\"#edb100\",\"dangerDark\":\"#d32535\",\"light\":\"#f4f5f5\",\"medium\":\"#ced4da\",\"dark\":\"#1e242b\",\"white\":\"#fff\",\"blue\":\"#1c3564\",\"indigo\":\"#6610f2\",\"purple\":\"#6f42c1\",\"pink\":\"#e6717c\",\"red\":\"#dc3545\",\"orange\":\"#fd7e14\",\"yellow\":\"#ffc107\",\"green\":\"#31a746\",\"teal\":\"#20c997\",\"cyan\":\"#17a2b8\",\"greenFade\":\"#e1f6e5\",\"darkBlue\":\"#153166\",\"tableBorderColor\":\"#ddd\",\"gridBreakpointxs\":\"0\",\"gridBreakpointsm\":\"576px\",\"gridBreakpointmd\":\"768px\",\"gridBreakpointlg\":\"992px\",\"gridBreakpointxl\":\"1200px\",\"gridBreakpointtk\":\"2000px\",\"gridBreakpointfk\":\"3000px\"};","/* eslint-disable @typescript-eslint/no-extra-parens */\r\n/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { Button, ButtonGroup, Dropdown, Spinner } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { faCartPlus, faQuoteRight } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { AddToCartModal } from \"src/Cart/modals\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport cssVariables from \"src/_meta/css/exposedToJSVariables.module.scss\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { Modal } from \"src/_shared/modals\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\n\r\ninterface IAddToCartButtonProps {\r\n  product: ProductModel;\r\n  quantity: number;\r\n  btnClasses?: string;\r\n  containerClasses?: string;\r\n  btnVariant?: string;\r\n  btnSize?: \"lg\" | \"sm\";\r\n  btnIcon?: IconProp;\r\n  dropdownBtnClasses?: string;\r\n  asIcon?: boolean;\r\n  excludeQuoteCart?: boolean;\r\n  quoteCartOnly?: boolean;\r\n  quoteBtnDisabled?: boolean;\r\n  label?: string;\r\n  disabled?: boolean;\r\n  useConfirmModal?: boolean;\r\n  useErrorModal?: boolean;\r\n  onItemAdded?: () =&gt; void;\r\n  onError?: (err: Error) =&gt; void;\r\n  verticalAlign?: string;\r\n  dropdownBtnVariant?: string;\r\n  dropDirection?: \"up\" | \"start\" | \"end\" | \"down\";\r\n  index?: number;\r\n}\r\n\r\nexport const AddToCartButton = (props: IAddToCartButtonProps): JSX.Element =&gt; {\r\n  const {\r\n    product,\r\n    quantity,\r\n    btnClasses,\r\n    containerClasses,\r\n    btnVariant,\r\n    btnSize,\r\n    btnIcon,\r\n    dropdownBtnClasses,\r\n    asIcon,\r\n    excludeQuoteCart,\r\n    quoteCartOnly,\r\n    quoteBtnDisabled,\r\n    label,\r\n    disabled,\r\n    useConfirmModal,\r\n    useErrorModal,\r\n    onItemAdded,\r\n    onError,\r\n    verticalAlign,\r\n    dropdownBtnVariant,\r\n    index\r\n  } = props;\r\n\r\n  const [ showAddToCartModal, setShowAddToCartModal ] = useState<boolean>(false);\r\n  const [ showAddToQuoteCartModal, setShowAddToQuoteCartModal ] = useState<boolean>(false);\r\n  const [ addToCartModalMessages, setAddToCartModalMessages ] = useState<string[]>(null);\r\n  const [ onItemAddedCalled, setOnItemAddedCalled ] = useState<boolean>(false);\r\n  const [ showErrorMessagesModal, setShowErrorMessagesModal ] = useState<boolean>(false);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n\r\n  const cartFactory = useCartFactory();\r\n\r\n  const onAddCartItem = (typeName: string): void =&gt; {\r\n    if (!cartFactory) {\r\n      return;\r\n    }\r\n\r\n    if (!product.ID) {\r\n      console.error(\"Missing or invalid id. Add to cart failed.\");\r\n      return;\r\n    }\r\n\r\n    setRunning();\r\n    cartFactory\r\n      .addItemToCart(typeName, product.ID, quantity, product)\r\n      .then(res =&gt; {\r\n        if (typeof res === typeof Error) {\r\n          throw res;\r\n        }\r\n        if (!res) {\r\n          throw new Error(\"Unable to add product to cart\");\r\n        }\r\n        if (res.Messages) {\r\n          setAddToCartModalMessages(res.Messages);\r\n        }\r\n        if (!res.ActionSucceeded) {\r\n          throw res;\r\n        }\r\n        if (useConfirmModal) {\r\n          if (typeName === ServiceStrings.carts.types.quote) {\r\n            if (!cefConfig.addToQuoteCartModalDisabled) {\r\n              setShowAddToQuoteCartModal(true);\r\n            }\r\n          } else if (!cefConfig.disableAddToCartModals) {\r\n            setShowAddToCartModal(true);\r\n          }\r\n        } else if (onItemAdded &amp;&amp; typeof onItemAdded == \"function\") {\r\n          onItemAdded();\r\n          setOnItemAddedCalled(true);\r\n        }\r\n        finishRunning();\r\n      })\r\n      .catch((err: Error) =&gt; {\r\n        finishRunning(true, err);\r\n        if (useErrorModal) {\r\n          setShowErrorMessagesModal(true);\r\n        }\r\n        if (onError) {\r\n          onError(err);\r\n        }\r\n      });\r\n  };\r\n\r\n  if (\r\n    !product\r\n    || (cefConfig?.featureSet.inventory.enabled &amp;&amp; !product.readInventory)\r\n    || (cefConfig?.featureSet.pricing.enabled &amp;&amp; !product.readPrices)\r\n  ) {\r\n    return null;\r\n  }\r\n\r\n  const addToACartModals = (\r\n    &lt;&gt;\r\n      <addtocartmodal\r\n =="" carttypename="{ServiceStrings.carts.types.cart}\r\n" oncancel="{()" show="{showAddToCartModal}\r\n"> {\r\n          setShowAddToCartModal(false);\r\n          if (!onItemAddedCalled &amp;&amp; onItemAdded) {\r\n            onItemAdded();\r\n          }\r\n        }}\r\n        product={product}\r\n        messages={addToCartModalMessages}\r\n      /&gt;\r\n      <addtocartmodal\r\n =="" carttypename="{ServiceStrings.carts.types.quote}\r\n" oncancel="{()" show="{showAddToQuoteCartModal}\r\n"> {\r\n          setShowAddToQuoteCartModal(false);\r\n          if (!onItemAddedCalled &amp;&amp; onItemAdded) {\r\n            onItemAdded();\r\n          }\r\n        }}\r\n        product={product}\r\n        messages={addToCartModalMessages}\r\n      /&gt;\r\n    \r\n  );\r\n\r\n  if (quoteCartOnly) {\r\n    return (\r\n      <div ${containerclasses="" ??="" \"\"}`}="" classname="{`position-relative">\r\n        {addToACartModals}\r\n        <button\r\n =="" ??="" \"\"}`}\r\n="" \"middle\"="" a="" aria-label='{\"Get' disabled="{viewState.running" id="{`btnGridAddToCartProduct${product?.ID" null}\r\n="" onclick="{()" quote\"}\r\n="" quotebtndisabled}\r\n="" size="{btnSize" style="{{" title='{\"Get' variant="{btnVariant}\r\n" verticalalign="" verticalalign:="" ||="" }}\r\n=""> onAddCartItem(\"Quote Cart\")}\r\n          className={`w-100 ${btnClasses ?? \"\"}`}&gt;\r\n          {asIcon &amp;&amp; <fontawesomeicon ??="" faquoteright}="" icon="{btnIcon">}\r\n          <span :="" ?="" \"\"}`}="" \"sr-only\"="" classname="{`${asIcon">{label ?? \"Get a Quote\"}</span>\r\n        \r\n      </fontawesomeicon></button\r\n></div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div ${containerclasses="" ??="" \"\"}`}="" classname="{`position-relative">\r\n      {addToACartModals}\r\n      <modal\r\n =="" oncancel="{()" show="{showErrorMessagesModal}\r\n"> setShowErrorMessagesModal(false)}\r\n        size=\"md\"&gt;\r\n        {viewState.errorMessage\r\n          ? viewState.errorMessage\r\n          : viewState.errorMessages\r\n            ? viewState.errorMessages.map(msg =&gt; <span key="{msg}">{msg}</span>)\r\n            : \"An error occurred\"}\r\n        <hr classname='\"mx-n3\"'/>\r\n        <div classname='\"d-flex' justify-content-end\"="">\r\n          <button\r\n =="" onclick="{()" variant='\"primary\"\r\n'> setShowErrorMessagesModal(false)}&gt;\r\n            {t(\"ui.storefront.common.OK\")}\r\n          \r\n        </button\r\n></div>\r\n      \r\n      <buttongroup classname='\"w-100\"'>\r\n        <button\r\n =="" ??="" \"\"}\r\n="" \"\"}`}\r\n="" aria-label='{t(\"ui.storefront.cart.addToCart\")}\r\n' classname="{btnClasses" disabled="{viewState.running" disabled}\r\n="" id="{`btnGridAddToCartProduct${product?.ID" null}\r\n="" onclick="{()" size="{btnSize" title='{t(\"ui.storefront.cart.addToCart\")}\r\n' variant="{btnVariant}\r\n" ||=""> onAddCartItem(\"Cart\")}\r\n          data-sid={`btnGridAddToCartProduct_${index}`}&gt;\r\n          {asIcon\r\n            &amp;&amp; <fontawesomeicon\r\n ??="" classname='\"fal\"/' facartplus}\r\n="" icon="{btnIcon">\r\n            || label\r\n            || t(\"ui.storefront.cart.addToCart\")}\r\n        \r\n        {!excludeQuoteCart &amp;&amp; (\r\n          <dropdown ??="" \"down\"}="" as="{ButtonGroup}" drop="{props.dropDirection">\r\n            <dropdown.toggle\r\n ${cssvariables[`${btnvariant}dark`]}`,="" ${dropdownbtnclasses="" 1px="" ??="" \"\"}`}\r\n="" \"fit-content\"="" \"rounded-end="" `solid="" borderleft:="" btnvariant}\r\n="" classname="{`no-caret" disabled="{viewState.running" id="{`viewDetailsAddToQuoteCartDropdown_${product?.ID" maxwidth:="" null}\r\n="" quotebtndisabled}="" rounded-0="" size="{btnSize" style="{{" text-white\"}`}\r\n="" variant="{dropdownBtnVariant" ||="" }}\r\n="">\r\n              {viewState.running ? (\r\n                <spinner\r\n animation='\"border\"\r\n' size='\"sm\"\r\n'>\r\n              ) : (\r\n                <i :="" =="=" ?="" \"fal="" \"up\"="" classname="{props.dropDirection" fa-chevron-down\"}="" fa-chevron-up\"="" fa-sm="">\r\n              )}\r\n            \r\n            <dropdown.menu align='\"end\"'>\r\n              <dropdown.item\r\n =="" active-bg-transparent\"\r\n="" as="{Button}\r\n" classname='\"px-2' onclick="{()" text-dark="" variant='\"outline-light\"\r\n'> onAddCartItem(\"Quote Cart\")}&gt;\r\n                <i classname='\"fal' fa-quote-right\"="">\r\n                 \r\n                <span id='\"txtAddToQuoteCart\"'>{\"Get a Quote\"}</span>\r\n              \r\n            </i></dropdown.item\r\n></dropdown.menu><i classname='\"fal' fa-quote-right\"="">\r\n          </i></i></spinner\r\n></dropdown.toggle\r\n></dropdown><i :="" =="=" ?="" \"fal="" \"up\"="" classname="{props.dropDirection" fa-chevron-down\"}="" fa-chevron-up\"="" fa-sm=""><i classname='\"fal' fa-quote-right\"="">\r\n        )}\r\n      </i></i></fontawesomeicon\r\n></button\r\n></buttongroup><i :="" =="=" ?="" \"fal="" \"up\"="" classname="{props.dropDirection" fa-chevron-down\"}="" fa-chevron-up\"="" fa-sm=""><i classname='\"fal' fa-quote-right\"="">\r\n    </i></i></modal\r\n></div><i :="" =="=" ?="" \"fal="" \"up\"="" classname="{props.dropDirection" fa-chevron-down\"}="" fa-chevron-up\"="" fa-sm=""><i classname='\"fal' fa-quote-right\"="">\r\n  );\r\n};\r\n\r\nAddToCartButton.defaultProps = {\r\n  useConfirmModal: true,\r\n  useErrorModal: true\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"addToCartQuantityInput\":\"AddToCartQuantitySelector_addToCartQuantityInput__Lu3kr\"};","import React, { useRef, useState } from \"react\";\r\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\r\nimport classes from \"src/Cart/controls/AddToCartQuantitySelector.module.scss\";\r\nimport { useDebounceWithCallback } from \"src/_shared/customHooks/useDebounceWithCallback\";\r\n\r\ninterface IAddToCartQuantitySelectorProps {\r\n  onChange: (updatedValue: number) =&gt; void;\r\n  initialValue?: number;\r\n  id?: number | string;\r\n  increaseDisabled?: boolean;\r\n  canIncreaseFn?: (quantity: number) =&gt; boolean;\r\n  decreaseDisabled?: boolean;\r\n  useInput?: boolean;\r\n  debounceMS?: number;\r\n}\r\n\r\nexport const AddToCartQuantitySelector = (props: IAddToCartQuantitySelectorProps): JSX.Element =&gt; {\r\n  const { onChange, initialValue, increaseDisabled, decreaseDisabled, useInput } = props;\r\n  const [ quantity, setQuantity ] = useState(initialValue ?? 1);\r\n\r\n  const firstRender = useRef(true);\r\n\r\n  useDebounceWithCallback(quantity, () =&gt; {\r\n    if (firstRender.current) {\r\n      firstRender.current = false;\r\n      return;\r\n    }\r\n    onChange(quantity);\r\n  }, props.debounceMS ?? 500);\r\n\r\n  const onChangeQuantity = (e: React.ChangeEvent<htmlinputelement>) =&gt; {\r\n    e.preventDefault();\r\n    setQuantity(Number(e.target.value));\r\n  };\r\n\r\n  const incrementQuantity = (e: React.MouseEvent<htmlbuttonelement>) =&gt; {\r\n    e.preventDefault();\r\n    setQuantity(quantity + 1);\r\n  };\r\n\r\n  const decrementQuantity = (e: React.MouseEvent<htmlbuttonelement>) =&gt; {\r\n    e.preventDefault();\r\n    if (quantity &lt;= 1) {\r\n      return;\r\n    }\r\n    setQuantity(quantity - 1);\r\n  };\r\n\r\n  const checkIncreaseDisabled = (): boolean =&gt; {\r\n    if (props.canIncreaseFn) {\r\n      return !props.canIncreaseFn(quantity);\r\n    }\r\n    return Boolean(increaseDisabled);\r\n  };\r\n\r\n  if (!props.id) {\r\n    console.error(\"No id was provided to the AddToCartQuantitySelector.\");\r\n  }\r\n  return (\r\n    <inputgroup classname='\"flex-nowrap' w-100\"="">\r\n      <inputgroup.text classname='\"p-0\"'>\r\n        <button\r\n ??="" \"\"}`}\r\n="" disabled="{decreaseDisabled}\r\n" id="{`btnReduceItemQuantity${props.id" onclick="{decrementQuantity}" variant='\"\"\r\n'>\r\n          <i classname='\"fal' fa-minus\"="">\r\n        \r\n      </i></button\r\n></inputgroup.text><i classname='\"fal' fa-minus\"="">\r\n      {useInput\r\n        ? <form.control\r\n ${classes.addtocartquantityinput}`}\r\n="" +="" 40px)`\r\n="" `calc(${quantity.tostring().length}ch="" aria-label='\"num\"\r\n' classname="{`text-center" minwidth:="" onchange="{onChangeQuantity}\r\n" placeholder='\"1\"\r\n' qty="" style="{{\r\n" type='\"number\"\r\n' value="{quantity}\r\n" }}\r\n="">\r\n        : <span\r\n ${classes.addtocartquantityinput}`}\r\n="" +="" 40px)`\r\n="" `calc(${quantity.tostring().length}ch="" classname="{`form-control" minwidth:="" qty="" style="{{\r\n" text-center="" }}="">\r\n          {quantity}\r\n        \r\n      }\r\n      <inputgroup.text classname='\"p-0\"'>\r\n        <button\r\n ??="" \"\"}`}\r\n="" disabled="{checkIncreaseDisabled()}\r\n" id="{`btnIncreaseItemQuantity${props.id" onclick="{incrementQuantity}" variant='\"\"\r\n'>\r\n          <i classname='\"fal' fa-plus\"="">\r\n        \r\n      </i></button\r\n></inputgroup.text><i classname='\"fal' fa-plus\"="">\r\n    </i></span\r\n></form.control\r\n></i></inputgroup><i classname='\"fal' fa-minus\"=""><i classname='\"fal' fa-plus\"="">\r\n  );\r\n};\r\n\r\nAddToCartQuantitySelector.defaultProps = {\r\n  useInput: true\r\n};\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, ButtonGroup, Dropdown, Spinner } from \"react-bootstrap\";\r\nimport {\r\n  faList,\r\n  IconDefinition\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { AddToCartModal } from \"src/Cart/modals\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\n\r\ninterface IViewDetailsButtonProps {\r\n  seoUrl: string;\r\n  product?: ProductModel;\r\n  btnClasses?: string;\r\n  btnVariant?: string;\r\n  btnSize?: \"lg\" | \"sm\";\r\n  includeQuoteCart?: boolean;\r\n  verticalAlign?: string;\r\n  asIcon?: boolean;\r\n  icon?: IconDefinition;\r\n  quantity?: number;\r\n  onItemAdded?: (id: number) =&gt; void;\r\n  useConfirmModal?: boolean;\r\n}\r\n\r\nexport const ViewDetailsButton = (props: IViewDetailsButtonProps): JSX.Element =&gt; {\r\n  const {\r\n    seoUrl,\r\n    product,\r\n    btnClasses,\r\n    btnVariant,\r\n    btnSize,\r\n    includeQuoteCart,\r\n    verticalAlign,\r\n    asIcon,\r\n    icon,\r\n    quantity,\r\n    onItemAdded,\r\n    useConfirmModal\r\n  } = props;\r\n\r\n  const [ showConfirmationModal, setShowConfirmationModal ] = useState<boolean>(false);\r\n  const [ confirmationModalMessages, setConfirmationModalMessages ] = useState<string[]>(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const cartFactory = useCartFactory();\r\n\r\n  const onAddQuoteCartItem = (): void =&gt; {\r\n    if (!product?.ID) {\r\n      console.error(\"Missing or invalid id. Add to cart failed.\");\r\n      return;\r\n    }\r\n\r\n    let itemResponse: number = 0;\r\n    setRunning();\r\n    cartFactory.addItemToCart(ServiceStrings.carts.types.quote, product.ID, quantity)\r\n      .then(res =&gt; {\r\n        itemResponse = res.Result;\r\n        if (res.Messages) {\r\n          setConfirmationModalMessages(res.Messages);\r\n        }\r\n        if (!res.ActionSucceeded) {\r\n          throw res;\r\n        }\r\n        if (useConfirmModal) {\r\n          setShowConfirmationModal(true);\r\n        }\r\n        if (onItemAdded) {\r\n          onItemAdded(itemResponse);\r\n        }\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to add cart item\");\r\n      });\r\n  };\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <a\r\n ${\r\n="" ${btnclasses="" ${btnsize="" :="" ?="" ??="" \"\"}="" \"\"}`}\r\n="" \"middle\"="" \"productdetail\")}="" \"rounded-start\"="" \"rounded\"\r\n="" `btn-${btnsize}`="" aria-label='{t(\"ui.storefront.common.ViewDetails\")}\r\n' btn-${btnvariant}="" classname="{`btn" href="{corsLink(cefConfig," id="{`btnGridOutOfStockViewDetailsProduct${product?.ID" includequotecart="" seourl,="" seourl}`}\r\n="" style="{{" text-center="" title='{t(\"ui.storefront.common.ViewDetails\")}\r\n' verticalalign="" verticalalign:="" }="" }}\r\n="">\r\n        {asIcon &amp;&amp; <fontawesomeicon ??="" falist}="" icon="{icon">}\r\n        <span :="" ?="" \"\"}`}="" \"sr-only\"="" classname="{`${asIcon">\r\n          {t(\"ui.storefront.common.ViewDetails\")}\r\n        </span>\r\n      \r\n      {includeQuoteCart\r\n        &amp;&amp; <dropdown as="{ButtonGroup}">\r\n          <dropdown.toggle\r\n ${btnvariant="==" 1px="" :="" ?="" ??="" \"#258035\"="" \"#3d4246\"}`,\r\n="" \"\"}`}\r\n="" \"fit-content\"\r\n="" \"success\"="" `solid="" borderleft:="" classname='\"rounded-end' colors\r\n="" disabled="{viewState.running}" for="" id="{`viewDetailsAddToQuoteCartDropdown_${product?.ID" maxwidth:="" no-caret\"\r\n="" reference="" rounded-0="" scss="" style="{{\r\n" these="" todo:="" variables="" variant="{btnVariant}\r\n" }}\r\n="">\r\n            {viewState.running\r\n              ? <spinner animation='\"border\"' size='\"sm\"'>\r\n              : <i classname='\"fal' fa-chevron-down="" fa-sm\"="">\r\n            }\r\n          \r\n          <dropdown.menu align='\"end\"'>\r\n            <dropdown.item\r\n active-bg-transparent\"\r\n="" as="{Button}\r\n" classname='\"px-2' disabled="{viewState.running}" onclick="{onAddQuoteCartItem}\r\n" text-dark="" variant='\"outline-light\"\r\n'>\r\n              <i classname='\"fal' fa-quote-right\"="">\r\n               \r\n              <span>{\"Get a Quote\"}</span>\r\n            \r\n          </i></dropdown.item\r\n></dropdown.menu><i classname='\"fal' fa-quote-right\"="">\r\n        </i></i></spinner></dropdown.toggle\r\n></dropdown><i classname='\"fal' fa-chevron-down="" fa-sm\"=""><i classname='\"fal' fa-quote-right\"="">\r\n      }\r\n      <addtocartmodal\r\n =="" carttypename="{ServiceStrings.carts.types.quote}\r\n" oncancel="{()" product="{product}\r\n" show="{showConfirmationModal}\r\n"> setShowConfirmationModal(false)}\r\n        messages={confirmationModalMessages}\r\n      /&gt;\r\n    \r\n  );\r\n};\r\n","/* eslint-disable no-unused-vars */\r\n/**\r\n * @file React/src/Catalog/controls/Price.tsx\r\n * @author Copyright (c) 2019-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Product detail price widget\r\n */\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { CalculatedPrices } from \"src/_api/cvApi.shared\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ProductModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface IProductPriceProps {\r\n  prices?: CalculatedPrices;\r\n  hidePercentOff?: boolean;\r\n  sizeClass?: string;\r\n  muteDiscountText?: boolean;\r\n  colClasses?: string;\r\n  productID?: number;\r\n  product?: ProductModel,\r\n}\r\n\r\nexport const Price = (props: IProductPriceProps): JSX.Element =&gt; {\r\n  const { prices, hidePercentOff, sizeClass, muteDiscountText, colClasses } = props;\r\n  const [ pricesToUse, setPricesToUse ] = useState<calculatedprices>(prices);\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning } = useViewState();\r\n  useEffect(() =&gt; {\r\n    const productID = props.product.ID ?? props.productID;\r\n    setRunning();\r\n    cvApi.pricing.CalculatePricesForProduct(productID, 1)\r\n      .then(result =&gt; {\r\n        if (!result.data.ActionSucceeded) {\r\n          finishRunning(true, \"An error occurred while fetching prices\");\r\n          return;\r\n        }\r\n        const toUse = {\r\n          amountOff: 0,\r\n          base: 0,\r\n          haveBase: false,\r\n          haveMsrp: false,\r\n          haveReduction: false,\r\n          haveSale: false,\r\n          isSale: false,\r\n          loading: true,\r\n          msrp: 0,\r\n          percentOff: 0,\r\n          reduction: 0,\r\n          sale: 0\r\n        };\r\n        toUse.base = result.data.Result.BasePrice;\r\n        toUse.sale = result.data.Result.SalePrice;\r\n        toUse.msrp = result.data.Result.MsrpPrice;\r\n        toUse.reduction = result.data.Result.ReductionPrice;\r\n        // Assign calculated values\r\n        toUse.haveBase = toUse.base &gt;= 0;\r\n        toUse.haveSale = toUse.sale &gt;= 0;\r\n        toUse.haveMsrp = toUse.msrp &gt;= 0;\r\n        toUse.haveReduction = toUse.reduction &gt;= 0;\r\n        toUse.isSale = toUse.sale &gt; 0 &amp;&amp; toUse.sale &lt; toUse.base;\r\n        if (toUse.isSale) {\r\n          toUse.amountOff = toUse.base - toUse.sale;\r\n          toUse.percentOff = toUse.amountOff / toUse.base * 100;\r\n        }\r\n        // Finish\r\n        toUse.loading = false;\r\n        setPricesToUse(toUse);\r\n      });\r\n  }, [props.product]);\r\n\r\n  if (!pricesToUse) {\r\n    return <loadingwidget size='\"1x\"'>;\r\n  }\r\n  return (\r\n    <row id='\"pnlProductPrice\"'>\r\n      {/* Non-Kit setups  */}\r\n      \r\n        {/*\r\n        <span classname='\"price' ng-if='\"pdpCtrl.prices.isSale\"\r\n' text-success\"="">\r\n          <span data-translate='\"ui.storefront.product.detail.productDetails.onSale\"'></span>\r\n          <br/>\r\n        </span>\r\n        */}\r\n        {!pricesToUse.haveBase &amp;&amp; !pricesToUse.haveSale\r\n          &amp;&amp; <span classname='\"price' text-success\"="">\r\n            {t(\"ui.storefront.common.Free\")}\r\n          </span>\r\n        }\r\n        {pricesToUse.base &gt; 0\r\n          ? pricesToUse.haveBase &amp;&amp; pricesToUse.isSale\r\n            ? <del\r\n ${mutediscounttext="" ${sizeclass="" :="" ?="" ??="" \"\"}="" \"\"}`}\r\n="" \"text-muted\"="" classname="{`price" data-sid='\"ProductDetailsPagePrice\"'>\r\n                {currencyFormatter.format(pricesToUse.base)}\r\n              \r\n              : <span classname='\"price' data-sid='\"ProductDetailsPagePrice\"' text-black\"="">\r\n                {currencyFormatter.format(pricesToUse.base)}\r\n              </span>\r\n            : <span>Inquire for Price</span>\r\n        }\r\n        {pricesToUse.isSale\r\n          &amp;&amp; <span classname='\"price' text-success\"="">\r\n            {\" \"}\r\n            <span data-sid='\"ProductDetailsPageSalePrice\"'>\r\n              {currencyFormatter.format(pricesToUse.sale)}\r\n            </span>\r\n          </span>\r\n        }\r\n        {pricesToUse.isSale &amp;&amp; !hidePercentOff\r\n          &amp;&amp; <span ${mutediscounttext="" ${sizeclass="" :="" ?="" ??="" \"\"}="" \"\"}`}="" \"text-muted\"="" classname="{`price-savings">\r\n            {\" \"}\r\n            {`${currencyFormatter.format(pricesToUse.amountOff)} (${Math.trunc(pricesToUse.percentOff)}%)\r\n              ${t(\"ui.storefront.product.detail.productDetails.Off\")}`\r\n            }\r\n          </span>\r\n        }\r\n      \r\n    </del\r\n></row>\r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { Button, ButtonGroup, Dropdown } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { AddAllToCartModal } from \"src/Cart/modals\";\r\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport {\r\n  AppliedSalesInvoiceItemDiscountModel,\r\n  AppliedSalesOrderItemDiscountModel,\r\n  AppliedSalesQuoteItemDiscountModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\n\r\ninterface IAddAllToCartButtonProps {\r\n  classes?: string;\r\n  btnClasses?: string;\r\n  btnVariant?: string;\r\n  btnSize?: \"lg\" | \"sm\";\r\n  dropdownBtnClasses?: string;\r\n  excludeQuoteCart?: boolean;\r\n  label?: string;\r\n  disabled?: boolean;\r\n  useConfirmModal?: boolean;\r\n  salesItems: Array<salesitembasemodel<appliedsalesquoteitemdiscountmodel\r\n appliedsalesinvoiceitemdiscountmodel="" appliedsalesorderitemdiscountmodel\r\n="" |="">&gt;;\r\n}\r\n\r\nexport const AddAllToCartButton = (\r\n  props: IAddAllToCartButtonProps\r\n): JSX.Element =&gt; {\r\n  const {\r\n    btnClasses,\r\n    btnVariant,\r\n    btnSize,\r\n    dropdownBtnClasses,\r\n    excludeQuoteCart,\r\n    label,\r\n    disabled,\r\n    useConfirmModal,\r\n    salesItems\r\n  } = props;\r\n\r\n  const [ confirmationModalData, setConfirmationModalData ] = useState&lt;{\r\n    show: boolean;\r\n    messages: string[];\r\n    cartType: string;\r\n  }&gt;({\r\n    show: false,\r\n    messages: null,\r\n    cartType: null\r\n  });\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const cartFactory = useCartFactory();\r\n\r\n  const onAddCartItems = (TypeName: string): void =&gt; {\r\n    if (!salesItems) {\r\n      console.error(\"Missing or invalid products. Add to cart failed.\");\r\n      return;\r\n    }\r\n\r\n    const isForQuoteCart = TypeName === ServiceStrings.carts.types.quote;\r\n    setRunning();\r\n    cartFactory.addAllItemsToCart(TypeName, salesItems\r\n      .map(item =&gt; ({ ProductID: item.ProductID, Quantity: item.TotalQuantity })))\r\n      .then(result =&gt; {\r\n        if (useConfirmModal) {\r\n          const confirmMsg = `${result.Result.filter(Boolean).length}\r\n            unique item(s) were added to the ${TypeName.toLowerCase()}.`;\r\n          setConfirmationModalData({\r\n            show: isForQuoteCart ? !cefConfig.addToQuoteCartModalDisabled : !cefConfig.disableAddToCartModals,\r\n            // eslint-disable-next-line @typescript-eslint/no-extra-parens\r\n            messages: [ confirmMsg, ...(result.Messages ?? []) ],\r\n            cartType: TypeName\r\n          });\r\n        }\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setConfirmationModalData({\r\n          show: true,\r\n          messages: null,\r\n          cartType: TypeName\r\n        });\r\n        finishRunning(true, null, err.Messages ?? [ \"Failed to add cart item\" ]);\r\n      });\r\n  };\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <addalltocartmodal\r\n =="" oncancel="{()" show="{confirmationModalData.show}\r\n"> {\r\n          setConfirmationModalData({\r\n            show: false,\r\n            messages: null,\r\n            cartType: null\r\n          });\r\n        }}\r\n        messages={\r\n          viewState.hasError &amp;&amp; viewState.errorMessages?.every(e =&gt; typeof e === \"string\")\r\n            ? viewState.errorMessages as unknown[] as string[]\r\n            : confirmationModalData.messages\r\n        }\r\n        cartType={confirmationModalData.cartType}\r\n      /&gt;\r\n      <buttongroup classname="{props.classes}">\r\n        <button\r\n =="" ??="" \"btn-block="" \"success\"}\r\n="" classname="{btnClasses" disabled="{disabled" false}\r\n="" id='\"btnAddAllToCart\"\r\n' null}\r\n="" onclick="{()" rounded-start="" size="{btnSize" text-nowrap\"}\r\n="" text-white="" variant="{btnVariant" viewstate.running=""> onAddCartItems(ServiceStrings.carts.types.cart)}&gt;\r\n          {label ?? t(\"ui.storefront.userDashboard2.controls.salesDetail.ReorderAll\")}\r\n        \r\n        {excludeQuoteCart\r\n          ? null\r\n          : <dropdown as="{ButtonGroup}">\r\n            <dropdown.toggle\r\n ${btnvariant="==" 1px="" :="" ?="" ??="" \"#258035\"="" \"#3d4246\"}`,\r\n="" \"fit-content\"\r\n="" \"none\"\r\n="" \"success\"="" \"text-white="" `solid="" borderleft:="" classname="{dropdownBtnClasses" disabled="{disabled" excludequotecart\r\n="" false}\r\n="" id='\"addAllToCartButtonAddToQuoteCartDropdown\"\r\n' maxwidth:="" no-caret\"}\r\n="" rounded-0="" rounded-end="" style="{{\r\n" variant="{btnVariant}\r\n" viewstate.running="" }}="">\r\n              <i classname='\"fal' fa-chevron-down="" fa-sm\"="">\r\n            \r\n            <dropdown.menu align='\"end\"'>\r\n              <dropdown.item\r\n =="" active-bg-transparent\"\r\n="" as="{Button}\r\n" classname='\"px-2' onclick="{()" text-dark="" variant='\"outline-light\"\r\n'> onAddCartItems(ServiceStrings.carts.types.quote)}&gt;\r\n                <i classname='\"fal' fa-quote-right\"="">\r\n                 \r\n                <span>{\"Get a Quote\"}</span>\r\n              \r\n            </i></dropdown.item\r\n></dropdown.menu><i classname='\"fal' fa-quote-right\"="">\r\n          </i></i></dropdown.toggle\r\n></dropdown><i classname='\"fal' fa-chevron-down="" fa-sm\"=""><i classname='\"fal' fa-quote-right\"="">}\r\n      </i></i></button\r\n></buttongroup><i classname='\"fal' fa-chevron-down="" fa-sm\"=""><i classname='\"fal' fa-quote-right\"="">\r\n    \r\n  );\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\r\nimport { BidModel, LotModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { useBiddingFactory } from \"src/_shared/customHooks/useBiddingFactory\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { Price } from \"src/Catalog/controls/Price\";\r\nimport { AddToCartButton } from \"src/Cart/controls\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\ninterface IProductCardBiddingWidgetProps {\r\n  lotID: number;\r\n  lot?: LotModel;\r\n  product: ProductModel;\r\n  containerClasses?: string;\r\n  asIcon: boolean;\r\n  containerStyle: any;\r\n}\r\n\r\nexport const ProductCardBiddingWidget = (props: IProductCardBiddingWidgetProps): JSX.Element =&gt; {\r\n  const [ lot, setLot ] = useState<lotmodel>(null);\r\n  const [ currentBid, setCurrentBid ] = useState<bidmodel>(null);\r\n  const [ bidAmount, setBidAmount ] = useState<number>(0);\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const biddingFactory = useBiddingFactory();\r\n  const currentUser = useCurrentUser();\r\n\r\n  const lotUpdateReceived = (newLot: LotModel) =&gt; {\r\n    setLot(newLot);\r\n    setCurrentBid(newLot?.HighestBid);\r\n  };\r\n\r\n  useEffect(() =&gt; {\r\n    if (biddingFactory) {\r\n      biddingFactory.onLotUpdate(props.lotID, (newLot: LotModel) =&gt; lotUpdateReceived(newLot));\r\n    }\r\n  }, [ biddingFactory ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!biddingFactory || !lot) {\r\n      return;\r\n    }\r\n    biddingFactory\r\n      .getQuickBidAmount(lot.ID)\r\n      .then(newQuickBid =&gt; {\r\n        if (bidAmount &lt; newQuickBid) {\r\n          setBidAmount(newQuickBid);\r\n        }\r\n      });\r\n  }, [ currentBid ]);\r\n\r\n  const placeBid = (): void =&gt; {\r\n    // Finish running called on the lot update callback\r\n    setRunning();\r\n    biddingFactory\r\n      .placeBid(props.lotID, bidAmount)\r\n      .then(r =&gt; {\r\n        if (!r) {\r\n          finishRunning(true, \"Lot is missing\");\r\n        }\r\n        // Handle the lot response here\r\n        // Example: if highest bid user ID != current user ID, then the user's new bid is not the highest bid\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; finishRunning(true, err));\r\n  };\r\n\r\n  const onChangeBidAmount = (e: React.ChangeEvent<htmlinputelement>) =&gt; {\r\n    e.preventDefault();\r\n    setBidAmount(Number(e.target.value));\r\n  };\r\n\r\n  const disableBidButton = () =&gt; currentUser.ID &lt;= 0\r\n    || currentUser.ID === currentBid?.UserID\r\n    || viewState.running\r\n    || lot.StatusKey === \"Closed\";\r\n\r\n  if (!lot || !biddingFactory) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <div classname='\"d-flex' justify-content-between\"="">\r\n        <span>Current bid:</span>\r\n        <h3>{currencyFormatter.format(currentBid?.CurrentBid ?? lot.StartingPrice ?? 0)}</h3>\r\n      </div>\r\n      {lot.BuyNowAvailable &amp;&amp; <div classname='\"d-flex' justify-content-between\"="">\r\n        <span>Buy now price:</span>\r\n        <price\r\n prices="{props.product.readPrices()}/">\r\n      </price\r\n></div>}\r\n      <div\r\n :="" ?="" \"100%\"="" \"d-inline-block\"="" \"mb-1="" classname="{\r\n" d-block\"\r\n="" props.asicon="" props.containerclasses="" props.containerstyle="" style="{props.containerStyle" width:="" {="" }\r\n="" }}="">\r\n        <inputgroup classname='\"flex-nowrap' w-100\"="">\r\n          <inputgroup.text>\r\n            <i classname='\"fal' fa-dollar-sign\"="">\r\n          </i></inputgroup.text><i classname='\"fal' fa-dollar-sign\"="">\r\n          <form.control\r\n 0}\r\n="" ??="" aria-label='\"num\"\r\n' classname='\"text-center\"\r\n' min="{currentBid?.CurrentBid" onchange="{onChangeBidAmount}\r\n" type='\"number\"\r\n' value="{bidAmount}\r\n">\r\n          {lot.BuyNowAvailable &amp;&amp; <button\r\n =="" disabled="{disableBidButton()}\r\n" onclick="{()" size='\"lg\"\r\n' variant='\"success\"\r\n'> placeBid()}&gt;\r\n            Place Bid\r\n          }\r\n        </button\r\n></form.control\r\n></i></inputgroup><i classname='\"fal' fa-dollar-sign\"="">\r\n      \r\n      <div>\r\n        {lot.BuyNowAvailable\r\n          ? <addtocartbutton\r\n btnsize='\"lg\"\r\n' btnvariant='\"success\"' product="{props.product}\r\n" quantity="{1}\r\n">\r\n          : <button\r\n =="" classname='\"w-100\"\r\n' disabled="{disableBidButton()}\r\n" onclick="{()" size='\"lg\"\r\n' variant='\"success\"\r\n'> placeBid()}&gt;\r\n          Place Bid\r\n          \r\n        }\r\n      </button\r\n></addtocartbutton\r\n></div>\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { AddToCartButton } from \"./../../Cart/controls/AddToCartButton\";\r\nimport { AddToCartQuantitySelector } from \"src/Cart/controls/AddToCartQuantitySelector\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { ViewDetailsButton } from \"src/Catalog/controls/ViewDetailsButton\";\r\nimport { ProductCardBiddingWidget } from \"src/Catalog/views/ProductCardWidgets/ProductCardBiddingWidget\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { CalculatedPrices } from \"src/_api/cvApi.shared\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\ninterface IProductCardActionButtonWidgetProps {\r\n  product: ProductModel;\r\n  containerClasses?: string;\r\n  containerStyle?: any;\r\n  excludeQuoteCart?: boolean;\r\n  addToCartBtnClasses?: string;\r\n  addToCartBtnVariant?: string;\r\n  addToCartContainerClasses?: string;\r\n  quoteCartBtnSeparated?: boolean;\r\n  viewDetailsBtnVariant?: string;\r\n  useOutOfStockInsteadOfViewDetails?: boolean;\r\n  outOfStockBtnVariant?: string;\r\n  outOfStockBtnClasses?: string;\r\n  small?: boolean;\r\n  buttonView?: \"addToCart\" | \"viewDetails\" | \"addToQuoteCart\";\r\n  asIcon?: boolean;\r\n  index?: number;\r\n  forceNoQuantitySelector?: true;\r\n  disableModals?: boolean;\r\n  initialQuantity?: number;\r\n}\r\n\r\n// eslint-disable-next-line complexity\r\nexport const ProductCardActionButtonWidget = (props: IProductCardActionButtonWidgetProps): JSX.Element =&gt; {\r\n  const {\r\n    product,\r\n    containerClasses,\r\n    containerStyle,\r\n    excludeQuoteCart,\r\n    addToCartBtnClasses,\r\n    addToCartBtnVariant,\r\n    addToCartContainerClasses,\r\n    // TODO: quoteCartBtnSeparated,\r\n    viewDetailsBtnVariant,\r\n    useOutOfStockInsteadOfViewDetails,\r\n    outOfStockBtnVariant,\r\n    outOfStockBtnClasses,\r\n    small,\r\n    buttonView,\r\n    asIcon,\r\n    index,\r\n    disableModals\r\n  } = props;\r\n\r\n  const [ localQuantity, setLocalQuantity ] = useState<number>(props.initialQuantity ?? 1);\r\n  const [ pricesToUse, setPricesToUse ] = useState<calculatedprices>(null);\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  // TODO: const cart = useSelector((state: IReduxStore) =&gt; state.cart.cart);\r\n\r\n  // TODO: const productInCart = cart?.SalesItems?.find(item =&gt; item.ProductID === product.ID);\r\n\r\n  const buttonViewInternal = buttonView ?? \"addToCart\";\r\n  const showAddToQuoteCartBtn = cefConfig.featureSet.salesQuotes.useQuoteCart &amp;&amp; !excludeQuoteCart;\r\n  // TODO: const showAddToQuoteCartDropdown = !quoteCartBtnSeparated;\r\n\r\n  if (buttonViewInternal === \"viewDetails\") {\r\n    return (\r\n      <viewdetailsbutton\r\n ??="" \"secondary\"}\r\n="" asicon="{false}\r\n" btn-block`}\r\n="" btnclasses="{`${addToCartBtnClasses}" btnvariant="{viewDetailsBtnVariant" includequotecart="{false}\r\n" product="{product}\r\n" quantity="{localQuantity}\r\n" seourl="{product.SeoUrl}\r\n" useconfirmmodal="{!cefConfig?.addToQuoteCartModalDisabled}\r\n" verticalalign='\"middle\"\r\n'>\r\n    );\r\n  }\r\n\r\n  if (!product.readInventory || !product.TypeName) {\r\n    return <errorview error='\"Product' inventory="" is="" missing="" or="" typename\"="">;\r\n  }\r\n\r\n  const productInventory = product.readInventory();\r\n  const productIsOutOfStock = productInventory.IsOutOfStock;\r\n  const productAllowsBackOrder = productInventory.AllowBackOrder;\r\n  const productIsVariantMaster = product.TypeName.toLowerCase() === \"variant master\";\r\n\r\n  const productCantBeAddedToRegularCart = productIsOutOfStock &amp;&amp; !productAllowsBackOrder;\r\n\r\n  if (product.LotID) {\r\n    return (\r\n      <productcardbiddingwidget\r\n asicon="{asIcon}\r\n" containerclasses="{containerClasses}\r\n" containerstyle="{containerStyle}\r\n" lotid="{product.LotID}\r\n" product="{product}\r\n">\r\n    );\r\n  }\r\n\r\n  useEffect(() =&gt; {\r\n    if (pricesToUse) {\r\n      return;\r\n    }\r\n    cvApi.pricing.CalculatePricesForProduct(product.ID, 1)\r\n    .then(result =&gt; {\r\n      if (!result.data.ActionSucceeded) {\r\n        console.error(true, \"An error occurred while fetching prices\");\r\n        return;\r\n      }\r\n      const toUse = {\r\n        amountOff: 0,\r\n        base: 0,\r\n        haveBase: false,\r\n        haveMsrp: false,\r\n        haveReduction: false,\r\n        haveSale: false,\r\n        isSale: false,\r\n        loading: true,\r\n        msrp: 0,\r\n        percentOff: 0,\r\n        reduction: 0,\r\n        sale: 0\r\n      };\r\n      toUse.base = result.data.Result.BasePrice;\r\n      toUse.sale = result.data.Result.SalePrice;\r\n      toUse.msrp = result.data.Result.MsrpPrice;\r\n      toUse.reduction = result.data.Result.ReductionPrice;\r\n      // Assign calculated values\r\n      toUse.haveBase = toUse.base &gt;= 0;\r\n      toUse.haveSale = toUse.sale &gt;= 0;\r\n      toUse.haveMsrp = toUse.msrp &gt;= 0;\r\n      toUse.haveReduction = toUse.reduction &gt;= 0;\r\n      toUse.isSale = toUse.sale &gt; 0 &amp;&amp; toUse.sale &lt; toUse.base;\r\n      if (toUse.isSale) {\r\n        toUse.amountOff = toUse.base - toUse.sale;\r\n        toUse.percentOff = toUse.amountOff / toUse.base * 100;\r\n      }\r\n      // Finish\r\n      toUse.loading = false;\r\n      setPricesToUse(toUse);\r\n    });\r\n  }, [product]);\r\n\r\n  if (buttonViewInternal === \"addToQuoteCart\" || pricesToUse?.base &lt;= 0) {\r\n    return (\r\n      &lt;&gt;\r\n        {!productIsVariantMaster &amp;&amp; !props.forceNoQuantitySelector\r\n          &amp;&amp; <div\r\n :="" ?="" \"100%\"="" \"d-inline-block\"="" \"mb-1="" classname="{`${asIcon" d-block\"}`}\r\n="" style="{{" width:="" }}="">\r\n            <addtocartquantityselector\r\n <="1}\r\n" decreasedisabled="{localQuantity" id="{product.ID}\r\n" increasedisabled="{false}\r\n" initialvalue="{localQuantity}\r\n" key="{localQuantity}\r\n" number)="" onchange="{(val:"> setLocalQuantity(val)}\r\n            /&gt;\r\n          \r\n        }\r\n        {productIsVariantMaster || productCantBeAddedToRegularCart\r\n          ? <viewdetailsbutton\r\n !disablemodals}\r\n="" &&="" :="" ?="" ??="" \"\"="" \"btn-block\"}`}\r\n="" \"middle\"}\r\n="" \"secondary\"}\r\n="" \"top\"="" btnclasses="{`${asIcon" btnvariant="{viewDetailsBtnVariant" includequotecart="{showAddToQuoteCartBtn}\r\n" product="{product}\r\n" quantity="{localQuantity}\r\n" seourl="{product.SeoUrl}\r\n" useconfirmmodal="{!cefConfig?.addToQuoteCartModalDisabled" verticalalign="{asIcon">\r\n          : null}\r\n        {!productIsVariantMaster &amp;&amp; !productCantBeAddedToRegularCart\r\n          ? <addtocartbutton\r\n !disablemodals}\r\n="" &&="" ??="" \"success\"}\r\n="" btnclasses="{addToCartBtnClasses}\r\n" btnvariant="{addToCartBtnVariant" containerclasses="{addToCartContainerClasses}\r\n" index="{index}\r\n" product="{product}\r\n" quantity="{localQuantity}\r\n" quotecartonly="{true}\r\n" useconfirmmodal="{!cefConfig?.addToQuoteCartModalDisabled">\r\n          : null}\r\n      \r\n    );\r\n  }\r\n\r\n  if (productIsVariantMaster) {\r\n    return (\r\n      &lt;&gt;\r\n        <div btn-group="" classname='\"hidden-stock-quantity' w-100\"="">\r\n          <viewdetailsbutton\r\n !asicon="" !disablemodals}\r\n="" &&="" :="" ?="" ??="" \"\"="" \"btn-block\"}="" \"lg\"="" \"middle\"}\r\n="" \"secondary\"}\r\n="" \"top\"="" asicon="{asIcon}\r\n" btnclasses="{`${asIcon" btnsize="{!small" btnvariant="{viewDetailsBtnVariant" includequotecart="{false}\r\n" null}\r\n="" product="{product}\r\n" quantity="{localQuantity}\r\n" seourl="{product.SeoUrl}\r\n" underline-hover-none`}\r\n="" useconfirmmodal="{!cefConfig?.addToQuoteCartModalDisabled" verticalalign="{asIcon">\r\n        </viewdetailsbutton\r\n></div>\r\n      \r\n    );\r\n  }\r\n\r\n  if (productIsOutOfStock &amp;&amp; !productAllowsBackOrder) {\r\n    return (\r\n      &lt;&gt;\r\n        {showAddToQuoteCartBtn &amp;&amp; !props.forceNoQuantitySelector\r\n          &amp;&amp; <div\r\n :="" ?="" \"100%\"="" \"d-inline-block\"="" \"mb-1="" asicon="" classname="{containerClasses" containerclasses="" containerstyle="" d-block\"}\r\n="" style="{containerStyle" width:="" {="" }}="">\r\n            <addtocartquantityselector\r\n <="1}\r\n" decreasedisabled="{localQuantity" id="{product.ID}\r\n" initialvalue="{localQuantity}\r\n" key="{localQuantity}\r\n" number)="" onchange="{(val:"> setLocalQuantity(val)}\r\n            /&gt;\r\n          \r\n        }\r\n        {useOutOfStockInsteadOfViewDetails\r\n          ? &lt;&gt;\r\n            <button\r\n !asicon="" ${outofstockbtnclasses="" &&="" :="" ?="" ??="" \"\"}`}\r\n="" \"lg\"="" \"primary\"}\r\n="" classname="{`w-100" disabled="{true}" null}\r\n="" size="{!small" variant="{outOfStockBtnVariant">\r\n              {t(\"ui.storefront.common.OutOfStock\")}\r\n            \r\n            {showAddToQuoteCartBtn\r\n              &amp;&amp; <addtocartbutton\r\n !disablemodals}\r\n="" ${addtocartbtnclasses="" &&="" (asicon="" :="" ?="" ??="" \"\"="" \"btn-block\")}`}\r\n="" \"middle\"}\r\n="" \"top\"="" asicon="{asIcon}\r\n" btnclasses="{`mt-1" btnvariant='\"secondary\"\r\n' index="{index}\r\n" product="{product}\r\n" quantity="{localQuantity}\r\n" quotecartonly="{true}\r\n" rounded="" useconfirmmodal="{!cefConfig?.addToQuoteCartModalDisabled" verticalalign="{asIcon" w-100="">\r\n            }\r\n          \r\n          : <div btn-group="" classname='\"hidden-stock-quantity' w-100\"="">\r\n            <viewdetailsbutton\r\n !disablemodals}\r\n="" &&="" (asicon="" :="" ?="" ??="" \"\"="" \"btn-block\")}="" \"middle\"}\r\n="" \"secondary\"}\r\n="" \"top\"="" asicon="{asIcon}\r\n" btnclasses="{`${addToCartBtnClasses" btnvariant="{viewDetailsBtnVariant" includequotecart="{showAddToQuoteCartBtn}\r\n" product="{product}\r\n" quantity="{localQuantity}\r\n" seourl="{product.SeoUrl}\r\n" underline-hover-none`}\r\n="" useconfirmmodal="{!cefConfig?.addToQuoteCartModalDisabled" verticalalign="{asIcon">\r\n          </viewdetailsbutton\r\n></div>\r\n        }\r\n      \r\n    );\r\n  }\r\n\r\n  if (!productIsOutOfStock || productAllowsBackOrder) {\r\n    return (\r\n      &lt;&gt;\r\n        {!props.forceNoQuantitySelector\r\n          &amp;&amp; <div\r\n :="" ?="" \"100%\"="" \"d-inline-block\"="" \"mb-1="" asicon="" classname="{containerClasses" containerclasses="" containerstyle="" d-block\"}\r\n="" style="{containerStyle" width:="" {="" }}="">\r\n            <addtocartquantityselector\r\n <="1}\r\n" decreasedisabled="{localQuantity" id="{product.ID}\r\n" initialvalue="{localQuantity}\r\n" key="{localQuantity}\r\n" number)="" onchange="{(val:"> setLocalQuantity(val)}\r\n            /&gt;\r\n          \r\n        }\r\n        <addtocartbutton\r\n !disablemodals}\r\n="" ${addtocartbtnclasses="" &&="" (asicon="" :="" ?="" ??="" \"\"="" \"btn-block\")}`}\r\n="" \"middle\"}\r\n="" \"secondary\"="" \"success\"}\r\n="" \"top\"="" addtocartbtnvariant="" asicon="{asIcon}\r\n" btnclasses="{`rounded-start" btnvariant="{addToCartBtnVariant" containerclasses="{addToCartContainerClasses}\r\n" dropdownbtnvariant="{productCantBeAddedToRegularCart" excludequotecart="{!showAddToQuoteCartBtn}\r\n" index="{index}\r\n" product="{product}\r\n" quantity="{localQuantity}\r\n" useconfirmmodal="{!cefConfig.disableAddToCartModals" verticalalign="{asIcon">\r\n      \r\n    );\r\n  }\r\n\r\n  return <errorview error='\"This' never="" render\"="" should="">;\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Button, Dropdown, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { ProductSuggestResult } from \"src/_api/cvApi._DtoClasses\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useDebounceWithCallback } from \"src/_shared/customHooks/useDebounceWithCallback\";\r\nimport promiser from \"src/_shared/Promiser\";\r\n\r\nexport const ExternalSearchBox = (): JSX.Element =&gt; {\r\n  const [ suggestions, setSuggestions ] = useState<array<productsuggestresult>&gt;([]);\r\n  const [ showSuggestions, setShowSuggestions ] = useState(false);\r\n  const [ query, setQuery ] = useState(\"\");\r\n  const [ , setError ] = useState(null);\r\n\r\n  useDebounceWithCallback(query, handleDebouncedQuery, 500);\r\n  const { t } = useTranslation();\r\n  const history = useHistory();\r\n  const cefConfig = useCefConfig();\r\n\r\n  useEffect(() =&gt; {\r\n    if (suggestions?.length) {\r\n      setShowSuggestions(true);\r\n    }\r\n  }, [ suggestions ]);\r\n\r\n  function handleDebouncedQuery(): void {\r\n    if (!query?.length) {\r\n      setShowSuggestions(false);\r\n      setSuggestions([]);\r\n      return;\r\n    }\r\n    getSuggestionsWithQuery(query);\r\n  }\r\n\r\n  function getSuggestionsWithQuery(qry: string): void {\r\n    const promiserKey = `getSuggestionsWithQuery(${qry})`;\r\n    promiser.resolve(\r\n      promiserKey,\r\n      () =&gt; cvApi.providers\r\n        .SuggestProductCatalogWithProvider({\r\n          Page: 1,\r\n          PageSetSize: 8,\r\n          PageSize: 8,\r\n          Query: qry,\r\n          Sort: 0\r\n        })\r\n    ).then(result =&gt; {\r\n      const sorted = result.data.sort((a, b) =&gt; a.Score - b.Score).reverse();\r\n      setSuggestions(sorted);\r\n    })\r\n      .catch(err =&gt; {\r\n        setError(err);\r\n      });\r\n  }\r\n\r\n  const handleSubmit = (e: React.MouseEvent<htmlformelement>): void =&gt; {\r\n    if (!cefConfig) {\r\n      e.preventDefault();\r\n      return;\r\n    }\r\n    if (query === \"\") {\r\n      history.push(cefConfig.routes.catalog.root);\r\n      history.go(0);\r\n    } else {\r\n      history.push(`${cefConfig.routes.catalog.root}?term=${query}`);\r\n      history.go(0);\r\n      setQuery(\"\");\r\n    }\r\n    e.preventDefault();\r\n  };\r\n\r\n  // TODO: show <errorview> somewhere in JSX below where it'll look good\r\n  return (\r\n    <div classname='\"d-flex' justify-content-end="" m-0="" role='\"search\"' w-100\"="">\r\n      <form\r\n classname='\"form-inline' onsubmit="{handleSubmit}" position-relative="" w-100\"\r\n="">\r\n        <inputgroup>\r\n          <form.control\r\n )}\r\n="" =="" \"ui.storefront.searchcatalog.controls.externalsearchbox.search.namecas\"\r\n="" aria-label='\"Search\"\r\n' bg-light="" border-right-0="" classname='\"search-input' id='\"extSearch\"\r\n' onchange="{e" one-rem\"\r\n="" p-0="" placeholder="{t(\r\n" ps-2="" py-3="" text-dark="" type='\"search\"\r\n'> setQuery(e.target.value)}\r\n            value={query}\r\n          /&gt;\r\n          <inputgroup.text bg-white\"="" classname='\"p-0'>\r\n            <button\r\n 0="" 0,="" borderbottomleftradius:="" bordertopleftradius:="" classname='\"ps-3' pe-3\"\r\n="" style="{{" type='\"submit\"' variant='\"\"\r\n' }}\r\n="">\r\n              <i aria-label='{\"search\"}' classname='\"fal' fa-search="" fw-bolder="" text-gfs-blue\"="">\r\n            \r\n          </i></button\r\n></inputgroup.text><i aria-label='{\"search\"}' classname='\"fal' fa-search="" fw-bolder="" text-gfs-blue\"="">\r\n        </i></form.control\r\n></inputgroup><i aria-label='{\"search\"}' classname='\"fal' fa-search="" fw-bolder="" text-gfs-blue\"="">\r\n        <dropdown\r\n 1000="" =="" \"105%\",="" bg-white="" classname='\"position-absolute' ontoggle="{(nextShow" p-0\"\r\n="" show="{showSuggestions}\r\n" style="{{" top:="" zindex:="" }}\r\n=""> {\r\n            if (nextShow === false) {\r\n              setShowSuggestions(false);\r\n            }\r\n          })}&gt;\r\n          <dropdown.menu>\r\n            {suggestions.map(suggestion =&gt; {\r\n              const {Name, SeoUrl, ID} = suggestion;\r\n              return <dropdown.item +="" \"_\"="" as='\"div\"\r\n' border-0\"="" classname='\"px-2' key="{ID" name}\r\n="" py-0="">\r\n                <a\r\n =="" \"productdetail\")}\r\n="" href="{corsLink(cefConfig," onclick="{()" seourl,=""> setShowSuggestions(false)}\r\n                  className=\"underline-hover-none\"&gt;\r\n                  {Name}\r\n                \r\n              </a\r\n></dropdown.item>;\r\n            })}\r\n          </dropdown.menu>\r\n        \r\n      \r\n    </dropdown\r\n></i></form\r\n></div><i aria-label='{\"search\"}' classname='\"fal' fa-search="" fw-bolder="" text-gfs-blue\"="">\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport React, { useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ConfirmationModal } from \"src/_shared/modals\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { LanguageModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\nexport const LanguageSelectorButton = (): JSX.Element =&gt; {\r\n  const [ showSelectLanguageModal, setShowSelectLanguageModal ] = useState<boolean>(false);\r\n  const [ availableLanguages, setAvailableLanguages ] = useState<array<languagemodel>&gt;([]);\r\n\r\n  const { i18n } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const onConfirm = () =&gt; {\r\n    setRunning();\r\n    cvApi.globalization\r\n      .GetLanguageByKey(i18n.language)\r\n      .then(res =&gt; {\r\n        setShowSelectLanguageModal(false);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const onLanguageSelectorButtonClicked = () =&gt; {\r\n    setShowSelectLanguageModal(true);\r\n    setRunning();\r\n    cvApi.globalization\r\n      .GetLanguages()\r\n      .then(res =&gt; {\r\n        if (!res.data || !res.data.Results) {\r\n          finishRunning(true, \"No languages found\");\r\n          return;\r\n        }\r\n        setAvailableLanguages(res.data.Results);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const currentLng = availableLanguages.length ? availableLanguages.find(lang =&gt; lang.Locale === i18n.language) : null;\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <confirmationmodal\r\n =="" oncancel="{()" onconfirm="{onConfirm}\r\n"> setShowSelectLanguageModal(false)}\r\n        // Intentionally empty\r\n        title=\"\"\r\n        show={showSelectLanguageModal}\r\n        confirmDisabled={viewState.hasError}\r\n        confirmBtnLabel=\"Select\"&gt;\r\n        {viewState.running\r\n          ? <loadingwidget>\r\n          : <select\r\n onchange="{(e:" react.changeevent<htmlselectelement="" value="{i18n.language}\r\n">) =&gt; i18n.changeLanguage(e.target.value)}&gt;\r\n            {availableLanguages &amp;&amp; Array.isArray(availableLanguages)\r\n              ? availableLanguages.map(lang =&gt; <option key="{lang.ID}" value="{lang.Locale}">\r\n                {lang.UnicodeName}\r\n              </option>)\r\n              : null}\r\n          \r\n        }\r\n        {viewState.errorMessage ? <errorview error="{viewState.errorMessage}"> : null}\r\n      \r\n      <button onclick="{onLanguageSelectorButtonClicked}" variant='\"secondary\"'>\r\n        {currentLng ? currentLng.UnicodeName : i18n.language}\r\n      </button>\r\n    \r\n  );\r\n};\r\n","import { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Container, Row } from \"react-bootstrap\";\r\nimport { MicroCart } from \"src/Cart/views\";\r\nimport { Categories } from \"src/_shared/Categories\";\r\nimport { MiniMenu } from \"src/_shared/MiniMenu\";\r\nimport { ExternalSearchBox } from \"src/Catalog/controls\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { LanguageSelectorButton } from \"src/_shared/LanguageSelectorButton\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport const NavMenu = (): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n\r\n  return (\r\n    <container as='\"header\"\r\n' classname='\"d-print-none\"\r\n' fluid\r\n="" id='\"header\"'>\r\n      <div\r\n \"70px\"="" align-items-center\"\r\n="" classname='\"bg-light' id='\"headerMid\"\r\n' minheight:="" row="" style="{{" }}="">\r\n        \r\n          <link\r\n classname='\"navbar-brand\"\r\n' development="" ecommerce="" title='\"Clarity' to='\"/\"\r\n' website\"="">\r\n             \r\n            <imagewithfallback\r\n 200,\r\n="" \"both\",\r\n="" \"pad\"\r\n="" alt='\"Clarity' classname='\"img-fluid' data-sid='\"imgCompanySiteLogo\"\r\n' imageresizerparamsbody="{{\r\n" inc\"\r\n="" kind='{\"brands\"}\r\n' lazyloaded\"\r\n="" maxheight:="" maxwidth:="" mode:="" scale:="" src='{\"clarity-ecommerce-logo.png\"}\r\n' ventures="" }}\r\n="">\r\n          \r\n        \r\n        \r\n          <externalsearchbox>\r\n        \r\n        \r\n          <row classname='\"align-items-center' h-100\"="">\r\n            \r\n              <microcart cart\"="" type='\"Quote'>\r\n            \r\n            \r\n              <microcart type='\"Cart\"'>\r\n            \r\n            \r\n              <minimenu>\r\n            \r\n          </minimenu></microcart></microcart></row>\r\n          <row classname='\"align-items-center' mb-2\"="">\r\n            \r\n              <languageselectorbutton>\r\n            \r\n          </languageselectorbutton></row>\r\n        \r\n      \r\n      <row id='\"headerBot\"'>\r\n        \r\n          <container classname='\"px-2\"'>\r\n            <div bg-dark-blue="" classname='\"navbar' navbar-dark="" navbar-expand-md="" py-md-0\"="" row="">\r\n              <button\r\n aria-controls='\"headerBotContent\"\r\n' aria-expanded='\"false\"\r\n' aria-label='\"Toggle' classname='\"navbar-toggler\"\r\n' data-target='\"#headerBotContent\"\r\n' data-toggle='\"collapse\"\r\n' navigation\"="" type='\"button\"\r\n'>\r\n                {t(\"ui.storefront.userDashboard.ToggleNavigation\")}\r\n                <div classname='\"navbar-toggler-icon\"'></div>\r\n              \r\n              <div classname='\"collapse' id='\"headerBotContent\"' navbar-collapse\"="">\r\n                <div classname='\"navbar-nav\"'>\r\n                  <ul classname='\"navbar-nav' mx-0\"="" nav="" nav-pills="">\r\n                    <li classname='\"nav-item' dropdown="" mega-dropdown="" position-static\"="">\r\n                      <link\r\n aria-expanded='\"false\"' classname='\"nav-link' data-bs-toggle='\"dropdown\"\r\n' dropdown-toggle\"\r\n="" text-white="" to="{cefConfig?.routes.catalog.root}\r\n">\r\n                        {t(\"ui.storefront.common.Product.Plural\")}\r\n                      \r\n                      <div classname='\"dropdown-menu' mega-menu="" sm-md-position-relative\"="" top-auto="" w-100="">\r\n                        <categories>\r\n                      </categories></div>\r\n                    </link\r\n></li>\r\n                    <li classname='\"nav-item' dropdown\"="">\r\n                      <link\r\n aria-expanded='\"false\"' aria-haspopup='\"true\"\r\n' classname='\"nav-link' data-toggle='\"dropdown\"\r\n' dropdown-toggle\"\r\n="" id='\"dropdownMenu\"\r\n' role='\"button\"\r\n' text-white="" to='\"/about\"\r\n'>\r\n                        {t(\"ui.storefront.common.AboutUs\")}\r\n                      \r\n                      <ul\r\n aria-labelledby='\"dropdownMenu\"' classname='\"dropdown-menu\"\r\n'>\r\n                        </ul\r\n></link\r\n></li><li>\r\n                          <link classname='\"dropdown-item\"' to='\"/\"'/>\r\n                            Link 1\r\n                          \r\n                        </li>\r\n                        <li>\r\n                          <link classname='\"dropdown-item\"' to='\"/\"'/>\r\n                            Link 2\r\n                          \r\n                        </li>\r\n                        <li>\r\n                          <link classname='\"dropdown-item\"' to='\"/\"'/>\r\n                            Link 3\r\n                          \r\n                        </li>\r\n                      </ul>\r\n                    \r\n                    <li classname='\"nav-item\"'>\r\n                      <link classname='\"nav-link' text-white\"="" to='\"/news\"'/>\r\n                        News\r\n                      \r\n                    </li>\r\n                    <li classname='\"nav-item\"'>\r\n                      <link classname='\"nav-link' text-white\"="" to='\"/industry\"'/>\r\n                        Industry\r\n                      \r\n                    </li>\r\n                    <li classname='\"nav-item\"'>\r\n                      <link classname='\"nav-link' text-white\"="" to='\"/request-info\"'/>\r\n                        Request Info\r\n                      \r\n                    </li>\r\n                  \r\n                </div>\r\n              </div>\r\n            </button\r\n></div>\r\n          </container>\r\n        \r\n      </row>\r\n    </externalsearchbox></imagewithfallback\r\n></link\r\n></div\r\n></container>\r\n  );\r\n};\r\n","import { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n  faAt,\r\n  faMapMarker,\r\n  faPhoneSquare\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport {\r\n  faCcAmex,\r\n  faCcDiscover,\r\n  faCcMastercard,\r\n  faCcPaypal,\r\n  faCcVisa,\r\n  faFacebook,\r\n  faLinkedin,\r\n  faTwitter\r\n} from \"@fortawesome/free-brands-svg-icons\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\n\r\nexport const Footer = (): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <footer\r\n bg-dark-blue="" classname='\"container-fluid' d-print-none="" id='\"footer\"\r\n' py-4="" text-light="" text-white-50\"="">\r\n      {/* <div classname='\"row\"' id='\"footerTop2\"'>\r\n        <div classname='\"col-12\"'>\r\n          <div cef-brand-formatting-footer=""></div>\r\n        </div>\r\n      </div> */}\r\n      <div classname='\"row\"' id='\"footerTop\"'></div>\r\n      <div classname='\"row\"' id='\"footerMid\"'>\r\n        <div classname='\"\r\n' col-12="" col-lg-3="" col-md-4="" col-sm-6="" col-xl-2="" lg-ms-auto="" order-1\r\n="" order-lg-1\r\n="" order-md-1\r\n="" order-sm-1\r\n="" order-xl-1\r\n="" xl-ms-auto\"="">\r\n          <a\r\n classname='\"mb-1\"\r\n' href='\"http://www.clarity-ventures.com/\"\r\n' id='\"btnFooterLogo\"\r\n' noreferrer\"\r\n="" rel='\"noopener' target='\"_blank\"' title='\"Logo\"\r\n'>\r\n            <imagewithfallback\r\n alt='\"Clarity' classname='\"img-fluid' height='\"74\"\r\n' kind='\"brands\"\r\n' lazyload\"\r\n="" src='{\"clarity-logo-white-on-black.png\"}\r\n' ventures="" website\"\r\n="" width='\"259\"\r\n'>\r\n          \r\n          <p classname='\"text-center' mt-2\"="" small="">\r\n            The Clarity eCommerce platform takes you where the other stores\r\n            can't go. It allows full customization of integrations,\r\n            reporting, styling, tracking, inventory... the list goes on.\r\n          </p>\r\n        </imagewithfallback\r\n></a\r\n></div>\r\n        <div classname='\"\r\n' col-7\r\n="" col-lg-3\r\n="" col-md-4\r\n="" col-sm-6\r\n="" col-xl-auto\r\n="" lg-me-auto="" mb-3\"="" order-2="" order-lg-5="" order-md-5="" order-sm-2="" order-xl-5="" xl-me-auto="">\r\n          <h4 classname='\"text-uppercase' small="" text-light\"="">\r\n            {t(\"ui.storefront.common.ContactUs\")}\r\n          </h4>\r\n          <div align-items-center="" classname='\"row' gx-0="" mb-3\"="">\r\n            <div classname='\"col-auto\"'>\r\n              <div border-light="" classname='\"border' p-2\"="" rounded-circle="">\r\n                <fontawesomeicon classname='\"fa-fw' fa-lg\"="" icon="{faMapMarker}">\r\n              </fontawesomeicon></div>\r\n            </div>\r\n            <div classname='\"col' id='\"companyAddress\"' ps-3\"="">\r\n              <address classname='\"mb-0' small\"="">\r\n                <span classname='\"address\"'>\r\n                  6805 Capital of Texas Hwy\r\n                  <br/>\r\n                  Suite 312\r\n                  <br/>\r\n                  Austin, TX 78731\r\n                </span>\r\n              </address>\r\n            </div>\r\n          </div>\r\n          <div align-items-center="" classname='\"row' gx-0="" mb-3\"="">\r\n            <div classname='\"col-auto\"'>\r\n              <div border-light="" classname='\"border' p-2\"="" rounded-circle="">\r\n                <fontawesomeicon classname='\"fa-fw' fa-lg\"="" icon="{faPhoneSquare}">\r\n              </fontawesomeicon></div>\r\n            </div>\r\n            <div classname='\"col' id='\"companyPhone\"' ps-3\"="">\r\n              <a classname='\"text-white-50' href='\"tel:800-928-8160\"' small\"="">\r\n                800-928-8160\r\n              </a>\r\n            </div>\r\n          </div>\r\n          <div align-items-center="" classname='\"row' gx-0="" mb-3\"="">\r\n            <div classname='\"col-auto\"'>\r\n              <div border-light="" classname='\"border' p-2\"="" rounded-circle="">\r\n                <fontawesomeicon classname='\"fa-fw' fa-lg\"="" icon="{faAt}">\r\n              </fontawesomeicon></div>\r\n            </div>\r\n            <div classname='\"col' id='\"companyEmail\"' ps-3\"="">\r\n              <a\r\n classname='\"text-white-50' href='\"mailto:rfq@clarity-ventures.com\"' small\"\r\n="">\r\n                rfq@clarity-ventures.com\r\n              \r\n            </a\r\n></div>\r\n          </div>\r\n        </div>\r\n        <div classname='\"order-3' col-5\r\n="" col-lg-auto\r\n="" col-md-auto\r\n="" col-sm-6\r\n="" col-tk-auto\"="" col-xl-6\r\n="" lg-me-auto\r\n="" order-lg-6="" order-md-6="" order-sm-6="" order-xl-6="" xl-text-right\r\n="" xs-text-right\r\n="">\r\n          <a href='\"http://www.facebook.com/ClarityTeam\"' title='\"Facebook\"'>\r\n            <fontawesomeicon\r\n classname='\"fa-3x' icon="{faFacebook}\r\n" text-white-50\"\r\n="">\r\n          </fontawesomeicon\r\n></a>\r\n          <a href='\"http://twitter.com/ClarityTeam\"' title='\"Twitter\"'>\r\n            <fontawesomeicon classname='\"fa-3x' icon="{faTwitter}" text-white-50\"="">\r\n          </fontawesomeicon></a>\r\n          <a href='\"http://www.linkedin.com/company/1155055\"' title='\"LinkedIn\"'>\r\n            <fontawesomeicon\r\n classname='\"fa-3x' icon="{faLinkedin}\r\n" text-white-50\"\r\n="">\r\n          </fontawesomeicon\r\n></a>\r\n        </div>\r\n        <div classname='\"\r\n' col-6\r\n="" col-lg-auto\r\n="" col-md-auto\r\n="" col-sm-6\r\n="" col-xl-auto\"="" order-4="" order-lg-2="" order-md-2="" order-sm-3="" order-xl-2="">\r\n          <h4 classname='\"text-uppercase' small="" text-light\"="">Shopping Guide</h4>\r\n          <ul classname='\"links' ps-3="" small\"="">\r\n            <li>\r\n              <a classname='\"text-white-50\"\r\n' href='\"/FAQS\"' title='\"FAQs\"\r\n'>\r\n                {t(\"ui.storefront.storeDashboard.storeMenu.SupportAndFAQs\")}\r\n              </a>\r\n            </li>\r\n            <li>\r\n              <a classname='\"text-white-50\"\r\n' href='\"/Payments\"' title='\"Payment\"\r\n'>\r\n                {t(\"ui.storefront.checkout.checkoutPanels.Payment\")}\r\n              </a>\r\n            </li>\r\n            <li>\r\n              <a classname='\"text-white-50\"\r\n' href='\"/Shipment\"' title='\"Shipment\"\r\n'>\r\n                Shipment\r\n              </a>\r\n            </li>\r\n            <li>\r\n              <a classname='\"text-white-50\"\r\n' href='\"/Orders\"' is="" my="" order?\"\r\n="" title='\"Where'>\r\n                Where is my order?\r\n              </a>\r\n            </li>\r\n            <li classname='\"last\"'>\r\n              <a classname='\"text-white-50\"\r\n' href='\"/Return-Policy\"' policy\"\r\n="" title='\"Return'>\r\n                Return policy\r\n              </a>\r\n            </li>\r\n          </ul>\r\n        </div>\r\n        <div classname='\"\r\n' col-6\r\n="" col-lg-auto\r\n="" col-md-auto\r\n="" col-sm-6\r\n="" col-xl-auto\"="" order-5="" order-lg-3="" order-md-3="" order-sm-4="" order-xl-3="">\r\n          <h4 classname='\"text-uppercase' small="" text-light\"="">Features</h4>\r\n          <ul classname='\"links' ps-3="" small\"="">\r\n            <li classname='\"first' profile\"="">\r\n              <a account\"="" classname='\"text-white-50\"' href='\"Your'>\r\n                <span>\r\n                  {t(\"ui.storefront.userDashboard2.controls.YourAccount\")}\r\n                </span>\r\n              </a>\r\n            </li>\r\n            <li>\r\n              <link classname='\"text-white-50\"' to='\"/dashboard/wishList\"'/>\r\n                <span>{t(\"ui.storefront.menu.miniMenu.wishList\")}</span>\r\n              \r\n            </li>\r\n            <li>\r\n              <link classname='\"text-white-50\"' to='\"/dashboard/favoritesList\"'/>\r\n                <span>{t(\"ui.storefront.menu.miniMenu.FavoritesList\")}</span>\r\n              \r\n            </li>\r\n            <li>\r\n              <link classname='\"text-white-50\"' to='\"/dashboard/addressBook\"'/>\r\n                <span>{t(\"ui.storefront.menu.miniMenu.addressBook\")}</span>\r\n              \r\n            </li>\r\n            <li>\r\n              <link classname='\"text-white-50\"' to='\"/dashboard/inStockAlerts\"'/>\r\n                <span>{t(\"ui.storefront.menu.miniMenu.inStockAlerts\")}</span>\r\n              \r\n            </li>\r\n            <li classname='\"last' orders\"="">\r\n              <link classname='\"text-white-50\"' to='\"/dashboard/orderHistory\"'/>\r\n                <span>\r\n                  {t(\r\n                    \"ui.storefront.storeDashboard.storeOrderHistory.OrderHistory\"\r\n                  )}\r\n                </span>\r\n              \r\n            </li>\r\n          </ul>\r\n        </div>\r\n        <div classname='\"\r\n' col-6\r\n="" col-lg-auto\r\n="" col-md-auto\r\n="" col-sm-6\r\n="" col-xl-auto\"="" order-6="" order-lg-4="" order-md-4="" order-sm-5="" order-xl-4="">\r\n          <h4 classname='\"text-uppercase' small="" text-light\"="">\r\n            {t(\"ui.storefront.storeDashboard.storeProfileEditor.Information\")}\r\n          </h4>\r\n          <ul classname='\"links' ps-3="" small\"="">\r\n            <li>\r\n              <link\r\n as="" classname='\"text-white-50\"\r\n' string}="" title='{t(\"ui.storefront.common.ContactUs\")' to='\"/contact-us\"\r\n'>\r\n                {t(\"ui.storefront.common.ContactUs\")}\r\n              \r\n            </link\r\n></li>\r\n            <li>\r\n              <link\r\n classname='\"text-white-50\"\r\n' title='{t(\"ui.storefront.common.TermsAndConditions\")}' to='\"/terms-and-conditions\"\r\n'>\r\n                {t(\"ui.storefront.common.TermsAndConditions\")}\r\n              \r\n            </link\r\n></li>\r\n            <li>\r\n              <link classname='\"text-white-50\"\r\n' title='\"Privacy\"' to='\"/privacy\"\r\n'/>\r\n                Privacy\r\n              \r\n            </li>\r\n            {/*\r\n              <li>\r\n                <a classname='\"text-white-50\"' stores\"="" title='\"Our' ui-sref-plus="" uisrp-root='\"/Stores\"'>\r\n                  Our Stores\r\n                </a>\r\n              </li>\r\n            */}\r\n          </ul>\r\n        </div>\r\n        <div classname='\"\r\n' col-12="" col-lg-auto="" col-md-auto\r\n="" col-sm-12="" col-tk-auto="" col-xl-6\r\n="" lg-ms-auto\r\n="" me-tk-auto\"="" order-7="" order-lg-7="" order-md-7="" order-sm-7="" order-xl-7="" sm-text-center\r\n="" xs-text-center\r\n="">\r\n          <fontawesomeicon classname='\"fa-3x' icon="{faCcPaypal}" me-1\"="">\r\n          <fontawesomeicon classname='\"fa-3x' icon="{faCcVisa}" me-1\"="">\r\n          <fontawesomeicon classname='\"fa-3x' icon="{faCcMastercard}" me-1\"="">\r\n          <fontawesomeicon classname='\"fa-3x' icon="{faCcAmex}" me-1\"="">\r\n          <fontawesomeicon classname='\"fa-3x' icon="{faCcDiscover}" me-1\"="">\r\n        </fontawesomeicon></fontawesomeicon></fontawesomeicon></fontawesomeicon></fontawesomeicon></div>\r\n      </div>\r\n      <div classname='\"row' id='\"footerBot\"' mt-3\"="">\r\n        <div classname='\"col-12' id='\"copyright-entry\"' small\"="" text-center="">\r\n          Copyright 2021 by Clarity Ventures | \r\n          <a\r\n classname='\"text-white-50\"\r\n' href='\"http://www.clarity-ventures.com/\"\r\n' noreferrer\"="" rel='\"noopener' target='\"_blank\"\r\n'>\r\n            Enterprise eCommerce By Clarity\r\n          \r\n        </a\r\n></div>\r\n      </div>\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { NavMenu } from \"src/Navigation/NavMenu\";\r\nimport { Footer } from \"src/_shared/Footer\";\r\n\r\ninterface ILayoutProps {\r\n  children: React.ReactNode;\r\n}\r\n\r\nexport const Layout = (props: ILayoutProps): JSX.Element =&gt; <div>\r\n  <navmenu>\r\n  <div classname='\"container-tk' main\"="">{props.children}</div>\r\n  <footer>\r\n</footer></navmenu></div>;\r\n","/** @format */\r\n\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nexport const Home = (): JSX.Element =&gt; <div>\r\n  <section classname='\"section-featured\"'>\r\n    <container classname='\"my-5\"'>\r\n      <div classname='\"head-section' text-center\"="">\r\n        <h1 classname='\"title\"'>Featured Products</h1>\r\n      </div>\r\n    </container>\r\n  </section>\r\n</div>;\r\n","/**\r\n * @file React/src/_shared/customHooks/usePricingFactory.tsx\r\n * @author Copyright (c) 2020-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Pricing Factory hook\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { CalculatedPrices, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\nexport interface IPricingFactory {\r\n  factoryAssign(product: ProductModel): Promise<productmodel>;\r\n  bulkFactoryAssign(products: ProductModel[]): Promise<productmodel[]>;\r\n}\r\n\r\nexport class PricingFactory implements IPricingFactory {\r\n  // Functions\r\n  private static genBlankPricesObj(): CalculatedPrices {\r\n    return {\r\n      amountOff: null,\r\n      base: null,\r\n      haveBase: false,\r\n      haveMsrp: false,\r\n      haveReduction: false,\r\n      haveSale: false,\r\n      isSale: false,\r\n      loading: true,\r\n      msrp: null,\r\n      percentOff: null,\r\n      reduction: null,\r\n      sale: null\r\n    };\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  async factoryAssign(product: ProductModel): Promise<productmodel> {\r\n    if (product.readPrices instanceof Function) {\r\n      // Already processed\r\n      return product;\r\n    }\r\n    // eslint-disable-next-line dot-notation\r\n    product[\"$_rawPrices\"] = PricingFactory.genBlankPricesObj();\r\n    // eslint-disable-next-line dot-notation\r\n    product.readPrices = () =&gt; product[\"$_rawPrices\"];\r\n    // TODO: MemCache the results by product ID so we can avoid repeat calls for same product\r\n    const r = await cvApi.pricing.CalculatePricesForProduct(product.ID, 1);\r\n    if (!r?.data?.ActionSucceeded) {\r\n      console.error(r?.data);\r\n      return Promise.reject(new Error());\r\n    }\r\n    // eslint-disable-next-line dot-notation\r\n    const prices = product[\"$_rawPrices\"] as CalculatedPrices;\r\n    const { BasePrice, SalePrice, MsrpPrice, ReductionPrice } = r.data.Result;\r\n    // Assign updated values\r\n    prices.base = BasePrice;\r\n    prices.sale = SalePrice;\r\n    prices.msrp = MsrpPrice;\r\n    prices.reduction = ReductionPrice;\r\n    // Assign calculated values\r\n    prices.haveBase = prices.base &gt;= 0;\r\n    prices.haveSale = prices.sale &gt;= 0;\r\n    prices.haveMsrp = prices.msrp &gt;= 0;\r\n    prices.haveReduction = prices.reduction &gt;= 0;\r\n    prices.isSale = prices.sale &gt; 0 &amp;&amp; prices.sale &lt; prices.base;\r\n    if (prices.isSale) {\r\n      prices.amountOff = prices.base - prices.sale;\r\n      prices.percentOff = prices.amountOff / prices.base * 100;\r\n    }\r\n    // Finish\r\n    prices.loading = false;\r\n    // eslint-disable-next-line dot-notation\r\n    product[\"$_rawPrices\"] = prices;\r\n    return product;\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  bulkFactoryAssign(products: ProductModel[]): Promise<productmodel[]> {\r\n    if (!products || !products.length) {\r\n      return new Promise((resolve, _reject) =&gt; {\r\n        resolve(products);\r\n      });\r\n    }\r\n    const processed: ProductModel[] = [];\r\n    const toProcess: ProductModel[] = [];\r\n    products.forEach(product =&gt; {\r\n      if (product.readPrices instanceof Function) {\r\n        processed.push(product);\r\n      } else {\r\n        // eslint-disable-next-line dot-notation\r\n        product[\"$_rawPrices\"] = PricingFactory.genBlankPricesObj();\r\n        // eslint-disable-next-line dot-notation\r\n        product.readPrices = () =&gt; product[\"$_rawPrices\"];\r\n        toProcess.push(product);\r\n      }\r\n    });\r\n    return new Promise((resolve, reject) =&gt; {\r\n      cvApi.pricing\r\n        .CalculatePricesForProducts({\r\n          ProductIDs: toProcess.map(x =&gt; x.ID)\r\n        })\r\n        .then(r =&gt; {\r\n          if (!r || !r.data || !r.data.ActionSucceeded) {\r\n            console.error(r &amp;&amp; r.data);\r\n            reject(r &amp;&amp; r.data);\r\n            return;\r\n          }\r\n          if (r.data.Result === undefined) {\r\n            resolve(processed);\r\n            return;\r\n          }\r\n          Object.keys(r.data.Result).forEach(productID =&gt; {\r\n            const found = toProcess.find(x =&gt; x.ID === Number(productID));\r\n            // eslint-disable-next-line dot-notation\r\n            const prices = found[\"$_rawPrices\"] as CalculatedPrices;\r\n            prices.base = r.data.Result[productID].BasePrice;\r\n            prices.sale = r.data.Result[productID].SalePrice;\r\n            prices.msrp = r.data.Result[productID].MsrpPrice;\r\n            prices.reduction = r.data.Result[productID].ReductionPrice;\r\n            prices.haveBase = prices.base &gt;= 0;\r\n            prices.haveSale = prices.sale &gt;= 0;\r\n            prices.haveMsrp = prices.msrp &gt;= 0;\r\n            prices.haveReduction = prices.reduction &gt;= 0;\r\n            prices.isSale = prices.sale &gt; 0 &amp;&amp; prices.sale &lt; prices.base;\r\n            if (prices.isSale) {\r\n              prices.amountOff = prices.base - prices.sale;\r\n              prices.percentOff = prices.amountOff / prices.base * 100;\r\n            }\r\n            prices.loading = false;\r\n            // eslint-disable-next-line dot-notation\r\n            found[\"$_rawPrices\"] = prices;\r\n            processed.push(found);\r\n          });\r\n          resolve(processed);\r\n        })\r\n        .catch(reject);\r\n    });\r\n  }\r\n}\r\n\r\nexport const usePricingFactory = (): IPricingFactory =&gt; {\r\n  const [ pricingFactory, setPricingFactory ] = useState(null);\r\n  const cefConfig = useCefConfig() as CEFConfig;\r\n  useEffect(() =&gt; {\r\n    if (cefConfig === null) {\r\n      return;\r\n    }\r\n    // New up the class from above only once\r\n    const instance = new PricingFactory();\r\n    setPricingFactory(instance);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ cefConfig ]);\r\n  return pricingFactory;\r\n};\r\n","import { useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ConfirmationModal, Modal } from \"src/_shared/modals\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\n\r\ninterface IRemoveDiscountButtonProps {\r\n  discount: AppliedCartItemDiscountModel;\r\n  btnVariant?: string;\r\n  btnClasses?: string;\r\n  btnIdPrefix: string;\r\n  labelIdPrefix: string;\r\n  idSuffix: string;\r\n  hideText?: boolean;\r\n}\r\n\r\nexport const RemoveDiscountButton = (props: IRemoveDiscountButtonProps): JSX.Element =&gt; {\r\n  const { discount, btnVariant, btnClasses, btnIdPrefix, labelIdPrefix, idSuffix, hideText } = props;\r\n\r\n  const [ showRemoveDiscountConfirmationModal, setShowRemoveDiscountConfirmationModal ]\r\n    = useState<boolean>(false);\r\n  const [ showDiscountResponseModal, setShowDiscountResponseModal ] = useState<boolean>(false);\r\n  const [ discountResponseModalMessage, setDiscountResponseModalMessage ] = useState<string>(null);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const cartFactory = useCartFactory();\r\n\r\n  const removeCartItemDiscount = (discountI: AppliedCartItemDiscountModel): void =&gt; {\r\n    setRunning();\r\n    cartFactory.removeDiscount(ServiceStrings.carts.types.cart, discountI)\r\n      .then(() =&gt; {\r\n        setShowRemoveDiscountConfirmationModal(false);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setShowRemoveDiscountConfirmationModal(false);\r\n        setShowDiscountResponseModal(true);\r\n        setDiscountResponseModalMessage(\r\n          t(\"ui.storefront.cart.RemoveDiscount.UnableToRemoveDiscount\")\r\n        );\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const { DiscountValueType, DiscountValue } = discount;\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <confirmationmodal\r\n =="" oncancel="{()" show="{showRemoveDiscountConfirmationModal}\r\n"> setShowRemoveDiscountConfirmationModal(false)}\r\n        onConfirm={() =&gt; removeCartItemDiscount(discount)}\r\n        size=\"md\"\r\n        confirmBtnLabel={t(\"ui.storefront.common.Yes\")}\r\n        cancelBtnLabel={t(\"ui.storefront.common.No\")}&gt;\r\n        {viewState.running &amp;&amp; <loadingwidget overlay="{true}">}\r\n        {t(\"ui.storefront.discounts.AreYouSureYouWantToRemoveThisDiscount\")}\r\n      \r\n      <modal\r\n =="" oncancel="{()" show="{showDiscountResponseModal}\r\n"> {\r\n          setShowDiscountResponseModal(false);\r\n          setDiscountResponseModalMessage(null);\r\n        }}\r\n        size=\"md\"\r\n        modalBodyClasses=\"p-0\"&gt;\r\n        <div classname='\"p-3\"'>\r\n          {discountResponseModalMessage ?? t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\")}\r\n        </div>\r\n        <div classname='\"modal-footer\"'>\r\n          <button\r\n =="" onclick="{()" variant='\"primary\"\r\n'> {\r\n              setShowDiscountResponseModal(false);\r\n              setDiscountResponseModalMessage(null);\r\n            }}&gt;\r\n            {t(\"ui.storefront.common.OK\")}\r\n          \r\n        </button\r\n></div>\r\n      \r\n      <button\r\n =="" ??="" \"none\"}\r\n="" \"top="" aria-label='{t(\"ui.storefront.cart.removeOrderDiscountFromCart\")}\r\n' classname="{btnClasses" id="{`${btnIdPrefix}_${idSuffix}`}\r\n" name="{`${btnIdPrefix}_${idSuffix}`}\r\n" onclick="{()" p-0="" text-nowrap\"}\r\n="" title='{t(\"ui.storefront.cart.removeOrderDiscountFromCart\")}\r\n' variant="{btnVariant"> setShowRemoveDiscountConfirmationModal(true)}&gt;\r\n        {!hideText\r\n          &amp;&amp; &lt;&gt;\r\n            <span classname='\"text-success' id="{`${labelIdPrefix}_${idSuffix}`}" small\"="">\r\n              {DiscountValueType === 1\r\n                ? currencyFormatter.format(DiscountValue)\r\n                : `${DiscountValue}%`}\r\n            </span>\r\n             \r\n            <span classname='\"small' text-success\"="">{t(\"ui.storefront.common.Off\")}</span>\r\n             \r\n          \r\n        }\r\n        {/* @ts-ignore */}\r\n        <i classname='\"fal' fa-lg="" fa-trash="" text-danger\"="">\r\n        <span classname='\"sr-only\"'>{t(\"ui.storefront.cart.removeOrderDiscountFromCart\")}</span>\r\n      \r\n    \r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { RemoveDiscountButton } from \"src/Cart/controls/RemoveDiscountButton\";\r\n\r\ninterface ICartDiscountListItemProps {\r\n  discount: AppliedCartItemDiscountModel;\r\n  index: number;\r\n}\r\n\r\nexport const CartDiscountListItem = (props: ICartDiscountListItemProps): JSX.Element =&gt; {\r\n  const { discount, index } = props;\r\n\r\n  const { SlaveName, DiscountValueType, DiscountValue, DiscountTotal, DiscountIsAutoApplied } = discount;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    \r\n      \r\n      \r\n        <div\r\n classname='\"form-control-static' font-weight-normal="" id="{`orderDiscountType_${index}`}" small\"\r\n="">\r\n          {t(\"ui.storefront.cart.orderDiscountType\")}\r\n        \r\n      \r\n      \r\n        <div\r\n classname='\"form-control-static' font-weight-normal="" id="{`orderDiscountName_${index}`}" small\"\r\n="">\r\n          {SlaveName}\r\n        \r\n      \r\n      \r\n        <div\r\n cart-price="" classname='\"form-control-static' id="{`orderDiscountValue_${index}`}" price="" text-end="" text-success\"\r\n="">\r\n          {DiscountValueType === 1\r\n            ? currencyFormatter.format(DiscountValue * -1)\r\n            : `${DiscountValue}%`}\r\n        \r\n      \r\n      \r\n      \r\n        <div\r\n cart-price="" classname='\"d-block' form-control-static="" id="{`orderDiscountTotal_${index}`}" price="" text-end="" text-success\"\r\n="">\r\n          {currencyFormatter.format(DiscountTotal)}\r\n        \r\n      \r\n      \r\n        {!DiscountIsAutoApplied\r\n          &amp;&amp; <removediscountbutton\r\n btnclasses='\"text-danger' btnidprefix='\"btnRemoveOrderDiscount\"\r\n' btnvariant='\"link\"\r\n' discount="{discount}\r\n" hidetext="{true}\r\n" idsuffix="{index.toString()}\r\n" labelidprefix='\"\"\r\n' top\"\r\n="">\r\n        }\r\n      \r\n    \r\n  );\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n  Alert,\r\n  Button,\r\n  Table\r\n} from \"react-bootstrap\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { AddToCartQuantitySelector } from \"src/Cart/controls\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport {\r\n  AppliedCartItemDiscountModel,\r\n  CartModel,\r\n  ProductModel,\r\n  SerializableAttributesDictionary\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { Dictionary, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { CartDiscountListItem } from \"src/Cart/views/CartDiscountListItem\";\r\nimport { LoginForPricing } from \"src/Cart/views/LoginForPricing\";\r\nimport { RemoveDiscountButton } from \"src/Cart/controls/RemoveDiscountButton\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { SalesItemQuantityLine } from \"src/_shared/salesGroup/SalesItemQuantityLine\";\r\n\r\ninterface ICartTableWideScreenProps {\r\n  cartHasItems: boolean;\r\n  cartToUse: CartModel;\r\n  shippingDiscounts?: AppliedCartItemDiscountModel[];\r\n  orderDiscounts?: AppliedCartItemDiscountModel[];\r\n  onChangeSalesItemQuantity: (id: number, quantity: number) =&gt; void;\r\n  onRemoveItemFromCartClicked: (productName: string, salesItemId: number) =&gt; void;\r\n  parentRunning?: boolean;\r\n  queuedIDs: number[];\r\n  // For use in non session carts (wish list, shopping list, etc.)\r\n  includeAddToCart?: boolean;\r\n  // Must be defined if you includeAddToCart\r\n  cartProducts?: { [id: string]: ProductModel },\r\n  excludeBackorderInfo?: boolean;\r\n  itemAttributeDictionary?: Dictionary<serializableattributesdictionary>;\r\n}\r\n\r\nexport function getDiscountTotal(item: SalesItemBaseModel<appliedcartitemdiscountmodel>): number {\r\n  if (!item || !item.Discounts || !item.Discounts.length) {\r\n    return 0;\r\n  }\r\n  let total = 0;\r\n  item.Discounts.forEach((discount: AppliedCartItemDiscountModel) =&gt; {\r\n    total += discount.DiscountTotal;\r\n  });\r\n  return total;\r\n}\r\n\r\nexport const CartTableWideScreen = (props: ICartTableWideScreenProps): JSX.Element =&gt; {\r\n  const {\r\n    cartHasItems,\r\n    cartToUse,\r\n    shippingDiscounts,\r\n    orderDiscounts,\r\n    onChangeSalesItemQuantity,\r\n    onRemoveItemFromCartClicked,\r\n    parentRunning,\r\n    queuedIDs,\r\n    itemAttributeDictionary\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n\r\n  const canIncrease = (item: SalesItemBaseModel<appliedcartitemdiscountmodel>): (quantity: number) =&gt; boolean =&gt; {\r\n    return quantity =&gt; {\r\n      if (item.$_rawInventory) {\r\n        return item.$_rawInventory.AllowBackOrder\r\n          || item.$_rawInventory.IsUnlimitedStock\r\n          || item.$_rawInventory.QuantityOnHand &gt; quantity;\r\n      }\r\n      return true;\r\n    };\r\n  };\r\n\r\n  const getFormattedPrice = (val: number): string =&gt; {\r\n    if (!val) {\r\n      return \"TBD\";\r\n    }\r\n    return currencyFormatter.format(val);\r\n  }\r\n\r\n  return (\r\n    \r\n      \r\n        \r\n          \r\n          \r\n          \r\n          \r\n          \r\n          \r\n          \r\n          \r\n        \r\n      \r\n      \r\n        {cartHasItems\r\n          ? cartToUse.SalesItems?.map(\r\n            // eslint-disable-next-line complexity\r\n            (item: SalesItemBaseModel<appliedcartitemdiscountmodel>, itemIndex: number) =&gt; {\r\n              const DiscountTotal = getDiscountTotal(item);\r\n              const productUrl = corsLink(cefConfig, item.ProductSeoUrl, \"productDetail\");\r\n              return (\r\n                <fragment key="{item.ID}">\r\n                  </fragment></appliedcartitemdiscountmodel>\r\n                    <td\r\n classname='\"p-0' d-lg-table-cell\"="" d-none="">\r\n                      <div>\r\n                        <span>\r\n                          <a\r\n classname='\"product-image' d-flex="" href="{productUrl}\r\n" id="{`cardProductImageThumbnail_${itemIndex}`}\r\n" justify-content-center\"="">\r\n                            <imagewithfallback\r\n 100,\r\n="" \"both\",\r\n="" \"pad\"\r\n="" alt="{item.ProductName}\r\n" classname='\"d-block\"\r\n' imageresizerparamsbody="{{\r\n" maxheight:="" maxwidth:="" mode:="" scale:="" }}\r\n="">\r\n                          \r\n                        </imagewithfallback\r\n></a\r\n></span>\r\n                      </div>\r\n                    \r\n                    </td\r\n>\r\n                    \r\n                    \r\n                    \r\n                    \r\n                    \r\n                    \r\n                  \r\n                  {/* eslint-disable-next-line max-len */}\r\n                  {!props.excludeBackorderInfo &amp;&amp; (cefConfig?.featureSet.inventory.preSale.enabled &amp;&amp; item.ProductAllowPreSale\r\n                    || cefConfig?.featureSet.inventory.backOrder.enabled\r\n                      &amp;&amp; item.QuantityBackOrdered &gt; 0)\r\n                    &amp;&amp; \r\n                      \r\n                    \r\n                  }\r\n                \r\n              );\r\n            }\r\n          )\r\n          : \r\n            \r\n          \r\n        }\r\n        {Boolean(orderDiscounts?.length)\r\n          &amp;&amp; orderDiscounts.map((discount, index) =&gt; <cartdiscountlistitem discount="{discount}\r\n" index="{index}\r\n" key="{discount.ID}">)\r\n        }\r\n        {Boolean(shippingDiscounts?.length)\r\n          &amp;&amp; shippingDiscounts.map((discount, index) =&gt; <cartdiscountlistitem discount="{discount}\r\n" index="{index}\r\n" key="{discount.ID}">)\r\n        }\r\n      </cartdiscountlistitem></cartdiscountlistitem>\r\n    <table classname='\"cart-table' data-table="" hover\r\n="" size='\"sm\"\r\n' table-bordered\"=""><thead><tr><th classname='\"d-none' d-lg-table-cell\"="" w-auto=""></th><th classname='\"w-auto\"'>\r\n            {t(\"ui.storefront.cart.SKU\")}\r\n          </th><th classname='\"w-auto\"'>\r\n            {t(\"ui.storefront.common.Name\")}\r\n          </th><th classname='\"w-auto\"'>\r\n            {t(\"ui.storefront.cart.packageSize\")}\r\n          </th><th classname='\"d-none' d-md-table-cell="" text-center\"="">\r\n            {t(\"ui.storefront.common.Price\")}\r\n          </th><th classname='\"w-30' lg-w-20="" text-center\"="">\r\n            {t(\"ui.storefront.common.Quantity\")}\r\n          </th><th classname='\"w-auto' text-center\"="">\r\n            {t(\"ui.storefront.common.Subtotal\")}\r\n          </th><th classname='\"\"'></th></tr></thead><tbody><tr border-bottom="" border-medium\"="" classname='\"border-top'><td classname='\"align-middle\"'>\r\n                      <a\r\n href="{productUrl}\r\n" id="{`cardProductSku_${itemIndex}`}">\r\n                        <label classname='\"form-control-static' fw-normal="" pointer\"="">\r\n                          {item.ProductKey}\r\n                        </label>\r\n                      \r\n                    </a\r\n></td><td classname='\"align-middle\"'>\r\n                      <span\r\n data-sid="{`cartProductName_${itemIndex}`}\r\n" id="{`cartProductName_${itemIndex}`}">\r\n                        <productcardnamewidget productname="{item.ProductName}" productseourl="{item.ProductSeoUrl}">\r\n                      \r\n                      {item.Discounts &amp;&amp; item.Discounts.length\r\n                        &amp;&amp; \r\n                          \r\n                            {item.Discounts.map((discount, discountIndex) =&gt; \r\n                              \r\n                              \r\n                            )}\r\n                          \r\n                        <table bg-light="" borderless="" classname='\"table-sm' mb-0="" rounded\"="" w-auto=""><tbody><tr key="{discount.ID}"><td classname='\"text-end' w-auto\"="">\r\n                                <span\r\n `${itemindex}.${discountindex}`\r\n="" classname='\"small\"\r\n' id="{`cartProductDiscountDescription_${\r\n" }`}="">\r\n                                  {discount.SlaveName}\r\n                                \r\n                              </span\r\n></td><td classname='\"w-auto\"'>\r\n                                {discount.DiscountIsAutoApplied\r\n                                  ? <span>\r\n                                    <span\r\n `${itemindex}.${discountindex}`\r\n="" classname='\"text-success' id="{`cartProductDiscountValue_${\r\n" small\"="" }`}\r\n="">\r\n                                      {discount.DiscountValueType === 1\r\n                                        ? currencyFormatter.format(discount.DiscountValue)\r\n                                        : `${discount.DiscountValue}%`}\r\n                                    </span\r\n></span>\r\n                                         \r\n                                    <span classname='\"text-success' small\"="">\r\n                                      {t(\"ui.storefront.common.Off\")}\r\n                                    </span>\r\n                                  \r\n                                  : <removediscountbutton\r\n btnidprefix='\"btnRemoveDiscountFromItem\"\r\n' discount="{discount}\r\n" idsuffix="{`${itemIndex}.${discountIndex}`}\r\n" labelidprefix='\"cartProductDiscountValue\"\r\n'>\r\n                                }\r\n                              </removediscountbutton\r\n></td></tr></tbody></table>\r\n                      }\r\n                    </productcardnamewidget></span\r\n></td><td classname='\"align-middle\"'>\r\n                      <div\r\n classname='\"d-block' form-control-static="" id="{`cartPackageSize${itemIndex}`}" py-0\"\r\n="" text-muted="">\r\n                        {itemAttributeDictionary\r\n                          &amp;&amp; itemAttributeDictionary[item.ProductID]\r\n                          &amp;&amp; itemAttributeDictionary[item.ProductID][\"Package Size\"]\r\n                          ? itemAttributeDictionary[item.ProductID][\"Package Size\"].Value\r\n                          : \"\"}\r\n                      \r\n                    </div\r\n></td><td classname='\"align-middle' d-md-table-cell="" d-none="" text-end\"="">\r\n                      <div\r\n !="=" ${\r\n="" &&="" cart-price="" classname="{`d-block" form-control-static="" item.unitcoreprice="" item.unitsoldprice="" price="" py-0="" text-end="" text-muted=""> 0\r\n                          || DiscountTotal &amp;&amp; DiscountTotal &lt; 0\r\n                            ? \"strike-through small text-disabled\"\r\n                            : \"\"\r\n                        }`}\r\n                        id={`cartProductPrice${ itemIndex }`}&gt;{getFormattedPrice(item.UnitCorePrice ?? 0)}\r\n                      \r\n                      {item.UnitSoldPrice &amp;&amp; item.UnitCorePrice !== item.UnitSoldPrice &amp;&amp; item.UnitSoldPrice &gt; 0\r\n                        ? <div\r\n ${\r\n="" &&="" 0\r\n="" :="" <="" ?="" \"\"\r\n="" \"strike-through="" cart-price="" classname="{`d-block" discounttotal="" form-control-static="" id="{`cartProductPrice${itemIndex}`}" price="" py-0="" small="" text-danger="" text-disabled\"\r\n="" text-end="" }`}\r\n="">\r\n                          {getFormattedPrice(item.UnitSoldPrice)}\r\n                        \r\n                        : null}\r\n                      {DiscountTotal &amp;&amp; DiscountTotal &lt; 0\r\n                        ? <div\r\n cart-price="" classname='\"d-block' form-control-static="" id="{`cartProductPrice${itemIndex}`}" price="" py-0\"\r\n="" text-end="" text-success="">\r\n                          { // eslint-disable-next-line @typescript-eslint/no-extra-parens, max-len\r\n                            getFormattedPrice((item.UnitSoldPrice || item.UnitCorePrice || 0) + (DiscountTotal / item.TotalQuantity))}\r\n                        \r\n                        : null}\r\n                    </div\r\n></div\r\n></div\r\n></td><td classname='\"align-middle\"'>\r\n                      <div>\r\n                        {!props.includeAddToCart &amp;&amp; <addtocartquantityselector\r\n canincreasefn="{canIncrease(item)}\r\n" decreasedisabled="{parentRunning}\r\n" id="{item.ID}\r\n" initialvalue="{item.TotalQuantity}\r\n" key="{item.TotalQuantity}\r\n" number)="" onchange="{(val:" useinput="{false}\r\n"> onChangeSalesItemQuantity(item.ID, val)}\r\n                        /&gt;}\r\n                        {props.includeAddToCart\r\n                          &amp;&amp; props.cartProducts\r\n                          &amp;&amp; <productcardactionbuttonwidget\r\n initialquantity="{item.TotalQuantity}\r\n" product="{props.cartProducts[item.ProductID]}\r\n">}\r\n                        {!props.excludeBackorderInfo &amp;&amp; item.QuantityBackOrdered &gt; 0\r\n                          &amp;&amp; <div classname='\"text-center\"'>\r\n                            <salesitemquantityline excludetotal="{true}" salesitem="{item}">\r\n                          </salesitemquantityline></div>\r\n                        }\r\n                        {item.QuantityPreSold &gt; 0\r\n                          &amp;&amp; \r\n                            \r\n                              \r\n                                \r\n                                \r\n                              \r\n                            \r\n                          <table classname='\"small' mt-2\"=""><tbody><tr><td>{t(\"ui.storefront.common.PreSales\")}</td><td>{item.QuantityPreSold}</td></tr></tbody></table>\r\n                        }\r\n                        {!cefConfig?.loginForPricing.enabled || currentUser?.Contact ? <div\r\n classname='\"d-block' d-sm-none="" text-end\"="">\r\n                          <div\r\n classname='\"d-block' form-control-static="" fw-normal="" id="{`cartProductSubtotal_${itemIndex}`}" text-end\"\r\n="">\r\n                            {getFormattedPrice((item.ExtendedPrice ?? item.UnitCorePrice ?? 0) + DiscountTotal)}\r\n                          </div\r\n></div\r\n></productcardactionbuttonwidget\r\n></addtocartquantityselector\r\n></div>\r\n                         : null}\r\n                        {cefConfig?.loginForPricing.enabled &amp;&amp; !currentUser\r\n                          &amp;&amp; <div classname='\"d-block' d-sm-none\"="">\r\n                            <loginforpricing>\r\n                          </loginforpricing></div>\r\n                        }\r\n                      \r\n                    </td><td classname='\"align-middle' text-end\"="">\r\n                      <div classname='\"form-control-static' fw-normal="" text-end="" text-muted\"="">\r\n                        {parentRunning &amp;&amp; queuedIDs.indexOf(item.ID) &gt; -1\r\n                          ? <loadingwidget innerclasses='\"p-0\"' size='\"lg\"'>\r\n                          : &lt;&gt;\r\n                            <div\r\n !="=" ${\r\n="" &&="" cart-price="" classname="{`d-block" form-control-static="" item.unitcoreprice="" item.unitsoldprice="" item.unitsoldprice\r\n="" price="" py-0="" text-end="" text-muted=""> 0\r\n                                || DiscountTotal &amp;&amp; DiscountTotal &lt; 0\r\n                                  ? \"strike-through small text-disabled\"\r\n                                  : \"\"\r\n                              }`}\r\n                              id={`cartProductPrice_${itemIndex}`}&gt;\r\n                              {getFormattedPrice(\r\n                                (item.UnitCorePrice ?? 0)\r\n                                * (item.TotalQuantity\r\n                                  ?? (item.Quantity ?? 1) + item.QuantityBackOrdered + item.QuantityPreSold)\r\n                              )}\r\n                            </div\r\n></loadingwidget></div>\r\n                            {item.UnitSoldPrice\r\n                            &amp;&amp; item.UnitCorePrice !== item.UnitSoldPrice\r\n                            &amp;&amp; item.UnitSoldPrice &gt; 0\r\n                              ? <div\r\n ${\r\n="" &&="" 0\r\n="" :="" <="" ?="" \"\"\r\n="" \"strike-through="" cart-price="" classname="{`d-block" discounttotal="" form-control-static="" id="{`cartProductPrice_${itemIndex}`}" price="" py-0="" small="" text-danger="" text-disabled\"\r\n="" text-end="" }`}\r\n="">\r\n                                {getFormattedPrice(item.ExtendedPrice ?? item.UnitCorePrice ?? 0)}\r\n                              \r\n                              : null}\r\n                            {DiscountTotal &amp;&amp; DiscountTotal &lt; 0\r\n                              ? <div\r\n cart-price="" classname='\"d-block' form-control-static="" id="{`cartProductPrice_${itemIndex}`}" price="" py-0\"\r\n="" text-end="" text-success="">\r\n                                {getFormattedPrice((item.ExtendedPrice ?? item.UnitCorePrice ?? 0) + DiscountTotal)}\r\n                              \r\n                              : null}\r\n                          \r\n                        }\r\n                      \r\n                    </div\r\n></div\r\n></td><td classname='\"align-middle' w-1\"="">\r\n                      <button\r\n =="" aria-label='{t(\"ui.storefront.cart.removeItemFromCart\")}\r\n' classname='\"text-danger\"\r\n' id="{`btnRemoveItem_${itemIndex}FromCart`}\r\n" name="{`btnRemoveItem_${itemIndex}FromCart`}\r\n" onclick="{e" title='{t(\"ui.storefront.cart.removeItemFromCart\")}\r\n' type='\"button\"\r\n' variant='\"link\"\r\n'> onRemoveItemFromCartClicked(item.ProductName, item.ID)}&gt;\r\n                        {/* @ts-ignore */}\r\n                        <i classname='\"fal' fa-lg\"="" fa-trash="">\r\n                      \r\n                    </i></button\r\n></td></tr><tr border-bottom="" border-medium\"="" classname='\"border-top'><td bg-light\"="" classname='\"align-middle' colspan="{7}">\r\n                        {item.ProductAllowPreSale\r\n                          &amp;&amp; <alert classname='\"mb-0' p-0\"="" variant='\"warning\"'>\r\n                            <p classname='\"mb-0\"'>\r\n                              This item in is pre-sales, orders with this item will be fulfilled\r\n                              once the item becomes available for normal sales. Mixed orders may be\r\n                              separated after purchase to fullfill based on availability.\r\n                            </p>\r\n                          </alert>\r\n                        }\r\n                        {item.QuantityBackOrdered &gt; 0\r\n                          &amp;&amp; <alert classname='\"mb-0\"' variant='\"warning\"'>\r\n                            <p classname='\"mb-0\"' id='\"cartBackorderMessage\"'>\r\n                              This item is on back-order, orders with this item will be fulfilled\r\n                              once the item becomes available in stock. Mixed orders may be\r\n                              separated after purchase to fullfill based on availability.\r\n                            </p>\r\n                          </alert>\r\n                        }\r\n                      </td></tr><tr border-bottom="" border-medium\"="" classname='\"border-top'><td classname='\"bg-light\"' colspan="{7}">\r\n              <label classname='\"form-control-static' fw-normal\"="">\r\n                {t(\"ui.storefront.cart.noItemsHaveBeenAddedToTheCart\")}\r\n              </label>\r\n            </td></tr></tbody></table>\r\n  );\r\n};\r\n","import {\r\n  Alert,\r\n  Button,\r\n  Card,\r\n  Col,\r\n  Row\r\n} from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { AddToCartQuantitySelector } from \"src/Cart/controls\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport {\r\n  AppliedCartItemDiscountModel,\r\n  CartModel,\r\n  SerializableAttributesDictionary\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { Dictionary } from \"src/_api/cvApi.shared\";\r\nimport { LoginForPricing } from \"src/Cart/views/LoginForPricing\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { RemoveDiscountButton } from \"src/Cart/controls/RemoveDiscountButton\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { getDiscountTotal } from \"src/Cart/views/CartTableWideScreen\";\r\n\r\ninterface ICartTableMobileProps {\r\n  cartHasItems: boolean;\r\n  cartToUse: CartModel;\r\n  shippingDiscounts?: AppliedCartItemDiscountModel[];\r\n  orderDiscounts?: AppliedCartItemDiscountModel[];\r\n  onChangeSalesItemQuantity: (id: number, quantity: number) =&gt; void;\r\n  onRemoveItemFromCartClicked: (productName: string, salesItemId: number) =&gt; void;\r\n  parentRunning?: boolean;\r\n  itemAttributeDictionary?: Dictionary<serializableattributesdictionary>;\r\n}\r\n\r\nexport const CartTableMobile = (props: ICartTableMobileProps): JSX.Element =&gt; {\r\n  const {\r\n    cartHasItems,\r\n    cartToUse,\r\n    shippingDiscounts,\r\n    orderDiscounts,\r\n    onChangeSalesItemQuantity,\r\n    onRemoveItemFromCartClicked,\r\n    parentRunning,\r\n    itemAttributeDictionary\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n\r\n  const getFormattedPrice = (val: number): string =&gt; {\r\n    if (!val) {\r\n      return \"TBD\";\r\n    }\r\n    return currencyFormatter.format(val);\r\n  }\r\n\r\n  return cartHasItems\r\n    ? &lt;&gt;\r\n      {cartToUse.SalesItems.map((item, itemIndex) =&gt; {\r\n        const DiscountTotal = getDiscountTotal(item);\r\n        const productUrl = corsLink(cefConfig, item.ProductSeoUrl, \"productDetail\");\r\n        return (\r\n          <card classname='\"mb-3' key="{item.ID}" px-4\"="">\r\n            <row classname='\"gx-0\"'>\r\n              \r\n                <a\r\n href="{productUrl}" id="{`cartProductNameXS_${itemIndex}`}\r\n">\r\n                  <imagewithfallback\r\n 75,\r\n="" \"both\",\r\n="" \"pad\"\r\n="" alt="{item.ProductName}\r\n" camelcase\r\n="" eslint-disable-next-line="" imageresizerparamsbody="{{\r\n" maxheight:="" maxwidth:="" mode:="" scale:="" }}\r\n="">\r\n                \r\n              \r\n              \r\n                <card.body classname='\"px-2' py-3="" text-center\"="">\r\n                  <a\r\n classname='\"text-decoration-none\"\r\n' href="{productUrl}" id="{`cartProductNameXS_${itemIndex}`}\r\n">\r\n                    <span classname='\"pointer' mb-0\"="">{item.ProductKey} - <b>{item.ProductName}</b></span>\r\n                  \r\n                </a\r\n></card.body>\r\n              \r\n            </imagewithfallback\r\n></a\r\n></row>\r\n            <row classname='\"gx-0\"'>\r\n              {/* Item Discounts */}\r\n              {item.Discounts?.length\r\n                ? \r\n                  <card.body classname='\"p-2\"'>\r\n                    <card.text>\r\n                      {item.Discounts.map((discount, discountIndex) =&gt; <div key="{discount.ID}">\r\n                        <span\r\n classname='\"small\"\r\n' id="{`cartProductDiscountNameXS_${`${itemIndex}.${discountIndex}`}`}">\r\n                          {discount.SlaveName} \r\n                        \r\n                        {discount.DiscountIsAutoApplied\r\n                          ? <span>\r\n                            <span\r\n `${itemindex}.${discountindex}`\r\n="" classname='\"text-success' id="{`cartProductDiscountValueXS_${\r\n" small\"\r\n="" }`}="">\r\n                              {discount.DiscountValueType === 1\r\n                                ? getFormattedPrice(discount.DiscountValue)\r\n                                : `${discount.DiscountValue}%`}\r\n                            </span\r\n></span>\r\n                                 \r\n                            <span classname='\"text-success' small\"="">\r\n                              {t(\"ui.storefront.common.Off\")}\r\n                            </span>\r\n                          \r\n                          : <removediscountbutton\r\n btnidprefix='\"btnRemoveDiscountFromItemXS\"\r\n' btnvariant='\"none\"\r\n' discount="{discount}\r\n" idsuffix="{`${itemIndex}.${discountIndex}`}\r\n" labelidprefix='\"cartProductDiscountValueXS\"\r\n'>\r\n                        }\r\n                      </removediscountbutton\r\n></span\r\n></div>)}\r\n                    </card.text>\r\n                  </card.body>\r\n                \r\n                : null}\r\n              {/* Item Prices */}\r\n              \r\n                <card.body classname='\"p-2\"'>\r\n                  \r\n                    \r\n                      {(!cefConfig?.loginForPricing?.enabled || currentUser)\r\n                        &amp;&amp; \r\n                          \r\n                          \r\n                        \r\n                      }\r\n                      {(cefConfig?.loginForPricing?.enabled || currentUser)\r\n                        &amp;&amp; \r\n                          \r\n                          \r\n                        \r\n                      }\r\n                      {(cefConfig?.loginForPricing.enabled || currentUser)\r\n                        &amp;&amp; \r\n                          \r\n                          \r\n                        \r\n                      }\r\n                      \r\n                        \r\n                      \r\n                    \r\n                  <table classname='\"w-100' mb-2\"=""><tbody><tr><td classname='\"w-60\"'>\r\n                            <div\r\n !="=" ${\r\n="" &&="" classname="{`display-6" item.unitcoreprice="" item.unitsoldprice="" mb-2="" text-muted=""> 0\r\n                                || DiscountTotal &amp;&amp; DiscountTotal &lt; 0\r\n                                  ? \"strike-through small text-disabled\"\r\n                                  : \"\"\r\n                              }`}\r\n                              id={`cartProductSubtotalCoreXS${itemIndex}`}&gt;\r\n                              {getFormattedPrice((item.UnitCorePrice ?? 0) * item.TotalQuantity)}\r\n                            \r\n                          </div\r\n></td><td classname='\"w-40\"'>\r\n                            <div\r\n classname='\"text-muted' id="{`cartPackageSize${itemIndex}`}" text-end\"\r\n="">\r\n                              {itemAttributeDictionary\r\n                                &amp;&amp; itemAttributeDictionary[item.ProductID]\r\n                                &amp;&amp; itemAttributeDictionary[item.ProductID][\"Package Size\"]\r\n                                ? itemAttributeDictionary[item.ProductID][\"Package Size\"].Value\r\n                                : \"\"}\r\n                            \r\n                          </div\r\n></td></tr><tr><td>\r\n                            {item.UnitSoldPrice\r\n                              &amp;&amp; item.UnitCorePrice !== item.UnitSoldPrice\r\n                              &amp;&amp; item.UnitSoldPrice &gt; 0\r\n                              &amp;&amp; <div\r\n ${\r\n="" &&="" 0\r\n="" :="" <="" ?="" \"\"\r\n="" \"strike-through="" classname="{`cart-price" discounttotal="" price="" small="" text-danger="" text-disabled\"\r\n="" text-end="" }`}="">\r\n                                {getFormattedPrice(item.UnitSoldPrice)}\r\n                              \r\n                            }\r\n                          </div\r\n></td><td>\r\n                            {item.UnitCorePrice !== item.UnitSoldPrice &amp;&amp; item.UnitSoldPrice &gt; 0\r\n                              &amp;&amp; <div\r\n ${\r\n="" &&="" 0\r\n="" :="" <="" ?="" \"\"\r\n="" \"strike-through="" classname="{`text-end" discounttotal="" id="{`cartProductSubtotalXS${itemIndex}`}" small="" text-danger="" text-disabled\"\r\n="" }`}\r\n="">\r\n                                {getFormattedPrice(item.ExtendedPrice)}\r\n                              \r\n                            }\r\n                          </div\r\n></td></tr><tr><td>\r\n                            {DiscountTotal &lt; 0\r\n                              &amp;&amp; <div classname='\"cart-price' price="" text-end="" text-success\"="">\r\n                                {// eslint-disable-next-line @typescript-eslint/no-extra-parens, max-len\r\n                                  getFormattedPrice((item.UnitSoldPrice || item.UnitCorePrice || 0) + (DiscountTotal / item.TotalQuantity))\r\n                                }\r\n                              </div>\r\n                            }\r\n                          </td><td>\r\n                            {DiscountTotal &lt; 0\r\n                              &amp;&amp; <div\r\n classname='\"text-end' id="{`cartProductSubtotalWithDiscountsXS_${itemIndex}`}" text-success\"\r\n="">\r\n                                {getFormattedPrice(item.ExtendedPrice + DiscountTotal)}\r\n                              \r\n                            }\r\n                          </div\r\n></td></tr><tr><td classname='\"bg-light\"' colspan="{2}">\r\n                          <addtocartquantityselector\r\n decreasedisabled="{parentRunning}\r\n" id="{item.ID}\r\n" increasedisabled="{parentRunning}\r\n" initialvalue="{item.TotalQuantity}\r\n" key="{item.ProductKey}\r\n" number)="" onchange="{(val:"> onChangeSalesItemQuantity(item.ID, val)}\r\n                          /&gt;\r\n                        </addtocartquantityselector\r\n></td></tr></tbody></table>\r\n                  {cefConfig?.loginForPricing.enabled &amp;&amp; !currentUser\r\n                    &amp;&amp; <div>\r\n                      <loginforpricing>\r\n                    </loginforpricing></div>\r\n                  }\r\n                  <div classname='\"w-100' text-center\"="">\r\n                    <button\r\n =="" aria-label='{t(\"ui.storefront.cart.removeItemFromCart\")}\r\n' classname='\"text-danger' id="{`btnRemoveItemXS${itemIndex}FromCart`}\r\n" name="{`btnRemoveItemXS${itemIndex}FromCart`}\r\n" onclick="{()" text-decoration-none\"\r\n="" title='{t(\"ui.storefront.cart.removeItemFromCart\")}\r\n' variant='\"link\"\r\n'> onRemoveItemFromCartClicked(item.ProductName, item.ID)}&gt;\r\n                      {/* @ts-ignore */}\r\n                      <i classname='\"fal' fa-lg\"="" fa-trash="">\r\n                       \r\n                      <span>{t(\"ui.storefront.cart.removeItemFromCart\")}</span>\r\n                    \r\n                  </i></button\r\n></div><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n                </i></card.body><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n              \r\n              {cefConfig?.featureSet.inventory.preSale.enabled &amp;&amp; item.ProductAllowPreSale\r\n                || cefConfig?.featureSet.inventory.backOrder.enabled\r\n                  &amp;&amp; item.QuantityBackOrdered &gt; 0\r\n                  &amp;&amp; \r\n                    {item.ProductAllowPreSale\r\n                      &amp;&amp; <alert classname='\"mb-0\"' variant='\"warning\"'>\r\n                        <p classname='\"mb-0\"'>\r\n                            This item in is pre-sales, orders with this item will be fulfilled once\r\n                            the item becomes available for normal sales. Mixed orders may be\r\n                            separated after purchase to fullfill based on availability.\r\n                        </p>\r\n                      </alert>\r\n                    }\r\n                    {item.QuantityBackOrdered &gt; 0\r\n                      &amp;&amp; <alert classname='\"mb-0\"' variant='\"warning\"'>\r\n                        <p classname='\"mb-0\"' id='\"cartBackorderMessage\"'>\r\n                            This item is on back-order, orders with this item will be fulfilled once\r\n                            the item becomes available in stock. Mixed orders may be separated after\r\n                            purchase to fullfill based on availability.\r\n                        </p>\r\n                      </alert>\r\n                    }\r\n                  \r\n              }\r\n            </i></row><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n          </i></card><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n        );\r\n      })}\r\n      {orderDiscounts &amp;&amp; orderDiscounts.length\r\n        ? orderDiscounts.map((discount, discountIndex) =&gt; {\r\n          const { ID, DiscountIsAutoApplied, DiscountValueType, DiscountValue, SlaveName }\r\n              = discount;\r\n          return (\r\n            <card classname='\"mb-3\"' key="{ID}">\r\n              <card.header id="{`orderDiscountTypeXS_${discountIndex}`}">\r\n                {t(\"ui.storefront.cart.orderDiscountType\")}\r\n              </card.header>\r\n              <card.body>\r\n                <span classname='\"small\"' id="{`orderDiscountNameXS_${discountIndex}`}">\r\n                  {SlaveName}\r\n                </span>\r\n                {DiscountIsAutoApplied\r\n                  ? <span>\r\n                    <span\r\n classname='\"text-success' id="{`orderDiscountValueXS_${discountIndex}`}" small\"\r\n="">\r\n                      {DiscountValueType === 1\r\n                        ? getFormattedPrice(DiscountValue)\r\n                        : `${DiscountValue}%`}\r\n                    </span\r\n></span>\r\n                       \r\n                    <span classname='\"text-success' small\"="">{t(\"ui.storefront.common.Off\")}</span>\r\n                  \r\n                  : <removediscountbutton\r\n btnidprefix='\"btnRemoveOrderDiscountXS\"\r\n' btnvariant='\"none\"\r\n' discount="{discount}\r\n" idsuffix="{discountIndex.toString()}\r\n" labelidprefix='\"orderDiscountValueXS\"\r\n'>\r\n                }\r\n              </removediscountbutton\r\n></card.body>\r\n            </card>\r\n          );\r\n        })\r\n        : null}\r\n      {shippingDiscounts &amp;&amp; shippingDiscounts.length\r\n        ? shippingDiscounts.map((discount, discountIndex) =&gt; {\r\n          const { ID, DiscountIsAutoApplied, DiscountValueType, DiscountValue, SlaveName }\r\n              = discount;\r\n          return (\r\n            <card classname='\"mb-3\"' key="{ID}">\r\n              <card.header id="{`orderDiscountTypeXS_${discountIndex}`}">\r\n                {t(\"ui.storefront.cart.orderDiscountType\")}\r\n              </card.header>\r\n              <card.body>\r\n                <span classname='\"small\"' id="{`orderDiscountNameXS_${discountIndex}`}">\r\n                  {SlaveName}\r\n                </span>\r\n                {DiscountIsAutoApplied\r\n                  ? <span>\r\n                    <span\r\n classname='\"text-success' id="{`orderDiscountValueXS_${discountIndex}`}" small\"\r\n="">\r\n                      {DiscountValueType === 1\r\n                        ? getFormattedPrice(DiscountValue)\r\n                        : `${DiscountValue}%`}\r\n                    </span\r\n></span>\r\n                       \r\n                    <span classname='\"text-success' small\"="">{t(\"ui.storefront.common.Off\")}</span>\r\n                  \r\n                  : <removediscountbutton\r\n btnidprefix='\"btnRemoveShipmentDiscountXS\"\r\n' btnvariant='\"none\"\r\n' discount="{discount}\r\n" idsuffix="{discountIndex.toString()}\r\n" labelidprefix='\"shipmentDiscountValueXS\"\r\n'>\r\n                }\r\n              </removediscountbutton\r\n></card.body>\r\n            </card>\r\n          );\r\n        })\r\n        : null}\r\n    \r\n    : <label classname='\"form-control-static' fw-normal\"="" id='\"cartEmptyLabelXS\"'>\r\n      {t(\"ui.storefront.cart.noItemsHaveBeenAddedToTheCart\")}\r\n    </label>;\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n  Alert,\r\n  Button,\r\n  Card,\r\n  Col,\r\n  Container,\r\n  FormControl,\r\n  InputGroup,\r\n  Row,\r\n  Spinner\r\n} from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { Dictionary } from \"src/_api/cvApi.shared\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport {\r\n  ProductSuggestResult,\r\n  SerializableAttributesDictionary,\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { SuggestProductCatalogWithProviderDto } from \"src/_api\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { RemoveFromCartModal } from \"src/Cart/modals\";\r\nimport { OutsideClickDetector } from \"src/_shared/higherOrderComponents\";\r\nimport { CartValidator } from \"src/Cart/views/CartValidator\";\r\nimport { CartTableMobile } from \"./views/CartTableMobile\";\r\nimport { CartTableWideScreen } from \"./views/CartTableWideScreen\";\r\nimport { useDebounceWithCallback } from \"src/_shared/customHooks/useDebounceWithCallback\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { ProductCardPricingWidget, ProductCardStockWidget } from \"src/Catalog/views/ProductCardWidgets\";\r\n\r\ninterface ICartProps {\r\n  cartType: \"Quote Cart\" | \"Cart\";\r\n  includeQuickOrder?: boolean;\r\n}\r\n\r\ninterface IRemoveFromCartModalInfo {\r\n  show: boolean;\r\n  productName?: string;\r\n  productId?: number;\r\n}\r\n\r\nexport const Cart = (props: ICartProps): JSX.Element =&gt; {\r\n  const { cartType } = props;\r\n\r\n  const [ suggestions, setSuggestions ] = useState<array<productsuggestresult>&gt;([]);\r\n  const [ fetchingSuggestions, setFetchingSuggestions ] = useState<boolean>(false);\r\n  const [ selectedProduct, setSelectedProduct ] = useState<productmodel>(null);\r\n  const [ quickAddError, setQuickAddError ] = useState<error>(null);\r\n  const [ query, setQuery ] = useState<string>(\"\");\r\n  const [ queuedIDs, setQueuedIDs ] = useState([]);\r\n  const [ removeFromCartModalInfo, setRemoveFromCartModalInfo ] = useState<iremovefromcartmodalinfo>({\r\n    show: false\r\n  });\r\n  const [ productAttributes, setProductAttributes ] = useState<dictionary<serializableattributesdictionary>&gt;(undefined);\r\n\r\n  useDebounceWithCallback<string>(query, handleDebouncedQuery, 500);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n  const cefConfig = useCefConfig();\r\n  const cart = useCart(cartType);\r\n  const cartFactory = useCartFactory();\r\n\r\n  const isForQuoteCart = cartType === ServiceStrings.carts.types.quote;\r\n  const cartToUse = cart;\r\n\r\n  useEffect(() =&gt; {\r\n    const itemProductIDs = cartToUse?.SalesItems?.map(x =&gt; x.ProductID) ?? [];\r\n    if (!itemProductIDs.length) {\r\n      return;\r\n    }\r\n    cvApi.products.GetAttributesForProductIDs({ProductIDs: itemProductIDs}).then(r =&gt; {\r\n      if (r?.data) {\r\n        setProductAttributes(r.data);\r\n      }\r\n    })\r\n  }, [ cartToUse ]);\r\n\r\n  function handleDebouncedQuery(): void {\r\n    const searchIsSuggestion = Boolean(suggestions.find(s =&gt; s.Name === query));\r\n    if (searchIsSuggestion) {\r\n      setSuggestions(selectedProduct ? [] : suggestions.filter(x =&gt; x.Name === query));\r\n      return;\r\n    }\r\n    if (selectedProduct) {\r\n      setSelectedProduct(null);\r\n    }\r\n    onQueryChanged();\r\n  }\r\n\r\n  const onSearchInputKeyDown = (e: React.KeyboardEvent<htmlinputelement>): void =&gt; {\r\n    if (e.key === \"Enter\") {\r\n      onQueryChanged();\r\n      setSuggestions([]);\r\n      e.preventDefault();\r\n    }\r\n    if (e.key === \"Escape\") {\r\n      setSuggestions([]);\r\n    }\r\n  };\r\n\r\n  function onQueryChanged(): void {\r\n    if (!query || !query.length) {\r\n      setSuggestions([]);\r\n      return;\r\n    }\r\n\r\n    setFetchingSuggestions(true);\r\n    cvApi.providers\r\n      .SuggestProductCatalogWithProvider({\r\n        Page: 1,\r\n        PageSetSize: 8,\r\n        PageSize: 8,\r\n        Query: query,\r\n        Sort: 0\r\n      } as SuggestProductCatalogWithProviderDto)\r\n      .then(result =&gt; {\r\n        setSuggestions(result.data);\r\n        setFetchingSuggestions(false);\r\n      })\r\n      .catch(err =&gt; {\r\n        if (cefConfig?.debug) {\r\n          console.error(err);\r\n        }\r\n        setFetchingSuggestions(false);\r\n      });\r\n  }\r\n\r\n  function onSuggestionClicked(suggestion: ProductSuggestResult) {\r\n    // Clear errors when changing selection\r\n    setQuickAddError(null);\r\n    setRunning();\r\n    cvApi.products\r\n      .GetProductByID(suggestion.ID)\r\n      .then(async res =&gt; {\r\n        let product = res.data;\r\n        if (cefConfig?.featureSet.inventory.enabled) {\r\n          product = await inventoryFactory.factoryAssign(product);\r\n        }\r\n        if (cefConfig?.featureSet.pricing.enabled) {\r\n          product = await pricingFactory.factoryAssign(product);\r\n        }\r\n        setSelectedProduct(product);\r\n        setQuery(suggestion.Name);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function cartHasItems() {\r\n    return Boolean(cartToUse?.SalesItems?.length);\r\n  }\r\n\r\n  const removeCartItemByID = (ID: number): void =&gt; {\r\n    setRunning();\r\n    cartFactory.removeItemFromCart(cartType, ID)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n        setRemoveFromCartModalInfo({ show: false });\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void =&gt; {\r\n    setRunning();\r\n    setQueuedIDs(queuedIDsI =&gt; [ ...queuedIDsI, cartItemID ]);\r\n    cartFactory.updateItemQuantity(cartType, cartItemID, quantity)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n        setQueuedIDs(queuedIDsI =&gt; queuedIDsI.filter(ID =&gt; ID !== cartItemID));\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const orderDiscounts = cart?.Discounts\r\n    ? cart.Discounts.filter(d =&gt; d.DiscountTypeID === 0)\r\n    : [];\r\n  const shippingDiscounts = cart?.Discounts\r\n    ? cart.Discounts.filter(d =&gt; d.DiscountTypeID === 2)\r\n    : [];\r\n\r\n  if (!cart || cart.Loading) {\r\n    return <loadingwidget>;\r\n  }\r\n\r\n  return (\r\n    <section classname='\"section-cart\"'>\r\n      <container classname='\"my-3' position-relative\"="">\r\n        <row>\r\n          \r\n            {/* <h1 classname='\"mt-3\"' id='\"CartPageTitle\"'>\r\n              {isForQuoteCart\r\n                ? t(\"ui.storefront.cart.QuoteCart\")\r\n                : t(\"ui.storefront.cart.microCart.MyCart\")}\r\n            </h1> */}\r\n          \r\n          \r\n            <cartvalidator (cart.typename="" :="" ?="" \"cart\")="" \"cart\"}="" as="" type="{cart">\r\n          \r\n        </cartvalidator></row>\r\n        <row>\r\n          <div classname='\"d-block' d-sm-none\"="" id="{`tblCartXS_${cartType}`}">\r\n            <carttablemobile\r\n carthasitems="{cartHasItems()}\r\n" carttouse="{cartToUse}\r\n" onchangesalesitemquantity="{onChangeSalesItemQuantity}\r\n" onremoveitemfromcartclicked="{(productName," orderdiscounts="{orderDiscounts}\r\n" salesitemid)="" shippingdiscounts="{shippingDiscounts}\r\n"> setRemoveFromCartModalInfo({\r\n                show: true,\r\n                productName,\r\n                productId: salesItemId\r\n              })\r\n              }\r\n              parentRunning={viewState.running}\r\n              itemAttributeDictionary={productAttributes}\r\n            /&gt;\r\n          </carttablemobile\r\n></div>\r\n          <div classname='\"table-responsive' d-none="" d-sm-block\"="">\r\n            <carttablewidescreen\r\n carthasitems="{cartHasItems()}\r\n" carttouse="{cartToUse}\r\n" onchangesalesitemquantity="{onChangeSalesItemQuantity}\r\n" onremoveitemfromcartclicked="{(productName," orderdiscounts="{orderDiscounts}\r\n" salesitemid)="" shippingdiscounts="{shippingDiscounts}\r\n"> setRemoveFromCartModalInfo({\r\n                show: true,\r\n                productName,\r\n                productId: salesItemId\r\n              })\r\n              }\r\n              queuedIDs={queuedIDs}\r\n              parentRunning={viewState.running}\r\n              itemAttributeDictionary={productAttributes}\r\n            /&gt;\r\n          </carttablewidescreen\r\n></div>\r\n        </row>\r\n        \r\n          \r\n            <div classname='\"mb-3\"'>\r\n              <card bg='\"light\"'>\r\n                <outsideclickdetector =="" onoutsideclicked="{()"> setSuggestions([])}&gt;\r\n                  <card.body classname='\"align-items-baseline\"'>\r\n                    <label classname='\"control-label' htmlfor='\"txtQuickAddSearch\"' mb-2\"="">Add additional items to your cart</label>\r\n                    <inputgroup classname='\"mb-2\"'>\r\n                      <formcontrol\r\n =="" aria-label='\"autocomplete\"\r\n' autocomplete\"\r\n="" classname='\"border-right-0' onchange="{e" placeholder='{t(\"ui.storefront.cart.searchProducts\")}\r\n' type='\"text\"\r\n'> {\r\n                          setQuery(e.target.value);\r\n                        }}\r\n                        value={query}\r\n                        onKeyDown={onSearchInputKeyDown}\r\n                        data-autocomplete='{\"request\": \"inc/autocomplete-source.json\"}'\r\n                      /&gt;\r\n                      {suggestions.length\r\n                        ? <div\r\n 1000="" \"105%\",="" bg-white\"\r\n="" border="" classname='\"position-absolute' style="{{" top:="" zindex:="" }}="">\r\n                          <ul classname='\"list-unstyled' mb-0="" p-0\"="">\r\n                            {suggestions.map(suggestion =&gt; <li classname='\"p-0' key="{suggestion.Name}" text-start\"="">\r\n                              <button\r\n =="" classname='\"text-start' onclick="{()" ps-3="" py-0="" text-decoration-none\"\r\n="" text-nowrap="" variant='\"link\"\r\n' w-100=""> onSuggestionClicked(suggestion)}&gt;\r\n                                {suggestion.Name}\r\n                              \r\n                            </button\r\n></li>)}\r\n                          </ul>\r\n                        </div\r\n></formcontrol\r\n></inputgroup></card.body></outsideclickdetector></card></div>\r\n                        : null}\r\n                      <inputgroup.text border-left-0\"="" classname='\"bg-white'>\r\n                        {fetchingSuggestions\r\n                          ? <spinner animation='\"border\"' size='\"sm\"'>\r\n                          : <i aria-label='\"search\"' classname='\"fal' fa-search\"="">\r\n                        }\r\n                      </i></spinner></inputgroup.text><i aria-label='\"search\"' classname='\"fal' fa-search\"="">\r\n                    \r\n                    {/* <button classname='\"btn-link\"'>Add</button> */}\r\n                    {Boolean(selectedProduct?.ID)\r\n                      &amp;&amp; &lt;&gt;\r\n                        <div classname='\"d-flex' justify-content-between="" mb-2\"="">\r\n                          <div classname='\"my-auto\"'>\r\n                            <productcardstockwidget\r\n product="{selectedProduct}\r\n">\r\n                          </productcardstockwidget\r\n></div>\r\n                          <productcardpricingwidget\r\n product="{selectedProduct}\r\n">\r\n                        </productcardpricingwidget\r\n></div>\r\n                        <productcardactionbuttonwidget\r\n :="" =="=" ?="" \"addtocart\"="" \"addtoquotecart\"}\r\n="" buttonview="{cartType" disablemodals="{true}\r\n" product="{selectedProduct}\r\n" servicestrings.carts.types.cart="">\r\n                      \r\n                    }\r\n                    {quickAddError &amp;&amp; <alert key="{quickAddError.message}" variant='\"danger\"'>\r\n                      <span>{quickAddError.message}</span>\r\n                    </alert>}\r\n                  \r\n                \r\n              \r\n            \r\n          \r\n          \r\n          \r\n            <h3 data-sid='\"ShoppingCartTotalText\"'>\r\n            {cartType === ServiceStrings.carts.types.cart ? \"Shopping Cart Total\" : \"Quote Cart Total\"}\r\n            </h3>\r\n            {/* TODO: replace with TotalsWidget */}\r\n            <ul classname='\"list-unstyled' mb-0\"="" ps-0="">\r\n              {cartToUse?.SalesItems?.find(x =&gt; !x.ExtendedPrice || x.ExtendedPrice === 0)\r\n                  ? <li>\r\n                      <div alert-warning\"="" classname='\"alert'>\r\n                        <span>Some items in your cart do not have available pricing and will not be included in any estimated totals.</span>\r\n                      </div>\r\n                    </li>\r\n                  : <li></li>}\r\n              <li bg-light\"="" border-medium="" border-top="" classname='\"p-2' d-flex="" justify-content-between="">\r\n                <span classname='\"dt\"' id='\"CartSubtotalText\"'>{t(\"ui.storefront.common.Subtotal\")}</span>\r\n                <span classname='\"dd\"' id='\"cartTotalsSubtotal\"'>\r\n                  {isNaN(cartToUse?.Totals?.SubTotal) || cartToUse?.Totals?.SubTotal == 0\r\n                    ? \"TBD\"\r\n                    : currencyFormatter.format(cartToUse?.Totals?.SubTotal)}\r\n                </span>\r\n              </li>\r\n              {/* <li bg-light\"="" border-medium="" border-top="" classname='\"p-2' d-flex="" justify-content-between="" total="">\r\n                <span classname='\"dt\"' data-sid='\"CartDiscountsText\"'>{t(\"ui.storefront.common.Discount.Plural\")}</span>\r\n                <span classname='\"dd\"' data-sid='\"cartTotalsDiscounts\"'>\r\n                  {isNaN(cartToUse?.Totals?.Discounts)\r\n                    ? currencyFormatter.format(0.0)\r\n                    : currencyFormatter.format(cartToUse?.Totals?.Discounts)}\r\n                </span>\r\n              </li> */}\r\n              <li border-medium="" border-top="" classname='\"p-2' d-flex="" justify-content-between\"="" total="">\r\n                <span classname='\"dt\"' data-sid='\"cartGrandTotalText\"'>{t(\"ui.storefront.cart.grandTotal\")}</span>\r\n                <span classname='\"dd\"' data-sid='\"cartTotalsTotal\"'>\r\n                  {viewState.running\r\n                    ? <loadingwidget innerclasses='\"p-0\"' size='\"lg\"'>\r\n                    : isNaN(cartToUse?.Totals?.Total) || cartToUse?.Totals?.Total == 0\r\n                      ? \"TBD\"\r\n                      : currencyFormatter.format(cartToUse?.Totals?.Total)\r\n                  }\r\n                </loadingwidget></span>\r\n              </li>\r\n              <li border-medium="" border-top="" classname='\"py-2' text-center\"="">\r\n                <a\r\n !carthasitems()="" :="" ?="" \"="" \"#\"}\r\n="" \"\"\r\n="" \"cart\"="" btn-info="" carttype="==" checkout\"="" classname="{`btn" data-sid='\"btnProceedToCheckout\"\r\n' disabled\"="" href="{cartHasItems()" rounded-1="" submit-quote\"="" text-white${\r\n="" underline-hover-none="" viewstate.running="" w-85="" ||="" }`}="">\r\n                  {t(\r\n                    cartType === \"Cart\"\r\n                      ? \"ui.storefront.cart.proceedToCheckout\"\r\n                      : \"ui.storefront.common.SubmitQuote\"\r\n                  )}\r\n                \r\n              </a\r\n></li>\r\n            </ul>\r\n          \r\n        \r\n      </productcardactionbuttonwidget\r\n></i></container><i aria-label='\"search\"' classname='\"fal' fa-search\"="">\r\n      <removefromcartmodal\r\n =="" onconfirm="{()" productname="{removeFromCartModalInfo.productName}\r\n" show="{removeFromCartModalInfo.show}\r\n"> removeCartItemByID(removeFromCartModalInfo.productId)}\r\n        onCancel={() =&gt; setRemoveFromCartModalInfo({ show: false })}\r\n        parentRunning={viewState.running}\r\n        cartTypeText={cartType}\r\n      /&gt;\r\n    </removefromcartmodal\r\n></i></section><i aria-label='\"search\"' classname='\"fal' fa-search\"="">\r\n  );\r\n};\r\n","import { Alert, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport const AlertInfoNoResults = (): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <alert align-items-center\"="" classname='\"d-flex' variant='\"info\"'>\r\n          <i \"="" classname='\"fal' fa-3x="" fa-question-circle="" me-3="">\r\n          <b>{t(\"ui.storefront.searchCatalog.alerts.Sorry.Exclamation\")}</b>\r\n           \r\n          <span>{t(\"ui.storefront.searchCatalog.alerts.NoResultsFound.Message\")}</span>\r\n        </i></alert><i \"="" classname='\"fal' fa-3x="" fa-question-circle="" me-3="">\r\n      \r\n    </i></row><i \"="" classname='\"fal' fa-3x="" fa-question-circle="" me-3="">\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Anchor, Button, Card } from \"react-bootstrap\";\r\nimport { IPCCWLayoutProps } from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport const PCCWOverlayLayout = (props: IPCCWLayoutProps): JSX.Element =&gt; {\r\n  const { product, items } = props;\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  const productIsMaster = product.TypeName.toLowerCase() === \"variant master\";\r\n\r\n  if (productIsMaster) {\r\n    return (\r\n      <card bg-white="" border-0\"="" classname='\"card-img-top'>\r\n        <div\r\n classname='\"product-image' d-flex="" id="{`cartProductImageThumbnail${product.ID}`}" justify-content-center\"\r\n="">\r\n          <anchor\r\n \"productdetail\")}="" href="{corsLink(cefConfig," product.seourl,="">\r\n            <imagewithfallback\r\n 200,\r\n="" \"both\",\r\n="" \"pad\"\r\n="" alt="{product.Name}\r\n" classname='\"img-fluid' d-block\"\r\n="" imageresizerparamsbody="{{\r\n" maxheight:="" maxwidth:="" mode:="" scale:="" src="{product.PrimaryImageFileName}\r\n" }}\r\n="">\r\n          \r\n        \r\n      </imagewithfallback\r\n></anchor\r\n></div\r\n></card>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <card bg-white="" border-0\"="" classname='\"card-img-top'>\r\n      <div classname='\"image-with-control-overlay\"'>\r\n        <div\r\n classname='\"product-image' id="{`cartProductImageThumbnail${product.ID}`}" justify-content-center\"\r\n="">\r\n          <anchor\r\n \"productdetail\")}="" href="{corsLink(cefConfig," product.seourl,="">\r\n            <imagewithfallback\r\n 200,\r\n="" 200\r\n="" alt="{product.Name}\r\n" classname='\"img-fluid' d-block\"\r\n="" height:="" imageresizerparamsbody="{{\r\n" src="{product.PrimaryImageFileName}\r\n" width:="" }}\r\n="">\r\n          \r\n        </imagewithfallback\r\n></anchor\r\n></div\r\n></div>\r\n        <div bg-transparent\"="" classname='\"text-center' image-overlay-controls="" p-3="">\r\n          &lt;&gt;\r\n            {items.map(item =&gt; {\r\n              const { hide, idPrefix, titleKey, onClick, icon } = item;\r\n              if (!hide) {\r\n                return (\r\n                  <button\r\n align-items-center="" aria-label="{t(titleKey)}\r\n" classname='\"rounded' d-flex="" id="{`${idPrefix}${product.ID}`}\r\n" key="{titleKey}\r\n" mt-1="" o-80\"\r\n="" onclick="{onClick}" text-decoration-none="" title="{t(titleKey)}\r\n" variant='\"secondary\"\r\n'>\r\n                    {item.icon &amp;&amp; <div classname='\"d-inline-block\"'>{icon}</div>}\r\n                    {item.iconString &amp;&amp; <i ${item.iconstring}`}="" classname="{`my-1"></i>}\r\n                    <span \"0.75rem\"="" paddingleft:="" style="{{" }}="">{t(titleKey)}</span>\r\n                  \r\n                );\r\n              }\r\n              return null;\r\n            })}\r\n          \r\n        </button\r\n></div>\r\n      \r\n    </card>\r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Button, ButtonGroup } from \"react-bootstrap\";\r\nimport { IPCCWLayoutProps } from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\r\n\r\nexport const PCCWHorizontalLayout = ( props: IPCCWLayoutProps ): JSX.Element =&gt; {\r\n  const { product, items } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const productIsMaster = product.TypeName.toLowerCase() === \"variant master\";\r\n  return (\r\n    <buttongroup classname='\"justify-content-between' w-100\"="">\r\n      {items.map( ( item ): JSX.Element =&gt; {\r\n        const { hide, hideI, idPrefix, titleKey, onClick, icon } = item;\r\n        if ( !hide ) {\r\n          return (\r\n            <button\r\n )}\r\n="" aria-label="{t(" classname='\"wrap' disabled="{Boolean(" id="{`${" idprefix="" key="{titleKey}\r\n" onclick="{onClick}" product.id="" productismaster="" text-decoration-none\"\r\n="" title="{t(" titlekey="" type='\"button\"\r\n' variant='\"link\"\r\n' }${="" }`}\r\n="">\r\n              {icon}\r\n              {!hideI &amp;&amp; <br/>}\r\n            \r\n          );\r\n        }\r\n        return <button classname='\"d-none\"' key="{titleKey}">;\r\n      } )}\r\n    \r\n  );\r\n};\r\n","import { IPCCWLayoutProps } from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, ListGroup } from \"react-bootstrap\";\r\n\r\nexport const PCCWVerticalLayout = (props: IPCCWLayoutProps): JSX.Element =&gt; {\r\n  const { product, items } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const productIsMaster = product?.TypeName?.toLowerCase() === \"variant master\";\r\n\r\n  return (\r\n    <listgroup as='\"ul\"' classname='\"list-unstyled\"'>\r\n      {items.map(item =&gt; {\r\n        const { hide, idPrefix, titleKey, onClick, icon } = item;\r\n        if (!hide) {\r\n          return (\r\n            <listgroup.item classname='\"p-0\"' key="{titleKey}">\r\n              <button\r\n align-items-center\"\r\n="" aria-label="{t(titleKey)}\r\n" classname='\"border-0' d-flex="" disabled="{Boolean(productIsMaster)}\r\n" id="{`${idPrefix}${product.ID}`}\r\n" onclick="{onClick}" title="{t(titleKey)}\r\n" variant='\"outline-dark\"\r\n' w-100="">\r\n                { icon &amp;&amp; <div classname='\"d-inline-block' px-2\"="">{icon}</div> }\r\n                { item.iconString &amp;&amp; <i ${item.iconstring}`}="" classname="{`me-1" fa-fw=""></i> }\r\n                <span>{t(titleKey)}</span>\r\n              </button\r\n></listgroup.item></listgroup></button>\r\n            \r\n          );\r\n        }\r\n        return <listgroup.item classname='\"d-none\"' key="{titleKey}">;\r\n      })}\r\n    \r\n  );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Form } from \"react-bootstrap\";\r\nimport { ProductModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { Modal } from \"src/_shared/modals/Modal\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useShoppingLists } from \"src/_redux/slices/cartSlice\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\n\r\ninterface IAddToShoppingListModalProps {\r\n  show: boolean;\r\n  onCancel: Function;\r\n  product: ProductModel;\r\n  productID?: number;\r\n  productName?: string;\r\n  includeSwitchToCreateBtn?: boolean;\r\n  onSwitchToCreateButtonClicked?: () =&gt; void;\r\n  customConfirmMessage?: string;\r\n  clearCustomConfirmMessage?: () =&gt; void;\r\n}\r\n\r\nconst nullOptionKey = \"ui.storefront.userDashboard2.controls.addToShoppingList.SelectAShoppingList\";\r\n\r\nexport const AddToShoppingListModal = (props: IAddToShoppingListModalProps): JSX.Element =&gt; {\r\n  const {\r\n    show,\r\n    onCancel,\r\n    product,\r\n    includeSwitchToCreateBtn,\r\n    onSwitchToCreateButtonClicked,\r\n    customConfirmMessage,\r\n    clearCustomConfirmMessage,\r\n  } = props;\r\n\r\n  const [ selectedShoppingListName, setSelectedShoppingListName ] = useState<string>(nullOptionKey);\r\n  const [ itemIsIncludedInList, setItemIsIncludedInList ] = useState<boolean>(false);\r\n  const [ showConfirmMessage, setShowConfirmMessage ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cartFactory = useCartFactory();\r\n  const currentUser = useCurrentUser();\r\n  const shoppingLists = useShoppingLists();\r\n\r\n  useEffect(() =&gt; {\r\n    if (clearCustomConfirmMessage) {\r\n      clearCustomConfirmMessage();\r\n    }\r\n    return () =&gt; {\r\n      if (clearCustomConfirmMessage) {\r\n        clearCustomConfirmMessage();\r\n      }\r\n    };\r\n  }, [ show, selectedShoppingListName, itemIsIncludedInList, showConfirmMessage ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (show &amp;&amp; currentUser.ID &gt; 0) {\r\n      setSelectedShoppingListName(nullOptionKey);\r\n      setShowConfirmMessage(false);\r\n    }\r\n  }, [ show, currentUser ]);\r\n\r\n  function checkIfItemIsInCart(TypeName: string): void {\r\n    setRunning();\r\n    cartFactory\r\n      .checkIfItemIsInStaticCart(TypeName, product.ID)\r\n      .then(res =&gt; {\r\n        setItemIsIncludedInList(res);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  const onAddToListClicked = () =&gt; {\r\n    cartFactory\r\n      .addItemToStaticCart(selectedShoppingListName, product.ID, 1)\r\n      .then(() =&gt; {\r\n        setShowConfirmMessage(true);\r\n      })\r\n      .catch(err =&gt; console.error(err));\r\n  };\r\n\r\n  return (\r\n    <fragment>\r\n      <modal\r\n oncancel="{onCancel}\r\n" show="{show}\r\n" size='\"md\"' title='{t(\"ui.storefront.userDashboard2.controls.addToShoppingList.SelectAShoppingList\")}\r\n'>\r\n        <form.select\r\n =="" classname='\"mb-3' id='\"shoppingListSelect\"\r\n' name='\"shoppingListSelect\"\r\n' ng-empty\"\r\n="" ng-pristine="" ng-untouched="" ng-valid="" onchange="{e"> {\r\n            if (e.target.value === nullOptionKey) {\r\n              setItemIsIncludedInList(false);\r\n            } else {\r\n              checkIfItemIsInCart(e.target.value);\r\n            }\r\n            setSelectedShoppingListName(e.target.value);\r\n            if (showConfirmMessage) {\r\n              setShowConfirmMessage(false);\r\n            }\r\n          }}\r\n          value={selectedShoppingListName}&gt;\r\n          <option value="{nullOptionKey}">\r\n            {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.SelectAShoppingList\")}\r\n          </option>\r\n          {shoppingLists?.map(shoppingList =&gt; {\r\n            const { Name, ID } = shoppingList;\r\n            return (\r\n              <option key="{ID}" value="{Name}">\r\n                {Name}\r\n              </option>\r\n            );\r\n          })}\r\n        \r\n        {showConfirmMessage || customConfirmMessage\r\n          ? <alert id='\"ShoppingListModalNameText\"' variant='\"success\"'>\r\n            {customConfirmMessage\r\n              ?? `${\r\n                product.Name || product.CustomKey\r\n              } has been added to ${selectedShoppingListName}`}\r\n             \r\n          </alert>\r\n          : null}\r\n        <div align-items-center="" classname='\"d-flex' gap-1\"="" justify-content-end="">\r\n          <button\r\n =="" classname='\"ng-scope\"\r\n' id='\"closeSelectShoppingListModal\"\r\n' onclick="{()" variant='\"secondary\"\r\n'> onCancel()}&gt;\r\n            {t(\"ui.storefront.userDashboard2.controls.createShoppingList.BackToExistingLists\")}\r\n          \r\n          {includeSwitchToCreateBtn\r\n            &amp;&amp; <button\r\n =="" classname='\"ng-scope\"\r\n' id='\"btnModalCreateShoppingList\"\r\n' name='\"btnModalCreateShoppingList\"\r\n' onclick="{()" variant='\"secondary\"\r\n'> onSwitchToCreateButtonClicked()}&gt;\r\n              {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.CreateAndAddAnother\")}\r\n            \r\n          }\r\n          {itemIsIncludedInList\r\n            ? <button\r\n classname='\"ng-scope\"\r\n' disabled="{true}" id='\"addToShoppingListModalBtn\"\r\n' variant='\"primary\"\r\n'>\r\n              {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.AlreadyInThisList\")}\r\n            \r\n            : <button\r\n =="=" classname='\"ng-scope\"\r\n' disabled="{selectedShoppingListName" id='\"addToShoppingListModalBtn\"\r\n' nulloptionkey}\r\n="" onclick="{onAddToListClicked}" variant='\"primary\"\r\n'>\r\n              {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.AddToList\")}\r\n            \r\n          }\r\n        </button\r\n></button\r\n></button\r\n></button\r\n></div>\r\n        {viewState.hasError &amp;&amp; <errorview error="{viewState.errorMessage}">}\r\n      \r\n    </errorview></form.select\r\n></modal\r\n></fragment>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Alert, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ConfirmationModal } from \"src/_shared/modals\";\r\nimport { useShoppingLists } from \"src/_redux/slices/cartSlice\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\n\r\ninterface ICreateShoppingListModalProps {\r\n  show: boolean;\r\n  onCancel: () =&gt; void;\r\n  onConfirm?: (newListName: string, isFirstList?: boolean) =&gt; void;\r\n  cancelBtnLabel?: string;\r\n  displayMessageOnConfirm?: boolean;\r\n  productToAddAfterCreation?: ProductModel;\r\n}\r\n\r\nexport const CreateShoppingListModal = (props: ICreateShoppingListModalProps): JSX.Element =&gt; {\r\n  const [ listName, setListName ] = useState<string>(\"\");\r\n  const [ listNameTouched, setListNameTouched ] = useState<boolean>(false);\r\n  const [ showConfirmMessage, setShowConfirmMessage ] = useState<boolean>(false);\r\n  const [ confirmationMessage, setConfirmationMessage ] = useState<string>(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cartFactory = useCartFactory();\r\n  const shoppingLists = useShoppingLists();\r\n\r\n  const {\r\n    show,\r\n    onCancel,\r\n    onConfirm,\r\n    cancelBtnLabel,\r\n    displayMessageOnConfirm,\r\n    productToAddAfterCreation\r\n  } = props;\r\n\r\n  useEffect(() =&gt; {\r\n    if (show) {\r\n      setShowConfirmMessage(false);\r\n      setListName(\"\");\r\n      setListNameTouched(false);\r\n    }\r\n  }, [ show ]);\r\n\r\n  const handlePostConfirm = () =&gt; {\r\n    if (displayMessageOnConfirm &amp;&amp; onConfirm) {\r\n      setShowConfirmMessage(true);\r\n      // Briefly show confirm message, then let parent handle\r\n      setTimeout(() =&gt; {\r\n        onConfirm(listName, shoppingLists.length === 1);\r\n      }, 1000);\r\n    } else if (onConfirm) {\r\n      onConfirm(listName, shoppingLists.length === 1);\r\n    }\r\n    setConfirmationMessage(\r\n      `${listName} ${t(\r\n        \"ui.storefront.userDashboard2.controls.createShoppingList.HasBeenCreated\"\r\n      )}`\r\n    );\r\n    setListName(\"\");\r\n    setListNameTouched(false);\r\n  };\r\n\r\n  const onConfirmClicked = () =&gt; {\r\n    setRunning();\r\n    cartFactory\r\n      .createShoppingList(listName)\r\n      .then(() =&gt; {\r\n        if (productToAddAfterCreation) {\r\n          return cartFactory.addItemToStaticCart(listName, productToAddAfterCreation.ID, 1);\r\n        }\r\n        return Promise.resolve();\r\n      })\r\n      .then(() =&gt; {\r\n        // Will call finishRunning\r\n        handlePostConfirm();\r\n      })\r\n      .catch(() =&gt; {\r\n        finishRunning(true, \"Failed to create new shopping list\");\r\n      });\r\n  };\r\n\r\n  const onListNameChanged = (val: string): void =&gt; {\r\n    if (!listNameTouched) {\r\n      setListNameTouched(true);\r\n    }\r\n    if (confirmationMessage) {\r\n      setConfirmationMessage(null);\r\n    }\r\n    setListName(val);\r\n  };\r\n\r\n  return (\r\n    <confirmationmodal\r\n ??="" \"cancel\"}\r\n="" cancelbtnlabel="{cancelBtnLabel" cancelbtnvariant='\"secondary\"\r\n' confirmbtnclasses='\"text-white\"\r\n' confirmbtnlabel='\"Create' confirmbtnvariant='\"success\"\r\n' confirmdisabled="{!listName.length}\r\n" list\"\r\n="" oncancel="{onCancel}\r\n" onconfirm="{onConfirmClicked}\r\n" show="{show}\r\n" size='\"md\"' title='\"Create'>\r\n      <form.group classname='\"has-error' mb-2\"="">\r\n        <form.label htmlfor='\"txtModalShoppingListCreateName\"'>\r\n          <span>\r\n            {t(\"ui.storefront.userDashboard2.controls.createShoppingList.NewShoppingListName\")}\r\n          </span>\r\n          <span classname='\"text-danger\"'> *</span>\r\n        </form.label>\r\n        <inputgroup>\r\n          <form.control\r\n =="" classname='\"rounded-end\"\r\n' id='\"txtModalShoppingListCreateName\"\r\n' maxlength="{128}\r\n" onchange="{e" type='\"text\"\r\n'> onListNameChanged(e.target.value)}\r\n            value={listName}\r\n          /&gt;\r\n          {!listName.length &amp;&amp; listNameTouched\r\n            ? <inputgroup.text classname='\"w-100' ps-1\"="" pt-1="">\r\n              <span classname='\"text-danger\"'>\r\n                {t(\"ui.storefront.common.validation.ThisFieldIsRequired\")}\r\n              </span>\r\n            </inputgroup.text>\r\n            : null}\r\n        </form.control\r\n></inputgroup>\r\n      </form.group>\r\n      {showConfirmMessage &amp;&amp; confirmationMessage\r\n        ? <alert id='\"ShoppingListModalNameText\"' variant='\"success\"'>\r\n          {confirmationMessage}\r\n        </alert>\r\n        : null}\r\n      {viewState.hasError &amp;&amp; <errorview error="{viewState.errorMessage}">}\r\n    \r\n  );\r\n};\r\n","import { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { Modal } from \"src/_shared/modals\";\r\nimport { NumberInputFormGroup } from \"src/_shared/forms/formGroups\";\r\n\r\ninterface IAddToInStockAlertsModalFormData {\r\n  nudQIMQuantity: number;\r\n}\r\n\r\ninterface IAddToInStockAlertsModalProps {\r\n  show: boolean;\r\n  onCancel: () =&gt; void;\r\n  onConfirm: (desiredQuantity: number) =&gt; void;\r\n}\r\n\r\nexport const AddToInStockAlertsModal = (props: IAddToInStockAlertsModalProps): JSX.Element =&gt; {\r\n  const { show, onCancel, onConfirm } = props;\r\n  const { register, formState, handleSubmit } = useForm<iaddtoinstockalertsmodalformdata>();\r\n  const { t } = useTranslation();\r\n\r\n  const handleCancel = () =&gt; {\r\n    onCancel();\r\n  };\r\n\r\n  const handleConfirm: SubmitHandler<iaddtoinstockalertsmodalformdata> = data =&gt; {\r\n    const desiredQuantity = data.nudQIMQuantity;\r\n    onConfirm(desiredQuantity);\r\n  };\r\n\r\n  return (\r\n    <modal\r\n oncancel="{onCancel}\r\n" show="{show}\r\n" showheader="{true}\r\n" size='\"sm\"\r\n' title='{t(\"ui.storefront.product.catalog.requestedQuantityForNotification\")}'>\r\n      <form onsubmit="{handleSubmit(handleConfirm)}">\r\n        <row>\r\n          <numberinputformgroup\r\n errors="{formState.errors}\r\n" formidentifier='\"nudQIMQuantity\"\r\n' min="{1}\r\n" register="{register}\r\n">\r\n        </numberinputformgroup\r\n></row>\r\n        <row classname='\"mt-2\"'>\r\n          \r\n            <div classname='\"d-flex' gap-2\"="" justify-content-end="">\r\n              <button id='\"btnQIMCancel\"\r\n' name='\"btnQIMCancel\"' onclick="{handleCancel}\r\n" variant='\"secondary\"\r\n'>\r\n                {t(\"ui.storefront.common.Cancel\")}\r\n              </button>\r\n              <button\r\n aria-label='{t(\"ui.storefront.userDashboard2.controls.salesReturnCreate\")}' id='\"btnQIMOk\"\r\n' name='\"btnQIMOk\"\r\n' title='{t(\"ui.storefront.userDashboard2.controls.salesReturnCreate\")}\r\n' type='\"submit\"\r\n' variant='\"primary\"\r\n'>\r\n                {t(\"ui.storefront.userDashboard2.controls.salesReturnCreate\")}\r\n              \r\n            </button\r\n></div>\r\n          \r\n        </row>\r\n      </form>\r\n    \r\n  );\r\n};\r\n","/* eslint-disable capitalized-comments */\r\nimport { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\r\nimport { PCCWOverlayLayout } from \"src/Catalog/controls/ProductCardControlsWidget/PCCWOverlayLayout\";\r\nimport { PCCWHorizontalLayout } from \"src/Catalog/controls/ProductCardControlsWidget/PCCWHorizontalLayout\";\r\nimport { PCCWVerticalLayout } from \"src/Catalog/controls/ProductCardControlsWidget/PCCWVerticalLayout\";\r\nimport { AddToShoppingListModal } from \"src/Dashboard/ShoppingList/AddToShoppingListModal\";\r\nimport {\r\n  IProductCardControl,\r\n  IProductCardControlsWidgetProps\r\n} from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\nimport { CreateShoppingListModal } from \"src/Dashboard/ShoppingList/CreateShoppingListModal\";\r\nimport { AddToInStockAlertsModal } from \"src/Catalog/controls/ProductCardControlsWidget/AddToInStockAlertsModal\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useCart, useShoppingLists } from \"src/_redux/slices/cartSlice\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\n\r\nexport const ProductCardControlsWidget = (props: IProductCardControlsWidgetProps): JSX.Element =&gt; {\r\n  const {\r\n    product,\r\n    // TODO: inventory,\r\n    render,\r\n    hideQuotesList,\r\n    hideFavoritesList,\r\n    hideWishList,\r\n    hideNotifyMe,\r\n    hideCompare,\r\n    // TODO: hideI,\r\n    hideShoppingList,\r\n    // shoppingLists,\r\n    // From Redux\r\n    // favoritesList,\r\n    // From Redux\r\n    // wishList,\r\n    // From Redux\r\n    // notifyMe,\r\n    // From Redux\r\n    // compareCart,\r\n  } = props;\r\n\r\n  const [ removeConfirmationModalData, setRemoveConfirmationModalData ] = useState({\r\n    show: false,\r\n    type: \"\",\r\n    onConfirm: () =&gt; {\r\n      // Do Nothing\r\n    }\r\n  });\r\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\r\n  const [ showGoToCompareViewModal, setShowGoToCompareViewModal ] = useState<boolean>(false);\r\n  const [ showCreateShoppingListModal, setShowCreateShoppingListModal ] = useState<boolean>(false);\r\n  const [ showAddToShoppingListModal, setShowAddToShoppingListModal ] = useState<boolean>(false);\r\n  const [ showAddToInStockModal, setShowAddToInStockModal ] = useState<boolean>(false);\r\n  const [ addToShoppingListPending, setAddToShoppingListPending ] = useState<boolean>(false);\r\n  const [ addToShoppinglistCustomConfirmMessage, setAddToShoppingListCustomConfirmMessage ] = useState<string>(null);\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n  const quoteList = useCart(ServiceStrings.carts.types.quote);\r\n  const favoritesList = useCart(ServiceStrings.carts.types.favorites);\r\n  const wishList = useCart(ServiceStrings.carts.types.wishList);\r\n  const notifyMe = useCart(ServiceStrings.carts.types.notifyMe);\r\n  const compareCart = useCart(ServiceStrings.carts.types.compare);\r\n  const shoppingLists = useShoppingLists();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const cartFactory = useCartFactory();\r\n\r\n  if (!product) {\r\n    return <div></div>;\r\n  }\r\n\r\n  let isQuote = false;\r\n  let quotesListTitleKey = \"ui.storefront.common.RequestAQuote\";\r\n  if (quoteList?.SalesItems &amp;&amp; Array.isArray(quoteList?.SalesItems)) {\r\n    isQuote = Boolean(quoteList?.SalesItems.find(wi =&gt; wi.ProductID === product.ID));\r\n    if (isQuote) {\r\n      quotesListTitleKey = \"ui.storefront.quotes.cart.remove\";\r\n    }\r\n  }\r\n\r\n  let isFavorite = false;\r\n  let favoritesListTitleKey = \"ui.storefront.common.Favorites.AddTo\";\r\n  if (favoritesList?.SalesItems &amp;&amp; Array.isArray(favoritesList?.SalesItems)) {\r\n    isFavorite = Boolean(favoritesList?.SalesItems.find(fi =&gt; fi.ProductID === product.ID));\r\n    if (isFavorite) {\r\n      favoritesListTitleKey = \"ui.storefront.common.Favorites.RemoveFrom\";\r\n    }\r\n  }\r\n\r\n  let isWish = false;\r\n  let wishListTitleKey = \"ui.storefront.common.WishList.AddTo\";\r\n  if (wishList?.SalesItems &amp;&amp; Array.isArray(wishList?.SalesItems)) {\r\n    isWish = Boolean(wishList?.SalesItems.find(wi =&gt; wi.ProductID === product.ID));\r\n    if (isWish) {\r\n      wishListTitleKey = \"ui.storefront.common.WishList.RemoveFrom\";\r\n    }\r\n  }\r\n\r\n  let isNotifyMeItem = false;\r\n  let notifyMeTitleKey = \"ui.storefront.common.InStockAlert.Add\";\r\n  if (notifyMe?.SalesItems &amp;&amp; Array.isArray(notifyMe?.SalesItems)) {\r\n    isNotifyMeItem = Boolean(notifyMe?.SalesItems.find(ni =&gt; ni.ProductID === product.ID));\r\n    if (isNotifyMeItem) {\r\n      notifyMeTitleKey = \"ui.storefront.common.InStockAlert.Remove\";\r\n    }\r\n  }\r\n\r\n  let isCompare = false;\r\n  let compareTitleKey = \"ui.storefront.common.Compare.AddTo\";\r\n  if (compareCart?.SalesItems &amp;&amp; Array.isArray(compareCart?.SalesItems)) {\r\n    isCompare = Boolean(compareCart?.SalesItems.find(ci =&gt; ci.ProductID === product.ID));\r\n    if (isCompare) {\r\n      compareTitleKey = \"ui.storefront.common.Compare.RemoveFrom\";\r\n    }\r\n  }\r\n\r\n  function resetRemoveConfirmationModal() {\r\n    setRemoveConfirmationModalData({\r\n      show: false,\r\n      type: \"\",\r\n      onConfirm: () =&gt; {\r\n        // Do Nothing\r\n      }\r\n    });\r\n  }\r\n\r\n  function addItemToList(TypeName: string) {\r\n    setRunning();\r\n    cartFactory.addItemToStaticCart(TypeName, product.ID, 1)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to add item to list\");\r\n      });\r\n  }\r\n\r\n  function removeItemFromList(TypeName: string) {\r\n    setRunning();\r\n    cartFactory.removeItemFromStaticCart(TypeName, product.ID)\r\n      .then(() =&gt; {\r\n        resetRemoveConfirmationModal();\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        resetRemoveConfirmationModal();\r\n        console.error(err);\r\n        finishRunning(true, err.message || \"Failed to remove item from list\");\r\n      });\r\n  }\r\n\r\n  function toggle(isInList: boolean, TypeName: string) {\r\n    if (isInList) {\r\n      setRemoveConfirmationModalData({\r\n        show: true,\r\n        type: TypeName,\r\n        onConfirm: () =&gt; removeItemFromList(TypeName)\r\n      });\r\n    } else if (currentUser.CustomKey) {\r\n      addItemToList(TypeName);\r\n    } else {\r\n      setShowLoginModal(true);\r\n    }\r\n  }\r\n\r\n  function addItemToInStockAlerts(desiredQuantity: number, closeModalOnSuccess: boolean = true): void {\r\n    setRunning();\r\n    cartFactory.addItemToStaticCart(ServiceStrings.carts.types.notifyMe, product.ID, desiredQuantity)\r\n      .then(() =&gt; {\r\n        if (closeModalOnSuccess) {\r\n          setShowAddToInStockModal(false);\r\n        }\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || `Failed to add item to ${ServiceStrings.carts.types.notifyMe}`);\r\n      });\r\n  }\r\n\r\n  function addItemToCompareCart() {\r\n    setRunning();\r\n    cartFactory.addToCompare(product.ID)\r\n      .then(() =&gt; {\r\n        if (compareCart) {\r\n          setShowGoToCompareViewModal(true);\r\n        }\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n        finishRunning(true, err.message || \"Failed to add item to compare cart\");\r\n      });\r\n  }\r\n\r\n  function removeItemFromCompareCart() {\r\n    setRunning();\r\n    cartFactory.removeFromCompare(product.ID)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to remove item from compare cart\");\r\n      });\r\n  }\r\n\r\n  function toggleCompareItem() {\r\n    if (isCompare) {\r\n      removeItemFromCompareCart();\r\n    } else {\r\n      addItemToCompareCart();\r\n    }\r\n  }\r\n\r\n  const renderContent = () =&gt; {\r\n    const items: IProductCardControl[] = [\r\n      {\r\n        hide: hideQuotesList\r\n          ? hideQuotesList\r\n          : !cefConfig.featureSet.salesQuotes.enabled\r\n          || !currentUser\r\n          || product.TypeKey === \"VARIANT-MASTER\",\r\n        iconString: \"fal fa-clipboard\",\r\n        idPrefix: \"btnAddToQuoteProduct\",\r\n        isSelected: isQuote,\r\n        onClick: () =&gt; toggle(isQuote, \"Request a Quote\"),\r\n        titleKey: quotesListTitleKey\r\n      },\r\n      {\r\n        hide: hideCompare\r\n          ? hideCompare\r\n          : !cefConfig.featureSet.carts.compare.enabled || product.TypeKey === \"VARIANT-MASTER\",\r\n        iconString: \"far fa-sliders-h\",\r\n        idPrefix: \"btnAddToCompareListProduct\",\r\n        isSelected: isCompare,\r\n        onClick: () =&gt; toggleCompareItem(),\r\n        titleKey: compareTitleKey\r\n      },\r\n      {\r\n        hide: hideFavoritesList\r\n          ? hideFavoritesList\r\n          : !cefConfig.featureSet.carts.favoritesList.enabled\r\n          || !currentUser\r\n          || product.TypeKey === \"VARIANT-MASTER\",\r\n        iconString: \"fal fa-star\",\r\n        idPrefix: \"btnAddToFavoritesListProduct\",\r\n        isSelected: isFavorite,\r\n        onClick: () =&gt; toggle(isFavorite, \"Favorites List\"),\r\n        titleKey: favoritesListTitleKey\r\n      },\r\n      {\r\n        hide: hideWishList\r\n          ? hideWishList\r\n          : !cefConfig.featureSet.carts.wishList.enabled\r\n          || !currentUser\r\n          || product.TypeKey === \"VARIANT-MASTER\",\r\n        iconString: \"fal fa-heart\",\r\n        idPrefix: \"btnAddToWishListProduct\",\r\n        isSelected: isWish,\r\n        onClick: () =&gt; toggle(isWish, \"Wish List\"),\r\n        titleKey: wishListTitleKey\r\n      },\r\n      {\r\n        hide: hideNotifyMe\r\n          ? hideNotifyMe\r\n          : product.readInventory &amp;&amp; !product.readInventory().IsOutOfStock\r\n          || !cefConfig.featureSet.carts.notifyMeWhenInStock.enabled,\r\n        iconString: \"fal fa-bell\",\r\n        idPrefix: \"btnAddToNotifyMeListProduct\",\r\n        isSelected: isNotifyMeItem,\r\n        onClick: () =&gt; {\r\n          if (!currentUser) {\r\n            setShowLoginModal(true);\r\n            return;\r\n          }\r\n          if (isNotifyMeItem) {\r\n            toggle(true, ServiceStrings.carts.types.notifyMe);\r\n          } else {\r\n            setShowAddToInStockModal(true);\r\n          }\r\n        },\r\n        titleKey: notifyMeTitleKey\r\n      },\r\n      {\r\n        hide: hideShoppingList\r\n          ? hideShoppingList\r\n          : !currentUser || product.TypeKey === \"VARIANT-MASTER\",\r\n        iconString: \"fal fa-clipboard-list\",\r\n        idPrefix: \"btnAddToShoppingListProduct\",\r\n        isSelected: false,\r\n        onClick: () =&gt; {\r\n          if (currentUser?.Contact) {\r\n            if (shoppingLists?.length) {\r\n              setShowAddToShoppingListModal(true);\r\n            } else {\r\n              setShowCreateShoppingListModal(true);\r\n            }\r\n          } else {\r\n            setAddToShoppingListPending(true);\r\n            setShowLoginModal(true);\r\n          }\r\n        },\r\n        titleKey: \"ui.storefront.product.detail.productDetails.addToShoppingList\"\r\n      }\r\n    ];\r\n\r\n    const layoutProps = {\r\n      product,\r\n      items,\r\n      running: viewState.running\r\n    };\r\n\r\n    switch (render) {\r\n      case \"overlay\": {\r\n        return <pccwoverlaylayout {...layoutprops}="">;\r\n      }\r\n      case \"horizontal\": {\r\n        return <pccwhorizontallayout {...layoutprops}="">;\r\n      }\r\n      case \"vertical\": {\r\n        return <pccwverticallayout {...layoutprops}="">;\r\n      }\r\n      default: {\r\n        return <pccwhorizontallayout {...layoutprops}="">;\r\n      }\r\n    }\r\n  };\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <confirmationmodal\r\n confirmbtnlabel='{t(\"ui.storefront.common.RemoveItem\")}\r\n' oncancel="{resetRemoveConfirmationModal}" onconfirm="{removeConfirmationModalData.onConfirm}\r\n" show="{removeConfirmationModalData.show}\r\n" title='{t(\"ui.storefront.common.RemoveItem\")}\r\n'>\r\n        <p>\r\n          {t(\"ui.storefront.cart.AreYouSureYouWantToRemove\")} <strong>{product.Name}</strong> from\r\n          your <strong classname='\"text-capitalize\"'>{removeConfirmationModalData.type}</strong>?\r\n        </p>\r\n      \r\n      <confirmationmodal\r\n =="" onconfirm="{()" show="{showGoToCompareViewModal}\r\n" title='{t(\"ui.storefront.common.PleaseConfirm\")}\r\n'> {\r\n          window.location.href = corsLink(\r\n            cefConfig,\r\n            `${cefConfig.routes.catalog.root}/${ServiceStrings.carts.kinds.compare}`,\r\n            \"site\"\r\n          );\r\n        }}\r\n        onCancel={() =&gt; setShowGoToCompareViewModal(false)}&gt;\r\n        <p>{t(\"ui.storefront.product.widgets.compare.CompareModalConfirmationMessage\")}</p>\r\n      \r\n      <addtoinstockalertsmodal\r\n =="" oncancel="{()" show="{showAddToInStockModal}\r\n"> setShowAddToInStockModal(false)}\r\n        onConfirm={desiredQuantity =&gt; {\r\n          addItemToInStockAlerts(desiredQuantity);\r\n        }} /&gt;\r\n      {!hideShoppingList &amp;&amp; currentUser\r\n        &amp;&amp; &lt;&gt;\r\n          <addtoshoppinglistmodal\r\n =="" oncancel="{()" show="{showAddToShoppingListModal}\r\n"> setShowAddToShoppingListModal(false)}\r\n            product={product}\r\n            includeSwitchToCreateBtn={true}\r\n            onSwitchToCreateButtonClicked={() =&gt; {\r\n              setShowAddToShoppingListModal(false);\r\n              setShowCreateShoppingListModal(true);\r\n            }}\r\n            customConfirmMessage={addToShoppinglistCustomConfirmMessage}\r\n            clearCustomConfirmMessage={() =&gt; setAddToShoppingListCustomConfirmMessage(null)}\r\n          /&gt;\r\n          <createshoppinglistmodal\r\n =="" oncancel="{()" show="{showCreateShoppingListModal}\r\n"> setShowCreateShoppingListModal(false)}\r\n            productToAddAfterCreation={product}\r\n            onConfirm={(newShoppingListName?: string, isFirstList?: boolean) =&gt; {\r\n              if (isFirstList) {\r\n                setShowAddToShoppingListModal(true);\r\n                setShowCreateShoppingListModal(false);\r\n                setAddToShoppingListCustomConfirmMessage(\r\n                  `${product.Name || product.CustomKey} has been added to ${newShoppingListName}`\r\n                );\r\n              }\r\n            }}\r\n            displayMessageOnConfirm={true}\r\n          /&gt;\r\n        \r\n      }\r\n      {renderContent()}\r\n      <loginmodal\r\n =="" onconfirm="{()" show="{showLoginModal}\r\n"> {\r\n          setShowLoginModal(false);\r\n          if (addToShoppingListPending) {\r\n            setAddToShoppingListPending(false);\r\n            setShowAddToShoppingListModal(true);\r\n          }\r\n        }}\r\n        onCancel={() =&gt; setShowLoginModal(false)}\r\n      /&gt;\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Card, Col, Row, Table } from \"react-bootstrap\";\r\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\r\nimport {\r\n  ProductCardLotTimerWidget,\r\n  ProductCardNameWidget,\r\n  ProductCardPricingWidget,\r\n  ProductCardSkuWidget\r\n} from \"src/Catalog/views/ProductCardWidgets\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ProductCardActionButtonWidget } from \"../controls/ProductCardActionButtonWidget\";\r\n\r\ninterface IProductCardProps {\r\n  product: ProductModel;\r\n  customClasses?: string;\r\n  hideShortDescription?: boolean;\r\n  hideSku?: boolean;\r\n  hideLabels?: boolean;\r\n  hideStock?: boolean;\r\n  countStoreStockOnly?: boolean;\r\n  index: number;\r\n  buttonWidgetOrientation?: \"horizontal\" | \"vertical\";\r\n}\r\n\r\nexport const ProductCard = (props: IProductCardProps): JSX.Element =&gt; {\r\n  const {\r\n    product,\r\n    customClasses,\r\n    buttonWidgetOrientation,\r\n    hideShortDescription,\r\n    hideSku,\r\n    // TODO: use hideLabels,\r\n    hideStock,\r\n    countStoreStockOnly\r\n    // TODO: use index\r\n  } = props;\r\n\r\n  const { CustomKey, ID, Name, SeoUrl, ShortDescription } = product;\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <div\r\n ${customclasses}`}="" classname="{`catalog-result-card" key="{ID}\r\n" m-0="" p-0="" undefined="" w-33="">\r\n      <card border-0\"="" classname='\"h-100'>\r\n        {product.LotID &amp;&amp; <productcardlottimerwidget product="{product}">}\r\n        <productcardcontrolswidget\r\n hideshoppinglist="{cefConfig.featureSet.carts.shoppingLists.enabled}\r\n" product="{product}\r\n" render='\"overlay\"\r\n'>\r\n        <card.body classname='\"pt-3' pb-0="" rows-3\"="">\r\n          {SeoUrl &amp;&amp; (\r\n            <card.title as='\"span\"' classname='\"text-center\"'>\r\n              <productcardnamewidget\r\n productname="{Name}\r\n" productseourl="{SeoUrl}\r\n">\r\n            </productcardnamewidget\r\n></card.title>\r\n          )}\r\n          <div classname='\"mt-1\"'>\r\n            <row classname='\"gx-0' justify-content-around="" p-0\"="">\r\n              \r\n                {!product.LotID &amp;&amp; (\r\n                  <div classname='\"mt-1' text-center\"="">\r\n                    <productcardpricingwidget product="{product}">\r\n                  </productcardpricingwidget></div>\r\n                )}\r\n                {!hideStock &amp;&amp; (\r\n                  &lt;&gt;\r\n                    {product?.readInventory &amp;&amp; product.readInventory().loading ? (\r\n                      <loadingwidget overlay="{true}">\r\n                    ) : null}\r\n                  \r\n                )}\r\n              \r\n            </loadingwidget></row>\r\n            \r\n              <hr classname='\"mt-1' mb-2\"=""/>\r\n              <table\r\n borderless\r\n="" classname='\"p-0\"\r\n' responsive="">\r\n                \r\n                  Item No.\r\n                  \r\n                    <span id="{`productCatalogItem_${name}`}">\r\n                      {product.BrandName\r\n                        ? product.BrandName\r\n                        : \"\"}\r\n                    </span>\r\n                  \r\n                \r\n                \r\n                  {t(\"ui.storefront.cart.SKU\")}\r\n                  <span>{CustomKey}</span>\r\n                \r\n                \r\n                  {t(\"ui.storefront.common.CAS\")}\r\n                  \r\n                    <span id="{`productCatalogCaseNo_${name}`}">\r\n                      {product?.SerializableAttributes?.[\"CAS No.\"]?.Value\r\n                        ? product.SerializableAttributes[\"CAS No.\"].Value\r\n                        : \"N/A\"}\r\n                    </span>\r\n                  \r\n                \r\n                \r\n                  Pkg. Size\r\n                  \r\n                    <span id="{`productCatalogPackageSize_${name}`}">\r\n                      {product?.SerializableAttributes?.[\"Package Size\"]?.Value\r\n                        ? product.SerializableAttributes[\"Package Size\"].Value\r\n                        : \"N/A\"}\r\n                    </span>\r\n                  \r\n                \r\n                \r\n                  {t(\"ui.storefront.product.Grade\")}\r\n                  \r\n                    <span id="{`productCatalogGrade_${name}`}">\r\n                      {product?.SerializableAttributes?.[\"Grade\"]?.Value\r\n                        ? product.SerializableAttributes[\"Grade\"].Value\r\n                        : \"N/A\"}\r\n                    </span>\r\n                  \r\n                \r\n              \r\n            \r\n          </table\r\n></div>\r\n        </card.body>\r\n        <card.footer align-items-center="" border-0="" classname='\"bg-transparent' mb-4\"="">\r\n          <div classname='\"d-inline-flex' flex-nowrap="" justify-content-center="" w-100\"="">\r\n            <productcardactionbuttonwidget\r\n addtocartbtnclasses='\"btn' buttonview='\"viewDetails\"\r\n' col-6\"\r\n="" product="{product}\r\n" text-white="">\r\n            <productcardactionbuttonwidget\r\n addtocartbtnclasses='\"btn' addtocartcontainerclasses='\"col-6\"\r\n' excludequotecart="{cefConfig?.featureSet.salesQuotes.useQuoteCart}\r\n" forcenoquantityselector="{true}\r\n" product="{product}\r\n" text-white\"\r\n="">\r\n          </productcardactionbuttonwidget\r\n></productcardactionbuttonwidget\r\n></div>\r\n        </card.footer>\r\n      </productcardcontrolswidget\r\n></productcardlottimerwidget></card>\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport React, { UIEvent, useState } from \"react\";\r\nimport { Row } from \"react-bootstrap\";\r\nimport { ProductModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { AlertInfoNoResults } from \"src/Catalog/controls/AlertInfoNoResults\";\r\nimport { ProductCard } from \"./ProductCard\";\r\n\r\n// eslint-disable-next-line no-undef\r\nlet timeoutHolder: NodeJS.Timeout = null;\r\n\r\ninterface ICatalogGridViewProps {\r\n  products: Array<productmodel>;\r\n  onScrollToBottom?: Function;\r\n  useInfinite?: boolean;\r\n  parentRunning?: boolean;\r\n}\r\n\r\nexport const CatalogGridView = ({\r\n  products,\r\n  onScrollToBottom,\r\n  useInfinite,\r\n  parentRunning\r\n}: ICatalogGridViewProps): JSX.Element =&gt; {\r\n  const [canCallScrollFn, setCanCallScrollFn] = useState(true);\r\n\r\n  const style: React.CSSProperties = {};\r\n  if (useInfinite) {\r\n    style.maxHeight = \"70vh\";\r\n    style.overflowY = \"scroll\";\r\n    style.overflowX = \"hidden\";\r\n  }\r\n\r\n  return (\r\n    <div\r\n classname='\"grid-body\"\r\n' onscroll="{(event:" style="{style}\r\n" uievent<htmldivelement="">) =&gt; {\r\n        const { currentTarget } = event;\r\n        const { scrollHeight, scrollTop, clientHeight } = currentTarget;\r\n        const bottom = scrollHeight - Math.ceil(scrollTop) - 50 &lt; clientHeight;\r\n        if (useInfinite &amp;&amp; bottom &amp;&amp; onScrollToBottom &amp;&amp; canCallScrollFn) {\r\n          onScrollToBottom();\r\n          setCanCallScrollFn(false);\r\n          timeoutHolder = setTimeout(() =&gt; {\r\n            setCanCallScrollFn(true);\r\n            clearTimeout(timeoutHolder);\r\n          }, 2000);\r\n        }\r\n      }}&gt;\r\n      <row\r\n classname='\"row-cols-fk-6' justify-content-between\"="" lg="{3}\r\n" md="{2}\r\n" row-cols-tk-5="" sm="{2}\r\n" xl="{3}\r\n" xs="{1}\r\n">\r\n        {products\r\n          ? products.map((product, index) =&gt; (\r\n              <productcard\r\n buttonwidgetorientation='{\"horizontal\"}\r\n' index="{index}\r\n" key="{product.ID}\r\n" product="{product}\r\n">\r\n            ))\r\n          : null}\r\n      \r\n      {!products?.length &amp;&amp; !parentRunning &amp;&amp; <alertinfonoresults>}\r\n      {parentRunning ? <loadingwidget> : null}\r\n    \r\n  );\r\n};\r\n","/** @format */\r\nimport { UIEvent, useState } from \"react\";\r\nimport { Card, Col, Row, Table } from \"react-bootstrap\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\n\r\nimport { ProductCardControlsWidget } from \"../controls/ProductCardControlsWidget/ProductCardControlsWidget\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { AlertInfoNoResults } from \"src/Catalog/controls/AlertInfoNoResults\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport {\r\n  ProductCardNameWidget,\r\n  ProductCardPricingWidget\r\n} from \"src/Catalog/views/ProductCardWidgets\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ProductCardActionButtonWidget } from \"../controls/ProductCardActionButtonWidget\";\r\nlet timeoutHolder: NodeJS.Timeout = null;\r\n\r\ninterface ICatalogListViewProps {\r\n  products: ProductModel[];\r\n  onScrollToBottom?: Function;\r\n  useInfinite?: boolean;\r\n  parentRunning?: boolean;\r\n  allAttributes?: GeneralAttributeModel[];\r\n}\r\n\r\nexport const CatalogListView = (props: ICatalogListViewProps): JSX.Element =&gt; {\r\n  const { products, onScrollToBottom, useInfinite, parentRunning } = props;\r\n  const [canCallScrollFn, setCanCallScrollFn] = useState(true);\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n\r\n  const style: React.CSSProperties = {};\r\n  if (useInfinite) {\r\n    style.maxHeight = \"40vh\";\r\n    style.overflowY = \"scroll\";\r\n    style.overflowX = \"hidden\";\r\n  }\r\n\r\n  return (\r\n    <div\r\n classname='\"list-body' onscroll="{(event:" p-0\"\r\n="" style="{style}\r\n" uievent<htmldivelement="">) =&gt; {\r\n        const { currentTarget } = event;\r\n        const { scrollHeight, scrollTop, clientHeight } = currentTarget;\r\n        const bottom = scrollHeight - Math.ceil(scrollTop) - 50 &lt; clientHeight;\r\n        if (useInfinite &amp;&amp; bottom &amp;&amp; onScrollToBottom &amp;&amp; canCallScrollFn) {\r\n          onScrollToBottom();\r\n          setCanCallScrollFn(false);\r\n          timeoutHolder = setTimeout(() =&gt; {\r\n            setCanCallScrollFn(true);\r\n            clearTimeout(timeoutHolder);\r\n          }, 2000);\r\n        }\r\n      }}&gt;\r\n      <hr classname='\"mt-1\"'/>\r\n      <row id='\"results-list\"'>\r\n        {products.map((product, index) =&gt; (\r\n          <col\r\n classname='\"catalog-result-card' key="{product.ID}" product\"\r\n="" xs="{12}\r\n">\r\n            <card classname='\"border-0\"'>\r\n              <card.body\r\n as="{Row}\r\n" classname='\"p-0\"'>\r\n                <col\r\n classname='\"image-group\"' sm="{3}\r\n">\r\n                  <card.body classname='\"h-100' d-flex="" flex-column="" justify-content-between\"="" p-0="">\r\n                    <productcardcontrolswidget\r\n hidequoteslist="{cefConfig?.featureSet.salesQuotes.useQuoteCart}\r\n" hideshoppinglist="{cefConfig?.featureSet.carts.shoppingLists.enabled}\r\n" product="{product}\r\n" render='\"overlay\"\r\n'>\r\n                  </productcardcontrolswidget\r\n></card.body>\r\n                \r\n                <col\r\n classname='\"item-table-group\"' sm="{5}\r\n">\r\n                  <row>\r\n                    \r\n                      <card.title classname='\"text-center\"'>\r\n                        <productcardnamewidget\r\n index="{index}\r\n" productname="{product.Name}\r\n" productseourl="{product.SeoUrl}\r\n">\r\n                      </productcardnamewidget\r\n></card.title>\r\n                    \r\n                    \r\n                      <row>\r\n                        Item No.\r\n                        \r\n                          <span id="{`productCatalogItem_${name}`}">\r\n                            {product.BrandName}\r\n                          </span>\r\n                        \r\n                      </row>\r\n                      <row classname='\"bg-darker\"'>\r\n                        {t(\"ui.storefront.cart.SKU\")}\r\n                        {product.CustomKey}\r\n                      </row>\r\n                      <row>\r\n                        CAS No.\r\n                        \r\n                          <span id="{`productCatalogCaseNo_${name}`}">\r\n                            {product?.SerializableAttributes?.[\"CAS No.\"]?.Value\r\n                              ? product.SerializableAttributes[\"CAS No.\"].Value\r\n                              : \"N/A\"}\r\n                          </span>\r\n                        \r\n                      </row>\r\n                      <row classname='\"bg-darker\"'>\r\n                        Pkg. Size\r\n                        \r\n                          <span id="{`productCatalogPackageSize_${name}`}">\r\n                            {product?.SerializableAttributes?.[\"Package Size\"]?.Value\r\n                              ? product.SerializableAttributes[\"Package Size\"].Value\r\n                              : \"N/A\"}\r\n                          </span>\r\n                        \r\n                      </row>\r\n                      <row>\r\n                        {t(\"ui.storefront.product.Grade\")}\r\n                        \r\n                          <span id="{`productCatalogGrade_${name}`}">\r\n                            {product?.SerializableAttributes?.[\"Grade\"]?.Value\r\n                              ? product.SerializableAttributes[\"Grade\"].Value\r\n                              : \"N/A\"}\r\n                          </span>\r\n                        \r\n                      </row>\r\n                    \r\n                  </row>\r\n                \r\n                <col\r\n classname='\"details-group' d-flex="" flex-column="" justify-content-center\"="" sm="{4}\r\n">\r\n                  <div>\r\n                    <productcardpricingwidget\r\n displaystyle='\"sideBySide\"\r\n' product="{product}\r\n">\r\n                  </productcardpricingwidget\r\n></div>\r\n                  <div>\r\n                    <card.text classname='\"action-button' my-1\"="">\r\n                      <productcardactionbuttonwidget\r\n addtocartbtnclasses='\"w-100\"\r\n' buttonview='\"viewDetails\"\r\n' product="{product}\r\n">\r\n                    </productcardactionbuttonwidget\r\n></card.text>\r\n                  </div>\r\n                \r\n              \r\n            </col\r\n></col\r\n></col\r\n></card.body\r\n></card>\r\n            <hr/>\r\n          \r\n        ))}\r\n      </col\r\n></row>\r\n      {!products?.length &amp;&amp; !parentRunning &amp;&amp; <alertinfonoresults>}\r\n      {parentRunning ? <loadingwidget> : null}\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport React, { UIEvent, useState } from \"react\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Card, Col, Row, Table } from \"react-bootstrap\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { CartModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\nimport {\r\n  ProductCardNameWidget,\r\n  ProductCardPricingWidget,\r\n  ProductCardSkuWidget\r\n} from \"src/Catalog/views/ProductCardWidgets\";\r\nimport { AlertInfoNoResults } from \"src/Catalog/controls/AlertInfoNoResults\";\r\nimport { ProductCardActionButtonWidget } from \"../controls/ProductCardActionButtonWidget\";\r\nimport { ProductCardControlsWidget } from \"../controls/ProductCardControlsWidget/ProductCardControlsWidget\";\r\n\r\nlet timeoutHolder: NodeJS.Timeout = null;\r\n\r\ninterface ICatalogTableViewProps {\r\n  products: Array<productmodel>;\r\n  onScrollToBottom?: Function;\r\n  useInfinite?: boolean;\r\n  parentRunning?: boolean;\r\n  cart?: CartModel;\r\n}\r\n\r\nexport const CatalogTableView = (props: ICatalogTableViewProps): JSX.Element =&gt; {\r\n  const { products, onScrollToBottom, useInfinite, parentRunning } = props;\r\n\r\n  const cefConfig = useCefConfig();\r\n  const [canCallScrollFn, setCanCallScrollFn] = useState(true);\r\n  const { t } = useTranslation();\r\n\r\n  const style: React.CSSProperties = {};\r\n  if (useInfinite) {\r\n    style.maxHeight = \"30vh\";\r\n    style.overflowY = \"scroll\";\r\n    style.overflowX = \"hidden\";\r\n  }\r\n\r\n  return (\r\n    <div\r\n classname='\"table-body\"\r\n' onscroll="{(event:" style="{style}\r\n" uievent<htmldivelement="">) =&gt; {\r\n        const { currentTarget } = event;\r\n        const { scrollHeight, scrollTop, clientHeight } = currentTarget;\r\n        const bottom = scrollHeight - Math.ceil(scrollTop) - 50 &lt; clientHeight;\r\n\r\n        if (useInfinite &amp;&amp; bottom &amp;&amp; onScrollToBottom &amp;&amp; canCallScrollFn) {\r\n          onScrollToBottom();\r\n          setCanCallScrollFn(false);\r\n          timeoutHolder = setTimeout(() =&gt; {\r\n            setCanCallScrollFn(true);\r\n            clearTimeout(timeoutHolder);\r\n          }, 2000);\r\n        }\r\n      }}&gt;\r\n      {Boolean(products?.length) &amp;&amp; (\r\n        <row id='\"results-table\"'>\r\n          \r\n            {/* Overflow-hidden &amp;&amp; pb-5 so that last add to quote dropdown shows up */}\r\n            <div classname='\"table-responsive' overflow-hidden="" pb-5\"="">\r\n              <table\r\n classname='\"mb-0\"' hover\r\n="" size='\"sm\"\r\n' striped\r\n="">\r\n                \r\n                  \r\n                    {t(\"ui.storefront.common.Name\")}\r\n                    Item No.\r\n                    {t(\"ui.storefront.cart.SKU\")}\r\n                    CAS No.\r\n                    Pkg. Size\r\n                    {t(\"ui.storefront.common.Price\")}\r\n                  \r\n                \r\n                \r\n                  {products.map((product, index): JSX.Element =&gt; {\r\n                    const { Name, ID, CustomKey, SeoUrl } = product;\r\n                    return (\r\n                      <tr\r\n align-middle="" classname='\"catalog-result-card' fs-13\"="" key="{ID}\r\n">\r\n                        \r\n                          <card.title as='\"span\"'>\r\n                            <productcardnamewidget\r\n index="{index}\r\n" productname="{Name}\r\n" productseourl="{SeoUrl}\r\n">\r\n                          </productcardnamewidget\r\n></card.title>\r\n                        \r\n                        \r\n                          <div id="{`productCatalogItem_${Name}`}">\r\n                            {product?.BrandName\r\n                              ? product.BrandName\r\n                              : \"\"}\r\n                          </div>\r\n                        \r\n                        \r\n                          <div classname='\"product-sku' rows-1\"="">\r\n                            <productcardskuwidget\r\n customkey="{CustomKey}\r\n" hidelabels\r\n="" productid="{ID}\r\n">\r\n                          </productcardskuwidget\r\n></div>\r\n                        \r\n                        \r\n                          <div id="{`productCatalogCaseNo_${Name}`}">\r\n                            {product?.SerializableAttributes?.[\"CAS No.\"]?.Value\r\n                              ? product.SerializableAttributes[\"CAS No.\"].Value\r\n                              : \"N/A\"}\r\n                          </div>\r\n                        \r\n                        \r\n                          <div id="{`productCatalogPackageSize_${Name}`}">\r\n                            {product?.SerializableAttributes?.[\"Package Size\"]?.Value\r\n                              ? product.SerializableAttributes[\"Package Size\"].Value\r\n                              : \"N/A\"}\r\n                          </div>\r\n                        \r\n                        \r\n                          <productcardpricingwidget\r\n displaystyle='\"sideBySideSmaller\"\r\n' product="{product}\r\n">\r\n                        \r\n                        \r\n                          <productcardactionbuttonwidget\r\n addtocartbtnclasses='\"btn' buttonview='\"viewDetails\"\r\n' excludequotecart="{cefConfig?.featureSet.salesQuotes.useQuoteCart}\r\n" index="{index}\r\n" mb-1\"\r\n="" product="{product}\r\n" text-white="" w-100="">\r\n                          <productcardactionbuttonwidget\r\n addtocartbtnclasses='\"btn' excludequotecart="{cefConfig?.featureSet.salesQuotes.useQuoteCart}\r\n" forcenoquantityselector="{true}\r\n" index="{index}\r\n" product="{product}\r\n" text-white\"\r\n="">\r\n                        \r\n                      \r\n                    );\r\n                  })}\r\n                \r\n              \r\n            </productcardactionbuttonwidget\r\n></productcardactionbuttonwidget\r\n></productcardpricingwidget\r\n></tr\r\n></table\r\n></div>\r\n          \r\n        </row>\r\n      )}\r\n      {!products?.length &amp;&amp; !parentRunning &amp;&amp; <alertinfonoresults>}\r\n      {parentRunning ? <loadingwidget> : null}\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\r\nimport { CategoryModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { corsImageLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface ICategoryLandingPageViewProps {\r\n  onCategoryClicked: Function;\r\n  currentCategory: CategoryModel;\r\n  allCategories: CategoryModel[];\r\n}\r\n\r\nexport const CategoryLandingPageView = (props: ICategoryLandingPageViewProps): JSX.Element =&gt; {\r\n  const { onCategoryClicked, currentCategory, allCategories } = props;\r\n  const cefConfig = useCefConfig();\r\n\r\n  const { t } = useTranslation();\r\n  const catsToMap = currentCategory?.Children ?? allCategories;\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <row>\r\n        \r\n          {currentCategory?.Name\r\n            ? <h4>{t(\"ui.storefront.catalog.ShopResultsFor\")}{\" \"}\r\n              <strong>\r\n                {currentCategory.Name}\r\n              </strong>\r\n            </h4>\r\n            : <h3>Find your item by Department</h3>\r\n          }\r\n        \r\n      </row>\r\n      <row>\r\n        {catsToMap.map((child: CategoryModel) =&gt; \r\n          <button\r\n =="" \"bold\"="" classname='\"w-100\"\r\n' fontweight:="" onclick="{()" style="{{" variant='\"\"\r\n' }}\r\n=""> onCategoryClicked(`${child.Name}|${child.CustomKey}`)}&gt;\r\n            <card 800})\r\n="" :="" ?="" @ts-ignore\r\n="" \"="" \"%28\").replaceall(\")\",="" \"%29\"),\r\n="" \"15rem\"\r\n="" \"categories\",\r\n="" \"center\",\r\n="" \"contain\",\r\n="" \"cover\"="" \"no-repeat\",\r\n="" `url(${child?.primaryimagefilename\r\n="" backgroundimage:="" backgroundposition:="" backgroundrepeat:="" backgroundsize:="" cefconfig,\r\n="" child?.primaryimagefilename="" clarityecommerce="" content="" corsimagelink(\r\n="" desktopmodules="" encodeuricomponent(child.primaryimagefilename).replaceall(\"(\",="" height:="" placeholder.jpg?height='250&amp;width=250&amp;mode=pad&amp;scale=both\"})`,\r\n' style="{{\r\n" ui-storefront="" {width:="" }}="">\r\n            </card>\r\n            <div classname='\"text-center' py-4\"="">\r\n              <span btn-link-light\"="" classname='\"px-2' o-90="" py-1="" rounded="">{child.Name}</span>\r\n            </div>\r\n          \r\n        )}\r\n      </button\r\n></row>\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Col } from \"react-bootstrap\";\r\nimport Interweave from \"interweave\";\r\nimport { CategoryModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface ICategoryLandingPageHeaderProps {\r\n  currentCategory: CategoryModel;\r\n}\r\n\r\nexport const CategoryLandingPageHeader = (props: ICategoryLandingPageHeaderProps): JSX.Element =&gt; {\r\n  const { currentCategory } = props;\r\n\r\n  return (\r\n    // If currentCat.header != null, show it, otherwise show nothing\r\n    &lt;&gt;\r\n      {currentCategory?.HeaderContent\r\n        ? \r\n        <interweave content="{currentCategory?.HeaderContent}">\r\n       : null\r\n      }\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Card } from \"react-bootstrap\";\r\nimport { CategoryModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport Interweave from \"interweave\";\r\n\r\ninterface ICategoryLandingPageSidebarProps {\r\n  currentCategory: CategoryModel;\r\n}\r\n\r\nexport const CategoryLandingPageSidebar = (props: ICategoryLandingPageSidebarProps): JSX.Element =&gt; {\r\n  const { currentCategory } = props;\r\n  return (\r\n    &lt;&gt;\r\n      {currentCategory?.SidebarContent\r\n        ? <card classname='\"cat-side-content\"'>\r\n          <interweave content="{currentCategory?.SidebarContent}">\r\n        </interweave></card> : null\r\n      }\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Card } from \"react-bootstrap\";\r\nimport { CategoryModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport Interweave from \"interweave\";\r\n\r\ninterface ICategoryLandingPageFooterProps {\r\n  currentCategory: CategoryModel;\r\n}\r\n\r\nexport const CategoryLandingPageFooter = (props: ICategoryLandingPageFooterProps): JSX.Element =&gt; {\r\n  const { currentCategory } = props;\r\n\r\n  return (\r\n    // If currentCat.header != null, show it, otherwise show nothing\r\n    &lt;&gt;\r\n      {currentCategory?.FooterContent\r\n        ? <card classname='\"cat-side-content\"'>\r\n          <interweave content="{currentCategory?.FooterContent}">\r\n        </interweave></card> : null\r\n      }\r\n    \r\n  );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"compareTable\":\"Compare_compareTable__670nk\"};","/** @format */\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface CompareTableProps {\r\n  compareProducts: ProductModel[];\r\n  attributes: GeneralAttributeModel[];\r\n  cefConfig: CEFConfig;\r\n}\r\n\r\ntype TProductKey = keyof ProductModel;\r\nexport function getRowTitles(compareProducts: ProductModel[], attributes: GeneralAttributeModel[]): TProductKey[] {\r\n  const rows: TProductKey[] = [];\r\n  compareProducts.forEach(product =&gt; {\r\n    const keys: TProductKey[] = Object.keys(product) as TProductKey[];\r\n    keys.forEach(key =&gt; {\r\n      if (skipKeys.indexOf(key) &gt; -1) {\r\n        return;\r\n      }\r\n      if (rows.indexOf(key) &gt; -1) {\r\n        return;\r\n      }\r\n      if (key === \"SerializableAttributes\") {\r\n        const attrKeys = Object.keys(product.SerializableAttributes);\r\n        attrKeys.forEach(attrKey =&gt; {\r\n          if (!attributes?.length) {\r\n            return;\r\n          }\r\n          if (!product.SerializableAttributes[attrKey].Value) {\r\n            return;\r\n          }\r\n          // Not a comparable attribute\r\n          if (!attributes?.find(x =&gt; x.CustomKey === attrKey)) {\r\n            return;\r\n          }\r\n          if (rows.indexOf(`SerializableAttributes.${attrKey}` as TProductKey) &gt; -1) {\r\n            return;\r\n          }\r\n          rows.push(`SerializableAttributes.${attrKey}` as TProductKey);\r\n        });\r\n        return;\r\n      }\r\n      rows.push(key);\r\n    });\r\n  });\r\n  return rows;\r\n}\r\n\r\nconst skipKeys = [\r\n  // Explicitly called out so don't iterate over\r\n  \"CustomKey\",\r\n  \"Name\",\r\n  \"Description\",\r\n  \"ShortDescription\",\r\n  \"Width\",\r\n  \"WidthUnitOfMeasure\",\r\n  \"Depth\",\r\n  \"DepthUnitOfMeasure\",\r\n  \"Height\",\r\n  \"HeightUnitOfMeasure\",\r\n  \"Weight\",\r\n  \"WeightUnitOfMeasure\",\r\n  // General Skips\r\n  \"ID\",\r\n  \"Active\",\r\n  \"CreatedDate\",\r\n  \"UpdatedDate\",\r\n  \"Hash\",\r\n  \"JsonAttributes\",\r\n  \"jsonAttributes\",\r\n  \"Type\",\r\n  \"TypeID\",\r\n  \"TypeKey\",\r\n  \"TypeName\",\r\n  \"TypeDisplayName\",\r\n  \"TypeSortOrder\",\r\n  \"Status\",\r\n  \"StatusID\",\r\n  \"StatusKey\",\r\n  \"StatusName\",\r\n  \"StatusDisplayName\",\r\n  \"StatusSortOrder\",\r\n  \"Accounts\",\r\n  \"Vendors\",\r\n  \"Manufacturers\",\r\n  \"ProductAssociations\",\r\n  \"ProductInventoryLocationSections\",\r\n  \"ProductPricePoints\",\r\n  \"ProductsAssociatedWith\",\r\n  \"ProductSubscriptionTypes\",\r\n  \"ProductFiles\",\r\n  \"ProductImages\",\r\n  \"PrimaryImageFileName\",\r\n  \"ImageFileName\",\r\n  \"IsEligibleForReturn\",\r\n  \"Stores\",\r\n  \"Images\",\r\n  \"StoredFiles\",\r\n  \"SortOrder\",\r\n  \"KitQuantityOfParent\",\r\n  \"KitCapacity\",\r\n  \"KitBaseQuantityPriceMultiplier\",\r\n  \"IsFreeShipping\",\r\n  \"IsShippingRestricted\",\r\n  \"ProductCategories\",\r\n  \"SeoUrl\",\r\n  \"SeoDescription\",\r\n  \"SeoKeywords\",\r\n  \"SeoPageTitle\",\r\n  \"Package\",\r\n  \"PackageID\",\r\n  \"PackageKey\",\r\n  \"PackageName\",\r\n  \"MasterPack\",\r\n  \"MasterPackID\",\r\n  \"MasterPackKey\",\r\n  \"MasterPackName\",\r\n  \"Pallet\",\r\n  \"PalletID\",\r\n  \"PalletKey\",\r\n  \"PalletName\",\r\n  \"ProductRestrictions\",\r\n  \"IsVisible\",\r\n  \"IsTaxable\",\r\n  \"IsDiscontinued\",\r\n  \"AllowBackOrder\",\r\n  \"IsUnlimitedStock\",\r\n  \"StockQuantity\",\r\n  \"StockQuantityAllocated\",\r\n  \"StockQuantityPreSold\",\r\n  \"TotalPurchasedAmount\",\r\n  \"TotalPurchasedQuantity\",\r\n  \"DocumentRequiredForPurchaseOverrideFeeIsPercent\",\r\n  \"MustPurchaseInMultiplesOfAmountOverrideFeeIsPercent\",\r\n  \"ProductNotifications\",\r\n  \"AllowPreSale\",\r\n  \"DropShipOnly\",\r\n  \"NothingToShip\",\r\n  \"ShippingLeadTimeIsCalendarDays\",\r\n  \"RequiresRolesList\",\r\n  \"RequiresRolesListAlt\",\r\n  // Properties and functions that extend in Angular\r\n  \"inventoryObject\",\r\n  \"isOutOfStock\",\r\n  \"countStock\",\r\n  \"quantity\",\r\n  \"CurrentShipOption\",\r\n  \"readPrices\",\r\n  \"$_rawPrices\",\r\n  \"readInventory\",\r\n  \"$_rawInventory\"\r\n];\r\n","/* eslint-disable @typescript-eslint/no-extra-parens */\r\n/* eslint-disable max-len */\r\n/* eslint-disable arrow-body-style */\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { Anchor, Button, Carousel, Col, Container, Row, Table } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Interweave from \"interweave\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { camelCaseToHumanReadable } from \"src/_shared/common/Formatters\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls/ProductCardActionButtonWidget\";\r\nimport { ProductCardNameWidget, ProductCardPricingWidget, ProductCardSkuWidget, ProductCardStockWidget } from \"src/Catalog/views/ProductCardWidgets\";\r\nimport classes from \"src/Catalog/views/Compare.module.scss\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { CompareTableProps, getRowTitles } from \"src/Catalog/views/CompareFunctions\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport _ from \"lodash\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\n\r\nexport const Compare = (): JSX.Element =&gt; {\r\n  const [ compareProducts, setCompareProducts ] = useState<productmodel[]>([]);\r\n  // TODO: const [ pages, setPages ] = useState(null);\r\n  const [ attributes, setAttributes ] = useState<generalattributemodel[]>([]);\r\n  const [ carouselIndex, setCarouselIndex ] = useState(0);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const pricingFactory = usePricingFactory();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const compareCart = useCart(ServiceStrings.carts.types.compare);\r\n\r\n  useEffect(() =&gt; {\r\n    if (compareCart?.SalesItems?.length\r\n      &amp;&amp; cefConfig\r\n      &amp;&amp; pricingFactory\r\n      &amp;&amp; inventoryFactory) {\r\n      getCompareCartItemProductsByIDs();\r\n    }\r\n  }, [ compareCart, cefConfig, pricingFactory, inventoryFactory ]);\r\n\r\n  useEffect(() =&gt; {\r\n    loadAttributes();\r\n    return () =&gt; {\r\n      setAttributes([]);\r\n    };\r\n  }, []);\r\n\r\n  async function getCompareCartItemProductsByIDs() {\r\n    setRunning();\r\n    try {\r\n      let products = (\r\n        await cvApi.products.GetProductsByIDs({\r\n          IDs: compareCart.SalesItems.map(x =&gt; x.ProductID)\r\n        })\r\n      ).data;\r\n      // TODO: Fix in pricing bulkFactoryAssign, we are losing our original sort order\r\n      if (cefConfig?.featureSet.pricing.enabled) {\r\n        products = await pricingFactory.bulkFactoryAssign(products);\r\n      }\r\n      if (cefConfig?.featureSet.inventory.enabled) {\r\n        products = await inventoryFactory.bulkFactoryAssign(products);\r\n      }\r\n      setCompareProducts(products);\r\n      finishRunning();\r\n    } catch (err) {\r\n      console.error(err);\r\n      finishRunning(true, \"Failed to get compare cart item products\");\r\n    }\r\n  }\r\n\r\n  function loadAttributes(): void {\r\n    setRunning();\r\n    const args = {\r\n      Active: true,\r\n      AsListing: true,\r\n      HideFromStorefront: false,\r\n      IsComparable: true,\r\n    };\r\n    const promiserKey = `GetGeneralAttributes(${JSON.stringify(args)})`;\r\n    promiser.resolve(promiserKey, () =&gt; cvApi.attributes\r\n      .GetGeneralAttributes(args))\r\n      .then(res =&gt; {\r\n        if (!res?.data?.Results?.length) {\r\n          finishRunning(true, \"Failed to fetch general attributes\");\r\n          return;\r\n        }\r\n        setAttributes(res.data.Results);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(err);\r\n      });\r\n  }\r\n\r\n  const handleSelect = (selectedIndex: number, e: any) =&gt; {\r\n    setCarouselIndex(selectedIndex);\r\n  };\r\n\r\n  if (\r\n    !compareCart\r\n    || !compareCart.SalesItems\r\n    || !compareCart.SalesItems.length\r\n    || !compareProducts\r\n    || !compareProducts.length\r\n  ) {\r\n    return (\r\n      <row>\r\n        \r\n          <loadingwidget>\r\n        \r\n      </loadingwidget></row>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <fragment>\r\n      <row>\r\n        \r\n          <h2>{t(\"ui.storefront.searchCatalog.compareProduct.Plural\")}</h2>\r\n        \r\n        \r\n          <link ??="" \"="" btn-secondary="" catalog\"}="" classname='\"btn' text-de\"="" to="{cefConfig?.routes.catalog.root"/>\r\n            {t(\"ui.storefront.searchCatalog.BackToResults\")}\r\n          \r\n        \r\n      </row>\r\n      {viewState.hasError\r\n        &amp;&amp; <row>\r\n          \r\n            <errorview ??="" error="{viewState.errorMessage" viewstate.errormessages[0]}="">\r\n          \r\n        </errorview></row>\r\n      }\r\n      <carousel\r\n activeindex="{carouselIndex}\r\n" automatically="" cycle\r\n="" indicators="{false}" interval="{null}\r\n" not="" null="" onselect="{handleSelect}\r\n" to="" variant='\"dark\"\r\n'>\r\n        {_.chunk(compareProducts, 3).map((chunk, index) =&gt; {\r\n          return (\r\n            // eslint-disable-next-line react/no-array-index-key\r\n            <carousel.item key="{`CarouselItem_CompareTable_${index}`}">\r\n              <container>\r\n                <comparetable\r\n attributes="{attributes}\r\n" cefconfig="{cefConfig}" compareproducts="{chunk}\r\n">\r\n              </comparetable\r\n></container>\r\n            </carousel.item>\r\n          );\r\n        })}\r\n      \r\n    </carousel\r\n></fragment>\r\n  );\r\n};\r\n\r\nconst CompareTable = (props: CompareTableProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  const cartFactory = useCartFactory();\r\n\r\n  return (\r\n    <table\r\n classname="{classes.compareTable}" hover\r\n="" size='\"sm\"\r\n' striped\r\n="">\r\n      \r\n        \r\n          <th\r\n classname='\"w-28' fk-w-20\"\r\n="" id='\"CompareSpecificationsText\"' lg-w-20="" md-w-20="" sm-w-28="" tk-w-20="" xl-w-20="">\r\n            {t(\"ui.storefront.product.detail.productDetails.Specifications\")}\r\n          \r\n          {props.compareProducts.map((product, index) =&gt; {\r\n            const { ID, SeoUrl, Name } = product;\r\n            return (\r\n              <th\r\n classname='\"w-33' compare-text="" compare-title="" fk-w-25="" key="{ID}\r\n" lg-w-25="" md-w-25="" sm-w-33="" text-center\"="" tk-w-25="" xl-w-25="">\r\n                <productcardnamewidget\r\n productname="{Name}\r\n" productseourl="{SeoUrl}\r\n">\r\n              \r\n            );\r\n          })}\r\n        \r\n      \r\n      \r\n        \r\n          {t(\"ui.storefront.searchCatalog.compare.Image\")}\r\n          {props.compareProducts.map(product =&gt; {\r\n            return (\r\n              \r\n                <div>\r\n                  <anchor\r\n \"productdetail\")}="" href="{corsLink(cefConfig," product.seourl,="">\r\n                    <imagewithfallback\r\n 200,\r\n="" 200\r\n="" alt="{product.Name}\r\n" classname='\"img-fluid' d-block="" height:="" imageresizerparamsbody="{{\r\n" mx-auto\"\r\n="" src="{product.PrimaryImageFileName}\r\n" width:="" }}\r\n="">\r\n                  \r\n                </imagewithfallback\r\n></anchor\r\n></div>\r\n              \r\n            );\r\n          })}\r\n        \r\n        \r\n          {t(\"ui.storefront.userDashboard2.controls.salesDetail.Summary\")}\r\n          {props.compareProducts.map(product =&gt; {\r\n            return (\r\n              \r\n                <em classname='\"compare-text\"'>{product.ShortDescription}</em>\r\n              \r\n            );\r\n          })}\r\n        \r\n        \r\n          {t(\"ui.storefront.cart.SKU\")}\r\n          {props.compareProducts.map(product =&gt; {\r\n            return (\r\n              \r\n                <productcardskuwidget\r\n customkey="{product.CustomKey}\r\n" productid="{product.ID}\r\n">\r\n              \r\n            );\r\n          })}\r\n        \r\n        \r\n          {t(\"ui.storefront.searchCatalog.compare.Dimensions\")}\r\n          {props.compareProducts.map(product =&gt; {\r\n            const { ID } = product;\r\n            const widthExists = !isNaN(product.Width);\r\n            const depthExists = !isNaN(product.Depth);\r\n            const weightExists = !isNaN(product.Weight);\r\n            if (widthExists || depthExists || weightExists) {\r\n              return (\r\n                <td\r\n classname='\"compare-text\"' key="{ID}\r\n">\r\n                  \r\n                    \r\n                      {/* Account for 0 */}\r\n                      {widthExists ? (\r\n                        \r\n                          \r\n                          \r\n                        \r\n                      ) : null}\r\n                      {depthExists ? (\r\n                        \r\n                          \r\n                          \r\n                        \r\n                      ) : null}\r\n                      {weightExists ? (\r\n                        \r\n                          \r\n                          \r\n                        \r\n                      ) : null}\r\n                    \r\n                  <table classname='\"table' mb-0\"="" table-bordered=""><tbody><tr><th>{t(\"ui.storefront.storeDashboard.storeProductEditor.Width\")}</th><th>{`${product.Width} ${product.WidthUnitOfMeasure}`}</th></tr><tr><th>{t(\"ui.storefront.storeDashboard.storeProductEditor.Depth\")}</th><th>{`${product.Depth} ${product.DepthUnitOfMeasure}`}</th></tr><tr><th>{t(\"ui.storefront.storeDashboard.storeProductEditor.Weight\")}</th><th>{`${product.Weight} ${product.WeightUnitOfMeasure}`}</th></tr></tbody></table>\r\n                \r\n              );\r\n            }\r\n            return (\r\n              \r\n                \r\n                  \r\n                    \r\n                      \r\n                    \r\n                  \r\n                <table classname='\"table' mb-0\"="" table-bordered=""><tbody><tr><td>{t(\"ui.storefront.searchCatalog.filters.None\")}</td></tr></tbody></table>\r\n              \r\n            );\r\n          })}\r\n        \r\n        {getRowTitles(props.compareProducts, props.attributes).map(title =&gt; {\r\n          const titleNoPrefix = title.replace(\"SerializableAttributes.\", \"\");\r\n          return (\r\n            \r\n              {camelCaseToHumanReadable(title.replace(\"SerializableAttributes.\", \"\"))}\r\n              {props.compareProducts.map(product =&gt; {\r\n                const { ID, SerializableAttributes } = product;\r\n                return (\r\n                  \r\n                    {\r\n                      <interweave\r\n ${serializableattributes[titlenoprefix].uofm}`\r\n="" &&="" :="" ?="" \"\"\r\n="" `${serializableattributes[titlenoprefix].value}="" content="{\r\n" product[title].tostring()\r\n="" product[title]\r\n="" serializableattributes?.[titlenoprefix]\r\n="" title.startswith(\"serializableattributes.\")="" }\r\n="">\r\n                    }\r\n                  \r\n                );\r\n              })}\r\n            \r\n          );\r\n        })}\r\n      \r\n      \r\n        {props.cefConfig?.featureSet.inventory.enabled &amp;&amp; (\r\n          \r\n            {t(\"ui.storefront.searchCatalog.compare.Stock\")}\r\n            {props.compareProducts.map(product =&gt; <productcardstockwidget product="{product}">)}\r\n          \r\n        )}\r\n        {props.cefConfig?.featureSet.pricing.enabled &amp;&amp; (\r\n          \r\n            {t(\"ui.storefront.common.Price\")}\r\n            {props.compareProducts.map(product =&gt; {\r\n              return (\r\n                \r\n                  <productcardpricingwidget product="{product}">\r\n                \r\n              );\r\n            })}\r\n          \r\n        )}\r\n        \r\n          \r\n          {props.compareProducts.map(product =&gt; (\r\n            \r\n              <productcardactionbuttonwidget product="{product}">\r\n            \r\n          ))}\r\n        \r\n        \r\n          \r\n          {props.compareProducts.map(product =&gt; (\r\n            <td\r\n classname='\"text-center\"' key="{product.ID}\r\n">\r\n              <button\r\n =="" classname='\"btn-block' compare-cart-product-remove\"\r\n="" onclick="{()" text-danger="" variant='\"link\"\r\n'> cartFactory.removeFromCompare(product.ID)}&gt;\r\n                <i aria-hidden='\"true\"' classname='\"fal' fa-lg="" fa-trash="" me-2\"="">\r\n                <span id='\"btnRemoveFromCompareCart\"'>{t(\"ui.storefront.common.Compare.RemoveFrom\")}</span>\r\n              \r\n            \r\n          ))}\r\n        \r\n      \r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { faTable, faThLarge, faThList, IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nconst formatOptions: { format: string; icon: IconDefinition }[] = [\r\n  { format: \"table\", icon: faTable },\r\n  { format: \"grid\", icon: faThLarge },\r\n  { format: \"list\", icon: faThList }\r\n];\r\n\r\nexport interface ICatalogViewButtonSwitchProps {\r\n  pageFormat: string;\r\n  onFormatBtnClicked: (format: string) =&gt; void;\r\n}\r\n\r\nexport const CatalogFormatSwitch = (props: ICatalogViewButtonSwitchProps): JSX.Element =&gt; {\r\n  const { pageFormat, onFormatBtnClicked } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <form.group>\r\n      <form.label>{t(\"ui.storefront.common.View\")}</form.label>\r\n      <inputgroup>\r\n        {formatOptions.map(option =&gt; {\r\n          const { format } = option;\r\n          return (\r\n            <button\r\n :="" =="=" ?="" \"\"}\r\n="" \"outline-primary\"="" classname='\"view-buttons' key="{option.format}\r\n" onclick="{e" option.format="" rounded\"\r\n="" type='\"button\"\r\n' variant="{pageFormat"> onFormatBtnClicked(option.format)}&gt;\r\n              <i\r\n ${\r\n="" :="" ?="" \"fa="" \"grid\"\r\n="" \"table\"\r\n="" aria-hidden='\"true\"\r\n' classname="{`fal" fa-lg="" fa-table\"\r\n="" fa-th-large\"\r\n="" fa-th-list\"\r\n="" format="==" }`}\r\n="">\r\n              <span classname='\"text-capitalize\"'> {option.format}</span>\r\n            \r\n          );\r\n        })}\r\n      </i\r\n></button\r\n></inputgroup>\r\n    </form.group>\r\n  );\r\n};\r\n","import { Button, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst sizeOptions = [ 9, 18, 27 ];\r\n\r\nexport interface ICatalogSizeSwitchProps {\r\n  pageSize: number;\r\n  onPageSizeClicked: (size: number) =&gt; void;\r\n}\r\n\r\nexport const CatalogSizeSwitch = (props: ICatalogSizeSwitchProps): JSX.Element =&gt; {\r\n  const { pageSize, onPageSizeClicked } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <form.group>\r\n      <form.label>{t(\"ui.storefront.product.catalog.controls.itemsPerPage.Show\")}</form.label>\r\n      <inputgroup classname='\"flex-nowrap\"'>\r\n        {sizeOptions.map((num): JSX.Element =&gt; <button\r\n :="" =="=" ?="" \"\"}\r\n="" \"outline-primary\"="" classname='\"rounded\"\r\n' key="{num.toString()}\r\n" num="" onclick="{()" type='\"button\"\r\n' variant="{pageSize"> onPageSizeClicked(num)}&gt;\r\n          {num}\r\n        )}\r\n      </button\r\n></inputgroup>\r\n    </form.group>\r\n  );\r\n};\r\n","import { Form, FormSelect, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst sortOptions = [\r\n  \"Relevance\",\r\n  \"Popular\",\r\n  \"Recent\",\r\n  \"Name Ascending\",\r\n  \"Name Descending\",\r\n  \"Pricing Ascending\",\r\n  \"Pricing Descending\",\r\n  \"Rating Ascending\",\r\n  \"Rating Descending\",\r\n  \"Defined\"\r\n];\r\n\r\nexport interface ICatalogSortBySwitchProps {\r\n  sort: any;\r\n  onSortByChanged: (sort: string) =&gt; void;\r\n}\r\n\r\nexport const CatalogSortBySwitch = (props: ICatalogSortBySwitchProps): JSX.Element =&gt; {\r\n  const { sort, onSortByChanged } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <div classname='\"items-searchCatalogResultsSortCtrl-option\"'>\r\n      <form.group>\r\n        <form.label>\r\n          <span>\r\n            {t(\"ui.storefront.product.catalog.controls.searchCatalogResultsSortCtrl.sortBy\")}\r\n          </span>\r\n        </form.label>\r\n        <inputgroup>\r\n          <formselect\r\n =="" aria-label='\"sort\"\r\n' id='\"sort\"\r\n' onchange="{e" value="{sort}\r\n"> onSortByChanged(e.target.value)}&gt;\r\n            {sortOptions.map((str): JSX.Element =&gt; {\r\n              const strNoSpaces = str.split(\" \").join(\"\");\r\n              return <option key="{str}\r\n" label="{str}\r\n" value="{strNoSpaces}"></option>;\r\n            })}\r\n          \r\n        </formselect\r\n></inputgroup>\r\n      </form.group>\r\n    </div>\r\n  );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"noBefore\":\"Breadcrumbs_noBefore__01HAj\"};","/**\r\n * /* eslint-disable jsx-a11y/anchor-is-valid\r\n *\r\n * @format\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { Breadcrumb, Col } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { AggregateTree } from \"src/_api/cvApi._DtoClasses\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport classes from \"src/_shared/Breadcrumbs.module.scss\";\r\n\r\ninterface IBreadcrumbsProps {\r\n  currentCategory: string;\r\n  currentQuery: string;\r\n  categoriesTree: AggregateTree;\r\n  onCategoryClicked: (cat: string) =&gt; void;\r\n}\r\n\r\nexport const Breadcrumbs = (props: IBreadcrumbsProps): JSX.Element =&gt; {\r\n  const { currentCategory, currentQuery, categoriesTree, onCategoryClicked } = props;\r\n\r\n  const [breadcrumbsFromCatTree, setBreadcrumbsFromCatTree] = useState<string[]>([]);\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n\r\n  function showQueryOnly(): boolean {\r\n    return currentQuery &amp;&amp; !currentCategory;\r\n  }\r\n\r\n  function queryAndCatExist(): boolean {\r\n    return Boolean(currentCategory) &amp;&amp; Boolean(currentQuery);\r\n  }\r\n\r\n  useEffect(() =&gt; {\r\n    if (queryAndCatExist() || showQueryOnly()) {\r\n      return;\r\n    }\r\n    if (categoriesTree?.Children &amp;&amp; currentCategory) {\r\n      const breadcrumbsList = getHeritageListForKey(categoriesTree, currentCategory);\r\n      if (!breadcrumbsList) {\r\n        // Invalid category\r\n        return;\r\n      }\r\n      const cleanedList = breadcrumbsList.filter(x =&gt; x !== undefined &amp;&amp; x !== \"N/A\");\r\n      setBreadcrumbsFromCatTree(cleanedList);\r\n    } else {\r\n      setBreadcrumbsFromCatTree([]);\r\n    }\r\n  }, [categoriesTree, currentCategory, currentQuery]);\r\n\r\n  return (\r\n    <col\r\n classname='\"p-0' m-0\"="" sm="{12}\r\n">\r\n      <breadcrumb\r\n \"p-2="" classname='\"bg-transparent\"\r\n' classname:="" listprops="{{" mb-0="" mx-2\"="" }}="">\r\n        <breadcrumb.item\r\n classname='\"breadcrumbs-title\"\r\n' id='\"lblYouAreHereProducts\"'>\r\n          {t(\"ui.storefront.product.catalog.productCatalog.youAreHere\")}\r\n        \r\n        <breadcrumb.item\r\n cefconfig?.routes?.catalog?.root)}\r\n="" classname="{`${classes.noBefore}`}\r\n" href="{corsLink(cefConfig," id='\"breadCatalogRootLink\"'>\r\n          {t(\"ui.storefront.product.catalog.productCatalog.Catalog\")}\r\n        \r\n        {showQueryOnly() ? (\r\n          <breadcrumb.item as='\"span\"'>{t(\"ui.storefront.product.catalog.SearchResults\")}</breadcrumb.item>\r\n        ) : (\r\n          breadcrumbsFromCatTree.map((crumb: string, index: number) =&gt; (\r\n            <breadcrumb.item\r\n :="" =="" ?="" \"\"="" \"ps-0\"}`}\r\n="" classname="{`${index" href='\"#\"\r\n' id='\"btnCategoryBreadcrumb\"\r\n' key="{crumb}\r\n" onclick="{()" role='\"button\"\r\n'> onCategoryClicked(crumb)}&gt;\r\n              {crumb.split(\"|\")[0]}\r\n            \r\n          ))\r\n        )}\r\n      \r\n    \r\n  );\r\n};\r\n\r\nfunction getHeritageListForKey(treeNode: AggregateTree, desiredKey: string): string[] {\r\n  if (treeNode.Key === desiredKey) {\r\n    return [desiredKey];\r\n  }\r\n  if (treeNode.Children) {\r\n    for (const child of treeNode.Children) {\r\n      const result: string[] = getHeritageListForKey(child, desiredKey);\r\n      if (result) {\r\n        return [treeNode.Key, ...result];\r\n      }\r\n    }\r\n  }\r\n  return null;\r\n}\r\n","/**\r\n * @file React/src/_shared/customHooks/useSortingFactory.tsx\r\n * @author Copyright (c) 2020-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Sorting Factory hook\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { CalculatedSortOrder, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport interface ISortingFactory {\r\n  factoryAssign(product: ProductModel): ProductModel;\r\n  bulkFactoryAssign(products: ProductModel[]): ProductModel[];\r\n}\r\n\r\nexport class SortingFactory implements ISortingFactory {\r\n  factoryAssign(product: ProductModel): ProductModel {\r\n    if (product.readSortOrder) {\r\n      return product;\r\n    }\r\n    // eslint-disable-next-line dot-notation\r\n    product[\"$_rawSortOrder\"] = {\r\n      order: null,\r\n      loading: true\r\n    };\r\n    // eslint-disable-next-line dot-notation\r\n    product.readSortOrder = () =&gt; product[\"$_rawSortOrder\"];\r\n    // eslint-disable-next-line dot-notation\r\n    const sortOrder = product[\"$_rawSortOrder\"] as CalculatedSortOrder;\r\n    sortOrder.order = product.SortOrder ? product.SortOrder : null;\r\n    sortOrder.loading = false;\r\n    // eslint-disable-next-line dot-notation\r\n    product[\"$_rawSortOrder\"] = sortOrder;\r\n    return product;\r\n  }\r\n\r\n  bulkFactoryAssign(products: ProductModel[]): ProductModel[] {\r\n    return products.map(x =&gt; this.factoryAssign(x));\r\n  }\r\n}\r\n\r\nexport const useSortingFactory = (): ISortingFactory =&gt; {\r\n  const [ sortingFactory, setSortingFactory ] = useState(null);\r\n  const cefConfig = useCefConfig() as CEFConfig;\r\n  useEffect(() =&gt; {\r\n    // Not currently used by this factory.\r\n    // TODO: const reduxStore = store.getState();\r\n    if (!cefConfig) {\r\n      return;\r\n    }\r\n    // New up the class from above only once\r\n    const instance = new SortingFactory();\r\n    setSortingFactory(instance);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ cefConfig ]);\r\n  return sortingFactory;\r\n};\r\n","/**\r\n * @file React/src/_shared/customHooks/useRatingFactory.tsx\r\n * @author Copyright (c) 2020-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Rating Factory hook\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { CalculatedRatings, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\nexport interface IRatingFactory {\r\n    factoryAssign(product: ProductModel): Promise<productmodel>;\r\n    bulkFactoryAssign(products: ProductModel[]): Promise<productmodel[]>;\r\n}\r\n\r\nexport class RatingFactory implements IRatingFactory {\r\n  private readonly cefConfig?: CEFConfig;\r\n\r\n  private genBlankRatingsObj(): CalculatedRatings {\r\n    return {\r\n      value: null,\r\n      count: null,\r\n      reviews: null,\r\n      loading: true\r\n    };\r\n  }\r\n\r\n  async factoryAssign(product: ProductModel): Promise<productmodel> {\r\n    if (product.readRatings) {\r\n      return product;\r\n    }\r\n    // eslint-disable-next-line camelcase\r\n    product.$_rawRatings = this.genBlankRatingsObj();\r\n    // TODO: MemCache the results by product ID so we can avoid repeat calls for same product\r\n    await cvApi.products.GetProductReview(product.ID).then(r =&gt; {\r\n      if (!r?.data) {\r\n        console.error(r &amp;&amp; r.data);\r\n        return;\r\n      }\r\n      const ratings = product.$_rawRatings as CalculatedRatings;\r\n      // Assign updated values\r\n      ratings.value = r.data.Value;\r\n      ratings.count = r.data.Count;\r\n      ratings.reviews = r.data.Reviews;\r\n      // Finish\r\n      ratings.loading = false;\r\n      // eslint-disable-next-line camelcase\r\n      product.$_rawRatings = ratings;\r\n    });\r\n    return product;\r\n  }\r\n\r\n  bulkFactoryAssign(products: ProductModel[]): Promise<productmodel[]> {\r\n    if (!this.cefConfig.featureSet.reviews.enabled) {\r\n      return new Promise((resolve, reject) =&gt; {\r\n        resolve(products);\r\n      });\r\n    }\r\n    if (!products || !products.length) {\r\n      const debugMsg = \"useRatingFactory.bulkFactoryAssign(products)\";\r\n      console.warn(`${debugMsg} No products provided to check ratings against`);\r\n      return Promise.reject(new Error(\"No products provided to check ratings against\"));\r\n    }\r\n    const processed: ProductModel[] = [];\r\n    const toProcess: ProductModel[] = [];\r\n    products.forEach(product =&gt; {\r\n      if (product.readRatings) {\r\n        processed.push(product);\r\n      } else {\r\n        // eslint-disable-next-line camelcase\r\n        product.$_rawRatings = this.genBlankRatingsObj();\r\n        product.readRatings = () =&gt; product.$_rawRatings;\r\n        toProcess.push(product);\r\n      }\r\n    });\r\n    if (!toProcess.length) {\r\n      return new Promise((resolve, reject) =&gt; {\r\n        resolve(processed);\r\n      });\r\n    }\r\n    return new Promise((resolve, reject) =&gt; {\r\n      cvApi.products.GetProductReviews({\r\n        ProductIDs: toProcess.map(x =&gt; x.ID)\r\n      }).then(r =&gt; {\r\n        if (!r?.data) {\r\n          console.error(r &amp;&amp; r.data);\r\n          return;\r\n        }\r\n        r.data.forEach(x =&gt; {\r\n          const product = toProcess.find(p =&gt; p.ID === x.ProductID);\r\n          let ratings = product.$_rawRatings as CalculatedRatings;\r\n          if (!ratings) {\r\n            ratings = { loading: true } as any;\r\n          }\r\n          ratings.value = x.Value;\r\n          ratings.count = x.Count;\r\n          ratings.reviews = x.Reviews;\r\n          ratings.loading = false;\r\n          // eslint-disable-next-line camelcase\r\n          product.$_rawRatings = ratings;\r\n          processed.push(product);\r\n        });\r\n        resolve(processed);\r\n      })\r\n        .catch(reject);\r\n    });\r\n  }\r\n\r\n  constructor(cefConfig: CEFConfig) {\r\n    this.cefConfig = cefConfig;\r\n  }\r\n}\r\n\r\nexport const useRatingFactory = (): IRatingFactory =&gt; {\r\n  const [ ratingFactory, setRatingFactory ] = useState(null);\r\n  const cefConfig = useCefConfig() as CEFConfig;\r\n  useEffect(() =&gt; {\r\n    // Not currently used by this factory.\r\n    // Const reduxStore = store.getState();\r\n    if (!cefConfig) {\r\n      return;\r\n    }\r\n    // New up the class from above only once\r\n    const instance = new RatingFactory(cefConfig);\r\n    setRatingFactory(instance);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ cefConfig ]);\r\n  return ratingFactory;\r\n};\r\n","/**\r\n * @file React/src/_shared/customHooks/catalog/useProductSearchViewModel.ts\r\n * @author Copyright (c) 2019-2024 clarity-ventures.com. All rights reserved.\r\n * @desc useProductSearchViewModel hook\r\n */\r\nimport { useEffect, useState } from \"react\";\r\nimport {\r\n  ArrayParam,\r\n  DelimitedNumericArrayParam,\r\n  NumberParam,\r\n  StringParam,\r\n  UrlUpdateType,\r\n  useQueryParams,\r\n  withDefault\r\n} from \"use-query-params\";\r\nimport {\r\n  DecodedValueMap,\r\n  QueryParamConfig,\r\n  QueryParamConfigMap\r\n} from \"serialize-query-params\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport {\r\n  ProductCatalogSearchForm,\r\n  SearchSort\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { Dictionary, ProductSearchViewModel } from \"src/_api/cvApi.shared\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\n\r\nconst CustomJsonParam: QueryParamConfig<string, dictionary<string[]="">&gt; = {\r\n  encode(any) {\r\n    if (any === null) {\r\n      return any;\r\n    }\r\n    let result = JSON.stringify(any);\r\n    if (!result) {\r\n      return result;\r\n    }\r\n    // Replace unescaped double quotes with single\r\n    result = result.replace(/(?<old>(?:^|[^\\\\])(?:\\\\{2})*)\"/gu, \"$1'\");\r\n    result = result.replace(/\\\\\\\\/gu, \"\\\\\\\"\");\r\n    return result;\r\n  },\r\n  decode(input) {\r\n    function getEncodedValue(inputI: string | string[]): string {\r\n      let inputToUse = inputI;\r\n      if (!(inputToUse instanceof Array)) {\r\n        // Replace single quotes with double quotes\r\n        inputToUse = (inputToUse ?? \"\").replace(/'/gu, \"\\\"\");\r\n      }\r\n      return inputToUse.toString();\r\n    }\r\n    const jsonStr = getEncodedValue(input);\r\n    if (jsonStr === null) {\r\n      return jsonStr;\r\n    }\r\n    let result = null;\r\n    try {\r\n      result = JSON.parse(jsonStr);\r\n    } catch (e) {\r\n      // Ignore errors, returning undefined\r\n    }\r\n    return result ?? \"\";\r\n  }\r\n};\r\n\r\ninterface IParamsForSearchCatalogQPCMap extends QueryParamConfigMap {\r\n  [paramName: string]: QueryParamConfig<any, any="">;\r\n  format: typeof StringParam;\r\n  page: typeof NumberParam;\r\n  size: typeof NumberParam;\r\n  sort: typeof StringParam;\r\n  term?: typeof StringParam;\r\n  category?: typeof StringParam;\r\n  brandName?: typeof StringParam;\r\n  categoriesAny?: typeof ArrayParam;\r\n  categoriesAll?: typeof ArrayParam;\r\n  storeId?: typeof NumberParam;\r\n  storeIdsAny?: typeof DelimitedNumericArrayParam;\r\n  storeIdsAll?: typeof DelimitedNumericArrayParam;\r\n  priceRanges?: typeof ArrayParam;\r\n  ratingRanges?: typeof ArrayParam;\r\n  attributesAny?: typeof CustomJsonParam;\r\n  attributesAll?: typeof CustomJsonParam;\r\n}\r\n\r\nexport function compareProductCatalogSearchForm(\r\n    previousForm: ProductCatalogSearchForm,\r\n    currentForm: ProductCatalogSearchForm\r\n): boolean {\r\n  // TODO@JDW find a better way to compare object/array params\r\n  if (previousForm.PageFormat === currentForm.PageFormat\r\n    &amp;&amp; previousForm.Page === currentForm.Page\r\n    &amp;&amp; previousForm.PageSize === currentForm.PageSize\r\n    &amp;&amp; previousForm.Sort === currentForm.Sort\r\n    &amp;&amp; previousForm.Query === currentForm.Query\r\n    &amp;&amp; previousForm.Category?.replaceAll(\"&amp;\", \"%26\") === currentForm.Category?.replaceAll(\"&amp;\", \"%26\")\r\n    &amp;&amp; previousForm.BrandName === currentForm.BrandName\r\n    &amp;&amp; JSON.stringify(previousForm.CategoriesAny) === JSON.stringify(currentForm.CategoriesAny)\r\n    &amp;&amp; JSON.stringify(previousForm.CategoriesAll) === JSON.stringify(currentForm.CategoriesAll)\r\n    &amp;&amp; previousForm.StoreID === currentForm.StoreID\r\n    &amp;&amp; JSON.stringify(previousForm.StoreIDsAny) === JSON.stringify(currentForm.StoreIDsAny)\r\n    &amp;&amp; JSON.stringify(previousForm.StoreIDsAll) === JSON.stringify(currentForm.StoreIDsAll)\r\n    &amp;&amp; JSON.stringify(previousForm.PricingRanges) === JSON.stringify(currentForm.PricingRanges)\r\n    &amp;&amp; JSON.stringify(previousForm.RatingRanges) === JSON.stringify(currentForm.RatingRanges)\r\n    &amp;&amp; compareCustomJsonAttributes(previousForm.AttributesAny, currentForm.AttributesAny)\r\n    &amp;&amp; compareCustomJsonAttributes(previousForm.AttributesAll, currentForm.AttributesAll)\r\n    &amp;&amp; previousForm.PageSetSize === currentForm.PageSetSize) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\nfunction compareCustomJsonAttributes(previous: Dictionary<string[]>, current: Dictionary<string[]>): boolean {\r\n  return (JSON.stringify(previous) ?? \"\")\r\n    .replace(/\\\\\\\\/gu, \"\\\\\\\"\") === (JSON.stringify(current) ?? \"\")\r\n    .replace(/\\\\\\\\/gu, \"\\\\\\\"\");\r\n}\r\n\r\nfunction getDefaultProductSearchViewModel(\r\n    cefConfig: CEFConfig,\r\n    params: DecodedValueMap<iparamsforsearchcatalogqpcmap>\r\n): ProductSearchViewModel {\r\n  const searchForm: ProductCatalogSearchForm = {\r\n    AttributesAll: params.attributesAll,\r\n    AttributesAny: params.attributesAny,\r\n    BrandName: params.brandName,\r\n    CategoriesAll: params.categoriesAll,\r\n    CategoriesAny: params.categoriesAny,\r\n    Category: params.category?.replaceAll(\"&amp;\", \"%26\"),\r\n    Page: params.page || 1,\r\n    PageFormat: params.format || cefConfig?.catalog.defaultFormat || \"grid\",\r\n    PageSetSize: 5,\r\n    PageSize: params.size || cefConfig?.catalog.defaultPageSize || 9,\r\n    PricingRanges: params.pricingRanges,\r\n    Query: params.term,\r\n    RatingRanges: params.ratingRanges,\r\n    Sort: (params.sort as any) || cefConfig.catalog.defaultSort || SearchSort.Relevance,\r\n    StoreID: params.storeId,\r\n    StoreIDsAll: params.storeIdsAll,\r\n    StoreIDsAny: params.storeIdsAny\r\n  };\r\n  Object.keys(searchForm).forEach(key =&gt; {\r\n    // TODO:@JDW Figure out how to have solid types while still having a string indexer\r\n    // @ts-ignore\r\n    if (searchForm[key] === undefined || searchForm[key] === \"\") {\r\n      // @ts-ignore\r\n      delete searchForm[key];\r\n    }\r\n  });\r\n  return {\r\n    Attributes: null,\r\n    BrandIDs: null,\r\n    BrandNames: null,\r\n    CategoriesTree: null,\r\n    DebugInformation: null,\r\n    Documents: [],\r\n    ElapsedMilliseconds: 0,\r\n    Form: searchForm,\r\n    FranchiseIDs: null,\r\n    HitsMetaDataHitScores: null,\r\n    HitsMetaDataMaxScore: null,\r\n    HitsMetaDataTotal: null,\r\n    IsValid: false,\r\n    ManufacturerIDs: null,\r\n    PricingRanges: null,\r\n    ProductIDs: null,\r\n    RatingRanges: null,\r\n    ResultIDs: null,\r\n    ServerError: null,\r\n    StoreIDs: null,\r\n    Total: 0,\r\n    TotalPages: 0,\r\n    Types: null,\r\n    VendorIDs: null\r\n  };\r\n}\r\n\r\nfunction defaultViewModelParams(cefConfig: CEFConfig): IParamsForSearchCatalogQPCMap {\r\n  return {\r\n    attributesAll: CustomJsonParam,\r\n    attributesAny: CustomJsonParam,\r\n    brandName: StringParam,\r\n    categoriesAll: ArrayParam,\r\n    categoriesAny: ArrayParam,\r\n    category: StringParam,\r\n    format: withDefault(StringParam, cefConfig ? cefConfig.catalog.defaultFormat : \"grid\"),\r\n    location: StringParam,\r\n    page: withDefault(NumberParam, 1),\r\n    priceRanges: ArrayParam,\r\n    ratingRanges: ArrayParam,\r\n    size: withDefault(NumberParam, cefConfig ? cefConfig.catalog.defaultPageSize : 9),\r\n    sort: withDefault(\r\n      StringParam,\r\n      cefConfig\r\n        ? cefConfig.catalog.defaultSort?.toString()\r\n        : SearchSort.Relevance.toString()\r\n    ),\r\n    storeId: NumberParam,\r\n    storeIdsAll: DelimitedNumericArrayParam,\r\n    storeIdsAny: DelimitedNumericArrayParam,\r\n    term: StringParam\r\n  } as IParamsForSearchCatalogQPCMap;\r\n}\r\n\r\nfunction viewModelToParams(productSearchViewModel: ProductSearchViewModel) {\r\n  // Have access to productSearchViewModel and latestValues\r\n  return (\r\n    latestParams: DecodedValueMap<iparamsforsearchcatalogqpcmap>\r\n  ): DecodedValueMap<iparamsforsearchcatalogqpcmap> =&gt; {\r\n    if (!productSearchViewModel) {\r\n      return latestParams;\r\n    }\r\n    const configMap: DecodedValueMap<iparamsforsearchcatalogqpcmap> = {\r\n      attributesAll: productSearchViewModel?.Form?.AttributesAll,\r\n      attributesAny: productSearchViewModel?.Form?.AttributesAny,\r\n      brandName: productSearchViewModel?.Form?.BrandName,\r\n      categoriesAll: productSearchViewModel?.Form?.CategoriesAll,\r\n      categoriesAny: productSearchViewModel?.Form?.CategoriesAny,\r\n      category: productSearchViewModel?.Form?.Category?.replaceAll(\"&amp;\", \"%26\"),\r\n      format: productSearchViewModel?.Form?.PageFormat,\r\n      page: productSearchViewModel?.Form?.Page,\r\n      priceRanges: productSearchViewModel?.Form?.PricingRanges,\r\n      ratingRanges: productSearchViewModel?.Form?.RatingRanges,\r\n      size: productSearchViewModel?.Form?.PageSize,\r\n      sort: productSearchViewModel?.Form?.Sort?.toString(),\r\n      storeId: productSearchViewModel?.Form?.StoreID,\r\n      storeIdsAll: productSearchViewModel?.Form?.StoreIDsAll,\r\n      storeIdsAny: productSearchViewModel?.Form?.StoreIDsAny,\r\n      term: productSearchViewModel?.Form?.Query\r\n    };\r\n    return configMap;\r\n  };\r\n}\r\n\r\nexport const useProductSearchViewModel = (): [\r\n  ProductSearchViewModel,\r\n  React.Dispatch<react.setstateaction<productsearchviewmodel>&gt;\r\n] =&gt; {\r\n  const cefConfig = useCefConfig();\r\n  const [ params, setParams ] = useQueryParams(defaultViewModelParams(cefConfig));\r\n  const [ productSearchViewModel, setProductSearchViewModel ] = useState<productsearchviewmodel>(\r\n    getDefaultProductSearchViewModel(cefConfig, params)\r\n  );\r\n\r\n  useEffect(\r\n    () =&gt; {\r\n      setParams(viewModelToParams(productSearchViewModel), \"push\" as UrlUpdateType);\r\n    },\r\n    [\r\n      productSearchViewModel?.Form?.AttributesAll,\r\n      productSearchViewModel?.Form?.AttributesAny,\r\n      productSearchViewModel?.Form?.BrandName,\r\n      productSearchViewModel?.Form?.CategoriesAll,\r\n      productSearchViewModel?.Form?.CategoriesAny,\r\n      productSearchViewModel?.Form?.Category,\r\n      productSearchViewModel?.Form?.Page,\r\n      productSearchViewModel?.Form?.PageFormat,\r\n      productSearchViewModel?.Form?.PageSetSize,\r\n      productSearchViewModel?.Form?.PageSize,\r\n      productSearchViewModel?.Form?.PricingRanges,\r\n      productSearchViewModel?.Form?.Query,\r\n      productSearchViewModel?.Form?.RatingRanges,\r\n      productSearchViewModel?.Form?.Sort,\r\n      productSearchViewModel?.Form?.StoreID,\r\n      productSearchViewModel?.Form?.StoreIDsAll,\r\n      productSearchViewModel?.Form?.StoreIDsAny,\r\n    ]\r\n  );\r\n  return [\r\n    productSearchViewModel,\r\n    setProductSearchViewModel\r\n  ];\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Container, Pagination } from \"react-bootstrap\";\r\ninterface ICatalogPaginationControlsProps {\r\n  page: number;\r\n  pageSize: number;\r\n  total: number;\r\n  totalPages: number;\r\n  navigateToPage: Function;\r\n}\r\n\r\nexport const CatalogPaginationControls = (props: ICatalogPaginationControlsProps): JSX.Element =&gt; {\r\n  const { page, pageSize, total, totalPages, navigateToPage } = props;\r\n\r\n  const { t } = useTranslation();\r\n  const displayablePages = Math.min(totalPages, 5);\r\n  return (\r\n    <container classname='\"pagination-box' text-center\"="">\r\n      <span classname='\"showing\"'>\r\n        {t(\"ui.storefront.product.catalog.productCatalog.Showing\")}  \r\n        <span classname='\"show-card\"'>\r\n          {\r\n            // eslint-disable-next-line @typescript-eslint/no-extra-parens\r\n            `${((page - 1) * pageSize) + 1} to ${page * pageSize &gt;= total ? total : page * pageSize}`}\r\n        </span>\r\n          {t(\"ui.storefront.common.Of.Lowercase\")}  \r\n        <span classname='\"show-or\"'>{total}</span>\r\n      </span>\r\n      <pagination classname='\"justify-content-center\"'>\r\n        <pagination.first\r\n 1}\r\n="" =="=" aria-label='{t(\"ui.storefront.searchCatalog.pageSelector.GoToFirstPage\")}\r\n' disabled="{page" onclick="{()"> page &gt; 1 &amp;&amp; navigateToPage(1)}\r\n        /&gt;\r\n        <pagination.prev\r\n 1}\r\n="" =="=" aria-label='{t(\"ui.storefront.searchCatalog.pageSelector.GoToPreviousPage\")}\r\n' disabled="{page" onclick="{()"> page &gt; 1 &amp;&amp; navigateToPage(page - 1)}\r\n        /&gt;\r\n        {\r\n          Array(displayablePages)\r\n            .fill(null)\r\n            .map((el, index): JSX.Element =&gt; {\r\n              let num = 1;\r\n              if (totalPages &gt; 2 &amp;&amp; page &gt; 2 &amp;&amp; page &lt;= totalPages - 2) {\r\n                num = page - 2;\r\n              }\r\n              if (totalPages &gt; 2 &amp;&amp; totalPages - 2 &lt;= page) {\r\n                num = totalPages - (displayablePages - 1);\r\n              }\r\n              num += index;\r\n              return (\r\n                <pagination.item\r\n =="=" active="{page" aria-label='{t(\"ui.storefront.searchCatalog.pageSelector.GoToPage\")}\r\n' num}\r\n="" onclick="{()"> navigateToPage(num)}\r\n                  key={num.toString()}&gt;\r\n                  {num}\r\n                \r\n              );\r\n            })}\r\n        <pagination.next\r\n disabled="{page">= totalPages}\r\n          onClick={() =&gt; {\r\n            if (page &lt; totalPages) {\r\n              navigateToPage(page + 1);\r\n            }\r\n          }}\r\n          aria-label={t(\"ui.storefront.searchCatalog.pageSelector.GoToNextPage\")}\r\n        /&gt;\r\n        <pagination.last\r\n disabled="{page">= totalPages}\r\n          onClick={() =&gt; {\r\n            if (page &lt; totalPages) {\r\n              navigateToPage(totalPages);\r\n            }\r\n          }}\r\n          aria-label={t(\"ui.storefront.searchCatalog.pageSelector.GoToLastPage\")}\r\n        /&gt;\r\n      </pagination.last\r\n></pagination.next\r\n></pagination.item\r\n></pagination.prev\r\n></pagination.first\r\n></pagination>\r\n    </container>\r\n  );\r\n};\r\n","/**\r\n * @file React/src/_shared/customHooks/useCatalogSortFactory.tsx\r\n * @author Copyright (c) 2020-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Catalog Sorting Factory hook\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { SearchSort } from \"src/_api/cvApi._DtoClasses\";\r\nimport { Dictionary, ProductModel } from \"src/_api/cvApi.shared\";\r\n\r\nexport interface ICatalogSortFactory {\r\n    sort(sortBy: string, products: ProductModel[], hitScores: Dictionary<number>): ProductModel[];\r\n}\r\n\r\nexport class CatalogSortFactory implements ICatalogSortFactory {\r\n  sort(sortBy: string, products: ProductModel[], hitScores: Dictionary<number>): ProductModel[] {\r\n    // For below (as-is) y - x is descending (highest value will be first)\r\n    switch (sortBy) {\r\n      // Relevance\r\n      case SearchSort[SearchSort.Relevance]: {\r\n        if (!hitScores || !Object.keys(hitScores)?.length) {\r\n          return products;\r\n        }\r\n        return products.sort((x, y) =&gt; {\r\n          const scoreDifference = (hitScores[y.ID] ?? 0) - (hitScores[x.ID] ?? 0);\r\n          if (scoreDifference !== 0) {\r\n            return scoreDifference; // Sort by hit scores\r\n          }\r\n          return x.Name.localeCompare(y.Name); // Subsort by name if hit scores are equal\r\n        });\r\n      }\r\n      // Popular\r\n      case SearchSort[SearchSort.Popular]: {\r\n        return products.sort((x, y) =&gt; (y.TotalPurchasedQuantity ?? 0) - (x.TotalPurchasedQuantity ?? 0));\r\n      }\r\n      // Recent\r\n      case SearchSort[SearchSort.Recent]: {\r\n        return products.sort((x, y) =&gt; {\r\n          const xDate: string | number = x.UpdatedDate.toString()\r\n            ?? x.CreatedDate.toString()\r\n            ?? 0;\r\n          const yDate: string | number = y.UpdatedDate.toString()\r\n            ?? y.CreatedDate.toString()\r\n            ?? 0;\r\n          return new Date(yDate).getTime() - new Date(xDate).getTime();\r\n        });\r\n      }\r\n      // NameAscending\r\n      case SearchSort[SearchSort.NameAscending]: {\r\n        return products.sort((x, y) =&gt; x.Name.toUpperCase()\r\n          .localeCompare(y.Name.toUpperCase()));\r\n      }\r\n      // NameDescending\r\n      case SearchSort[SearchSort.NameDescending]: {\r\n        return products.sort((x, y) =&gt; y.Name.toUpperCase()\r\n          .localeCompare(x.Name.toUpperCase()));\r\n      }\r\n      // PricingAscending\r\n      case SearchSort[SearchSort.PricingAscending]: {\r\n        return products.sort((x, y) =&gt; (this.getProductPrice(x) ?? 0) - (this.getProductPrice(y) ?? 0));\r\n      }\r\n      // PricingDescending\r\n      case SearchSort[SearchSort.PricingDescending]: {\r\n        return products.sort((x, y) =&gt; (this.getProductPrice(y) ?? 0) - (this.getProductPrice(x) ?? 0));\r\n      }\r\n      // RatingAscending\r\n      case SearchSort[SearchSort.RatingAscending]: {\r\n        return products.sort((x, y) =&gt; (this.getProductRating(x) ?? 0) - (this.getProductRating(y) ?? 0));\r\n      }\r\n      // RatingDescending\r\n      case SearchSort[SearchSort.RatingDescending]: {\r\n        return products.sort((x, y) =&gt; (this.getProductRating(y) ?? 0) - (this.getProductRating(x) ?? 0));\r\n      }\r\n      // Defined\r\n      case SearchSort[SearchSort.Defined]: {\r\n        const productsWithSortOrder = products.filter(x =&gt; typeof this.getProductSortOrder(x) === \"number\");\r\n        productsWithSortOrder.sort((x, y) =&gt; this.getProductSortOrder(x) - this.getProductSortOrder(y));\r\n        const productsWithoutSortOrder = products.filter(x =&gt; !this.getProductSortOrder(x));\r\n        return [ ...productsWithSortOrder, ...productsWithoutSortOrder ];\r\n      }\r\n      // Default / Not Implemented\r\n      default: {\r\n        return products;\r\n      }\r\n    }\r\n  }\r\n\r\n  private getProductPrice(product: ProductModel): number | undefined {\r\n    const prices = product.readPrices();\r\n    if (prices) {\r\n      return prices.haveSale\r\n        ? prices.sale ?? undefined\r\n        : prices.base ?? undefined;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private getProductRating(product: ProductModel): number | undefined {\r\n    const ratings = product.readRatings();\r\n    if (ratings) {\r\n      return ratings.value;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private getProductSortOrder(product: ProductModel): number | undefined {\r\n    const sortOrders = product.readSortOrder();\r\n    if (sortOrders) {\r\n      return sortOrders.order;\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n\r\nexport const useCatalogSortFactory = (): ICatalogSortFactory =&gt; {\r\n  const [ catalogSortFactory, setCatalogSortFactory ] = useState(null);\r\n  const cefConfig = useCefConfig() as CEFConfig;\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig) {\r\n      return;\r\n    }\r\n    // New up the class from above only once\r\n    const instance = new CatalogSortFactory();\r\n    setCatalogSortFactory(instance);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ cefConfig ]);\r\n  return catalogSortFactory;\r\n};\r\n","/**\r\n * @file React/src/_shared/customHooks/useCustomCompareEffect.ts\r\n * @author Copyright (c) 2019-2024 clarity-ventures.com. All rights reserved.\r\n * @desc useCustomCompareEffect hook\r\n */\r\nimport { useEffect, useRef } from \"react\";\r\n\r\nfunction useCustomCompareMemo<t>(value: T, equalFn: (prev: T, current: T) =&gt; boolean): T {\r\n  const ref = useRef<t>(value);\r\n\r\n  if (!equalFn(value, ref.current)) {\r\n    ref.current = value;\r\n  }\r\n\r\n  return ref.current;\r\n}\r\n\r\nfunction useCustomCompareEffect<t>(\r\n    create: () =&gt; void | (() =&gt; void),\r\n    input: T,\r\n    equal: (prev: T, current: T) =&gt; boolean\r\n): void {\r\n  useEffect(create, [ useCustomCompareMemo(input, equal) ]);\r\n}\r\n\r\nexport default useCustomCompareEffect;\r\n","/**\r\n * /* CatLevelsUpTo, catLandingPageEnabled, currentCategory has children?, currentCategory's level\r\n * if catlandingpage is not enabled THEN handle as normal\r\n *\r\n * @format\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { corsImageLink } from \"src/_shared/common/Cors\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Route, Switch } from \"react-router-dom\";\r\n\r\nimport { CatalogGridView, CatalogListView, CatalogTableView, CategoryLandingPageView } from \"./views\";\r\nimport {\r\n  CategoryLandingPageFooter,\r\n  CategoryLandingPageHeader,\r\n  CategoryLandingPageSidebar,\r\n  SubCategoryCarousel\r\n} from \"./views/CategoryLandingPageWidgets\";\r\nimport { Compare } from \"./views/Compare\";\r\nimport { CatalogFilters } from \"src/Catalog/controls/CatalogFilters\";\r\nimport { CatalogFormatSwitch, CatalogSizeSwitch, CatalogSortBySwitch } from \"./controls/CatalogSwitchComponents\";\r\n\r\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\r\n\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { Breadcrumbs } from \"src/_shared/Breadcrumbs\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { useSortingFactory } from \"src/_shared/customHooks/useSortingFactory\";\r\nimport { useRatingFactory } from \"src/_shared/customHooks/useRatingFactory\";\r\nimport {\r\n  compareProductCatalogSearchForm,\r\n  useProductSearchViewModel\r\n} from \"src/_shared/customHooks/catalog/useProductSearchViewModel\";\r\n\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { CatalogPaginationControls } from \"./controls/CatalogPaginationControls\";\r\n\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport {\r\n  CategoryModel,\r\n  GeneralAttributeModel,\r\n  ProductCatalogSearchForm\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { IHttpPromiseCallbackArg, ProductModel, ProductSearchViewModel } from \"src/_api/cvApi.shared\";\r\n\r\nimport { useCatalogSortFactory } from \"src/_shared/customHooks/catalog/useCatalogSortFactory\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport Interweave from \"interweave\";\r\nimport useCustomCompareEffect from \"src/_shared/customHooks/useCustomCompareEffect\";\r\nimport { findCategoryByKey } from \"../_shared/common/helperFunctions\";\r\n\r\nexport const Catalog = (): JSX.Element =&gt; {\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n  const sortingFactory = useSortingFactory();\r\n  const ratingFactory = useRatingFactory();\r\n  const catalogSortFactory = useCatalogSortFactory();\r\n  const [products, setProducts] = useState<array<productmodel>&gt;([]);\r\n  const [allCategories, setCategories] = useState<array<categorymodel>&gt;([]);\r\n  const [catsByKey, setCatsByKey] = useState<record<string, categorymodel="">&gt;(undefined);\r\n  const [allAttributes, setAttributes] = useState<array<generalattributemodel>&gt;([]);\r\n  const [productSearchViewModel, setProductSearchViewModel] = useProductSearchViewModel();\r\n  const [currentCategory, setCurrentCategory] = useState<categorymodel>();\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const usingInfiniteScroll = cefConfig &amp;&amp; cefConfig.catalog.defaultPageSize === 0;\r\n  const showCatLandingPage = Boolean(cefConfig?.featureSet?.categoryLandingPages?.enabled);\r\n  const showCategoryCarousel = false;\r\n\r\n  useCustomCompareEffect(catalogSearch, productSearchViewModel?.Form, compareProductCatalogSearchForm);\r\n\r\n  useEffect(() =&gt; {\r\n    if (productSearchViewModel?.ResultIDs) {\r\n      getProductsByProductIDs();\r\n    }\r\n  }, [cefConfig, productSearchViewModel?.ResultIDs]);\r\n\r\n  useEffect(() =&gt; {\r\n    getCategories();\r\n    getAttributes();\r\n  }, []);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!allCategories || !catsByKey) {\r\n      return;\r\n    }\r\n    const customKey = productSearchViewModel?.Form?.Category?.split(\"|\")[1];\r\n    const currentCat: CategoryModel = catsByKey[customKey];\r\n    setCurrentCategory(currentCat);\r\n  }, [catsByKey, productSearchViewModel?.Form?.Category]);\r\n\r\n  const showCatalog = (): boolean =&gt; {\r\n    // Landing Page for Categories enabled + Category has been selected\r\n    // Making sure the depth is below the show level amount\r\n    if (showCatLandingPage &amp;&amp; currentCategory?.Children) {\r\n      const customKey = currentCategory?.CustomKey;\r\n      return findCategoryByKey(allCategories, customKey).depth + 1 &gt;= cefConfig?.catalog?.showCategoriesForLevelsUpTo;\r\n    }\r\n    if (productSearchViewModel?.Form?.AttributesAll\r\n      || productSearchViewModel?.Form?.Query\r\n      || productSearchViewModel?.Form?.Category) {\r\n      return true;\r\n    }\r\n    // Landing Page for Categories enabled and no category == Default /Catalog route to show landing page\r\n    if ( !currentCategory &amp;&amp; showCatLandingPage) {\r\n      return false;\r\n    }\r\n    return true;\r\n  };\r\n\r\n  function catalogSearch(): void {\r\n    if (!productSearchViewModel?.Form) {\r\n      return;\r\n    }\r\n    setRunning();\r\n    // Fix for categories that contain ampersands\r\n    if (productSearchViewModel?.Form?.Category) {\r\n      productSearchViewModel.Form.Category = productSearchViewModel.Form.Category.replaceAll(\"&amp;\", \"%26\");\r\n    }\r\n    cvApi.providers\r\n      .SearchProductCatalogWithProvider(productSearchViewModel.Form)\r\n      .then((res: IHttpPromiseCallbackArg<productsearchviewmodel>) =&gt; {\r\n        // @ts-ignore\r\n        if (res.data.LogID) {\r\n          // @ts-ignore\r\n          finishRunning(true, res.data.Message);\r\n          setProductSearchViewModel(productSearchViewModelI =&gt; {\r\n            productSearchViewModelI.ResultIDs = [];\r\n            return { ...productSearchViewModelI };\r\n          });\r\n          return;\r\n        }\r\n        if (usingInfiniteScroll &amp;&amp; productSearchViewModel.Form.Page !== 1) {\r\n          setProductSearchViewModel(productSearchViewModelI =&gt; {\r\n            productSearchViewModelI.ResultIDs = { ...res.data.ResultIDs };\r\n            return productSearchViewModelI;\r\n          });\r\n        } else {\r\n          setProductSearchViewModel(res.data);\r\n        }\r\n        if (!productSearchViewModel.ResultIDs?.length) {\r\n          finishRunning(true);\r\n          return;\r\n        }\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to search product catalog with provider\");\r\n      });\r\n  }\r\n\r\n  function getCategories(): void {\r\n    cvApi.categories\r\n      .GetCategoriesTwoLevelsFast()\r\n      .then(res =&gt; {\r\n        const cats = res.data;\r\n        setCategories(cats);\r\n        const newCatsByKey: Record<string, categorymodel=""> = {};\r\n        for (const cat of cats) {\r\n          newCatsByKey[cat.CustomKey] = cat;\r\n          if (cat.Children) {\r\n            for (const kit of cat.Children) {\r\n              newCatsByKey[kit.CustomKey] = kit;\r\n            }\r\n          }\r\n        }\r\n        setCatsByKey(newCatsByKey);\r\n        setProductSearchViewModel(productSearchViewModelI =&gt; ({\r\n          ...productSearchViewModelI,\r\n          Categories: allCategories\r\n        }));\r\n      });\r\n  }\r\n\r\n  function getAttributes(): void {\r\n    const promiserKey = `GetGeneralFilterAttributesForStorefront`;\r\n    promiser\r\n      .resolve(promiserKey, () =&gt; cvApi.attributes.GetGeneralFilterAttributesForStorefront())\r\n      .then(res =&gt; {\r\n        setAttributes(res.data?.Results);\r\n      });\r\n  }\r\n\r\n  async function getProductsByProductIDs() {\r\n    try {\r\n      // Get base products\r\n      if (!productSearchViewModel?.ResultIDs?.length) {\r\n        setProducts([]);\r\n        return;\r\n      }\r\n      setRunning();\r\n      const IDsToUse = usingInfiniteScroll\r\n        ? productSearchViewModel?.ResultIDs?.slice(\r\n            (productSearchViewModel?.Form?.Page - 1) * productSearchViewModel?.Form?.PageSetSize,\r\n            // eslint-disable-next-line @typescript-eslint/no-extra-parens, max-len\r\n            (productSearchViewModel?.Form?.Page - 1) * productSearchViewModel?.Form?.PageSetSize +\r\n              productSearchViewModel?.Form?.PageSetSize\r\n          )\r\n        : productSearchViewModel?.ResultIDs;\r\n      const promiserKey = `cvApi.products.GetProductsByIDs({ IDs: ${IDsToUse.join(\",\")} })`;\r\n      let newProducts = (await promiser.resolve(promiserKey, () =&gt; cvApi.products.GetProductsByIDs({ IDs: IDsToUse })))\r\n        ?.data as ProductModel[];\r\n      if (cefConfig.featureSet.inventory.enabled) {\r\n        // Assign inventory\r\n        newProducts = await inventoryFactory.bulkFactoryAssign(newProducts);\r\n      }\r\n      if (cefConfig.featureSet.pricing.enabled) {\r\n        // Assign prices\r\n        newProducts = await pricingFactory.bulkFactoryAssign(newProducts);\r\n      }\r\n      if (cefConfig.featureSet.reviews.enabled) {\r\n        // Assign reviews / ratings\r\n        newProducts = await ratingFactory.bulkFactoryAssign(newProducts);\r\n      }\r\n\r\n      // Assign sort order / defined\r\n      newProducts = sortingFactory.bulkFactoryAssign(newProducts);\r\n      newProducts = catalogSortFactory.sort(\r\n        productSearchViewModel.Form.Sort.toString(),\r\n        newProducts,\r\n        productSearchViewModel.HitsMetaDataHitScores\r\n      );\r\n      setProducts(usingInfiniteScroll ? [...products, ...newProducts] : newProducts);\r\n      finishRunning();\r\n    } catch (err) {\r\n      console.error(err);\r\n      finishRunning(true, \"unable to fetch products or product related data\");\r\n    }\r\n  }\r\n\r\n  const navigateToPage = (page: number): void =&gt;\r\n    setProductSearchViewModel({\r\n      ...productSearchViewModel,\r\n      Form: { ...productSearchViewModel?.Form, Page: page }\r\n    });\r\n\r\n  const onChangeQueryParam = <t,>(param: keyof ProductCatalogSearchForm, newValue: T): void =&gt; {\r\n    let form: ProductCatalogSearchForm = null;\r\n    try {\r\n      form = JSON.parse(JSON.stringify(productSearchViewModel?.Form));\r\n    } catch (err) {\r\n      return;\r\n    }\r\n    if (form[param] &amp;&amp; !newValue) {\r\n      delete form[param];\r\n    }\r\n    (form[param] as unknown) = newValue as T;\r\n    if (param === \"Category\") {\r\n      form[param] = form[param].replaceAll(\"&amp;\", \"%26\");\r\n    }\r\n    if (param !== \"Page\") {\r\n      form.Page = 1;\r\n    }\r\n    setProductSearchViewModel({\r\n      ...productSearchViewModel,\r\n      Form: form\r\n    });\r\n  };\r\n\r\n  const renderProductsView = (): React.ReactNode =&gt; {\r\n    const viewProps = {\r\n      allAttributes,\r\n      onScrollToBottom: () =&gt; {\r\n        if (!viewState.running) {\r\n          navigateToPage(productSearchViewModel?.Form.Page + 1);\r\n        }\r\n      },\r\n      parentRunning: viewState.running,\r\n      products,\r\n      useInfinite: usingInfiniteScroll\r\n    };\r\n    let element = <loadingwidget>;\r\n    if (!usingInfiniteScroll &amp;&amp; viewState.running) {\r\n      return element;\r\n    }\r\n    if (window.innerWidth &lt;= 768 &amp;&amp; productSearchViewModel.Form) {\r\n      productSearchViewModel.Form.PageFormat = \"list\";\r\n    }\r\n    switch (productSearchViewModel?.Form?.PageFormat) {\r\n      case \"grid\": {\r\n        element = <cataloggridview {...viewprops}="">;\r\n        break;\r\n      }\r\n      case \"table\": {\r\n        element = <catalogtableview {...viewprops}="">;\r\n        break;\r\n      }\r\n      case \"list\": {\r\n        element = <cataloglistview {...viewprops}="">;\r\n        break;\r\n      }\r\n      default: {\r\n        element = <cataloggridview {...viewprops}="">;\r\n        break;\r\n      }\r\n    }\r\n    return element;\r\n  };\r\n\r\n  if (viewState.running) {\r\n    return <loadingwidget overlay="">\r\n  }\r\n  return (\r\n    &lt;&gt;\r\n      <errorview error="{viewState.errorMessage}">\r\n      <row>\r\n        <div classname='\"col-tk-10' col-fk-9="" col-lg-12="" col-md="" col-sm="" col\"="" offset-fk-2="" offset-tk-1="">\r\n          <row>\r\n            <breadcrumbs\r\n categoriestree="{productSearchViewModel?.CategoriesTree}\r\n" currentcategory="{productSearchViewModel?.Form?.Category}\r\n" currentquery="{productSearchViewModel?.Form?.Query}\r\n" oncategoryclicked="{(cat:" string)=""> {\r\n                if (!viewState.running) {\r\n                  onChangeQueryParam(\"Category\", cat);\r\n                }\r\n              }}\r\n            /&gt;\r\n          </breadcrumbs\r\n></row>\r\n        </div>\r\n      </row>\r\n      <switch>\r\n        <route\r\n exact\r\n="" path='\"/catalog\"'>\r\n          {showCatalog() ? null : currentCategory ? (\r\n            <row classname='\"container' mx-auto\"="">\r\n              <categorylandingpageheader currentcategory="{currentCategory}">\r\n            </categorylandingpageheader></row>\r\n          ) : null}\r\n          {showCategoryCarousel\r\n            &amp;&amp; showCatLandingPage\r\n            &amp;&amp; Boolean(currentCategory?.Children?.length)\r\n            &amp;&amp; showCatalog()\r\n            &amp;&amp; (\r\n            <row>\r\n              <subcategorycarousel<categorymodel>\r\n                items={currentCategory.Children}\r\n                getJSXForItem={(cat: CategoryModel) =&gt; (\r\n                  <button\r\n =="" \"bold\"="" carousel-btn\"\r\n="" classname='\"w-100' fontweight:="" key="{cat?.CustomKey}\r\n" onclick="{()" style="{{" variant='\"outline-secondary\"\r\n' }}\r\n=""> onChangeQueryParam(\"Category\", `${cat.Name}|${cat.CustomKey}`)}&gt;\r\n                    <card\r\n @ts-ignore\r\n="" \"15rem\"\r\n="" \"categories\")})`,\r\n="" \"center\",\r\n="" \"cover\",\r\n="" \"no-repeat\",\r\n="" `url(${corsimagelink(cefconfig,="" backgroundimage:="" backgroundposition:="" backgroundrepeat:="" backgroundsize:="" cat?.primaryimagefilename,="" height:="" style="{{\r\n" }}\r\n="">\r\n                    <span classname='\"text-secondary' o-90\"="" px-2="" py-1="" rounded="">{cat?.Name}</span>\r\n                  \r\n                )}\r\n              /&gt;\r\n            </card\r\n></button\r\n></subcategorycarousel<categorymodel></row>\r\n          )}\r\n          <row>\r\n            <col\r\n classname='\"col-tk-10' col-fk-8="" lg="{12}\r\n" md\r\n="" mt-4\"="" offset-fk-2="" offset-tk-1="" sm\r\n="" xs\r\n="">\r\n              <row>\r\n                {showCatalog() &amp;&amp; (\r\n                  <col\r\n classname='\"col-tk-2' col-fk-2\"="" lg="{3}\r\n" md="{4}\r\n" sm="{12}\r\n">\r\n                    <row classname='\"clarity-filters\"'>\r\n                      <catalogfilters\r\n allattributes="{allAttributes}\r\n" allcategories="{allCategories}\r\n" multifiltermode='\"multi-all\"\r\n' productsearchviewmodel="{productSearchViewModel}\r\n" setproductsearchviewmodel="{setProductSearchViewModel}\r\n">\r\n                    </catalogfilters\r\n></row>\r\n                    {showCatLandingPage &amp;&amp; currentCategory &amp;&amp; (\r\n                      <row>\r\n                        <col\r\n md="{12}" sm="{6}\r\n" xs="{12}\r\n">\r\n                          <categorylandingpagesidebar currentcategory="{currentCategory}">\r\n                        \r\n                      </categorylandingpagesidebar></col\r\n></row>\r\n                    )}\r\n                  \r\n                )}\r\n                <col\r\n 12}\r\n="" 8="" 9="" :="" ?="" classname='\"col-tk-10' col-fk-10\"="" lg="{showCatalog()" md="{showCatalog()" sm="{12}\r\n">\r\n                  {showCatLandingPage &amp;&amp; currentCategory?.Description &amp;&amp; (\r\n                    <row>\r\n                      <col\r\n classname='\"cat-description\"' xs="{12}\r\n">\r\n                        <interweave content="{currentCategory?.Description}">\r\n                      \r\n                    </interweave></col\r\n></row>\r\n                  )}\r\n                  <row>\r\n                    \r\n                      {(productSearchViewModel?.Form?.Query?.length ||\r\n                        productSearchViewModel?.Form?.Category?.length) &amp;&amp;\r\n                      showCatalog() ? (\r\n                        <h1>\r\n                          {t(\"ui.storefront.catalog.ShopResultsFor\")}{\" \"}\r\n                          <strong data-sid='\"CategoryTitleText\"'>\r\n                            {productSearchViewModel?.Form?.Query?.length\r\n                              ? productSearchViewModel?.Form?.Query\r\n                              : productSearchViewModel?.Form?.Category.split(\"|\")[0]}\r\n                          </strong>\r\n                        </h1>\r\n                      ) : null}\r\n                    \r\n                  </row>\r\n                  {showCatalog() &amp;&amp; (\r\n                    <row classname='\"justify-content-between' mb-2\"="">\r\n                      <col\r\n :="" <="768" ?="" \"\"}="" \"d-none\"="" \"left\"="" classname="{window.innerWidth" lg="{6}\r\n" md="{4}\r\n" sm="{4}\r\n" style="{{" textalign:="" xs="{12}\r\n" }}\r\n="">\r\n                        <catalogformatswitch\r\n onformatbtnclicked="{(format:" pageformat="{productSearchViewModel?.Form?.PageFormat}\r\n" string)=""> {\r\n                            if (!viewState.running) {\r\n                              onChangeQueryParam<string>(\"PageFormat\", format);\r\n                            }\r\n                          }}\r\n                        /&gt;\r\n                      \r\n                      <col\r\n classname='\"xs-text-end' lg="{2}\r\n" lg-text-start\"="" md="{4}\r\n" md-text-center="" sm="{4}\r\n" sm-text-center="" xs="{6}\r\n">\r\n                        {!usingInfiniteScroll &amp;&amp; (\r\n                          <catalogsizeswitch\r\n number)="" onpagesizeclicked="{(size:" pagesize="{productSearchViewModel?.Form?.PageSize}\r\n"> {\r\n                              if (!viewState.running) {\r\n                                onChangeQueryParam<number>(\"PageSize\", size);\r\n                              }\r\n                            }}\r\n                          /&gt;\r\n                        )}\r\n                      \r\n                      <col\r\n classname='\"xs-text-center' lg="{3}\r\n" lg-text-start\"="" md="{4}\r\n" md-text-end="" sm="{4}\r\n" sm-text-end="" xs="{12}\r\n">\r\n                        <catalogsortbyswitch\r\n onsortbychanged="{(sort:" sort="{productSearchViewModel?.Form?.Sort}\r\n" string)=""> {\r\n                            if (!viewState.running) {\r\n                              onChangeQueryParam<string>(\"Sort\", sort);\r\n                            }\r\n                          }}\r\n                        /&gt;\r\n                      \r\n                    </string></catalogsortbyswitch\r\n></col\r\n></number></catalogsizeswitch\r\n></col\r\n></string></catalogformatswitch\r\n></col\r\n></row>\r\n                  )}\r\n                  {viewState?.errorMessage ? (\r\n                    <row classname='\"my-2\"'>\r\n                      \r\n                        <errorview error="{viewState.errorMessage}">\r\n                      \r\n                    </errorview></row>\r\n                  ) : null}\r\n                  {showCatLandingPage &amp;&amp; !showCatalog() &amp;&amp; (\r\n                    <categorylandingpageview\r\n allcategories="{allCategories}\r\n" currentcategory="{currentCategory}\r\n" oncategoryclicked="{(cat:" string)=""> {\r\n                        if (!viewState.running) {\r\n                          onChangeQueryParam(\"Category\", cat);\r\n                        }\r\n                      }}\r\n                    /&gt;\r\n                  )}\r\n                  {showCatalog() &amp;&amp; renderProductsView()}\r\n                  {!usingInfiniteScroll &amp;&amp;\r\n                    showCatalog() &amp;&amp;\r\n                    products &amp;&amp;\r\n                    Boolean(products.length) &amp;&amp;\r\n                    productSearchViewModel &amp;&amp; (\r\n                      <catalogpaginationcontrols\r\n navigatetopage="{navigateToPage}\r\n" page="{productSearchViewModel.Form.Page}\r\n" pagesize="{productSearchViewModel.Form.PageSize}\r\n" total="{productSearchViewModel.Total}\r\n" totalpages="{productSearchViewModel.TotalPages}\r\n">\r\n                    )}\r\n                  {showCatLandingPage &amp;&amp; currentCategory &amp;&amp; (\r\n                    <categorylandingpagefooter currentcategory="{currentCategory}">\r\n                  )}\r\n                \r\n              </categorylandingpagefooter></catalogpaginationcontrols\r\n></categorylandingpageview\r\n></col\r\n></col\r\n></row>\r\n            \r\n          </col\r\n></row>\r\n        \r\n        <route path='\"/catalog/compare\"'>\r\n          <compare>\r\n        </compare></route>\r\n      </route\r\n></switch>\r\n    \r\n  );\r\n};\r\n","import { CategoryModel } from \"src/_api/cvApi.shared\";\r\n\r\nexport function findCategoryByKey(\r\n  categories: CategoryModel[],\r\n  customKey: string\r\n): { category: CategoryModel | null; depth: number } {\r\n  let result: { category: CategoryModel | null; depth: number } = {\r\n    category: null,\r\n    depth: 0\r\n  };\r\n  const traverseCategories = (cats: CategoryModel[], depth: number): void =&gt; {\r\n    for (let i = 0; i &lt; cats.length; i++) {\r\n      const category = cats[i];\r\n      if (category.CustomKey === customKey) {\r\n        result = { category, depth };\r\n        return;\r\n      }\r\n      if (category.Children) {\r\n        traverseCategories(category.Children, depth + 1);\r\n      }\r\n    }\r\n  };\r\n  traverseCategories(categories, 0);\r\n  return result;\r\n}\r\n","/** @format */\r\n\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button } from \"react-bootstrap\";\r\n\r\ninterface ICheckoutStepsHeaderProps {\r\n  valid: boolean;\r\n  titleKey: string;\r\n  index: number;\r\n  allowEdit?: boolean;\r\n  onEditClicked?: () =&gt; void;\r\n  isActiveStep?: boolean;\r\n}\r\n\r\nexport const CheckoutStepsHeader = (props: ICheckoutStepsHeaderProps): JSX.Element =&gt; {\r\n  const { valid, titleKey, index, allowEdit, onEditClicked, isActiveStep } = props;\r\n  const { t } = useTranslation();\r\n\r\n  let textClass = \"text-body\";\r\n\r\n  if (valid) {\r\n    textClass = \"text-success\";\r\n  } else if (isActiveStep) {\r\n    textClass = \"text-primary\";\r\n  }\r\n\r\n  return (\r\n    <div align-items-end\"="" classname='\"d-flex' justify-content-between="">\r\n      <h5>\r\n        <i :="" ?="" `${textclass}="" classname="{valid" fa-check-square`="" fa-square`}="" fal="">\r\n         \r\n        <span classname="{textClass}">\r\n          <span data-sid='\"txtCheckoutStepHeader\"'>\r\n            Step {index}. {t(titleKey)}\r\n          </span>\r\n        </span>\r\n      </i></h5><i :="" ?="" `${textclass}="" classname="{valid" fa-check-square`="" fa-square`}="" fal="">\r\n      {allowEdit\r\n        &amp;&amp; <button data-sid='\"btnEditCheckoutStep\"\r\n' onclick="{onEditClicked}" variant='\"outline-secondary\"\r\n'>\r\n          {t(\"ui.storefront.common.Edit\")}\r\n        </button>\r\n      }\r\n    </i></div><i :="" ?="" `${textclass}="" classname="{valid" fa-check-square`="" fa-square`}="" fal="">\r\n  );\r\n};\r\n","/* eslint-disable max-classes-per-file */\r\n/**\r\n * @file React/src/_shared/customHooks/useCheckoutStepFactory.tsx\r\n * @author Copyright (c) 2020-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Checkout Step Factory hook\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { CartModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { CEFConfig, IPurchaseStepConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ServiceStrings } from \"../ServiceStrings\";\r\n\r\nexport interface IPurchaseStep extends IPurchaseStepConfig {\r\n  // Properties\r\n    readonly name: string;\r\n  /**\r\n   * The text that would be on the button of the preceding step which would lead\r\n   * to this step\r\n   * @virtual\r\n   * @memberof IPurchaseStep\r\n   */\r\n  readonly continueText?: string;\r\n  readonly continueTextKey: string;\r\n  invalid: boolean;\r\n  complete: boolean;\r\n  readonly titleKey: string;\r\n  readonly order: number;\r\n  readonly index: number;\r\n  readonly templateURL: string;\r\n  readonly isEditable?: boolean;\r\n  component: Element | JSX.Element;\r\n  building: { [cartType: string]: boolean };\r\n  // Functions\r\n  /**\r\n   * By default, no requirements should be checked, and just return a promise with\r\n   * value of true\r\n   * @virtual\r\n   * @param {CartModel} cart - The cart which may have data that affects\r\n   *                                   how the step is validated\r\n   * @returns {Promise<boolean>}\r\n   * @memberof IPurchaseStep\r\n   */\r\n  canEnable(cart: CartModel): Promise<boolean>;\r\n  /**\r\n   * By default, no action is taken, and just return a promise with value of true\r\n   * @virtual\r\n   * @param {CartModel} cart - The cart which may have data that affects\r\n   *                                   how the step is validated\r\n   * @returns {Promise<boolean>}\r\n   * @memberof IPurchaseStep\r\n   */\r\n  initialize(cart: CartModel): Promise<boolean>;\r\n  /**\r\n   * By default, no actions should be required, but if the step needs to do\r\n   * something as the user enters the step, the logic would be in here\r\n   * @virtual\r\n   * @param {string} cartType - The type name of the cart this triggers for\r\n   * @returns {Promise<boolean>}\r\n   * @memberof IPurchaseStep\r\n   */\r\n  activate(cartType: string): Promise<boolean>;\r\n  /**\r\n   * By default, no requirements should be checked, and just return a promise with\r\n   * value of true\r\n   * @param {CartModel} cart - The cart which may have data that affects\r\n   *                                   how the step is validated\r\n   * @returns {Promise<boolean>}\r\n   * @memberof IPurchaseStep\r\n   */\r\n  validate(cart: CartModel): Promise<boolean>;\r\n  submit(cartType: string): Promise<boolean>;\r\n  // Events\r\n  // <none>\r\n}\r\n\r\nexport abstract class PurchaseStep implements IPurchaseStep {\r\n  // Properties\r\n  building: { [cartType: string]: boolean } = {};\r\n\r\n  index: number;\r\n\r\n  show: boolean;\r\n\r\n  showButton: boolean;\r\n\r\n  abstract get name(): string;\r\n\r\n  private _invalid = true;\r\n\r\n  get invalid(): boolean {\r\n    // eslint-disable-next-line no-underscore-dangle\r\n    return this._invalid;\r\n  }\r\n\r\n  set invalid(newValue: boolean) {\r\n    // eslint-disable-next-line no-underscore-dangle\r\n    this._invalid = newValue;\r\n  }\r\n\r\n  complete: boolean = false;\r\n\r\n  get continueTextKey(): string {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.purchase.sections[this.name].continueTextKey;\r\n  }\r\n\r\n  get titleKey(): string {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.purchase.sections[this.name].titleKey;\r\n  }\r\n\r\n  get order(): number {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.purchase.sections[this.name].order;\r\n  }\r\n\r\n  get templateURL(): string {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.purchase.sections[this.name].templateURL;\r\n  }\r\n\r\n  // Functions\r\n\r\n  canEnable(cart: CartModel): Promise<boolean> {\r\n    const debug = `PurchaseStep.canEnable(cart: \"${cart &amp;&amp; cart.TypeName}\")`;\r\n    console.debug(debug);\r\n    if (!this.name) {\r\n      console.debug(`${debug} No name yet`);\r\n      return Promise.reject(new Error(`${debug} does not have a 'name' yet`));\r\n    }\r\n    // Do Nothing\r\n    return Promise.resolve(this.cefConfig.purchase.sections[this.name]?.show);\r\n  }\r\n\r\n  initialize(cart: CartModel): Promise<boolean> {\r\n    console.debug(`PurchaseStep.initialize(cart: \"${cart &amp;&amp; cart.TypeName}\")`);\r\n    this.building[cart.TypeName] = true;\r\n    this.building[cart.TypeName] = false;\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  activate(cartType: string): Promise<boolean> {\r\n    console.debug(`PurchaseStep.activate(cartType: \"${cartType}\")`);\r\n    // Do Nothing\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  validate(cart: CartModel): Promise<boolean> {\r\n    console.debug(`PurchaseStep.validate(cart: \"${cart &amp;&amp; cart.TypeName}\")`);\r\n    // Do Nothing\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  submit(cartType: string): Promise<boolean> {\r\n    console.debug(`PurchaseStep.submit(cartType: \"${cartType}\")`);\r\n    // Do Nothing\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  protected fullReject(cartType: string, reject: (...args: any[]) =&gt; void | any, toReturn: unknown): void {\r\n    console.debug(`PurchaseStep.fullReject(cartType: \"${cartType}\", reject, toReturn)`);\r\n    reject(toReturn);\r\n    this.building[cartType] = false;\r\n  }\r\n\r\n  // Events\r\n  // <none>\r\n\r\n  // Constructor\r\n  // eslint-disable-next-line no-empty-function, no-useless-constructor\r\n  constructor(protected readonly cefConfig: CEFConfig, public readonly component: Element | JSX.Element) { }\r\n}\r\n\r\nexport interface ICheckoutStepFactory {\r\n  getPurchaseSteps: () =&gt; IPurchaseStep[];\r\n  getSubmitQuoteSteps: () =&gt; IPurchaseStep[];\r\n}\r\n\r\nclass CheckoutStepFactory implements ICheckoutStepFactory {\r\n  getPurchaseSteps = (): IPurchaseStep[] =&gt; {\r\n    if (!this.cefConfig) {\r\n      console.warn(\"Missing cefConfig in useCheckoutStepFactory\");\r\n      return [];\r\n    }\r\n    return Object.keys(this.cefConfig.purchase.sections)\r\n      .reduce((steps, current) =&gt; {\r\n        const purchaseStepConfig = this.cefConfig.purchase.sections[current];\r\n        if (this.cefConfig.debug) {\r\n          console.log(\r\n            \"cefConfig.purchase.sections\\n\",\r\n            this.cefConfig.purchase.sections,\r\n            \"\\n\",\r\n            \"current\\n\",\r\n            current,\r\n            \"\\n\",\r\n            \"ServiceStrings.checkout.steps[current]\\n\",\r\n            ServiceStrings.checkout.steps[current],\r\n            \"\\n\",\r\n            \"purchaseStepConfig\\n\",\r\n            purchaseStepConfig\r\n          );\r\n        }\r\n        if (purchaseStepConfig &amp;&amp; purchaseStepConfig.show) {\r\n          steps.push(purchaseStepConfig);\r\n        }\r\n        return steps;\r\n      }, [])\r\n      .sort((a: IPurchaseStep, b: IPurchaseStep): number =&gt; a.order - b.order);\r\n  };\r\n\r\n  getSubmitQuoteSteps = (): IPurchaseStep[] =&gt; {\r\n    if (!this.cefConfig?.submitQuote?.sections) {\r\n      console.warn(\"Missing cefConfig in useCheckoutStepFactory\");\r\n      return [];\r\n    }\r\n    return Object.keys(this.cefConfig.submitQuote.sections)\r\n      .reduce((steps, current) =&gt; {\r\n        const purchaseStepConfig = this.cefConfig.submitQuote.sections[current];\r\n        if (this.cefConfig.debug) {\r\n          console.log(\r\n            \"cefConfig.submitQuote.sections\\n\",\r\n            this.cefConfig.submitQuote.sections,\r\n            \"\\n\",\r\n            \"current\\n\",\r\n            current,\r\n            \"\\n\",\r\n            \"ServiceStrings.checkout.steps[current]\\n\",\r\n            ServiceStrings.checkout.steps[current],\r\n            \"\\n\",\r\n            \"purchaseStepConfig\\n\",\r\n            purchaseStepConfig\r\n          );\r\n        }\r\n        if (purchaseStepConfig &amp;&amp; purchaseStepConfig.show) {\r\n          steps.push(purchaseStepConfig);\r\n        }\r\n        return steps;\r\n      }, [])\r\n      .sort((a: IPurchaseStep, b: IPurchaseStep): number =&gt; a.order - b.order);\r\n  };\r\n\r\n  // eslint-disable-next-line no-useless-constructor\r\n  constructor(private readonly cefConfig: CEFConfig) {\r\n    // Do nothing\r\n  }\r\n}\r\n\r\nexport const useCheckoutStepFactory = (): ICheckoutStepFactory =&gt; {\r\n  const [ checkoutStepFactory, setCheckoutStepFactory ] = useState(null);\r\n  const cefConfig = useCefConfig();\r\n  useEffect(() =&gt; {\r\n    if (cefConfig === null) {\r\n      return;\r\n    }\r\n    // New up the class from above only once\r\n    const instance = new CheckoutStepFactory(cefConfig);\r\n    setCheckoutStepFactory(instance);\r\n  }, [ cefConfig ]);\r\n  return checkoutStepFactory;\r\n};\r\n","/** @format */\r\n\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { LoginForm } from \"src/_shared/forms/LoginForm\";\r\nimport { ICheckoutMethodStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\nexport const CheckoutMethodStep = (props: ICheckoutMethodStepProps): JSX.Element =&gt; {\r\n  const { onCompleteCheckoutMethodStep } = props;\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n\r\n  const currentUser = useCurrentUser();\r\n\r\n  return (\r\n    <div classname='\"lg-w-50' mx-auto\"="" w-100="">\r\n      <row>\r\n        <loginform\r\n onloginsuccess="{onCompleteCheckoutMethodStep}\r\n" passwordfieldid='\"pwCheckoutLoginPassword\"\r\n' signinleft="{true}\r\n" usernamefieldid='\"txtCheckoutLoginUsername\"\r\n'>\r\n        {cefConfig?.purchase.allowGuest &amp;&amp; !props.forceNoGuestCheckout\r\n        &amp;&amp; \r\n          <div classname='\"d-flex\"'>\r\n            <button =="" id='\"continueAsGuest\"\r\n' onclick="{()" variant='\"outline-secondary\"\r\n'> onCompleteCheckoutMethodStep(\"guest\")}\r\n              disabled={!currentUser || currentUser.ID &gt; 0}&gt;\r\n              {t(\"ui.storefront.checkout.views.checkoutMethod.continueAsGuest\")}\r\n            </button>\r\n          </div>\r\n        }\r\n      </loginform\r\n></row>\r\n    </div>\r\n  );\r\n};\r\n","import { Table } from \"react-bootstrap\";\r\nimport \"src/Dashboard/AddressBook/AddressBlock.module.scss\";\r\nimport { AddressModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\nexport interface IAddressBlockContact {\r\n  FullName?: string;\r\n  FirstName?: string;\r\n  LastName?: string;\r\n  Phone1?: string;\r\n  Phone2?: string;\r\n  Phone3?: string;\r\n  Fax1?: string;\r\n  Email1?: string;\r\n}\r\n\r\ninterface IAddressBlockProps {\r\n  address: AddressModel;\r\n  contact?: IAddressBlockContact;\r\n  hideCompany?: boolean;\r\n  hidePostalCode?: boolean;\r\n  hideCountryKey?: boolean;\r\n  hideName?: boolean;\r\n  hideFirstName?: boolean;\r\n  hideLastName?: boolean;\r\n  hideStreet1?: boolean;\r\n  hideStreet2?: boolean;\r\n  hideStreet3?: boolean;\r\n  hideCity?: boolean;\r\n  hideRegionName?: boolean;\r\n  hidePhone1?: boolean;\r\n  hidePhone2?: boolean;\r\n  hidePhone3?: boolean;\r\n  hideFax1?: boolean;\r\n  hideEmail1?: boolean;\r\n}\r\n\r\nexport const AddressBlock = (props: IAddressBlockProps): JSX.Element =&gt; {\r\n  const {\r\n    address,\r\n    contact,\r\n    hideCompany,\r\n    hidePostalCode,\r\n    hideCountryKey,\r\n    hideName,\r\n    hideFirstName,\r\n    hideLastName,\r\n    hideStreet1,\r\n    hideStreet2,\r\n    hideStreet3,\r\n    hideCity,\r\n    hideRegionName,\r\n    hidePhone1,\r\n    hidePhone2,\r\n    hidePhone3,\r\n    hideFax1,\r\n    hideEmail1\r\n  } = props;\r\n\r\n  const { Company, Street1, Street2, Street3, City, RegionName, PostalCode, CountryKey } = address;\r\n\r\n  return (\r\n    \r\n      \r\n        {!hideName &amp;&amp; contact &amp;&amp; (contact.FullName || contact.FirstName)\r\n          &amp;&amp; \r\n            \r\n            \r\n          \r\n        }\r\n        {!hideCompany &amp;&amp; Company\r\n          &amp;&amp; \r\n            \r\n            \r\n          \r\n        }\r\n        {!hideStreet1 &amp;&amp; Street1\r\n          &amp;&amp; \r\n            \r\n            \r\n          \r\n        }\r\n        {!hideStreet2 &amp;&amp; Street2\r\n          &amp;&amp; \r\n            \r\n            \r\n          \r\n        }\r\n        {!hideStreet3 &amp;&amp; Street3\r\n          &amp;&amp; \r\n            \r\n            \r\n          \r\n        }\r\n        {!hideCity &amp;&amp; !hideRegionName &amp;&amp; !hidePostalCode\r\n          &amp;&amp; \r\n            \r\n            \r\n          \r\n        }\r\n        {!hideCountryKey &amp;&amp; CountryKey\r\n          &amp;&amp; \r\n            \r\n            \r\n          \r\n        }\r\n        {contact\r\n          &amp;&amp; &lt;&gt;\r\n            {!hidePhone1 &amp;&amp; contact.Phone1\r\n              &amp;&amp; \r\n                \r\n                \r\n              \r\n            }\r\n            {!hidePhone2 &amp;&amp; contact.Phone2\r\n              &amp;&amp; \r\n                \r\n                \r\n              \r\n            }\r\n            {!hidePhone3 &amp;&amp; contact.Phone3\r\n              &amp;&amp; \r\n                \r\n                \r\n              \r\n            }\r\n            {!hideFax1 &amp;&amp; contact.Fax1\r\n              &amp;&amp; \r\n                \r\n                \r\n              \r\n            }\r\n            {!hideEmail1 &amp;&amp; contact.Email1\r\n              &amp;&amp; \r\n                \r\n                \r\n              \r\n            }\r\n          \r\n        }\r\n      \r\n    <table borderless\r\n="" classname='\"addressBlockTable\"' size='\"sm\"\r\n'><tbody><tr><td>\r\n              <i classname='\"fal' fa-fw="" fa-lg="" fa-map-marker-alt\"="">\r\n            </i></td><td>\r\n              <span data-sid='\"txtContactAddressName\"'>\r\n                {!hideFirstName &amp;&amp; contact.FirstName ? contact.FirstName : \"\"}\r\n                {!hideLastName\r\n                  &amp;&amp; `${!hideFirstName &amp;&amp; contact.FirstName ? \" \" : \"\"}${contact.LastName ?? \"\"}`}\r\n                {!hideFirstName\r\n                &amp;&amp; !hideLastName\r\n                &amp;&amp; !contact.FirstName\r\n                &amp;&amp; !contact.LastName\r\n                &amp;&amp; contact.FullName\r\n                  ? contact.FullName\r\n                  : null}\r\n              </span>\r\n            </td></tr><tr><td></td><td id='\"txtContactAddressCompany\"'>{Company}</td></tr><tr><td></td><td id='\"txtContactAddressStreet1\"'>{Street1}</td></tr><tr><td></td><td id='\"txtContactAddressStreet2\"'>{Street2}</td></tr><tr><td id='\"txtContactAddressStreet3\"'></td><td>{Street3}</td></tr><tr><td></td><td id='\"txtContactAddressRegion\"'>\r\n              {hideCity ? null : City}\r\n              {!hideCity &amp;&amp; City ? \",\" : \"\"} {hideRegionName ? null : RegionName} \r\n              {hidePostalCode ? null : PostalCode}\r\n            </td></tr><tr><td></td><td id='\"txtContactAddressCountry\"'>{CountryKey}</td></tr><tr><td>\r\n                  <i classname='\"fal' fa-fw="" fa-lg\"="" fa-phone="">\r\n                </i></td><td>\r\n                  <span data-sid='\"telContactAddressPhone1\"'>{contact.Phone1}</span>\r\n                </td></tr><tr><td>\r\n                  <i classname='\"fal' fa-fw="" fa-lg\"="" fa-phone="">\r\n                </i></td><td>\r\n                  <span data-sid='\"telContactAddressPhone2\"'>{contact.Phone2}</span>\r\n                </td></tr><tr><td>\r\n                  <i classname='\"fal' fa-fw="" fa-lg\"="" fa-phone="">\r\n                </i></td><td>\r\n                  <span data-sid='\"telContactAddressPhone3\"'>{contact.Phone3}</span>\r\n                </td></tr><tr><td>\r\n                  <i classname='\"fal' fa-fax="" fa-fw="" fa-lg\"="">\r\n                </i></td><td>\r\n                  <span data-sid='\"telContactAddressFax1\"'>{contact.Fax1}</span>\r\n                </td></tr><tr><td>\r\n                  <i classname='\"fal' fa-at="" fa-fw="" fa-lg\"="">\r\n                </i></td><td>\r\n                  <span classname='\"contactAddress_email\"' data-sid='\"emContactAddressEmail1\"'>\r\n                    {contact.Email1}\r\n                  </span>\r\n                </td></tr></tbody></table>\r\n  );\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { faBriefcase, faCity, faRoad } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { SelectFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport {\r\n  AccountContactModel,\r\n  CountryModel,\r\n  RegionModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\nfunction makeKey<k extends="" is="" string="" string,="" t="">(key: K, type: T, idSuffix: IS) {\r\n  return `${key + type}_${idSuffix}` as `${K}${T}_${IS}`;\r\n}\r\n\r\ninterface INewAddressFormProps {\r\n  type: \"billing\" | \"shipping\";\r\n  idSuffix?: string;\r\n  accountContact?: AccountContactModel;\r\n  onConfirm: (newAddressFormData: AccountContactModel) =&gt; void;\r\n  onCancel?: Function;\r\n  showCancel?: boolean;\r\n  submitBtnKey?: string;\r\n}\r\n\r\n// TODO: add additional street and phone number fields\r\nexport const NewAddressForm = (props: INewAddressFormProps): JSX.Element =&gt; {\r\n  const { type, idSuffix, accountContact, onConfirm, onCancel, showCancel, submitBtnKey } = props;\r\n\r\n  const [ countries, setCountries ] = useState<countrymodel[]>([]);\r\n  const [ regions, setRegions ] = useState<regionmodel[]>([]);\r\n  const [ phoneFieldsAmount, setPhoneFieldsAmount ] = useState<number>(\r\n    accountContact?.Slave?.Phone3\r\n      ? 3\r\n      : accountContact?.Slave?.Phone2\r\n        ? 2\r\n        : 1\r\n  );\r\n  const [ streetFieldsAmount, setStreetFieldsAmount ] = useState<number>(\r\n    accountContact?.Slave?.Address?.Street3\r\n      ? 3\r\n      : accountContact?.Slave?.Address?.Street2\r\n        ? 2\r\n        : 1\r\n  );\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const currentUser = useCurrentUser();\r\n  const typePascalCased = type ? type[0].toUpperCase() + type.substr(1) : \"\";\r\n\r\n  const customKeyKey = makeKey(\"txtKeyRegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const firstNameKey = makeKey(\"txtFirstNameRegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const lastNameKey = makeKey(\"txtLastNameRegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const email1Key = makeKey(\"emEmail1RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const companyKey = makeKey(\"txtCompanyRegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const countryIdKey = makeKey(\"ddlCountryIDRegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const phone1Key = makeKey(\"telPhone1RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const phone2Key = makeKey(\"telPhone2RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const phone3Key = makeKey(\"telPhone3RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const street1Key = makeKey(\"txtStreet1RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const street2Key = makeKey(\"txtStreet2RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const street3Key = makeKey(\"txtStreet3RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const fax1Key = makeKey(\"telFax1RegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const cityKey = makeKey(\"txtCityRegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const regionIdKey = makeKey(\"ddlRegionIDRegistrationAddressBook\", typePascalCased, idSuffix);\r\n  const zipKey = makeKey(\"txtZipRegistrationAddressBook\", typePascalCased, idSuffix);\r\n\r\n  const defaultValues = {\r\n    [cityKey]: accountContact?.Slave.Address?.City ?? \"\",\r\n    [companyKey]: accountContact?.Slave.Address?.Company ?? \"\",\r\n    [countryIdKey]: accountContact?.Slave.Address?.Country?.Name ?? t(\"ui.storefront.common.Country.SelectA\"),\r\n    [customKeyKey]: accountContact?.Slave.Address.CustomKey ?? \"\",\r\n    [email1Key]: accountContact?.Slave.Email1 ?? \"\",\r\n    [fax1Key]: accountContact?.Slave.Fax1 ?? \"\",\r\n    [firstNameKey]: accountContact?.Slave.FirstName ?? \"\",\r\n    [lastNameKey]: accountContact?.Slave.LastName ?? \"\",\r\n    [phone1Key]: accountContact?.Slave.Phone1 ?? \"\",\r\n    [phone2Key]: accountContact?.Slave.Phone2 ?? \"\",\r\n    [phone3Key]: accountContact?.Slave.Phone3 ?? \"\",\r\n    [regionIdKey]: accountContact?.Slave.Address?.Region?.CustomKey\r\n      ?? t(\"ui.storefront.common.geography.RegionStateProvince.SelectA\"),\r\n    [street1Key]: accountContact?.Slave.Address?.Street1 ?? \"\",\r\n    [street2Key]: accountContact?.Slave.Address?.Street2 ?? \"\",\r\n    [street3Key]: accountContact?.Slave.Address?.Street3 ?? \"\",\r\n    [zipKey]: accountContact?.Slave.Address?.PostalCode ?? \"\"\r\n  };\r\n\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    watch,\r\n    getValues,\r\n    setValue,\r\n    formState,\r\n    trigger,\r\n    reset\r\n  } = useForm&lt;{ [key: string]: string }&gt;({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\",\r\n    defaultValues: { ...defaultValues }\r\n  });\r\n\r\n  async function getGlobalizationData() {\r\n    setRunning();\r\n    try {\r\n      const countryData = await cvApi.geography.GetCountries();\r\n      const regionData = await cvApi.geography.GetRegions();\r\n      setCountries(countryData.data.Results);\r\n      setRegions(regionData.data.Results);\r\n      if (!accountContact?.Slave?.Address?.Country?.Name) {\r\n        setValue(countryIdKey, countryData.data.Results[0].Name);\r\n      }\r\n      finishRunning();\r\n    } catch (err) {\r\n      finishRunning(true, err as any);\r\n    }\r\n  }\r\n\r\n  useEffect(() =&gt; {\r\n    getGlobalizationData();\r\n    return () =&gt; {\r\n      setCountries([]);\r\n      setRegions([]);\r\n    };\r\n  }, []);\r\n\r\n  const countryValue = watch(countryIdKey);\r\n  const regionValue = watch(regionIdKey);\r\n  const countryValues = getValues(countryIdKey);\r\n  const regionValues = getValues(regionIdKey);\r\n\r\n  useEffect(() =&gt; {\r\n    // Address is null in first render\r\n    reset(defaultValues);\r\n  }, [ accountContact ]);\r\n\r\n  useEffect(() =&gt; {\r\n    // Reset validation if the country or region change\r\n    trigger([ countryIdKey, regionIdKey ]);\r\n  }, [ trigger, countryValues, regionValues ]);\r\n\r\n  const handleConfirm = (data: { [key: string]: string }): void =&gt; {\r\n    const key: string = data[customKeyKey];\r\n    const firstName: string = data[firstNameKey];\r\n    const lastName: string = data[lastNameKey];\r\n    const email1: string = data[email1Key];\r\n    const company: string = data[companyKey];\r\n    const countryId: string = data[countryIdKey];\r\n    const phone1: string = data[phone1Key];\r\n    const phone2: string = data[phone2Key];\r\n    const phone3: string = data[phone3Key];\r\n    const street1: string = data[street1Key];\r\n    const street2: string = data[street2Key];\r\n    const street3: string = data[street3Key];\r\n    const fax1: string = data[fax1Key];\r\n    const city: string = data[cityKey];\r\n    const regionId: string = data[regionIdKey];\r\n    const zip: string = data[zipKey];\r\n    const selectedCountry = countries.find(\r\n      c =&gt; c.CustomKey === countryId\r\n        || c.Name === countryId\r\n    );\r\n    const selectedRegion = regions.find(\r\n      r =&gt; r.CustomKey === regionId\r\n        || r.Name === regionId\r\n    );\r\n    const userAddressData: AccountContactModel = {\r\n      Active: true,\r\n      CreatedDate: accountContact &amp;&amp; accountContact.CreatedDate ? accountContact.CreatedDate : new Date(),\r\n      ID: null,\r\n      IsBilling: accountContact?.IsBilling ?? false,\r\n      IsPrimary: accountContact?.IsPrimary ?? false,\r\n      MasterID: currentUser ? currentUser.AccountID : null,\r\n      Name: `${firstName} ${lastName}`,\r\n      Slave: {\r\n        Active: true,\r\n        Address: {\r\n          Active: true,\r\n          City: city,\r\n          Company: company,\r\n          Country: selectedCountry,\r\n          CountryCode: selectedCountry?.Code,\r\n          CountryKey: selectedCountry?.CustomKey,\r\n          CountryName: selectedCountry?.Name,\r\n          CreatedDate: accountContact?.Slave?.Address?.CreatedDate ?? new Date(),\r\n          CustomKey: key,\r\n          ID: null,\r\n          PostalCode: zip,\r\n          Region: selectedRegion,\r\n          RegionCode: selectedRegion?.Code,\r\n          RegionID: selectedRegion?.ID,\r\n          RegionKey: selectedRegion?.CustomKey,\r\n          RegionName: selectedRegion?.Name,\r\n          Street1: street1,\r\n          Street2: street2,\r\n          Street3: street3\r\n        },\r\n        CreatedDate: new Date(),\r\n        Email1: email1,\r\n        Fax1: fax1,\r\n        FirstName: firstName,\r\n        FullName: `${firstName} ${lastName}`,\r\n        ID: null,\r\n        LastName: lastName,\r\n        Phone1: phone1,\r\n        Phone2: phone2,\r\n        Phone3: phone3,\r\n        TypeID: null,\r\n        TypeKey: typePascalCased\r\n      },\r\n      SlaveID: null,\r\n      TransmittedToERP: false,\r\n      UpdatedDate: null\r\n    };\r\n    if (company) {\r\n      userAddressData.Slave.Address.Company = company;\r\n    }\r\n    onConfirm(userAddressData);\r\n    reset();\r\n  };\r\n\r\n  const handleCancel = (_e: React.MouseEvent<htmlbuttonelement>) =&gt; {\r\n    if (onCancel) {\r\n      onCancel();\r\n    }\r\n  };\r\n\r\n  const countryHasRegions = (): boolean =&gt; {\r\n    if (regions?.filter(r =&gt; r.CountryName === countryValue)?.length &gt; 0 === true) {\r\n        return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  return (\r\n    <col\r\n as="{Form}\r\n" autocomplete='\"off\"\r\n' classname='\"position-relative\"\r\n' onsubmit="{handleSubmit(handleConfirm)}">\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      <row>\r\n        \r\n          <row>\r\n            <textinputformgroup\r\n 15="" characters\"\r\n="" datasid='\"txtKeyPurchasingBilling\"\r\n' errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{customKeyKey}\r\n" inputclasses='\"text-capitalize\"\r\n' is="" key="" key\"\r\n="" labelkey='\"ui.storefront.checkout.views.accountInformation.addressKey\"\r\n' labeltext='\"Address' maxlength="{15}\r\n" maxlengthmessage='\"Address' may="" mb-3\"\r\n="" not="" placeholderkey='\"ui.storefront.checkout.views.accountInformation.addressKey\"\r\n' register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"Address'>\r\n            <textinputformgroup\r\n 128="" characters\"\r\n="" datasid='\"txtFirstNamePurchasingBilling\"\r\n' errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{firstNameKey}\r\n" inputclasses='\"text-capitalize\"\r\n' is="" labelkey='\"ui.storefront.common.FirstName\"\r\n' labeltext='\"First' maxlength="{128}\r\n" maxlengthmessage='\"First' may="" mb-3\"\r\n="" name="" name\"\r\n="" not="" placeholderkey='\"ui.storefront.common.FirstName\"\r\n' register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"First'>\r\n            <textinputformgroup\r\n 128="" characters\"\r\n="" datasid='\"txtLastNamePurchasingBilling\"\r\n' errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{lastNameKey}\r\n" inputclasses='\"text-capitalize\"\r\n' is="" labelkey='\"ui.storefront.common.LastName\"\r\n' labeltext='\"Last' maxlength="{128}\r\n" maxlengthmessage='\"Last' may="" mb-3\"\r\n="" name="" name\"\r\n="" not="" placeholderkey='\"ui.storefront.common.LastName\"\r\n' register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"Last'>\r\n            <textinputformgroup\r\n datasid='\"emEmailPurchasingBilling\"\r\n' errors="{formState.errors}\r\n" form-group="" formatted="" formclasses='\"col-12' formidentifier="{email1Key}\r\n" is="" isemail="{true}\r\n" labelkey='\"ui.storefront.common.Email\"\r\n' labeltext='\"Email\"\r\n' mb-3\"\r\n="" not="" patternmessage='\"Email' placeholderkey='\"ui.storefront.common.Email\"\r\n' properly\"\r\n="" register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"Email' valid="">\r\n            <textinputformgroup\r\n 1="" 1\"\r\n="" 40="" and="" area="" characters\"\r\n="" code="" code.\"\r\n="" country="" datasid='\"telPhone1PurchasingBilling\"\r\n' errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{phone1Key}\r\n" include="" inputclasses='\"text-capitalize\"\r\n' is="" isphone="{true}\r\n" labelkey='\"ui.storefront.common.Phone1\"\r\n' labeltext='\"Phone' maxlength="{40}\r\n" maxlengthmessage='\"Phone' may="" mb-3\"\r\n="" minlength="{7}\r\n" minlengthmessage='\"Phone' must="" not="" number="" numbers="" placeholdertext='\"1-555-555-5555\"\r\n' register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"Phone'>\r\n            {phoneFieldsAmount &gt; 1 &amp;&amp; <textinputformgroup\r\n 40="" and="" area="" characters\"\r\n="" code="" code.\"\r\n="" country="" dashes\"\r\n="" digits="" errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{phone2Key}\r\n" include="" inputclasses='\"text-capitalize\"\r\n' isphone="{true}\r\n" labelkey='\"ui.storefront.userDashboard2.controls.addressEditor2.Phone2\"\r\n' maxlength="{40}\r\n" maxlengthmessage='\"Phone' may="" mb-3\"\r\n="" minlength="{7}\r\n" minlengthmessage='\"Phone' must="" not="" numbers="" only="" patternmessage='\"Phone' placeholdertext='\"1-555-555-5555\"\r\n' register="{register}\r\n">}\r\n            {phoneFieldsAmount &gt; 2 &amp;&amp; <textinputformgroup\r\n 40="" and="" area="" characters\"\r\n="" code="" code.\"\r\n="" country="" dashes\"\r\n="" digits="" errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{phone3Key}\r\n" include="" inputclasses='\"text-capitalize\"\r\n' isphone="{true}\r\n" labelkey='\"ui.storefront.userDashboard2.controls.addressEditor2.Phone3\"\r\n' maxlength="{40}\r\n" maxlengthmessage='\"Phone' may="" mb-3\"\r\n="" minlength="{7}\r\n" minlengthmessage='\"Phone' must="" not="" numbers="" only="" patternmessage='\"Phone' placeholdertext='\"1-555-555-5555\"\r\n' register="{register}\r\n">}\r\n            {phoneFieldsAmount &lt; 3 &amp;&amp; \r\n              <button =="" classname='\"float-right' id='\"btnAddMorePhoneNumbers\"\r\n' mb-3\"\r\n="" onclick="{()" variant='\"link\"\r\n'> setPhoneFieldsAmount(amt =&gt; amt + 1)}&gt;\r\n                {t(\"ui.storefront.checkout.addMorePhones\")}\r\n              </button>\r\n            }\r\n            <textinputformgroup\r\n 40="" and="" area="" characters\"\r\n="" code="" code.\"\r\n="" country="" errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{fax1Key}\r\n" include="" inputclasses='\"text-capitalize\"\r\n' is="" isfax="{true}\r\n" labelkey='\"ui.storefront.common.Fax\"\r\n' labeltext='\"Fax\"\r\n' maxlength="{40}\r\n" maxlengthmessage='\"Fax' may="" mb-3\"\r\n="" minlength="{10}\r\n" minlengthmessage='\"Fax' must="" not="" numbers="" placeholdertext='\"+1(555)555-5555\"\r\n' register="{register}\r\n" required="{false}\r\n" required\"\r\n="" requiredmessage='\"Fax'>\r\n          </textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></row>\r\n        \r\n        \r\n          <row>\r\n            <textinputformgroup\r\n 128="" characters\"\r\n="" errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{companyKey}\r\n" inputclasses='\"text-capitalize\"\r\n' labelkey='\"ui.storefront.common.Company\"\r\n' labeltext='\"Company\"\r\n' lefticon="{faBriefcase}\r\n" maxlength="{128}\r\n" maxlengthmessage='\"Company' may="" mb-3\"\r\n="" not="" placeholderkey='\"ui.storefront.common.Company\"\r\n' register="{register}\r\n">\r\n            {countries?.length &amp;&amp; <selectformgroup\r\n =="" a="" country\"\r\n="" errors="{formState.errors}\r\n" form-group="" formclasses='\"col-12' formidentifier="{countryIdKey}\r\n" includenull="{true}\r\n" labelkey='\"ui.storefront.common.Country\"\r\n' labeltext='\"Country\"\r\n' mb-3\"\r\n="" nullkey='\"ui.storefront.common.geography.Country.SelectA\"\r\n' nulltext='\"Select' options="{countries.map(c" register="{register}\r\n" required="{true}\r\n"> ({ option: c.Name }))}\r\n              initialOption={{ option: accountContact?.Slave?.Address?.Country?.Name ?? countries[0].Name }}\r\n            /&gt;}\r\n            <textinputformgroup\r\n 1\"\r\n="" 35="" a="" address.\"\r\n="" be="" characters\"\r\n="" datasid='\"txtStreet1PurchasingBilling\"\r\n' errors="{formState.errors}\r\n" exceed="" formclasses='\"col-12' formidentifier="{street1Key}\r\n" inputclasses='\"text-capitalize\"\r\n' is="" labelkey='\"ui.storefront.common.Address1\"\r\n' labeltext='\"Address' lefticon="{faRoad}\r\n" maxlength="{35}\r\n" maxlengthmessage='\"Address' may="" mb-3\"\r\n="" minlength="{6}\r\n" minlengthmessage='\"Address' must="" not="" placeholderkey='\"ui.storefront.common.Address1\"\r\n' register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"Address' street="" valid="">\r\n            {streetFieldsAmount &gt; 1 &amp;&amp; <textinputformgroup\r\n 2="" 35="" a="" address.\"\r\n="" be="" characters\"\r\n="" errors="{formState.errors}\r\n" exceed="" formclasses='\"col-12' formidentifier="{street2Key}\r\n" inputclasses='\"text-capitalize\"\r\n' labelkey='\"ui.storefront.common.Address2\"\r\n' lefticon="{faRoad}\r\n" maxlength="{35}\r\n" maxlengthmessage='\"Address' may="" mb-3\"\r\n="" minlength="{1}\r\n" minlengthmessage='\"Address' must="" not="" placeholderkey='\"ui.storefront.common.Address2\"\r\n' register="{register}\r\n" street="" valid="">}\r\n            {streetFieldsAmount &gt; 2 &amp;&amp; <textinputformgroup\r\n 35="" a="" address.\"\r\n="" be="" characters\"\r\n="" errors="{formState.errors}\r\n" exceed="" formclasses='\"col-12' formidentifier="{street3Key}\r\n" inputclasses='\"text-capitalize\"\r\n' labelkey='\"ui.storefront.common.Address3\"\r\n' lefticon="{faRoad}\r\n" maxlength="{35}\r\n" maxlengthmessage='\"Address' may="" mb-3\"\r\n="" minlength="{1}\r\n" minlengthmessage='\"Address' must="" not="" placeholderkey='\"ui.storefront.common.Address3\"\r\n' register="{register}\r\n" street="" valid="">}\r\n            {streetFieldsAmount &lt; 3 &amp;&amp; \r\n              <button =="" classname='\"float-right' id='\"btnSecondaryShowStreet3NewContact\"\r\n' mb-3\"\r\n="" onclick="{()" variant='\"link\"\r\n'> setStreetFieldsAmount(amt =&gt; amt + 1)}&gt;\r\n                {t(\"ui.storefront.checkout.addMoreAddressLines\")}\r\n              </button>\r\n            }\r\n            <textinputformgroup\r\n 90="" characters\"\r\n="" datasid='\"txtCityPurchasingBilling\"\r\n' errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{cityKey}\r\n" inputclasses='\"text-capitalize\"\r\n' is="" labelkey='\"ui.storefront.common.City\"\r\n' labeltext='\"City\"\r\n' lefticon="{faCity}\r\n" max="" maxlength="{90}\r\n" maxlengthmessage='\"City' mb-3\"\r\n="" not="" placeholdertext='\"City\"\r\n' register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"City'>\r\n            {countryHasRegions()\r\n            ? <selectformgroup\r\n .filter(reg="" ?="" countryvalue\r\n="" errors="{formState.errors}\r\n" formclasses='\"col-12' formidentifier="{regionIdKey}\r\n" mb-3\"\r\n="" options="{\r\n" regions\r\n="" register="{register}\r\n"> reg.CountryName === countryValue)\r\n                    .map(region =&gt; ({\r\n                      option: region.Name,\r\n                      value: region.Name\r\n                    }))\r\n                  : []\r\n              }\r\n              initialOption={{ option: regionValue, value: regionValue }}\r\n              labelKey=\"ui.storefront.common.geography.RegionStateProvince\"\r\n              labelText=\"Region / State / Province\"\r\n              includeNull={true}\r\n              required={countryHasRegions()}\r\n              nullText=\"Select a Region / State / Province\"\r\n              nullKey=\"ui.storefront.common.geography.RegionStateProvince.SelectA\"\r\n            /&gt; : <row></row>}\r\n            <textinputformgroup\r\n 128="" 3="" a="" be="" characters\"\r\n="" code="" code\"\r\n="" codes="" datasid='\"txtZipPurchasingBilling\"\r\n' errors="{formState.errors}\r\n" exceed="" form-group="" formclasses='\"col-12' formidentifier="{zipKey}\r\n" invalid\"\r\n="" is="" labelkey='\"ui.storefront.common.PostalZipCode\"\r\n' labeltext='\"Postal' least="" lefticon="{faCity}\r\n" maxlength="{128}\r\n" maxlengthmessage='\"Postal' may="" mb-3\"\r\n="" minlength="{3}\r\n" minlengthmessage='\"Postal' must="" not="" pattern="{/^(?![\\s-])[a-zA-Z0-9\\s-]{3,}(?&lt;![\\s-])$/}\r\n" patternmessage='\"Postal' placeholderkey='\"ui.storefront.common.PostalZipCode\"\r\n' register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"Postal' zip="">\r\n          </textinputformgroup\r\n></selectformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></selectformgroup\r\n></textinputformgroup\r\n></row>\r\n        \r\n      </row>\r\n      <row classname='\"mt-2\"'>\r\n        \r\n          <div classname='\"d-flex' gap-2\"="" justify-content-end="">\r\n            {showCancel\r\n              ? <button id='\"btnCancelShipping\"\r\n' onclick="{handleCancel}" variant='\"outline-secondary\"\r\n'>\r\n                {t(\"ui.storefront.common.Cancel\")}\r\n              </button>\r\n              : null}\r\n            <button\r\n !formstate.isvalid}="" :="" =="=" ?="" \"billing\"="" \"shipping\"}`}\r\n="" disabled="{viewState.running" id='\"btnAddShipping\"\r\n' name="{`btnAdd${type" type='\"submit\"\r\n' variant='\"primary\"\r\n' ||="">\r\n              {t(submitBtnKey ?? \"ui.storefront.checkout.splitShipping.addressModal.AddAddress\")}\r\n            \r\n          </button\r\n></div>\r\n        \r\n      </row>\r\n    \r\n  );\r\n};\r\n","import { Row } from \"react-bootstrap\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { Modal } from \"src/_shared/modals/Modal\";\r\nimport { NewAddressForm } from \"src/_shared/forms/NewAddressForm\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface INewAddressModalProps {\r\n  type?: \"billing\" | \"shipping\";\r\n  accountContact?: AccountContactModel;\r\n  show: boolean;\r\n  onConfirm: (newAddressFormData: AccountContactModel) =&gt; void;\r\n  onCancel: Function;\r\n  parentRunning?: boolean;\r\n  idSuffix?: string;\r\n}\r\n\r\nexport const NewAddressModal = (props: INewAddressModalProps): JSX.Element =&gt; {\r\n  const { type, accountContact, show, onConfirm, onCancel, parentRunning, idSuffix } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <modal ${type}`="" :="" ?="" \"\"}="" `="" `add="" a="" address`}\r\n="" new${type="" oncancel="{onCancel}" show="{show}\r\n" t(\"ui.storefront.userdashboard2.controls.addresseditor2.editanaddress\")\r\n="" title="{accountContact\r\n" titleid='\"txtNewAddressModalTitle\"\r\n'>\r\n      {parentRunning\r\n        ? <loadingwidget>\r\n        : <row>\r\n          {show\r\n            &amp;&amp; <newaddressform\r\n :="" ?="" accountcontact="{accountContact}\r\n" idsuffix="{idSuffix}\r\n" null}\r\n="" oncancel="{onCancel}\r\n" onconfirm="{onConfirm}\r\n" showcancel="{true}\r\n" submitbtnkey="{accountContact" t(\"ui.storefront.common.save\")="" type="{type}\r\n">\r\n          }\r\n        </newaddressform\r\n></row>\r\n      }\r\n    </loadingwidget></modal>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { NewAddressModal } from \"src/Dashboard/AddressBook/NewAddressModal\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\n/* TODO: Restore/allow In Store Pickup and Ship to Store options\r\n  case shipToStoreOption.ID: {\r\n      // TODO: Use the address of the store\r\n      setDestinationContactForTarget(target, shipToStoreOption.ID, cvServiceStrings.attributes.shipToStore);\r\n      break;\r\n  }\r\n  case inStorePickupOption.ID: {\r\n      // TODO: Use the address of the store\r\n      setDestinationContactForTarget(target, inStorePickupOption.ID, cvServiceStrings.attributes.inStorePickup);\r\n      break;\r\n  }\r\n*/\r\n\r\ninterface IContactSwitchProps {\r\n  accountContacts: Array<accountcontactmodel>;\r\n  onChange: (contact: AccountContactModel) =&gt; void;\r\n  title?: string;\r\n  classes?: string;\r\n  hideAddressBlock?: boolean;\r\n  allowAdd?: boolean;\r\n  useAddButton?: boolean;\r\n  onAddressAdded?: (newAddressData: AccountContactModel) =&gt; void;\r\n  initialContact?: AccountContactModel;\r\n  allowInStorePickup?: boolean;\r\n  allowShipToStore?: boolean;\r\n  disabled?: boolean;\r\n  ddSelectAddressDataSID?: string;\r\n  btnAddAddressDataSID?: string;\r\n}\r\n\r\nexport const ContactSwitch = (props: IContactSwitchProps): JSX.Element =&gt; {\r\n  const {\r\n    accountContacts,\r\n    allowAdd,\r\n    classes,\r\n    disabled,\r\n    hideAddressBlock,\r\n    initialContact,\r\n    onAddressAdded,\r\n    onChange,\r\n    title,\r\n    useAddButton,\r\n    ddSelectAddressDataSID,\r\n    btnAddAddressDataSID\r\n  } = props;\r\n\r\n  const [ selectedContact, setSelectedContact ] = useState(initialContact ?? null);\r\n  const [ showNewAddressModel, setShowNewAddressModal ] = useState(false);\r\n\r\n  const cefConfig = useCefConfig();\r\n\r\n  useEffect(() =&gt; {\r\n    setSelectedContact(initialContact);\r\n  }, [ initialContact ]);\r\n\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n\r\n  const canUpsertAddresses = cefConfig?.featureSet?.addressBook?.dashboardCanAddAddresses;\r\n\r\n  return (\r\n    <div classname='\"flex-grow-1\"'>\r\n      <inputgroup ${classes="" ??="" \"\"}`}="" classname="{`mb-2">\r\n        { title &amp;&amp; <strong classname='\"d-block\"'>{title}</strong> }\r\n        <form.group classname='\"form-group' flex-grow-1\"="">\r\n          <form.select\r\n :="" =="" ?="" \"\"\r\n="" \"add="" a="" address\"="" aria-label="{ddSelectAddressDataSID}\r\n" classname='\"flex-grow-1\"\r\n' data-sid="{ddSelectAddressDataSID}\r\n" disabled="{disabled}\r\n" new="" onchange="{e" required\r\n="" selectedcontact="" selectedcontact.id="" shownewaddressmodel="" value="{\r\n" }\r\n=""> {\r\n              if (e.target.value === \"Add a new Address\") {\r\n                setSelectedContact(null);\r\n                setShowNewAddressModal(true);\r\n                return;\r\n              }\r\n              const currentContactVal = accountContacts.find(\r\n                (c: { ID: number }) =&gt; c.ID.toString() === e.target.value\r\n              );\r\n              if (currentContactVal) {\r\n                onChange(currentContactVal);\r\n              }\r\n              setSelectedContact(currentContactVal);\r\n            }}&gt;\r\n            <option :="" ?="" \"\"}`}="" \"disabled\"="" classname="{`${selectedContact" disabled="{Boolean(selectedContact)}">\r\n              Please select an address\r\n            </option>\r\n            {accountContacts\r\n              &amp;&amp; accountContacts.map(accountContact =&gt; {\r\n                const { ID, CustomKey, Slave, SlaveKey } = accountContact;\r\n                return (\r\n                  <option key="{ID}" value="{ID}">\r\n                    {Slave.Address.CustomKey ?? Slave.CustomKey ?? SlaveKey ?? CustomKey}\r\n                  </option>\r\n                );\r\n              })}\r\n            {allowAdd &amp;&amp; !useAddButton\r\n              ? <option a="" address\"="" new="" value='\"Add'>Add a new Address</option>\r\n              : null}\r\n          \r\n        </form.select\r\n></form.group>\r\n        {allowAdd &amp;&amp; useAddButton &amp;&amp; canUpsertAddresses\r\n          &amp;&amp; <button\r\n =="" data-sid="{btnAddAddressDataSID}\r\n" disabled="{disabled}\r\n" onclick="{()" type='\"button\"\r\n' variant='\"secondary\"\r\n'> setShowNewAddressModal(true)}&gt;\r\n            Add\r\n          \r\n        }\r\n        {allowAdd &amp;&amp; canUpsertAddresses\r\n          ? <newaddressmodal\r\n =="" oncancel="{()" show="{showNewAddressModel}\r\n"> {\r\n              setShowNewAddressModal(false);\r\n            }}\r\n            onConfirm={(newAddressData: AccountContactModel) =&gt; {\r\n              onAddressAdded(newAddressData);\r\n              setShowNewAddressModal(false);\r\n            }}\r\n          /&gt;\r\n          : null}\r\n      </newaddressmodal\r\n></button\r\n></inputgroup>\r\n      {!hideAddressBlock &amp;&amp; selectedContact &amp;&amp; selectedContact.Slave\r\n        &amp;&amp; <addressblock\r\n address="{selectedContact.Slave.Address}\r\n" contact="{selectedContact.Slave}\r\n">\r\n      }\r\n    </addressblock\r\n></div>\r\n  );\r\n};\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { useEffect } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { RootState } from \"src/_redux/store\";\r\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\r\n\r\ninterface IAddressBookSliceState {\r\n  AddressBook: AccountContactModel[] | null;\r\n}\r\n\r\nexport const addressBookSlice = createSlice({\r\n  name: \"addressBook\",\r\n  initialState: {\r\n    AddressBook: null\r\n  } as IAddressBookSliceState,\r\n  reducers: {\r\n    setAddressBook: (state, action: PayloadAction<accountcontactmodel[]>) =&gt; {\r\n      state.AddressBook = action.payload;\r\n    }\r\n  }\r\n});\r\n\r\nexport const { setAddressBook } = addressBookSlice.actions;\r\nexport const useAddressBook = (): AccountContactModel[] =&gt; {\r\n  const addressBook = useSelector((state: RootState) =&gt; state.addressBook.AddressBook);\r\n  const addressBookFactory = useAddressBookFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (addressBook === null) {\r\n      addressBookFactory.loadAddressBook();\r\n    }\r\n  }, [ addressBook ]);\r\n\r\n  return addressBook;\r\n};\r\n\r\nexport default addressBookSlice.reducer;\r\n","/* eslint-disable sort-keys, arrow-body-style */\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { setAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport { useState } from \"react\";\r\n\r\nexport interface IAddressBookFactory {\r\n  loadAddressBook: (force?: boolean) =&gt; Promise<void>;\r\n  createNewAddress: (contact: AccountContactModel) =&gt; Promise<accountcontactmodel>;\r\n  updateExistingAddress: (contact: AccountContactModel) =&gt; Promise<void>;\r\n  deleteAddress: (accountContactID: number) =&gt; Promise<void>;\r\n  validateAddress: (contact: AccountContactModel) =&gt; Promise<boolean>;\r\n  markAsDefaultBilling: (accountContactID: number) =&gt; Promise<void>;\r\n  markAsDefaultShipping: (accountContactID: number) =&gt; Promise<void>;\r\n}\r\n\r\nexport const useAddressBookFactory = (): IAddressBookFactory | null =&gt; {\r\n  const dispatch = useDispatch();\r\n\r\n  const [ addressBookFactory ] = useState<iaddressbookfactory>({\r\n    loadAddressBook: (force?: boolean): Promise<void> =&gt; {\r\n      if (force) {\r\n        promiser.flush(\"loadAddressBook\");\r\n      }\r\n      return promiser.resolve(\r\n        \"loadAddressBook\",\r\n        () =&gt; cvApi.geography\r\n          .GetCurrentAccountAddressBook()\r\n          .then(r =&gt; {\r\n            const result = r.data ?? [];\r\n            dispatch(setAddressBook(result));\r\n            return result;\r\n          })\r\n      ).then();\r\n    },\r\n\r\n    createNewAddress: (contact: AccountContactModel): Promise<accountcontactmodel> =&gt; {\r\n      return cvApi.geography\r\n        .CreateAddressInBook(contact)\r\n        .then(r =&gt; {\r\n          if (!r?.data) {\r\n            throw new Error(\"Unable to create new address in address book\");\r\n          }\r\n          return addressBookFactory.loadAddressBook(true).then(() =&gt; r.data);\r\n        });\r\n    },\r\n\r\n    updateExistingAddress: (contact: AccountContactModel): Promise<void> =&gt; {\r\n      return addressBookFactory.validateAddress(contact)\r\n        .then(valid =&gt; {\r\n          if (!valid) {\r\n            throw new Error(\"New address is invalid\");\r\n          }\r\n          return cvApi.accounts\r\n            .UpdateAccountContact(contact);\r\n        })\r\n        .then(r =&gt; {\r\n          if (!r?.data?.ActionSucceeded) {\r\n            throw r?.data?.Messages ?? [ \"Error updating address\" ];\r\n          }\r\n          return addressBookFactory.loadAddressBook(true);\r\n        });\r\n    },\r\n\r\n    deleteAddress: (accountContactID: number): Promise<void> =&gt; {\r\n      return cvApi.accounts\r\n        .DeleteAccountContactByID(accountContactID)\r\n        .then(r =&gt; {\r\n          if (!r?.data?.ActionSucceeded) {\r\n            throw r?.data?.Messages ?? [ \"Failed to delete address\" ];\r\n          }\r\n          return addressBookFactory.loadAddressBook(true);\r\n        });\r\n    },\r\n\r\n    validateAddress: (contact: AccountContactModel): Promise<boolean> =&gt; {\r\n      if (!contact?.Slave?.Address) {\r\n        return Promise.reject(new Error(\"Must supply a contact with an address to validate\"));\r\n      }\r\n      const toValidate = contact.Slave.Address;\r\n      return cvApi.providers\r\n        .ValidateAddress({\r\n          Address: {\r\n            ...toValidate,\r\n            CountryID: toValidate.CountryID ?? toValidate.Country?.ID,\r\n          }\r\n        })\r\n        .then(r =&gt; {\r\n          return r?.data?.IsValid ?? false;\r\n        });\r\n    },\r\n\r\n    markAsDefaultBilling: (accountContactID: number): Promise<void> =&gt; {\r\n      return cvApi.accounts\r\n        .MarkAccountContactAsDefaultBilling(accountContactID)\r\n        .then(r =&gt; {\r\n          if (!r?.data?.ActionSucceeded) {\r\n            throw r?.data?.Messages ?? [ \"Unable to set contact as default billing\" ];\r\n          }\r\n          return addressBookFactory.loadAddressBook(true);\r\n        });\r\n    },\r\n\r\n    markAsDefaultShipping: (accountContactID: number): Promise<void> =&gt; {\r\n      return cvApi.accounts\r\n        .MarkAccountContactAsPrimaryShipping(accountContactID)\r\n        .then(r =&gt; {\r\n          if (!r?.data?.ActionSucceeded) {\r\n            throw r?.data?.Messages ?? [ \"Unable to set contact as default shipping\" ];\r\n          }\r\n          return addressBookFactory.loadAddressBook(true);\r\n        });\r\n    }\r\n  });\r\n\r\n  return addressBookFactory;\r\n};\r\n","/* CONTENT/LOGIC MOVED TO PAYMENT STEP, HERE FOR REFERENCE */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { Alert, Button, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ICheckoutBillingStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\r\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\n\r\nexport const CheckoutBillingStep = (props: ICheckoutBillingStepProps): JSX.Element =&gt; {\r\n  const [ cartBillingContact, setCartBillingContact ] = useState(null);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const addressBookFactory = useAddressBookFactory();\r\n  const addressBook = useAddressBook();\r\n\r\n  const { onCompleteCheckoutBillingStep, continueText } = props;\r\n\r\n  useEffect(() =&gt; {\r\n    if (!addressBookFactory) {\r\n      return;\r\n    }\r\n    addressBookFactory.loadAddressBook();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ addressBookFactory ]);\r\n\r\n  function updateCartBillingContact(contact: AccountContactModel): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .CurrentCartSetBillingContact({\r\n        TypeName: \"Cart\",\r\n        BillingContact: contact.Slave\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          setCartBillingContact(contact);\r\n          finishRunning();\r\n        } else {\r\n          finishRunning(true, \"Failed to update cart billing contact\");\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to update cart billing contact\");\r\n      });\r\n  }\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <h4 classname='\"mt-2\"'>\r\n          <span id='\"CheckoutBillingStageText\"'>\r\n            {t(\"ui.storefront.checkout.billingInfo.whichAddy\")}\r\n          </span>\r\n           <span classname='\"text-danger\"'>*</span>\r\n        </h4>\r\n      \r\n      \r\n        <row>\r\n          \r\n            <contactswitch\r\n =="" accountcontacts="{addressBook}\r\n" allowadd="{true}\r\n" classes='\"input-group\"\r\n' initialcontact="{cartBillingContact}\r\n" onaddressadded="{newAddressData" onchange="{updateCartBillingContact}\r\n" useaddbutton="{true}\r\n"> {\r\n                addressBookFactory.createNewAddress(newAddressData).then(newContact =&gt; {\r\n                  updateCartBillingContact(newContact);\r\n                });\r\n              }}\r\n            /&gt;\r\n          \r\n          {viewState.hasError\r\n            ? \r\n              <alert variant='\"danger\"'>{viewState.errorMessage}</alert>\r\n            \r\n            : null}\r\n          \r\n            <button\r\n =="" classname='\"mb-4\"\r\n' disabled="{!cartBillingContact}\r\n" onclick="{()" variant='\"primary\"\r\n'> {\r\n                if (cartBillingContact) {\r\n                  onCompleteCheckoutBillingStep(cartBillingContact);\r\n                }\r\n              }}&gt;\r\n              {continueText}\r\n            \r\n          \r\n        </button\r\n></contactswitch\r\n></row>\r\n      \r\n    </row>\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { DateTime } from \"luxon\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Form, Row, Table } from \"react-bootstrap\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { IPurchaseRateQuotesManagerWidgetProps } from \"src/Checkout/_checkoutTypes\";\r\n\r\ntype TPurchaseRateQuotesManagerWidgetSortBy = \"rate\" | \"estDel\";\r\n\r\nconst fallbackShowValue = 4;\r\n\r\nexport const PurchaseRateQuotesManagerWidget = (props: IPurchaseRateQuotesManagerWidgetProps): JSX.Element =&gt; {\r\n  const { quotes, onRateSelected } = props;\r\n\r\n  const activeQuote = Array.isArray(quotes) ? quotes.find(q =&gt; q.Active &amp;&amp; q.Selected) : null;\r\n\r\n  const [ sortBy, setSortBy ] = useState<tpurchaseratequotesmanagerwidgetsortby>(\"rate\");\r\n  const [ rateSortAsc, setRateSortAsc ] = useState(true);\r\n  const [ estDeliverySortAsc, setEstDeliverySortAsc ] = useState(false);\r\n  const [ selectedShippingRate, setSelectedShippingRate ] = useState(activeQuote ?? null);\r\n  const [ quantityOfRatesShown, setQuantityOfRatesShown ] = useState(\r\n    activeQuote ? quotes.findIndex(q =&gt; q.Active &amp;&amp; q.Selected) + 1 : 4\r\n  );\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const showMore = () =&gt; {\r\n    if (quantityOfRatesShown &lt; quotes.length) {\r\n      setQuantityOfRatesShown(quotes.length);\r\n    }\r\n  };\r\n\r\n  const showLess = () =&gt; {\r\n    let newQuantity = fallbackShowValue;\r\n    if (activeQuote) {\r\n      const index = quotes.findIndex(q =&gt; q.Active &amp;&amp; q.Selected);\r\n      if (index &gt; fallbackShowValue) {\r\n        newQuantity = index + 1;\r\n      }\r\n    }\r\n    setQuantityOfRatesShown(newQuantity);\r\n  };\r\n\r\n  const handleRateHeadingClicked = (): void =&gt; {\r\n    if (sortBy === \"rate\") {\r\n      setRateSortAsc(!rateSortAsc);\r\n    } else {\r\n      setSortBy(\"rate\");\r\n      setRateSortAsc(true);\r\n    }\r\n  };\r\n\r\n  const handleEstDelHeadingClicked = (): void =&gt; {\r\n    if (sortBy === \"estDel\") {\r\n      setEstDeliverySortAsc(!estDeliverySortAsc);\r\n    } else {\r\n      setSortBy(\"estDel\");\r\n      setEstDeliverySortAsc(true);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <row>\r\n      \r\n        \r\n          \r\n            \r\n            \r\n            {/* When est ship / del re-implemented TODO:\r\n            \r\n            \r\n            \r\n            */}\r\n          \r\n          \r\n            \r\n              <th\r\n ${sortby="==" :="" ?="" \"\"}`}\r\n="" \"asc\"="" \"desc\"="" \"rate\"="" classname="{`border-0" colspan="{2}\r\n" data-translate='\"Rate\"' id='\"RateText\"\r\n' onclick="{handleRateHeadingClicked}\r\n" p-2="" ratesortasc="" sortable="">\r\n                Rate\r\n              \r\n              {/* When est ship / del re-implemented TODO:\r\n              </th\r\n>\r\n              <th\r\n ${sortby="==" :="" ?="" \"\"}`}\r\n="" \"asc\"="" \"desc\"="" \"estdel\"="" classname="{`border-0" data-translate='\"Est.' del.\"="" estdeliverysortasc="" id='\"EstDelText\"\r\n' onclick="{handleEstDelHeadingClicked}\r\n" p-2="" sortable="">\r\n                Est. Del.\r\n               */}\r\n            </th\r\n>\r\n          \r\n          \r\n            {Array.isArray(quotes)\r\n              ? quotes\r\n                .slice(0, quantityOfRatesShown)\r\n                .sort((a, b) =&gt; {\r\n                  const aEstDeliveryDate = new Date(a.EstimatedDeliveryDate);\r\n                  const bEstDeliveryDate = new Date(b.EstimatedDeliveryDate);\r\n                  let returnValue = 0;\r\n                  switch (sortBy) {\r\n                    case \"rate\": {\r\n                      returnValue = rateSortAsc ? a.Rate - b.Rate : b.Rate - a.Rate;\r\n                      break;\r\n                    }\r\n                    case \"estDel\": {\r\n                      returnValue = estDeliverySortAsc\r\n                        ? aEstDeliveryDate.getTime() - bEstDeliveryDate.getTime()\r\n                        : bEstDeliveryDate.getTime() - aEstDeliveryDate.getTime();\r\n                      break;\r\n                    }\r\n                    default: {\r\n                      break;\r\n                    }\r\n                  }\r\n                  return returnValue;\r\n                })\r\n                .map(\r\n                  (q, index): JSX.Element =&gt; <tr\r\n &&="" :="" ?="" \"\"}="" \"table-success\"="" classname="{selectedShippingRate" key="{q.ID}\r\n" q.id="" selectedshippingrate.id="==">\r\n                    </tr\r\n>\r\n                    \r\n                    {/* When est ship / del re-implemented TODO:\r\n                    Code from PurchaseRateQuotesManager_TargetShipEstDelCodeBak.txt goes here */}\r\n                  \r\n\r\n                )\r\n              : null}\r\n            {Array.isArray(quotes)\r\n              &amp;&amp; \r\n                \r\n              \r\n            }\r\n          \r\n        <table classname='\"col-sm-12' hover\r\n="" m-0\"="" responsive\r\n="" size='\"sm\"\r\n' striped\r\n=""><colgroup></colgroup><colgroup><col classname='\"w-50\"'/></colgroup><colgroup><col classname='\"w-50\"'/></colgroup><colgroup><col classname='\"w-40\"'/></colgroup><colgroup><col classname='\"w-10\"'/></colgroup><colgroup><col classname='\"w-25\"'/></colgroup><colgroup><col classname='\"w-25\"'/> </colgroup><thead border-2="" border-left-0="" border-right-0\"="" classname='\"border-medium'><tr classname='\"border-0\"'><th classname='\"border-0\"' id='\"TargetShipText\"'>\r\n                Target Ship\r\n              </th></tr></thead><tbody classname='\"border-top-0\"'><tr><td classname='\"p-2\"'>\r\n                      <form.check classname='\"custom-control' custom-radio\"="" id="{`RateQuote_${index}`}">\r\n                        <form.check.input\r\n :="" =="" ?="" checked="{selectedShippingRate" classname='\"custom-control-input\"\r\n' false}\r\n="" onchange="{()" q.id="" selectedshippingrate.id="==" type='\"radio\"\r\n'> {\r\n                            setSelectedShippingRate(q);\r\n                            if (onRateSelected) {\r\n                              onRateSelected(q);\r\n                            }\r\n                          }}\r\n                        /&gt;\r\n                        <form.check.label\r\n =="" classname='\"custom-control-label' mb-0="" onclick="{()" pointer\"\r\n=""> {\r\n                            setSelectedShippingRate(q);\r\n                            if (onRateSelected) {\r\n                              onRateSelected(q);\r\n                            }\r\n                          }}&gt;\r\n                          {q.ShipCarrierMethodName}\r\n                        \r\n                      </form.check.label\r\n></form.check.input\r\n></form.check>\r\n                    </td><td classname='\"text-end' p-2\"="">\r\n                      <form.label classname='\"custom-control' id="{`RateCurrency_${index}`}" mb-0="" pointer\"="" ps-0="">\r\n                        {q.Rate &gt; 0\r\n                          ? <span>{currencyFormatter.format(q.Rate)}</span>\r\n                          : <span classname='\"text-success\"'>{t(\"ui.storefront.common.Free\")}</span>\r\n                        }\r\n                      </form.label>\r\n                    </td></tr><tr><td colspan="{4}">\r\n                  <button\r\n =="" classname='\"w-100\"\r\n' id='\"btnShowMoreLess\"\r\n' onclick="{()" variant='\"secondary\"\r\n'> {\r\n                      quantityOfRatesShown &gt;= quotes.length ? showLess() : showMore();\r\n                    }}&gt;\r\n                    {t(\r\n                      `${\r\n                        quantityOfRatesShown &gt;= quotes.length\r\n                          ? \"ui.storefront.checkout.views.shippingInformation.showLess\"\r\n                          : \"ui.storefront.checkout.views.shippingInformation.showMore\"\r\n                      }`\r\n                    )}\r\n                  \r\n                </button\r\n></td></tr></tbody></table>\r\n      \r\n    </row>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { AccountContactModel, RateQuoteModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { PurchaseRateQuotesManagerWidget } from \"src/Checkout/PurchaseRateQuotesManagerWidget\";\r\nimport { ICheckoutShippingStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\r\nimport { ApplyCurrentCartShippingRateQuoteDto } from \"src/_api\";\r\nimport { setCartByType } from \"src/_redux/slices/cartSlice\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\n\r\nexport const CheckoutShippingStep = (props: ICheckoutShippingStepProps): JSX.Element =&gt; {\r\n  const {\r\n    onCompleteCheckoutShippingStep,\r\n    cartBillingContact,\r\n    continueText\r\n  } = props;\r\n\r\n  const [ sameAsBilling, setSameAsBilling ] = useState<boolean>(false);\r\n  const [ estimatedShippingCost, setEstimatedShippingCost ] = useState<number>(null);\r\n  const [ cartShippingContact, setCartShippingContact ] = useState<accountcontactmodel>(null);\r\n  const [ shippingRateQuotes, setShippingRateQuotes ] = useState<ratequotemodel[]>(null);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const dispatch = useDispatch();\r\n  const addressBook = useAddressBook();\r\n\r\n  useEffect(() =&gt; {\r\n    onChangeWithRatesReset();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ sameAsBilling ]);\r\n\r\n  const onChangeWithRatesReset = () =&gt; {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .ClearCurrentCartShippingRateQuote({ TypeName: \"Cart\" })\r\n      .then(_res =&gt; {\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to clear current cart shipping rate quote\");\r\n      });\r\n  };\r\n\r\n  function getShippingRateQuotes() {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .GetCurrentCartShippingRateQuotes({\r\n        Expedited: false,\r\n        TypeName: \"Cart\"\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          setShippingRateQuotes(res.data.Result);\r\n          finishRunning(false);\r\n        } else {\r\n          finishRunning(true, \"Failed to get shipping rate quotes\");\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to get shipping rate quotes\");\r\n      });\r\n  }\r\n\r\n  function toggleShippingSameAsBilling() {\r\n    setRunning();\r\n    setShippingRateQuotes(null);\r\n    cvApi.shopping\r\n      .CurrentCartSetSetSameAsBilling({\r\n        TypeName: \"Cart\",\r\n        IsSameAsBilling: !sameAsBilling\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          setSameAsBilling(!sameAsBilling);\r\n          if (!sameAsBilling) {\r\n            setCartShippingContact(null);\r\n          }\r\n          finishRunning(false);\r\n        } else {\r\n          finishRunning(true, \"Failed to mark cart shipping address to be same as billing\");\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err.message || \"Failed to mark cart shipping address to be same as billing\"\r\n        );\r\n      });\r\n  }\r\n\r\n  function updateCartShippingContact(contact: AccountContactModel) {\r\n    setShippingRateQuotes(null);\r\n    setRunning();\r\n    cvApi.shopping\r\n      .CurrentCartSetShippingContact({\r\n        TypeName: \"Cart\",\r\n        ShippingContact: contact.Slave\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          setCartShippingContact(contact);\r\n          finishRunning(false);\r\n        } else {\r\n          finishRunning(true, \" failed to update cart shipping contact\");\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n        finishRunning(true, err.message || \" failed to update cart shipping contact\");\r\n      });\r\n  }\r\n\r\n  function onRateQuoteSelected(rateQuote: RateQuoteModel): void {\r\n    setRunning();\r\n    const dto: ApplyCurrentCartShippingRateQuoteDto = {\r\n      // TODO: RequestedShipDate\r\n      TypeName: \"Cart\",\r\n      RateQuoteID: rateQuote.ID\r\n    };\r\n    cvApi.shopping\r\n      .ApplyCurrentCartShippingRateQuote(dto)\r\n      .then(r =&gt; {\r\n        if (!r.data.ActionSucceeded) {\r\n          finishRunning(true, null, r.data.Messages);\r\n          return Promise.reject(new Error(\"Action failed\"));\r\n        }\r\n        setEstimatedShippingCost(rateQuote.Rate);\r\n        return cvApi.shopping.GetCurrentCart({\r\n          TypeName: \"Cart\",\r\n          Validate: true\r\n        });\r\n      })\r\n      .then(res =&gt; {\r\n        if (!res.data.ActionSucceeded) {\r\n          finishRunning(\r\n            true,\r\n            null,\r\n            res.data.Messages ?? [ \"Failed to get current cart after rate quote selected\" ]\r\n          );\r\n          return;\r\n        }\r\n        dispatch(setCartByType({ type: ServiceStrings.carts.types.cart, cart: res.data.Result }));\r\n        finishRunning();\r\n      })\r\n      .catch(reason =&gt; finishRunning(true, reason));\r\n  }\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <h4 classname='\"mt-2\"'>\r\n          <span\r\n data-translate='\"ui.storefront.checkout.billingInfo.whichAddy\"' id='\"CheckoutBillingStageText\"\r\n'>\r\n            Which shipping address would you like to use? {viewState.running}\r\n          \r\n           <span classname='\"text-danger\"'>*</span>\r\n        </span\r\n></h4>\r\n        <form.check classname='\"mb-0\"' type='\"checkbox\"'>\r\n          <form.check.label classname='\"mb-0\"'>\r\n            <form.check.input onclick="{toggleShippingSameAsBilling}" type='\"checkbox\"'>\r\n             \r\n            <span data-translate='\"ui.storefront.checkout.shippingBilling\"'>Same as Billing</span>\r\n          </form.check.input></form.check.label>\r\n        </form.check>\r\n        <hr/>\r\n      \r\n      \r\n        <row>\r\n          \r\n            {sameAsBilling\r\n              ? <addressblock\r\n address="{cartBillingContact.Slave.Address}\r\n" contact="{cartBillingContact.Slave}\r\n">\r\n              : <contactswitch\r\n =="" accountcontacts="{addressBook}\r\n" onaddressadded="{addressData" onchange="{updateCartShippingContact}\r\n"> {\r\n                  // Do Nothing\r\n                }}\r\n              /&gt;\r\n            }\r\n          \r\n          {viewState.running &amp;&amp; <loadingwidget>}\r\n          {shippingRateQuotes\r\n            &amp;&amp; \r\n              <purchaseratequotesmanagerwidget\r\n onrateselected="{onRateQuoteSelected}\r\n" quotes="{shippingRateQuotes}\r\n">\r\n            \r\n          }\r\n          \r\n            <div classname='\"d-flex' mb-4\"="">\r\n              <button\r\n !sameasbilling}\r\n="" &&="" data-sid='\"btnGetShippingRateQuotes1\"\r\n' disabled="{!cartShippingContact" onclick="{getShippingRateQuotes}" variant='\"outline-primary\"\r\n'>\r\n                Estimate Shipping Cost\r\n              \r\n              <button\r\n =="=" data-sid='\"btnGetShippingRateQuotes2\"\r\n' disabled="{estimatedShippingCost" null}\r\n="" onclick="{()" variant='\"primary\"\r\n'> {\r\n                  if (estimatedShippingCost !== null) {\r\n                    onCompleteCheckoutShippingStep(cartShippingContact, sameAsBilling);\r\n                  }\r\n                }}&gt;\r\n                {continueText}\r\n              \r\n            </button\r\n></button\r\n></div>\r\n          \r\n        </purchaseratequotesmanagerwidget\r\n></loadingwidget></contactswitch\r\n></addressblock\r\n></row>\r\n      \r\n    </row>\r\n  );\r\n};\r\n","import { Button, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n  AccountContactModel,\r\n  SalesItemTargetBaseModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { AddToCartQuantitySelector } from \"src/Cart/controls\";\r\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\r\n\r\ninterface ISplitShippingTargetProps {\r\n  target: SalesItemTargetBaseModel;\r\n  accountContacts: AccountContactModel[];\r\n  onContactChanged: (contact: AccountContactModel) =&gt; void;\r\n  onAddressAdded: (newAddressData: AccountContactModel) =&gt; void;\r\n  decreaseDisabled: boolean;\r\n  increaseDisabled: boolean;\r\n  onQuantityChanged: (val: number) =&gt; void;\r\n  removeDisabled: boolean;\r\n  addDisabled: boolean;\r\n  onRemoveClicked: () =&gt; void;\r\n  onAddClicked: () =&gt; void;\r\n  index?: string;\r\n}\r\n\r\nexport const SplitShippingTarget = (props: ISplitShippingTargetProps): JSX.Element =&gt; {\r\n  const {\r\n    target,\r\n    accountContacts,\r\n    onContactChanged,\r\n    onAddressAdded,\r\n    decreaseDisabled,\r\n    increaseDisabled,\r\n    onQuantityChanged,\r\n    removeDisabled,\r\n    addDisabled,\r\n    onRemoveClicked,\r\n    onAddClicked,\r\n    index\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <div classname='\"form-group' mb-0\"="">\r\n          <contactswitch\r\n ?="" accountcontacts.find(ac="" allowadd="{true}\r\n" hideaddressblock="{true}\r\n" initialcontact="{\r\n" target.destinationcontact\r\n="" useaddbutton="{true}\r\n"> ac.SlaveID === target.DestinationContact.ID)\r\n                : null\r\n            }\r\n            accountContacts={accountContacts}\r\n            onChange={onContactChanged}\r\n            onAddressAdded={onAddressAdded}\r\n            ddSelectAddressDataSID={`ddSelectAddressDataSID_${index}`}\r\n            btnAddAddressDataSID={`btnAddAddressDataSID_${index}`}\r\n          /&gt;\r\n        </contactswitch\r\n></div>\r\n      \r\n      \r\n        <addtocartquantityselector\r\n debouncems="{0}\r\n" decreasedisabled="{decreaseDisabled}\r\n" id="{`${target.SerializableAttributes.InternalTrackingID.Value}_${target.Quantity}`}\r\n" increasedisabled="{increaseDisabled}\r\n" initialvalue="{target.Quantity}\r\n" key="{`${target.SerializableAttributes.InternalTrackingID.Value}_${target.Quantity}`}\r\n" onchange="{onQuantityChanged}\r\n" useinput="{false}\r\n">\r\n      \r\n      \r\n        <button\r\n disabled="{removeDisabled}\r\n" id='\"btnCheckoutSplitShippingRemoveTarget\"\r\n' onclick="{onRemoveClicked}" type='\"button\"\r\n' variant='\"outline-danger\"\r\n'>\r\n          <i classname='\"fal' fa-trash\"="">\r\n          <span classname='\"sr-only\"'>{t(\"ui.storefront.checkout.splitShipping.RemoveTarget\")}</span>\r\n        \r\n        <button\r\n disabled="{addDisabled}\r\n" id='\"btnCheckoutSplitShippingAddTarget\"\r\n' onclick="{onAddClicked}" type='\"button\"\r\n' variant='\"outline-success\"\r\n'>\r\n          <i classname='\"fal' fa-plus\"="">\r\n          <span classname='\"sr-only\"'>{t(\"ui.storefront.checkout.splitShipping.AddTarget\")}</span>\r\n        \r\n      \r\n    </i></button\r\n></i></button\r\n></addtocartquantityselector\r\n></row><i classname='\"fal' fa-trash\"=""><i classname='\"fal' fa-plus\"="">\r\n  );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable no-unused-vars */\r\n/**\r\n * @file src/_api/clarityEcomService_shared.ts\r\n * @author Copyright (c) 2015-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Clarity eCommerce API/service shared class\r\n */\r\n\r\n// eslint-disable-next-line max-classes-per-file\r\nimport {\r\n  AccountModel,\r\n  BrandModel,\r\n  CalculatedInventory,\r\n  CategoryModel as DtoClassCategoryModel,\r\n  ContactModel,\r\n  CurrencyModel,\r\n  FileEntityType,\r\n  FranchiseModel,\r\n  ManufacturerModel,\r\n  NameableBaseModel,\r\n  NoteModel,\r\n  PriceRuleModel,\r\n  SalesEventBaseModel,\r\n  SalesReturnReasonModel,\r\n  SearchFormBase,\r\n  SerializableAttributesDictionary,\r\n  StatusModel,\r\n  StoredFileModel,\r\n  StoreModel,\r\n  TypeModel,\r\n  UploadStatus,\r\n  UserModel as DtoClassUserModel,\r\n  VendorModel,\r\n  ProductModel as DtoClassProductModel,\r\n  CEFActionResponse as DtoClassCEFActionResponse,\r\n  AggregateTree as DtoAggregateTree,\r\n  AuctionSearchViewModel as DtoClassAuctionSearchViewModel,\r\n  LotSearchViewModel as DtoClassLotSearchViewModel,\r\n  ProductSearchViewModel as DtoClassProductSearchViewModel,\r\n  AggregatePricingRange,\r\n  AggregateRatingRange,\r\n  IndexableModelBase,\r\n  SalesItemTargetBaseModel,\r\n  ReviewModel,\r\n  GeneralAttributeModel\r\n} from \"./cvApi._DtoClasses\";\r\n\r\n/**\r\n * @name CEFActionResponse\r\n */\r\nexport interface CEFActionResponse extends DtoClassCEFActionResponse {\r\n  ActionSucceeded: boolean;\r\n  Messages?: Array<string>;\r\n}\r\n\r\n/**\r\n * @name CEFActionResponseT<tresult>\r\n * @property {TResult} Result\r\n * @inheritdoc {CEFActionResponse}\r\n */\r\nexport interface CEFActionResponseT<tresult> extends CEFActionResponse {\r\n  Result: TResult;\r\n}\r\n\r\nexport interface IHttpHeadersGetter {\r\n  (): { [name: string]: string };\r\n  (headerName: string): string;\r\n}\r\n\r\nexport interface IHttpPromiseCallback<t> {\r\n  (\r\n    data: T,\r\n    status: number,\r\n    headers: IHttpHeadersGetter,\r\n    // @ts-ignore\r\n    config?\r\n  ): void;\r\n}\r\n\r\nexport interface IHttpPromiseCallbackArgShort {\r\n  status?: number;\r\n  headers?: IHttpHeadersGetter;\r\n  // @ts-ignore\r\n  config?;\r\n  statusText?: string;\r\n}\r\n\r\nexport interface IHttpPromiseCallbackArg<t> extends IHttpPromiseCallbackArgShort {\r\n  data?: T;\r\n}\r\n\r\nexport interface IHttpPromise<t> extends Promise<ihttppromisecallbackarg<t>&gt; {}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsIDOnQueryBase {\r\n  ID: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface ImplementsKeyOnQueryBase {\r\n  Key?: string;\r\n}\r\n\r\nexport interface BaseModel {\r\n  __caller?: string;\r\n  // Keys not in original model\r\n  [propName: string]: any;\r\n}\r\n\r\nexport class KeyValuePair<tkey, tvalue=""> {\r\n  Key: TKey;\r\n  Value: TValue;\r\n}\r\n\r\nexport class Dictionary<tvalue> {\r\n  // eslint-disable-next-line no-restricted-globals, no-undef\r\n  [name: string]: TValue;\r\n}\r\n\r\nexport class Guid {\r\n  static newGuid(): string {\r\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/gu, c =&gt; {\r\n      // eslint-disable-next-line no-bitwise, @typescript-eslint/no-extra-parens\r\n      const r = (Math.random() * 16) | 0;\r\n      // eslint-disable-next-line no-bitwise, @typescript-eslint/no-extra-parens\r\n      const v = c === \"x\" ? r : (r &amp; 0x3) | 0x8;\r\n      return v.toString(16);\r\n    });\r\n  }\r\n}\r\n\r\nexport interface TransactionResponse {\r\n  success: boolean;\r\n  responseCode: number;\r\n  statusMessage: string;\r\n  transactions: Transaction[];\r\n}\r\n\r\nexport interface Transaction {\r\n  transactionID: string;\r\n  creditCard: CreditCard;\r\n  transactionType: string;\r\n  description: string;\r\n  amount: number;\r\n  invoiceID: string;\r\n  shippingAddress: Address;\r\n  billingAddress: Address;\r\n  ReceiptEmailedTo: string;\r\n  taxAmount: string;\r\n  customerReferenceID: string;\r\n  approval_code: string;\r\n  approvalMessage: string;\r\n  avsResponse: string;\r\n  cscResponse: string;\r\n  statusCode: string;\r\n  statusMessage: string;\r\n  created: Created;\r\n  settled: string;\r\n  customerID: string;\r\n  DiscretionaryData: object;\r\n}\r\n\r\nexport interface CreditCard {\r\n  maskedNumber: string;\r\n  expirationMonth: string;\r\n  expirationYear: string;\r\n}\r\n\r\nexport interface Address {\r\n  name: string;\r\n  streetAddress: string;\r\n  streetAddress2: string;\r\n  city: string;\r\n  state: string;\r\n  zip: string;\r\n  country: string;\r\n}\r\n\r\nexport interface Created {\r\n  through: string;\r\n  at: string;\r\n  by: string;\r\n  fromIP: string;\r\n}\r\n\r\nexport interface AuctionSearchViewModel extends DtoClassAuctionSearchViewModel {\r\n  Categories?: Array<dtoclasscategorymodel>;\r\n}\r\nexport interface LotSearchViewModel extends DtoClassLotSearchViewModel {\r\n  Categories?: Array<dtoclasscategorymodel>;\r\n}\r\nexport interface ProductSearchViewModel extends DtoClassProductSearchViewModel {\r\n  Categories?: Array<dtoclasscategorymodel>;\r\n}\r\n\r\nexport interface SearchViewModelBase<tsearchform extends="" indexablemodelbase="" searchformbase,tindexmodel=""> {\r\n  /** Gets or sets the form. */\r\n  Form: TSearchForm;\r\n\r\n  /** Gets or sets the documents. */\r\n  Documents: Array<tindexmodel>;\r\n\r\n  /** Gets or sets the elapsed milliseconds. */\r\n  ElapsedMilliseconds: number;\r\n\r\n  /** Gets or sets the number of.  */\r\n  Total: number;\r\n\r\n  /** Gets or sets the total number of pages. */\r\n  TotalPages: number;\r\n\r\n  /** Gets or sets the server error. */\r\n  ServerError?: any;\r\n\r\n  /** Gets or sets information describing the debug. */\r\n  DebugInformation?: string | null;\r\n\r\n  /** Gets or sets a value indicating whether this SearchViewModel is valid. */\r\n  IsValid: boolean;\r\n\r\n  /** Gets or sets the hits meta data maximum score. */\r\n  HitsMetaDataMaxScore?: number | null;\r\n\r\n  /** Gets or sets the hits meta data total. */\r\n  HitsMetaDataTotal?: number | null;\r\n\r\n  /** Gets or sets the hits meta data hit scores. */\r\n  HitsMetaDataHitScores?: Dictionary<number> | null;\r\n\r\n  /** Gets or sets the attributes. */\r\n  Attributes?: Array<keyvaluepair<string, array<keyvaluepair<string,="" null="" number="" |="">&gt;&gt;&gt; | null;\r\n\r\n  /** Gets or sets the brand IDs. */\r\n  BrandIDs?: Dictionary<number null="" |=""> | null;\r\n\r\n  /** Gets or sets the brand names. */\r\n  BrandNames?: Dictionary<number null="" |=""> | null;\r\n\r\n  /** Gets or sets the categories tree. */\r\n  CategoriesTree?: AggregateTree | null;\r\n\r\n  /** Gets or sets the franchise IDs. */\r\n  FranchiseIDs?: Dictionary<number null="" |=""> | null;\r\n\r\n  /** Gets or sets the product IDs. */\r\n  ProductIDs?: Dictionary<number null="" |=""> | null;\r\n\r\n  /** Gets or sets the manufacturer IDs. */\r\n  ManufacturerIDs?: Dictionary<number null="" |=""> | null;\r\n\r\n  /** Gets or sets the store IDs. */\r\n  StoreIDs?: Dictionary<number null="" |=""> | null;\r\n\r\n  /** Gets or sets the type values. */\r\n  Types?: Dictionary<indexabletypemodel null="" |=""> | null;\r\n\r\n  /** Gets or sets the vendor IDs. */\r\n  VendorIDs?: Dictionary<number null="" |=""> | null;\r\n\r\n  /** Gets or sets the pricing ranges. */\r\n  PricingRanges?: Array<aggregatepricingrange> | null;\r\n\r\n  /** Gets or sets the rating ranges. */\r\n  RatingRanges?: Array<aggregateratingrange> | null;\r\n\r\n  /** Gets or sets the result IDs. */\r\n  ResultIDs?: Array<number> | null;\r\n}\r\n\r\n/**\r\n * @see {@link IndexableFilterBase}\r\n * @public\r\n */\r\nexport interface IndexableTypeModel extends IndexableFilterBase {\r\n  SortOrder: number;\r\n  Count: number;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface IndexableFilterBase {\r\n  ID: number;\r\n  Key?: string;\r\n  Name?: string;\r\n}\r\n\r\nexport interface HaveAParentBaseModel<tmodel> {\r\n  ParentID?: number;\r\n  Parent?: TModel;\r\n  Children?: Array<tmodel>;\r\n  /** Whether or not the object has child objects (read-only) */\r\n  HasChildren: boolean;\r\n}\r\n\r\nexport interface HaveJsonAttributesBaseModel {\r\n  /** A list of extending Attributes for the this object */\r\n  SerializableAttributes?: SerializableAttributesDictionary;\r\n}\r\n\r\nexport interface HaveATypeSearchModel {\r\n  /** The Type ID for objects */\r\n  TypeID?: number;\r\n  /** The Type ID for objects to specifically exclude */\r\n  ExcludedTypeID?: number;\r\n  /** The Type IDs for objects to specifically exclude */\r\n  ExcludedTypeIDs?: Array<number>;\r\n  /** The Type Key for objects */\r\n  TypeKey?: string;\r\n  /** The Type Key for objects to specifically exclude */\r\n  ExcludedTypeKey?: string;\r\n  /** The Type Keys for objects to specifically exclude */\r\n  ExcludedTypeKeys?: Array<string>;\r\n  /** The Type Name for objects */\r\n  TypeName?: string;\r\n  /** The Type Name for objects to specifically exclude */\r\n  ExcludedTypeName?: string;\r\n  /** The Type Names for objects to specifically exclude */\r\n  ExcludedTypeNames?: Array<string>;\r\n  /** The Type Display Name for objects */\r\n  TypeDisplayName?: string;\r\n  /** The Type Display Name for objects to specifically exclude */\r\n  ExcludedTypeDisplayName?: string;\r\n  /** The Type Display Names for objects to specifically exclude */\r\n  ExcludedTypeDisplayNames?: Array<string>;\r\n  /** The Type Translation Key for objects */\r\n  TypeTranslationKey?: string;\r\n}\r\n\r\nexport interface HaveSeoBaseModel {\r\n  /** SEO Keywords to use in the Meta tags of the page for this object */\r\n  SeoKeywords?: string;\r\n  /** SEO URL to use to link to the page for this object */\r\n  SeoUrl?: string;\r\n  /** SEO Description to use in the Meta tags of the page for this object */\r\n  SeoDescription?: string;\r\n  /** SEO General Meta Data to use in the Meta tags of the page for this object */\r\n  SeoMetaData?: string;\r\n  /** SEO Page Title to use in the Meta tags of the page for this object */\r\n  SeoPageTitle?: string;\r\n}\r\n\r\nexport interface HaveNotesBaseModel {\r\n  /** Notes for the object, optional */\r\n  Notes?: Array<notemodel>;\r\n}\r\n\r\nexport interface AggregateTree extends DtoAggregateTree {\r\n  PrimaryImageFileName?: string;\r\n  DisplayName?: string;\r\n}\r\n\r\nexport interface HaveImagesBaseModel<timagemodel extends="" iimagebasemodel=""> {\r\n  /** Images for the object, optional */\r\n  Images?: Array<timagemodel>;\r\n}\r\n\r\nexport interface IImageBaseModel extends BaseModel, HaveATypeModel<typemodel> {\r\n  TypeKey?: string;\r\n  TypeName?: string;\r\n  TypeDisplayName?: string;\r\n  TypeTranslationKey?: string;\r\n  TypeSortOrder?: number;\r\n  SortOrder?: number;\r\n  DisplayName?: string;\r\n  SeoTitle?: string;\r\n  Author?: string;\r\n  MediaDate?: Date;\r\n  Copyright?: string;\r\n  Location?: string;\r\n  Latitude?: number;\r\n  Longitude?: number;\r\n  IsPrimary: boolean;\r\n  OriginalWidth?: number;\r\n  OriginalHeight?: number;\r\n  OriginalFileFormat?: string;\r\n  OriginalFileName?: string;\r\n  OriginalIsStoredInDB: boolean;\r\n  OriginalBytes?: Array<number>;\r\n  ThumbnailWidth?: number;\r\n  ThumbnailHeight?: number;\r\n  ThumbnailFileFormat?: string;\r\n  ThumbnailFileName?: string;\r\n  ThumbnailIsStoredInDB: boolean;\r\n  ThumbnailBytes?: Array<number>;\r\n  MasterID?: number;\r\n  MasterKey?: string;\r\n}\r\n\r\n/* AccountModel extends BaseModel */\r\nexport interface AmARelationshipTableModel<tslavemodel basemodel="" extends="">\r\n  extends BaseModel {\r\n  /** Gets or sets the identifier of the master. */\r\n  MasterID?: number;\r\n  /** Gets or sets the master key. */\r\n  MasterKey?: string;\r\n  /** Gets or sets the identifier of the slave. */\r\n  SlaveID?: number;\r\n  /** Gets or sets the slave key. */\r\n  SlaveKey?: string;\r\n  /** Gets or sets the slave. */\r\n  Slave?: TSlaveModel;\r\n}\r\n\r\nexport interface AmAStoredFileRelationshipTableModel\r\n  extends AmARelationshipTableModel<storedfilemodel>,\r\n  HaveSeoBaseModel,\r\n  NameableBaseModel {\r\n  /** Gets or sets the identifier of the file access type. */\r\n  FileAccessTypeID: number;\r\n  /** Gets or sets the sort order. */\r\n  SortOrder?: number;\r\n}\r\n\r\nexport interface HaveStoredFilesBaseModel&lt;\r\n  TFileModel extends AmAStoredFileRelationshipTableModel\r\n  &gt; {\r\n  /** StoredFiles for the object, optional */\r\n  StoredFiles?: Array<tfilemodel>;\r\n}\r\n\r\nexport interface HaveAStatusModel {\r\n  /** Identifier for the Status of this object, required if no StatusModel present */\r\n  StatusID: number;\r\n  /** Model for Status of this object, required if no StatusID present */\r\n  Status?: StatusModel;\r\n  /** Key for the Status of this object, read-only */\r\n  StatusKey?: string;\r\n  /** Name for the Status of this object, read-only */\r\n  StatusName?: string;\r\n  /** The status display name */\r\n  StatusDisplayName?: string;\r\n  /** The status translation key */\r\n  StatusTranslationKey?: string;\r\n  /** The status sort order */\r\n  StatusSortOrder?: number;\r\n}\r\n\r\nexport interface HaveAStateModel {\r\n  /** Identifier for the State of this object, required if no StateModel present */\r\n  StateID: number;\r\n  /** Model for State of this object, required if no StateID present */\r\n  State?: StatusModel;\r\n  /** Key for the State of this object, read-only */\r\n  StateKey?: string;\r\n  /** Name for the State of this object, read-only */\r\n  StateName?: string;\r\n  /** The state display name */\r\n  StateDisplayName?: string;\r\n  /** The state translation key */\r\n  StateTranslationKey?: string;\r\n  /** The state sort order */\r\n  StateSortOrder?: number;\r\n}\r\n\r\nexport interface HaveATypeModel<ttypemodel> {\r\n  /** Identifier for the Type of this object, required if no TypeModel present */\r\n  TypeID: number;\r\n  /** Model for Type of this object, required if no TypeID present */\r\n  Type?: TTypeModel;\r\n  /** Key for the Type of this object, read-only */\r\n  TypeKey?: string;\r\n  /** Name for the Type of this object, read-only */\r\n  TypeName?: string;\r\n  /** The type display name */\r\n  TypeDisplayName?: string;\r\n  /** The type translation key */\r\n  TypeTranslationKey?: string;\r\n  /** The type sort order */\r\n  TypeSortOrder?: number;\r\n}\r\n\r\nexport interface HaveAStatusSearchModel {\r\n  /** The Status ID for objects */\r\n  StatusID?: number;\r\n  /** The Status ID for objects to specifically exclude */\r\n  ExcludedStatusID?: number;\r\n  /** The Status IDs for objects to specifically exclude */\r\n  ExcludedStatusIDs?: Array<number>;\r\n  /** The Status Key for objects */\r\n  StatusKey?: string;\r\n  /** The Status Key for objects to specifically exclude */\r\n  ExcludedStatusKey?: string;\r\n  /** The Status Keys for objects to specifically exclude */\r\n  ExcludedStatusKeys?: Array<string>;\r\n  /** The Status Name for objects */\r\n  StatusName?: string;\r\n  /** The Status Name for objects to specifically exclude */\r\n  ExcludedStatusName?: string;\r\n  /** The Status Names for objects to specifically exclude */\r\n  ExcludedStatusNames?: Array<string>;\r\n  /** The Status Display Name for objects */\r\n  StatusDisplayName?: string;\r\n  /** The Status Display Name for objects to specifically exclude */\r\n  ExcludedStatusDisplayName?: string;\r\n  /** The Status Display Names for objects to specifically exclude */\r\n  ExcludedStatusDisplayNames?: Array<string>;\r\n  /** The Status Translation Key for objects */\r\n  StatusTranslationKey?: string;\r\n}\r\n\r\nexport interface HaveAStatusBaseSearchModel {\r\n  /** The Status ID for objects */\r\n  StatusID?: number;\r\n  /** The Status ID for objects to specifically exclude */\r\n  ExcludedStatusID?: number;\r\n  /** The Status IDs for objects to specifically exclude */\r\n  ExcludedStatusIDs?: Array<number>;\r\n  /** The Status Key for objects */\r\n  StatusKey?: string;\r\n  /** The Status Key for objects to specifically exclude */\r\n  ExcludedStatusKey?: string;\r\n  /** The Status Keys for objects to specifically exclude */\r\n  ExcludedStatusKeys?: Array<string>;\r\n  /** The Status Name for objects */\r\n  StatusName?: string;\r\n  /** The Status Name for objects to specifically exclude */\r\n  ExcludedStatusName?: string;\r\n  /** The Status Names for objects to specifically exclude */\r\n  ExcludedStatusNames?: Array<string>;\r\n  /** The Status Display Name for objects */\r\n  StatusDisplayName?: string;\r\n  /** The Status Display Name for objects to specifically exclude */\r\n  ExcludedStatusDisplayName?: string;\r\n  /** The Status Display Names for objects to specifically exclude */\r\n  ExcludedStatusDisplayNames?: Array<string>;\r\n  /** The Status Translation Key for objects */\r\n  StatusTranslationKey?: string;\r\n}\r\n\r\nexport interface HaveAStateSearchModel {\r\n  /** The State ID for objects */\r\n  StateID?: number;\r\n  /** The State ID for objects to specifically exclude */\r\n  ExcludedStateID?: number;\r\n  /** The State IDs for objects to specifically exclude */\r\n  ExcludedStateIDs?: Array<number>;\r\n  /** The State Key for objects */\r\n  StateKey?: string;\r\n  /** The State Key for objects to specifically exclude */\r\n  ExcludedStateKey?: string;\r\n  /** The State Keys for objects to specifically exclude */\r\n  ExcludedStateKeys?: Array<string>;\r\n  /** The State Name for objects */\r\n  StateName?: string;\r\n  /** The State Name for objects to specifically exclude */\r\n  ExcludedStateName?: string;\r\n  /** The State Names for objects to specifically exclude */\r\n  ExcludedStateNames?: Array<string>;\r\n  /** The State Display Name for objects */\r\n  StateDisplayName?: string;\r\n  /** The State Display Name for objects to specifically exclude */\r\n  ExcludedStateDisplayName?: string;\r\n  /** The State Display Names for objects to specifically exclude */\r\n  ExcludedStateDisplayNames?: Array<string>;\r\n  /** The State Translation Key for objects */\r\n  StateTranslationKey?: string;\r\n}\r\n\r\nexport interface AmFilterableByAccountsBaseModel<taccountrelatemodel> {\r\n  /** Accounts this object is associated with */\r\n  Accounts?: Array<taccountrelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByBrandsBaseModel<tbrandrelatemodel> {\r\n  /** Brands this object is associated with */\r\n  Brands?: Array<tbrandrelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByCategoriesBaseModel<tcategoryrelatemodel> {\r\n  /** Categories this object is associated with */\r\n  Categories?: Array<tcategoryrelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByFranchisesBaseModel<tfranchiserelatemodel> {\r\n  /** Franchises this object is associated with */\r\n  Franchises?: Array<tfranchiserelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByManufacturersBaseModel<tmanufacturerrelatemodel> {\r\n  /** Manufacturers this object is associated with */\r\n  Manufacturers?: Array<tmanufacturerrelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByProductsBaseModel<tproductrelatemodel> {\r\n  /** Products this object is associated with */\r\n  Products?: Array<tproductrelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByStoreBaseModelT<tother> {\r\n  /** Gets or sets the stores. */\r\n  Stores?: Array<tother>;\r\n}\r\n\r\nexport interface AmFilterableByStoresBaseModel<tstorerelatemodel> {\r\n  /** Stores this object is associated with */\r\n  Stores?: Array<tstorerelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByUsersBaseModel<tuserrelatemodel> {\r\n  /** Users this object is associated with */\r\n  Users?: Array<tuserrelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByVendorsBaseModel<tvendorrelatemodel> {\r\n  /** Vendors this object is associated with */\r\n  Vendors?: Array<tvendorrelatemodel>;\r\n}\r\n\r\nexport interface AmFilterableByAccountBaseModel {\r\n  /** Gets or sets the identifier of the Account. */\r\n  AccountID?: number;\r\n  /** Gets or sets the Account. */\r\n  Account?: AccountModel;\r\n  /** The Account key */\r\n  StorAccountKey?: string;\r\n  /** The Account name */\r\n  AccountName?: string;\r\n  /** The Account seo url */\r\n  AccountSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByBrandBaseModel {\r\n  /** Gets or sets the identifier of the Brand. */\r\n  BrandID?: number;\r\n  /** Gets or sets the Brand. */\r\n  Brand?: BrandModel;\r\n  /** The Brand key */\r\n  BrandKey?: string;\r\n  /** The Brand name */\r\n  BrandName?: string;\r\n}\r\n\r\nexport interface AmFilterableByFranchiseBaseModel {\r\n  /** Gets or sets the identifier of the Franchise. */\r\n  FranchiseID?: number;\r\n  /** Gets or sets the Franchise. */\r\n  Franchise?: FranchiseModel;\r\n  /** The Franchise key */\r\n  FranchiseKey?: string;\r\n  /** The Franchise name */\r\n  FranchiseName?: string;\r\n}\r\n\r\nexport interface AmFilterableByCategoryBaseModel {\r\n  /** Gets or sets the identifier of the Category. */\r\n  CategoryID?: number;\r\n  /** Gets or sets the Category. */\r\n  Category?: DtoClassCategoryModel;\r\n  /** The Category key */\r\n  CategoryKey?: string;\r\n  /** The Category name */\r\n  CategoryName?: string;\r\n  /** The Category seo url */\r\n  CategorySeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByManufacturerBaseModel {\r\n  /** Gets or sets the identifier of the Manufacturer. */\r\n  ManufacturerID?: number;\r\n  /** Gets or sets the Manufacturer. */\r\n  Manufacturer?: ManufacturerModel;\r\n  /** The Manufacturer key */\r\n  ManufacturerKey?: string;\r\n  /** The Manufacturer name */\r\n  ManufacturerName?: string;\r\n  /** The Manufacturer seo url */\r\n  ManufacturerSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByProductBaseModel {\r\n  /** Gets or sets the identifier of the Product. */\r\n  ProductID?: number;\r\n  /** Gets or sets the Product. */\r\n  Product?: ProductModel;\r\n  /** The Product key */\r\n  ProductKey?: string;\r\n  /** The Product name */\r\n  ProductName?: string;\r\n  /** The Product seo url */\r\n  ProductSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByStoreBaseModel {\r\n  /** Gets or sets the identifier of the Store. */\r\n  StoreID?: number;\r\n  /** Gets or sets the Store. */\r\n  Store?: StoreModel;\r\n  /** The Store key */\r\n  StoreKey?: string;\r\n  /** The Store name */\r\n  StoreName?: string;\r\n  /** The Store seo url */\r\n  StoreSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByUserBaseModel {\r\n  /** Gets or sets the identifier of the User. */\r\n  UserID?: number;\r\n  /** Gets or sets the User. */\r\n  User?: UserModel;\r\n  /** The User key */\r\n  UserKey?: string;\r\n  /** The User name */\r\n  UserName?: string;\r\n}\r\n\r\nexport interface AmFilterableByVendorBaseModel {\r\n  /** Gets or sets the identifier of the Vendor. */\r\n  VendorID?: number;\r\n  /** Gets or sets the Vendor. */\r\n  Vendor?: VendorModel;\r\n  /** The Vendor key */\r\n  VendorKey?: string;\r\n  /** The Vendor name */\r\n  VendorName?: string;\r\n  /** The Vendor seo url */\r\n  VendorSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableAccountBaseModel {\r\n  /** Gets or sets the identifier of the Account. */\r\n  AccountID?: number;\r\n  /** Gets or sets the Account. */\r\n  Account?: AccountModel;\r\n  /** The Account key */\r\n  AccountKey?: string;\r\n  /** The Account name */\r\n  AccountName?: string;\r\n  /** The Account seo url */\r\n  AccountSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableBrandBaseModel {\r\n  /** Gets or sets the identifier of the Brand. */\r\n  BrandID?: number;\r\n  /** Gets or sets the Brand. */\r\n  Brand?: BrandModel;\r\n  /** The Brand key */\r\n  BrandKey?: string;\r\n  /** The Brand name */\r\n  BrandName?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableCategoryBaseModel {\r\n  /** Gets or sets the identifier of the Category. */\r\n  CategoryID?: number;\r\n  /** Gets or sets the Category. */\r\n  Category?: DtoClassCategoryModel;\r\n  /** The Category key */\r\n  CategoryKey?: string;\r\n  /** The Category name */\r\n  CategoryName?: string;\r\n  /** The Category seo url */\r\n  CategorySeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableManufacturerBaseModel {\r\n  /** Gets or sets the identifier of the Manufacturer. */\r\n  ManufacturerID?: number;\r\n  /** Gets or sets the Manufacturer. */\r\n  Manufacturer?: ManufacturerModel;\r\n  /** The Manufacturer key */\r\n  ManufacturerKey?: string;\r\n  /** The Manufacturer name */\r\n  ManufacturerName?: string;\r\n  /** The Manufacturer seo url */\r\n  ManufacturerSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableProductBaseModel {\r\n  /** Gets or sets the identifier of the Product. */\r\n  ProductID?: number;\r\n  /** Gets or sets the Product. */\r\n  Product?: ProductModel;\r\n  /** The Product key */\r\n  ProductKey?: string;\r\n  /** The Product name */\r\n  ProductName?: string;\r\n  /** The Product seo url */\r\n  ProductSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableStoreBaseModel {\r\n  /** Gets or sets the identifier of the store. */\r\n  StoreID?: number;\r\n  /** Gets or sets the store. */\r\n  Store?: StoreModel;\r\n  /** The store key */\r\n  StoreKey?: string;\r\n  /** The store name */\r\n  StoreName?: string;\r\n  /** The store seo url */\r\n  StoreSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableUserBaseModel {\r\n  /** Gets or sets the identifier of the User. */\r\n  UserID?: number;\r\n  /** Gets or sets the User. */\r\n  User?: UserModel;\r\n  /** The User key */\r\n  UserKey?: string;\r\n  /** The User name */\r\n  UserName?: string;\r\n  /** The User seo url */\r\n  UserSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableVendorBaseModel {\r\n  /** Gets or sets the identifier of the Vendor. */\r\n  VendorID?: number;\r\n  /** Gets or sets the Vendor. */\r\n  Vendor?: VendorModel;\r\n  /** The Vendor key */\r\n  VendorKey?: string;\r\n  /** The Vendor name */\r\n  VendorName?: string;\r\n  /** The Vendor seo url */\r\n  VendorSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByNullableFranchiseBaseModel {\r\n  /** Gets or sets the identifier of the Franchise. */\r\n  FranchiseID?: number;\r\n  /** Gets or sets the Franchise. */\r\n  Franchise?: FranchiseModel;\r\n  /** The Franchise key */\r\n  FranchiseKey?: string;\r\n  /** The Franchise name */\r\n  FranchiseName?: string;\r\n  /** The Franchise seo url */\r\n  FranchiseSeoUrl?: string;\r\n}\r\n\r\nexport interface AmFilterableByAccountSearchModel {\r\n  /** Account ID For Search, Note: This will be overriden on data calls automatically */\r\n  AccountID?: number;\r\n  /** The Account Key for objects */\r\n  AccountKey?: string;\r\n  /** The Account Name for objects */\r\n  AccountName?: string;\r\n}\r\nexport interface AmFilterableByAccountBaseSearchModel\r\n  extends AmFilterableByAccountSearchModel {}\r\n\r\nexport interface AmFilterableByBrandSearchModel {\r\n  /** Brand ID For Search, Note: This will be overriden on data calls automatically */\r\n  BrandID?: number;\r\n  /** The Brand Key for objects */\r\n  BrandKey?: string;\r\n  /** The Brand Name for objects */\r\n  BrandName?: string;\r\n  BrandCategoryID?: number;\r\n}\r\nexport interface AmFilterableByBrandBaseSearchModel\r\n  extends AmFilterableByBrandSearchModel {}\r\n\r\nexport interface AmFilterableByFranchiseSearchModel {\r\n  /** Gets or sets the identifier of the Franchise. */\r\n  FranchiseID?: number;\r\n  /** The Franchise key */\r\n  FranchiseKey?: string;\r\n  /** The Franchise name */\r\n  FranchiseName?: string;\r\n}\r\nexport interface AmFilterableByFranchiseBaseSearchModel\r\n  extends AmFilterableByFranchiseSearchModel {}\r\n\r\nexport interface AmFilterableByCategorySearchModel {\r\n  /** Category ID For Search, Note: This will be overriden on data calls automatically */\r\n  CategoryID?: number;\r\n  /** The Category Key for objects */\r\n  CategoryKey?: string;\r\n  /** The Category Name for objects */\r\n  CategoryName?: string;\r\n  /** The Category SEO URL for objects */\r\n  CategorySeoUrl?: string;\r\n}\r\nexport interface AmFilterableByCategoryBaseSearchModel\r\n  extends AmFilterableByCategorySearchModel {}\r\n\r\nexport interface HaveAContactBaseSearchModel {\r\n  ContactID?: number;\r\n  ContactKey?: string;\r\n  ContactName?: string;\r\n  ContactFirstName?: string;\r\n  ContactLastName?: string;\r\n  ContactPhone?: string;\r\n  ContactFax?: string;\r\n  ContactEmail?: string;\r\n}\r\n\r\nexport interface AmFilterableByManufacturerSearchModel {\r\n  /** Manufacturer ID For Search */\r\n  ManufacturerID?: number;\r\n  /** The Manufacturer Key for objects */\r\n  ManufacturerKey?: string;\r\n  /** The Manufacturer Name for objects */\r\n  ManufacturerName?: string;\r\n}\r\nexport interface AmFilterableByManufacturerBaseSearchModel\r\n  extends AmFilterableByManufacturerSearchModel {}\r\n\r\nexport interface AmFilterableByProductSearchModel {\r\n  /** Product ID For Search, Note: This will be overriden on data calls automatically */\r\n  ProductID?: number;\r\n  /** The Product Key for objects */\r\n  ProductKey?: string;\r\n  /** The Product Name for objects */\r\n  ProductName?: string;\r\n  /** The Product seo url */\r\n  ProductSeoUrl?: string;\r\n}\r\nexport interface AmFilterableByProductBaseSearchModel\r\n  extends AmFilterableByProductSearchModel {}\r\n\r\n  export interface AmFilterableByStoreSearchModel {\r\n  /** Store ID For Search, Note: This will be overriden on data calls automatically */\r\n  StoreID?: number;\r\n  /** The Store Key for objects */\r\n  StoreKey?: string;\r\n  /** The Store Name for objects */\r\n  StoreName?: string;\r\n  /** The store seo url */\r\n  StoreSeoUrl?: string;\r\n  StoreCountryID?: number;\r\n  StoreRegionID?: number;\r\n  StoreCity?: string;\r\n  StoreAnyCountryID?: number;\r\n  StoreAnyRegionID?: number;\r\n  StoreAnyCity?: string;\r\n}\r\nexport interface AmFilterableByStoreBaseSearchModel\r\n  extends AmFilterableByStoreSearchModel {}\r\n\r\nexport interface AmFilterableByUserSearchModel {\r\n  /** User ID For Search, Note: This will be overriden on data calls automatically */\r\n  UserID?: number;\r\n  /** The User Key for objects */\r\n  UserKey?: string;\r\n  /** The User Name for objects */\r\n  UserName?: string;\r\n  /** The User seo url */\r\n  UserSeoUrl?: string;\r\n  /** The User Name for objects */\r\n  UserUsername?: string;\r\n}\r\nexport interface AmFilterableByUserBaseSearchModel\r\n  extends AmFilterableByUserSearchModel {}\r\n\r\nexport interface AmFilterableByVendorSearchModel {\r\n  /** Vendor ID For Search, Note: This will be overriden on data calls automatically */\r\n  VendorID?: number;\r\n  /** The Vendor Key for objects */\r\n  VendorKey?: string;\r\n  /** The Vendor Name for objects */\r\n  VendorName?: string;\r\n}\r\nexport interface AmFilterableByVendorBaseSearchModel\r\n  extends AmFilterableByVendorSearchModel {}\r\n\r\nexport interface HaveDimensionsBaseModel {\r\n  Weight: number;\r\n  WeightUnitOfMeasure?: string;\r\n  Width: number;\r\n  WidthUnitOfMeasure?: string;\r\n  Depth: number;\r\n  DepthUnitOfMeasure?: string;\r\n  Height: number;\r\n  HeightUnitOfMeasure?: string;\r\n}\r\nexport interface HaveNullableDimensionsBaseModel {\r\n  Weight?: number;\r\n  WeightUnitOfMeasure?: string;\r\n  Width?: number;\r\n  WidthUnitOfMeasure?: string;\r\n  Depth?: number;\r\n  DepthUnitOfMeasure?: string;\r\n  Height?: number;\r\n  HeightUnitOfMeasure?: string;\r\n}\r\n\r\nexport interface HaveRequiresRolesBaseModel {\r\n  RequiresRolesList?: Array<string>;\r\n  RequiresRolesAlt?: string;\r\n  RequiresRolesListAlt?: Array<string>;\r\n}\r\n\r\nexport interface HaveOrderMinimumsBaseModel {\r\n  MinimumOrderDollarAmount?: number;\r\n  MinimumOrderDollarAmountAfter?: number;\r\n  MinimumOrderDollarAmountWarningMessage?: string;\r\n  MinimumOrderDollarAmountOverrideFee?: number;\r\n  MinimumOrderDollarAmountOverrideFeeIsPercent: boolean;\r\n  MinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\r\n  MinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\r\n  MinimumOrderQuantityAmount?: number;\r\n  MinimumOrderQuantityAmountAfter?: number;\r\n  MinimumOrderQuantityAmountWarningMessage?: string;\r\n  MinimumOrderQuantityAmountOverrideFee?: number;\r\n  MinimumOrderQuantityAmountOverrideFeeIsPercent: boolean;\r\n  MinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\r\n  MinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\r\n  MinimumOrderDollarAmountBufferProductID?: number;\r\n  MinimumOrderDollarAmountBufferProductKey?: string;\r\n  MinimumOrderDollarAmountBufferProductName?: string;\r\n  MinimumOrderDollarAmountBufferProduct?: ProductModel;\r\n  MinimumOrderQuantityAmountBufferProductID?: number;\r\n  MinimumOrderQuantityAmountBufferProductKey?: string;\r\n  MinimumOrderQuantityAmountBufferProductName?: string;\r\n  MinimumOrderQuantityAmountBufferProduct?: ProductModel;\r\n  MinimumOrderDollarAmountBufferCategoryID?: number;\r\n  MinimumOrderDollarAmountBufferCategoryKey?: string;\r\n  MinimumOrderDollarAmountBufferCategoryName?: string;\r\n  MinimumOrderDollarAmountBufferCategory?: DtoClassCategoryModel;\r\n  MinimumOrderQuantityAmountBufferCategoryID?: number;\r\n  MinimumOrderQuantityAmountBufferCategoryKey?: string;\r\n  MinimumOrderQuantityAmountBufferCategoryName?: string;\r\n  MinimumOrderQuantityAmountBufferCategory?: DtoClassCategoryModel;\r\n}\r\n\r\nexport interface HaveFreeShippingMinimumsBaseModel {\r\n  MinimumForFreeShippingDollarAmount?: number;\r\n  MinimumForFreeShippingDollarAmountAfter?: number;\r\n  MinimumForFreeShippingDollarAmountWarningMessage?: string;\r\n  MinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\r\n  MinimumForFreeShippingQuantityAmount?: number;\r\n  MinimumForFreeShippingQuantityAmountAfter?: number;\r\n  MinimumForFreeShippingQuantityAmountWarningMessage?: string;\r\n  MinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\r\n  MinimumForFreeShippingDollarAmountBufferProductID?: number;\r\n  MinimumForFreeShippingDollarAmountBufferProductKey?: string;\r\n  MinimumForFreeShippingDollarAmountBufferProductName?: string;\r\n  MinimumForFreeShippingDollarAmountBufferProduct?: ProductModel;\r\n  MinimumForFreeShippingQuantityAmountBufferProductID?: number;\r\n  MinimumForFreeShippingQuantityAmountBufferProductKey?: string;\r\n  MinimumForFreeShippingQuantityAmountBufferProductName?: string;\r\n  MinimumForFreeShippingQuantityAmountBufferProduct?: ProductModel;\r\n  MinimumForFreeShippingDollarAmountBufferCategoryID?: number;\r\n  MinimumForFreeShippingDollarAmountBufferCategoryKey?: string;\r\n  MinimumForFreeShippingDollarAmountBufferCategoryName?: string;\r\n  MinimumForFreeShippingDollarAmountBufferCategory?: DtoClassCategoryModel;\r\n  MinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\r\n  MinimumForFreeShippingQuantityAmountBufferCategoryKey?: string;\r\n  MinimumForFreeShippingQuantityAmountBufferCategoryName?: string;\r\n  MinimumForFreeShippingQuantityAmountBufferCategory?: DtoClassCategoryModel;\r\n}\r\n\r\n/**\r\n * Interface for sales collection base model.\r\n * @sa HaveAStatusModel.\r\n * @sa HaveAStateModel.\r\n * @sa AmFilterableByNullableBrandBaseModel.\r\n * @sa AmFilterableByNullableStoreBaseModel.\r\n * @sa HaveJsonAttributesBaseModel.\r\n */\r\nexport interface SalesCollectionBaseModel\r\n  extends BaseModel,\r\n  HaveAStatusModel,\r\n  HaveAStateModel,\r\n  AmFilterableByNullableAccountBaseModel,\r\n  AmFilterableByNullableBrandBaseModel,\r\n  AmFilterableByNullableStoreBaseModel,\r\n  AmFilterableByNullableUserBaseModel,\r\n  HaveJsonAttributesBaseModel {\r\n  /** The item quantity? */\r\n  ItemQuantity?: number;\r\n\r\n  /** The user id */\r\n  UserID?: number;\r\n  /** The user */\r\n  User?: UserModel;\r\n  /** The user key */\r\n  UserKey?: string;\r\n  /** The user name */\r\n  UserName?: string;\r\n  /** The user name */\r\n  UserUsername?: string;\r\n  /** The user contact first name */\r\n  UserContactFirstName?: string;\r\n  /** The user contact last name */\r\n  UserContactLastName?: string;\r\n  /** The user contact email */\r\n  UserContactEmail?: string;\r\n\r\n  /** The balance due */\r\n  BalanceDue?: number;\r\n  /** The shipping same as billing. */\r\n  ShippingSameAsBilling: boolean;\r\n  /** The billing contact */\r\n  BillingContactID?: number;\r\n  /** The billing contact */\r\n  BillingContact?: ContactModel;\r\n  /** The shipping contact */\r\n  ShippingContactID?: number;\r\n  /** The shipping contact */\r\n  ShippingContact?: ContactModel;\r\n\r\n  // Totals?: CartTotals; // Generated\r\n}\r\n\r\nexport interface SalesCollectionBaseModelT&lt;\r\n  TTypeModel,\r\n  TContactModel,\r\n  TSalesEventModel extends SalesEventBaseModel,\r\n  TDiscountModel extends AppliedDiscountBaseModel,\r\n  TItemDiscountModel extends AppliedDiscountBaseModel,\r\n  TFileModel extends AmAStoredFileRelationshipTableModel\r\n  &gt; extends SalesCollectionBaseModel,\r\n  HaveStoredFilesBaseModel<tfilemodel>,\r\n  HaveATypeModel<ttypemodel>,\r\n  HaveAStatusModel,\r\n  HaveAStateModel {\r\n  Contacts?: Array<tcontactmodel>;\r\n  /** The sales items. */\r\n  SalesItems?: Array<salesitembasemodel<titemdiscountmodel>&gt;;\r\n  /** The discounts */\r\n  Discounts?: Array<tdiscountmodel>;\r\n  /** The Sales Events */\r\n  SalesEvents?: Array<tsaleseventmodel>;\r\n}\r\n\r\nexport interface SalesCollectionBaseSearchModel\r\n  extends BaseSearchModel,\r\n  HaveATypeSearchModel,\r\n  HaveAStatusBaseSearchModel,\r\n  AmFilterableByStoreSearchModel {}\r\n\r\n/**\r\n * @see {@link NameableBaseModel}\r\n * @see {@link HaveJsonAttributesBaseModel}\r\n * @see {@link HaveNotesBaseModel}\r\n * @public\r\n */\r\nexport interface SalesItemBaseModel<titemdiscountmodel applieddiscountbasemodel="" extends="">\r\n  extends HasInventoryObject, HasPricingObject,\r\n  NameableBaseModel,\r\n  HaveJsonAttributesBaseModel,\r\n  HaveNotesBaseModel {\r\n  // SalesItemBase Properties\r\n  Quantity: number;\r\n  QuantityBackOrdered?: number;\r\n  QuantityPreSold?: number;\r\n  TotalQuantity?: number;\r\n  UnitCorePrice: number;\r\n  UnitSoldPrice?: number;\r\n  UnitSoldPriceModifier?: number;\r\n  UnitSoldPriceModifierMode?: number;\r\n  ExtendedPrice?: number;\r\n  ExtendedShippingAmount?: number;\r\n  ExtendedTaxAmount?: number;\r\n  UnitCorePriceInSellingCurrency?: number;\r\n  UnitSoldPriceInSellingCurrency?: number;\r\n  ExtendedPriceInSellingCurrency?: number;\r\n  UnitOfMeasure?: string;\r\n  Sku?: string;\r\n  RestockingFeeAmount?: number;\r\n  ForceUniqueLineItemKey?: string;\r\n  // Related Objects\r\n  MasterID?: number;\r\n  SalesReturnReasonID?: number;\r\n  SalesReturnReasonKey?: string;\r\n  SalesReturnReasonName?: string;\r\n  SalesReturnReason?: SalesReturnReasonModel;\r\n  OriginalCurrencyID?: number;\r\n  OriginalCurrencyKey?: string;\r\n  OriginalCurrencyName?: string;\r\n  OriginalCurrency?: CurrencyModel;\r\n  SellingCurrencyID?: number;\r\n  SellingCurrencyKey?: string;\r\n  SellingCurrencyName?: string;\r\n  SellingCurrency?: CurrencyModel;\r\n  // Associated Objects\r\n  Targets?: Array<salesitemtargetbasemodel>;\r\n  Discounts?: Array<titemdiscountmodel>;\r\n  // Convenience Properties\r\n  ProductDownloads?: Array<string>;\r\n  // Specifics (Purchase Order Items)\r\n  DateReceived?: Date;\r\n  // IAmFilterableByNullableUser Properties\r\n  UserID?: number;\r\n  UserKey?: string;\r\n  UserUsername?: string;\r\n  User?: UserModel;\r\n  // IAmFilterableByNullableProduct Properties\r\n  ProductID?: number;\r\n  ProductKey?: string;\r\n  ProductName?: string;\r\n  ProductSeoUrl?: string;\r\n  ProductTypeID?: number;\r\n  ProductTypeKey?: string;\r\n  ProductNothingToShip?: boolean;\r\n  ProductPrimaryImage?: string;\r\n  ProductAllowPreSale?: boolean;\r\n  // Removed: ProductDescription?: string;\r\n  // Removed: ProductRequiresRoles?: string;\r\n  // Removed: ProductIsUnlimitedStock?: boolean;\r\n  // Removed: ProductAllowBackOrder?: boolean;\r\n  // Removed: ProductIsEligibleForReturn?: boolean;\r\n  // Removed: ProductRestockingFeePercent?: number;\r\n  // Removed: ProductRestockingFeeAmount?: number;\r\n  // Removed: ProductIsTaxable?: boolean;\r\n  // Removed: ProductTaxCode?: string;\r\n  // Removed: ProductShortDescription?: string;\r\n  // Removed: ProductUnitOfMeasure?: string;\r\n  // Removed: ProductSerializableAttributes?: SerializableAttributesDictionary;\r\n  // Removed: ProductIsDiscontinued?: boolean;\r\n  // Removed: ProductMinimumPurchaseQuantity?: number;\r\n  // Removed: ProductMinimumPurchaseQuantityIfPastPurchased?: number;\r\n  // Removed: ProductMaximumPurchaseQuantity?: number;\r\n  // Removed: ProductMaximumPurchaseQuantityIfPastPurchased?: number;\r\n  // Removed: ProductStockQuantity?: number;\r\n  // Removed: ProductStockQuantityAllocated?: number;\r\n  // Removed: ProductStockQuantityBroken?: number;\r\n  // Removed: ProductStockQuantityPreSold?: number;\r\n}\r\n\r\nexport interface AppliedDiscountBaseModel {\r\n  MasterID?: number;\r\n  MasterKey?: string;\r\n  SlaveID?: number;\r\n  SlaveName?: string;\r\n  DiscountID: number;\r\n  DiscountKey?: string;\r\n  DiscountName?: string;\r\n  DiscountTotal: number;\r\n  ApplicationsUsed?: number;\r\n  DiscountTypeID: number;\r\n  DiscountValue: number;\r\n  DiscountPriority?: number;\r\n  DiscountValueType?: number;\r\n}\r\n\r\nexport interface PagedResultsBase<tresult> {\r\n  TotalPages: number;\r\n  TotalCount: number;\r\n  CurrentPage: number;\r\n  CurrentCount: number;\r\n  Results: Array<tresult>;\r\n}\r\n\r\nexport interface UserModel extends DtoClassUserModel {\r\n  userChecked?: boolean;\r\n}\r\n\r\nexport interface RoleForUserModel {\r\n  RoleId: number;\r\n  UserId: number;\r\n  Name?: string;\r\n  StartDate?: Date;\r\n  EndDate?: Date;\r\n}\r\n\r\nexport interface RoleForAccountModel {\r\n  RoleId: number;\r\n  AccountId: number;\r\n  Name?: string;\r\n  StartDate?: Date;\r\n  EndDate?: Date;\r\n}\r\n\r\nexport interface IAuthTokens {\r\n  AccessToken?: string;\r\n  AccessTokenSecret?: string;\r\n  // Items?: cefalt.store.Dictionary<string>;\r\n  Items?: any;\r\n  Provider: string;\r\n  RefreshToken?: string;\r\n  RefreshTokenExpiry?: Date;\r\n  RequestToken?: string;\r\n  RequestTokenSecret?: string;\r\n  UserId?: string;\r\n}\r\n\r\nexport interface DiscountModel extends NameableBaseModel {\r\n  DisplayValue: string;\r\n  DisplayDates: string;\r\n  DisplayCodes: string;\r\n}\r\n\r\nexport interface AuthUserSession {}\r\nexport interface AuthenticateResponse {}\r\nexport interface BaseSearchModel {}\r\n\r\nexport interface HaveANullableContactBaseModel {\r\n  ContactID?: number;\r\n  Contact?: ContactModel;\r\n  ContactFirstName?: string;\r\n  ContactLastName?: string;\r\n  ContactEmail?: string;\r\n  ContactPhone?: string;\r\n  ContactFax?: string;\r\n}\r\nexport interface HaveAContactBaseModel {\r\n  ContactID: number;\r\n  Contact?: ContactModel;\r\n  ContactFirstName?: string;\r\n  ContactLastName?: string;\r\n  ContactEmail?: string;\r\n  ContactPhone?: string;\r\n  ContactFax?: string;\r\n}\r\n\r\nexport interface IUploadResponse {\r\n  ID: string;\r\n  Upload: IUpload;\r\n  UploadStatus: UploadStatus;\r\n  UploadFiles: Array<iuploadresult>;\r\n}\r\nexport interface UploadResponse extends IUploadResponse { }\r\n\r\nexport interface IUpload {\r\n  UploadID: string;\r\n  Expires: Date;\r\n  EntityFileType: FileEntityType;\r\n  Name: string;\r\n  Async: boolean;\r\n}\r\n\r\nexport interface IUploadResult {\r\n  ID: number;\r\n  FileName: string;\r\n  FilePath: string;\r\n  FileKey: string;\r\n  ContentType: string;\r\n  ContentLength: number;\r\n  PercentDone: number;\r\n  TotalBytes: number;\r\n  TransferredBytes: number;\r\n  UploadFiles: Array<iuploadresult>;\r\n  UploadFileStatus: UploadStatus;\r\n}\r\n\r\nexport interface CalculatedInventories extends CalculatedInventory {\r\n  // == Inherited ==\r\n  // ProductID: number;\r\n  // IsDiscontinued: boolean;\r\n  // IsUnlimitedStock: boolean;\r\n  // IsOutOfStock: boolean;\r\n  // QuantityPresent?: number;\r\n  // QuantityAllocated?: number;\r\n  // QuantityOnHand?: number;\r\n  // MaximumPurchaseQuantity?: number;\r\n  // MaximumPurchaseQuantityIfPastPurchased?: number;\r\n  // AllowBackOrder: boolean;\r\n  // MaximumBackOrderPurchaseQuantity?: number;\r\n  // MaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\r\n  // MaximumBackOrderPurchaseQuantityGlobal?: number;\r\n  // AllowPreSale: boolean;\r\n  // PreSellEndDate?: Date;\r\n  // QuantityPreSellable?: number;\r\n  // QuantityPreSold?: number;\r\n  // MaximumPrePurchaseQuantity?: number;\r\n  // MaximumPrePurchaseQuantityIfPastPurchased?: number;\r\n  // MaximumPrePurchaseQuantityGlobal?: number;\r\n  // RelevantLocations?: Array<productinventorylocationsectionmodel>;\r\n  loading: boolean;\r\n}\r\nexport interface CalculatedPrices {\r\n  base?: number;\r\n  sale?: number;\r\n  msrp?: number;\r\n  reduction?: number;\r\n  haveBase?: boolean;\r\n  haveSale?: boolean;\r\n  haveMsrp?: boolean;\r\n  haveReduction?: boolean;\r\n  isSale?: boolean;\r\n  amountOff?: number;\r\n  percentOff?: number;\r\n  loading: boolean;\r\n}\r\nexport interface CalculatedRatings {\r\n  value: number,\r\n  count: number,\r\n  reviews: Array<reviewmodel>,\r\n  loading: boolean;\r\n}\r\nexport interface CalculatedSortOrder {\r\n  order: number,\r\n  loading: boolean;\r\n}\r\nexport interface HasInventoryObject extends HaveJsonAttributesBaseModel {\r\n  CurrentShipOption?: string;\r\n  readInventory?: () =&gt; CalculatedInventories;\r\n  \"$_rawInventory\"?: CalculatedInventories;\r\n}\r\nexport interface HasPricingObject extends HaveJsonAttributesBaseModel {\r\n  readPrices?: () =&gt; CalculatedPrices;\r\n  \"$_rawPrices\"?: CalculatedPrices;\r\n}\r\nexport interface HasRatingObject extends HaveJsonAttributesBaseModel {\r\n  readRatings?: () =&gt; CalculatedRatings;\r\n  \"$_rawRatings\"?: CalculatedRatings;\r\n}\r\nexport interface HasSortOrderObject extends HaveJsonAttributesBaseModel {\r\n  readSortOrder?: () =&gt; CalculatedSortOrder;\r\n  \"$_rawSortOrder\"?: CalculatedSortOrder;\r\n}\r\nexport interface ProductModel\r\n  extends HasInventoryObject,\r\n  HasPricingObject,\r\n  HasRatingObject,\r\n  HasSortOrderObject,\r\n  DtoClassProductModel {\r\n  PrimaryImageFileName?: string;\r\n  $_rawInventory?: CalculatedInventories;\r\n  $_rawPrices?: CalculatedPrices;\r\n  $_rawRatings?: CalculatedRatings;\r\n  $_rawSortOrder?: CalculatedSortOrder;\r\n  $_rawProduct?: ProductModel;\r\n  readInventory?: () =&gt; CalculatedInventories;\r\n  readPrices?: () =&gt; CalculatedPrices;\r\n  readRatings?: () =&gt; CalculatedRatings;\r\n  readSortOrder?: () =&gt; CalculatedSortOrder;\r\n}\r\n\r\nexport interface IPriceRuleModel extends PriceRuleModel {}\r\n\r\nexport interface AccountContactModel {\r\n  SlavePhone?: string;\r\n  SlaveFax?: string;\r\n  SlaveEmail?: string;\r\n  SlaveFirstName?: string;\r\n  SlaveLastName?: string;\r\n}\r\n\r\nexport interface GetCategoryByIDDto extends ImplementsIDOnQueryBase {}\r\n\r\nexport interface AuthProviderLoginDto {\r\n  Username: string;\r\n  Password: string;\r\n  RememberMe?: boolean;\r\n}\r\n\r\nexport interface CEFActionError {\r\n  ResponseStatus: CEFActionErrorResponse;\r\n}\r\nexport interface CEFActionErrorResponse {\r\n  ErrorCode?: string;\r\n  Message?: string;\r\n  Errors?: string[];\r\n}\r\n\r\nexport interface CategoryModel extends DtoClassCategoryModel {\r\n  PrimaryImageFileName?: string;\r\n}\r\n\r\n// Export interface ProductCatalogSearchForm extends DtoClassProductCatalogSearchForm {\r\n//   [key: string]: any;\r\n// }\r\n","import {\r\n  AccountContactModel,\r\n  SalesItemTargetBaseModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport _ from \"lodash\";\r\nimport { Guid } from \"src/_api/cvApi.shared\";\r\n\r\nexport function targetFactory(\r\n    quantity: number,\r\n    addressBook?: AccountContactModel[],\r\n    contactID: number = null\r\n): SalesItemTargetBaseModel {\r\n  const model: SalesItemTargetBaseModel = {\r\n    Active: true,\r\n    CreatedDate: new Date(),\r\n    DestinationContact:\r\n      _.find(addressBook, (accountContact: AccountContactModel) =&gt; accountContact.SlaveID === contactID)\r\n        ?.Slave ?? null,\r\n    DestinationContactID: contactID,\r\n    ID: null,\r\n    MasterID: null,\r\n    NothingToShip: false,\r\n    OriginProductInventoryLocationSectionID: null,\r\n    OriginStoreProductID: null,\r\n    OriginVendorProductID: null,\r\n    Quantity: quantity,\r\n    SelectedRateQuoteID: null,\r\n    SerializableAttributes: {\r\n      InternalTrackingID: {\r\n        ID: 0,\r\n        Key: \"InternalTrackingID\",\r\n        Value: Guid.newGuid()\r\n      }\r\n    },\r\n    TypeID: null,\r\n    TypeKey: ServiceStrings.attributes.shipToHome\r\n  };\r\n  return model;\r\n}\r\n","/** @format */\r\n\r\nimport React from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { CardInputFormGroup, SelectFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\r\ninterface INewWalletFormData {\r\n  txtCVV: string;\r\n  txtCardHolderName: string;\r\n  txtWalletCardNumber: string;\r\n  txtCardType: string;\r\n  txtReferenceName: string;\r\n  ddlExpirationMonth: string;\r\n  ddlExpirationYear: string;\r\n}\r\n\r\nexport interface INewWalletFormConfirmData {\r\n  CardNickName?: string;\r\n  CreditCardNumber: string;\r\n  CreditCardCVV?: string;\r\n  CardHolderName: string;\r\n  ExpirationMonth: number;\r\n  ExpirationYear: string;\r\n  CardType: string;\r\n}\r\n\r\ninterface INewWalletFormProps {\r\n  onConfirm: (data: INewWalletFormConfirmData) =&gt; void;\r\n  onCancel?: Function;\r\n  showCancel?: boolean;\r\n  submitBtnText?: string;\r\n  cancelBtnText?: string;\r\n  btnAlign?: \"start\" | \"end\";\r\n  hideNickName?: boolean;\r\n  submitBtnDisabled?: boolean;\r\n}\r\n\r\nconst thisYear = new Date().getFullYear();\r\n\r\nconst availableExpirationYears: number[] = [];\r\nfor (let i = 0; i &lt; 11; i++) {\r\n  availableExpirationYears.push(thisYear + i);\r\n}\r\n\r\nexport const NewWalletForm = (props: INewWalletFormProps): JSX.Element =&gt; {\r\n  const { onConfirm, showCancel, onCancel, submitBtnText, cancelBtnText, btnAlign, hideNickName, submitBtnDisabled } =\r\n    props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const { register, handleSubmit, reset, clearErrors, formState, setValue } = useForm<inewwalletformdata>({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const handleConfirm: SubmitHandler<inewwalletformdata> = (data): void =&gt; {\r\n    const {\r\n      txtCVV,\r\n      txtCardHolderName,\r\n      txtWalletCardNumber,\r\n      txtCardType,\r\n      txtReferenceName,\r\n      ddlExpirationMonth,\r\n      ddlExpirationYear\r\n    } = data;\r\n    const userWalletData: INewWalletFormConfirmData = {\r\n      CardHolderName: txtCardHolderName,\r\n      CardNickName: txtReferenceName,\r\n      CardType: txtCardType,\r\n      CreditCardCVV: txtCVV,\r\n      CreditCardNumber: txtWalletCardNumber,\r\n      ExpirationMonth: Number(ddlExpirationMonth),\r\n      ExpirationYear: ddlExpirationYear\r\n    };\r\n    onConfirm(userWalletData);\r\n  };\r\n\r\n  const handleCancel = (_e: React.MouseEvent<htmlbuttonelement>) =&gt; {\r\n    if (onCancel) {\r\n      onCancel();\r\n    }\r\n    reset();\r\n    clearErrors();\r\n  };\r\n\r\n  const onSubmit = handleSubmit(handleConfirm);\r\n\r\n  return (\r\n    <form\r\n autocomplete='\"off\"\r\n' classname='\"position-relative\"\r\n' onsubmit="{onSubmit}">\r\n      {!hideNickName &amp;&amp; (\r\n        <row>\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12' formidentifier='\"txtReferenceName\"\r\n' labelkey='\"ui.storefront.common.CardNickname\"\r\n' maxlength="{128}\r\n" mb-3\"\r\n="" register="{register}\r\n" required="{true}\r\n">\r\n          \r\n            <p classname='\"small\"'>{t(\"ui.storefront.common.ECheckAccountNickname.Message\")}</p>\r\n          \r\n        </textinputformgroup\r\n></row>\r\n      )}\r\n      <row>\r\n        <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12' formidentifier='\"txtCardHolderName\"\r\n' labelkey='\"ui.storefront.checkout.creditCard.cardholder\"\r\n' maxlength="{128}\r\n" mb-3\"\r\n="" register="{register}\r\n" required="{true}\r\n">\r\n      </textinputformgroup\r\n></row>\r\n      <row>\r\n        <cardinputformgroup\r\n errors="{formState.errors}\r\n" formidentifier='\"txtCardNumber\"\r\n' register="{register}\r\n" setvalue="{setValue}\r\n">\r\n      </cardinputformgroup\r\n></row>\r\n      <row>\r\n        <selectformgroup\r\n \"01\"="" \"02\"="" \"03\"="" \"04\"="" \"05\"="" \"06\"="" \"07\"="" \"08\"="" \"09\"="" \"10\"="" \"11\"="" \"12\"="" \"april\",="" \"august\",="" \"december\",="" \"february\",="" \"january\",="" \"july\",="" \"june\",="" \"march\",="" \"may\",="" \"november\",="" \"october\",="" \"september\",="" ]}\r\n="" col-sm-6="" errors="{formState.errors}\r\n" formclasses='\"col-12' formidentifier='\"ddlExpirationMonth\"\r\n' includenull="{true}\r\n" labelkey='\"ui.storefront.common.Month\"\r\n' mb-3\"\r\n="" nullkey='\"ui.storefront.common.Month\"\r\n' option:="" options="{[\r\n" register="{register}\r\n" required="{true}\r\n" value:="" {="" },\r\n="" }\r\n="">\r\n        <selectformgroup\r\n col-sm-3="" errors="{formState.errors}\r\n" formclasses='\"col-6' formidentifier='\"ddlExpirationYear\"\r\n' includenull="{true}\r\n" labelkey='\"ui.storefront.common.Year\"\r\n' mb-3\"\r\n="" nullkey='\"ui.storefront.common.Year\"\r\n' number)="" options="{availableExpirationYears.map((year:" register="{register}\r\n" required="{true}\r\n"> ({\r\n            option: year.toString()\r\n          }))}\r\n        /&gt;\r\n        <textinputformgroup\r\n 3="" 4="" be="" col-sm-3="" errors="{formState.errors}\r\n" formclasses='\"col-6' formidentifier='\"txtCVV\"\r\n' labelkey='\"ui.storefront.wallet.walletCard.CVVAVS\"\r\n' mb-3\"\r\n="" must="" numbers\"\r\n="" or="" pattern="{/^\\d{3,4}$/u}\r\n" patternmessage='\"CVV' placeholdertext='\"123\"\r\n' register="{register}\r\n" required="{true}\r\n">\r\n      </textinputformgroup\r\n></selectformgroup\r\n></selectformgroup\r\n></row>\r\n      <row classname='\"mt-2\"'>\r\n        \r\n          <div ??="" \"end\"}="" classname="{`d-flex" gap-2`}="" justify-content-${btnalign="">\r\n            {showCancel ? (\r\n              <button\r\n onclick="{handleCancel}" variant='\"secondary\"\r\n'>\r\n                {cancelBtnText ?? t(\"ui.storefront.common.Cancel\")}\r\n              \r\n            ) : null}\r\n            <button\r\n disabled="{!formState.isValid" id='\"btnAddWallet\"\r\n' name='\"btnAddWallet\"\r\n' submitbtndisabled}="" type='\"submit\"\r\n' variant='\"primary\"\r\n' ||="">\r\n              {submitBtnText ?? t(\"ui.storefront.userDashboard.wallet.AddEntry\")}\r\n            \r\n          </button\r\n></button\r\n></div>\r\n        \r\n      </row>\r\n    \r\n  );\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { Card, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n  AccountContactModel,\r\n  CartModel,\r\n  SalesItemTargetBaseModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\r\nimport { TGroup, TItem } from \"src/Checkout/steps/shipping/CheckoutSplitShippingStep\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { SplitShippingTarget } from \"src/Checkout/steps/shipping/SplitShippingTarget\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\r\nimport _ from \"lodash\";\r\nimport { targetFactory } from \"src/Checkout/steps/shipping/splitShippingFunctions\";\r\n\r\ninterface ICheckoutTargetsProps {\r\n  cart: CartModel;\r\n  grouped: TGroup;\r\n  setGrouped: Function;\r\n  submitDisabled: boolean;\r\n  shippingRatesNeeded: boolean;\r\n  cefConfig: CEFConfig;\r\n  accountContacts: AccountContactModel[];\r\n  parentViewState: IViewState;\r\n  parentSetRunning: Function;\r\n  parentFinishRunning: Function;\r\n  itemsExist: Function;\r\n}\r\n\r\nexport const CheckoutTargets = (props: ICheckoutTargetsProps): JSX.Element =&gt; {\r\n  const {\r\n    // TODO: cart,\r\n    grouped,\r\n    setGrouped,\r\n    cefConfig,\r\n    accountContacts,\r\n    parentViewState,\r\n    parentSetRunning,\r\n    parentFinishRunning,\r\n    itemsExist\r\n  } = props;\r\n\r\n  const addressBookFactory = useAddressBookFactory();\r\n  const { t } = useTranslation();\r\n\r\n  function getAvailableAccountContactsForTarget(\r\n      thisTarget: SalesItemTargetBaseModel,\r\n      targets: SalesItemTargetBaseModel[]\r\n  ): AccountContactModel[] {\r\n    if (!itemsExist(accountContacts) || !itemsExist(targets)) {\r\n      return accountContacts;\r\n    }\r\n    const selectedContactIDs = targets\r\n      .filter(x =&gt; x.DestinationContact &amp;&amp; x.DestinationContact.ID)\r\n      .map(x =&gt; x.DestinationContact.ID);\r\n    return [ ...accountContacts ]\r\n      .filter(ac =&gt; !selectedContactIDs.includes(ac.Slave.ID)\r\n          || thisTarget.DestinationContact?.ID === ac.Slave.ID)\r\n      .sort((ac1, ac2) =&gt; ac1.Slave.CustomKey &gt; ac2.Slave.CustomKey ? 1 : -1);\r\n  }\r\n\r\n  function blankDestinationContactInfo(\r\n      groupKey: string,\r\n      salesItem: TItem,\r\n      target: SalesItemTargetBaseModel\r\n  ): void {\r\n    const groupedCopy = [ ...grouped ];\r\n    const relevantGroup = groupedCopy.find(g =&gt; g.key === groupKey);\r\n    if (!relevantGroup) {\r\n      return;\r\n    }\r\n    const relevantSalesItem = relevantGroup.salesItems.find(\r\n      (sItem: TItem) =&gt; sItem.ID === salesItem.ID\r\n    );\r\n    if (!relevantSalesItem) {\r\n      return;\r\n    }\r\n    for (let i = 0; i &lt; relevantSalesItem.Targets.length; i++) {\r\n      const currentTarget = relevantSalesItem.Targets[i];\r\n      if (currentTarget.SerializableAttributes.InternalTrackingID.Value\r\n          === target.SerializableAttributes.InternalTrackingID.Value) {\r\n        currentTarget.DestinationContactID = null;\r\n        currentTarget.DestinationContact = null;\r\n        currentTarget.DestinationContactKey = null;\r\n        break;\r\n      }\r\n    }\r\n    setGrouped(groupedCopy);\r\n  }\r\n\r\n  async function onNewAddressEntered(\r\n      newAddressData: AccountContactModel,\r\n      targetData: {\r\n        groupKey: string;\r\n        salesItem: TItem;\r\n        target: SalesItemTargetBaseModel;\r\n      }\r\n  ) {\r\n    parentSetRunning(t(\"ui.storefront.checkout.splitShipping.SavingANewAddress.Ellipses\"));\r\n    try {\r\n      const newContact = await addressBookFactory.createNewAddress(newAddressData);\r\n      const { groupKey, salesItem, target } = targetData;\r\n      const groupedCopy = [ ...grouped ];\r\n      const relevantGroup = groupedCopy.find(g =&gt; g.key === groupKey);\r\n      const relevantItem = relevantGroup.salesItems.find(item =&gt; item.ID === salesItem.ID);\r\n      for (let i = 0; i &lt; relevantItem.Targets.length; i++) {\r\n        if (relevantItem.Targets[i].SerializableAttributes.InternalTrackingID.Value\r\n            === target.SerializableAttributes.InternalTrackingID.Value) {\r\n          relevantItem.Targets[i] = {\r\n            ...relevantItem.Targets[i],\r\n            DestinationContact: newContact.Slave,\r\n            DestinationContactID: newContact.SlaveID,\r\n            DestinationContactKey: newContact.Slave.CustomKey,\r\n            Type: null,\r\n            TypeID: null,\r\n            TypeKey: ServiceStrings.attributes.shipToHome,\r\n            TypeName: null\r\n          };\r\n          break;\r\n        }\r\n      }\r\n      setGrouped(groupedCopy);\r\n      parentFinishRunning();\r\n    } catch (err) {\r\n      //   // If getting current account or create new address call fails, store in local memory instead\r\n      //   NewAC.SlaveID = newAC.Slave.ID =\r\n      //     Math.min(_.minBy(addressOptions, (x) =&gt; x.ID).ID, -3) - 1;\r\n      //   If (target) {\r\n      //     // This will stack negative numbers so we have individual values to select by with the dropdowns\r\n      //     Target.DestinationContactID = newAC.SlaveID;\r\n      //     Target.DestinationContact = newAC.Slave;\r\n      //     Target.DestinationContactKey = newAC.Slave.CustomKey;\r\n      //     Target.TypeID = null;\r\n      //     Target.TypeKey = ServiceStrings.attributes.shipToHome;\r\n      //     Target.TypeName = null;\r\n      //     Target.Type = null;\r\n      //   }\r\n      //   ParentFinishRunning();\r\n      //   // $rootScope.$broadcast(ServiceStrings.events.shipping.revalidateStep);\r\n      //   Return;\r\n      if (cefConfig?.debug) {\r\n        console.error(err);\r\n      }\r\n      parentFinishRunning(true, \"Failed to create new address\");\r\n    }\r\n  }\r\n\r\n  function canAllocateQuantity(\r\n      salesItem: TItem,\r\n      target: SalesItemTargetBaseModel,\r\n      adjustment: number\r\n  ): boolean {\r\n    if (!salesItem || !target || !adjustment || !itemsExist(salesItem.Targets)) {\r\n      consoleDebug(\"This item has no targets list, cannot modify quantity\");\r\n      return false;\r\n    }\r\n    const wouldBeQuantityIsLessThanTotal = target.Quantity + adjustment &lt; salesItem.TotalQuantity;\r\n    if (!wouldBeQuantityIsLessThanTotal) {\r\n      consoleDebug(\r\n        \"New target quantity would be equal to or greater than total quantity for sales item, can't allocate\"\r\n      );\r\n      return false;\r\n    }\r\n    const targetQuantityPlusAdjustmentIsGreaterThanZero = target.Quantity + adjustment &gt; 0;\r\n    if (!targetQuantityPlusAdjustmentIsGreaterThanZero) {\r\n      consoleDebug(\"New target quantity would be 0 or less, can't allocate\");\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  function setDestinationContactForTarget(\r\n      groupKey: string,\r\n      salesItem: TItem,\r\n      target: SalesItemTargetBaseModel,\r\n      contact: AccountContactModel\r\n  ): void {\r\n    const groupedCopy = [ ...grouped ];\r\n    const relevantGroup = groupedCopy.find(g =&gt; g.key === groupKey);\r\n    if (!relevantGroup) {\r\n      return;\r\n    }\r\n    const relevantSalesItem = relevantGroup.salesItems.find(\r\n      (sItem: TItem) =&gt; sItem.ID === salesItem.ID\r\n    );\r\n    if (!relevantSalesItem) {\r\n      return;\r\n    }\r\n    for (let i = 0; i &lt; relevantSalesItem.Targets.length; i++) {\r\n      const currentTarget = relevantSalesItem.Targets[i];\r\n      if (currentTarget.SerializableAttributes.InternalTrackingID.Value\r\n          === target.SerializableAttributes.InternalTrackingID.Value) {\r\n        currentTarget.DestinationContactID = contact.Slave.ID;\r\n        currentTarget.DestinationContact = contact.Slave;\r\n        currentTarget.DestinationContactKey\r\n          = currentTarget.DestinationContact &amp;&amp; currentTarget.DestinationContact.CustomKey;\r\n        currentTarget.TypeID = null;\r\n        currentTarget.TypeKey = ServiceStrings.attributes.shipToHome;\r\n        currentTarget.TypeName = null;\r\n        currentTarget.Type = null;\r\n        break;\r\n      }\r\n    }\r\n    setGrouped(groupedCopy);\r\n  }\r\n\r\n  function allocateQuantity(\r\n      salesItem: TItem,\r\n      toTarget: SalesItemTargetBaseModel,\r\n      adjustment: number = 1\r\n  ): boolean {\r\n    if (!canAllocateQuantity(salesItem, toTarget, adjustment)) {\r\n      return false;\r\n    }\r\n    consoleDebug(\"Val-0: Attempting to allocate\");\r\n    for (let i = 0; i &lt; salesItem.Targets.length; i++) {\r\n      const fromTarget = salesItem.Targets[i];\r\n      if (fromTarget.SerializableAttributes.InternalTrackingID.Value\r\n        === toTarget.SerializableAttributes.InternalTrackingID.Value\r\n      ) {\r\n        consoleDebug(\"Val-1: Same target, can't allocate\");\r\n        continue;\r\n      }\r\n      if (adjustment &gt;= fromTarget.Quantity) {\r\n        consoleDebug(\"Val-2: can't leave fromTarget quantity at less than 1, can't allocate\");\r\n        consoleDebug(`before: ${fromTarget.Quantity}`);\r\n        consoleDebug(`before: ${toTarget.Quantity}`);\r\n        continue;\r\n      }\r\n      consoleDebug(\"Val-3: Allocation checks passed, allocating now\");\r\n      const groupedCopy = [ ...grouped ];\r\n      const relevantGroupIndex\r\n        = groupedCopy.findIndex(group =&gt; group.salesItems.find(sItem =&gt; sItem.ID === salesItem.ID));\r\n      groupedCopy[relevantGroupIndex].salesItems = groupedCopy[relevantGroupIndex].salesItems.map((sItem: TItem) =&gt; {\r\n        if (sItem.ID === salesItem.ID) {\r\n          return {\r\n            ...sItem,\r\n            Targets: sItem.Targets.map(tI =&gt; {\r\n              if (tI.SerializableAttributes.InternalTrackingID.Value\r\n                === fromTarget.SerializableAttributes.InternalTrackingID.Value\r\n              ) {\r\n                tI.Quantity -= adjustment;\r\n              } else if (tI.SerializableAttributes.InternalTrackingID.Value\r\n                === toTarget.SerializableAttributes.InternalTrackingID.Value) {\r\n                tI.Quantity += adjustment;\r\n              }\r\n              return tI;\r\n            })\r\n          };\r\n        }\r\n        return sItem;\r\n      });\r\n      setGrouped(groupedCopy);\r\n      break;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  function addShippingTarget(groupKey: string, item: TItem): void {\r\n    if (!itemsExist(item.Targets)) {\r\n      // NOTE: This should never happen, before this point, the UI has at least\r\n      // Created a default target to use in initializeSalesItems\r\n      throw Error(\r\n        `Cannot add shipping target. \\n Targets Exist: ${Boolean(item.Targets)} \\n Targets Amount: ${\r\n          item.Targets?.length ?? \"null\"\r\n        }`\r\n      );\r\n    }\r\n    const groupedCopy = [ ...grouped ];\r\n    const relevantGroup = groupedCopy.find(gp =&gt; gp.key === groupKey);\r\n    if (!relevantGroup || !relevantGroup.salesItems.find(salesItem =&gt; salesItem.ID === item.ID)) {\r\n      return;\r\n    }\r\n    for (let i = 0; i &lt; item.Targets.length; i++) {\r\n      if (canAllocateQuantity(item, item.Targets[i], -1)) {\r\n        const newTarget = targetFactory(1);\r\n        relevantGroup.salesItems = relevantGroup.salesItems.map((salesItem: TItem) =&gt; {\r\n          if (salesItem.ID === item.ID) {\r\n            salesItem.Targets[i].Quantity -= 1;\r\n            salesItem.Targets.push(newTarget);\r\n          }\r\n          return salesItem;\r\n        });\r\n        setGrouped(groupedCopy);\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  function removeShippingTarget(\r\n      groupKey: string,\r\n      item: TItem,\r\n      target: SalesItemTargetBaseModel\r\n  ): void {\r\n    if (!groupKey || !itemsExist(item.Targets) || !target) {\r\n      return;\r\n    }\r\n    const groupedCopy = [ ...grouped ];\r\n    const relevantGroup = groupedCopy.find(group =&gt; group.key === groupKey);\r\n    if (!relevantGroup) {\r\n      return;\r\n    }\r\n    const relevantSalesItem = relevantGroup.salesItems.find(sItem =&gt; sItem.ID === item.ID);\r\n    if (!relevantSalesItem) {\r\n      return;\r\n    }\r\n    const targetToRemove = relevantSalesItem.Targets.find(tI =&gt; tI.SerializableAttributes.InternalTrackingID.Value\r\n        === target.SerializableAttributes.InternalTrackingID.Value);\r\n    const toAddQuantity: number = targetToRemove.Quantity;\r\n    relevantSalesItem.Targets = relevantSalesItem.Targets.filter(\r\n      (tI: SalesItemTargetBaseModel) =&gt; tI.SerializableAttributes.InternalTrackingID.Value\r\n        !== target.SerializableAttributes.InternalTrackingID.Value\r\n    );\r\n    relevantSalesItem.Targets[0].Quantity += toAddQuantity;\r\n    setGrouped(groupedCopy);\r\n    // $rootScope.$broadcast(cvServiceStrings.events.shipping.revalidateStep);\r\n  }\r\n\r\n  function consoleDebug(...args: unknown[]) {\r\n    if (cefConfig?.debug) {\r\n      console.debug(...args);\r\n    }\r\n  }\r\n\r\n  return (\r\n    <row>\r\n      \r\n        {grouped\r\n          &amp;&amp; grouped.length\r\n          &amp;&amp; grouped.map((group) =&gt; <card\r\n ${parentviewstate.haserror="" :="" ?="" \"\"="" \"is-valid\"}`}\r\n="" classname="{`mb-3" key="{group.key}">\r\n            <div classname='\"card-header' data-sid='\"txtCardHeader\"\r\n' id="{`ShipmentGroupTitle_${group.key}`}\r\n" ps-3\"="">\r\n              {group.key}\r\n            </div>\r\n            {group.salesItems.map((salesItem: TItem, outerIndex: number) =&gt; {\r\n              return (\r\n                <fragment key="{salesItem.ID}">\r\n                  <card.body classname='\"px-3' pb-1\"="" pt-3="">\r\n                    <card.title\r\n &&="" -="" 0\r\n="" 1\r\n="" 2\r\n="" :="" ?="" as='\"div\"\r\n' classname="{`mb-${\r\n" group.salesitems.length="" id="{`SplitShippingProductName_${outerIndex}`}" outerindex="==" salesitem.productnothingtoship="" }`}\r\n="">\r\n                      {(salesItem.ProductNothingToShip\r\n                        ? `${salesItem.TotalQuantity ?? 0} x `\r\n                        : \"\")\r\n                            + (salesItem.Name\r\n                              ? `${salesItem.Name} (${salesItem.Sku})`\r\n                              : `${salesItem.ProductName} (${salesItem.ProductKey})`)}\r\n                    \r\n                  </card.title\r\n></card.body>\r\n                  {salesItem.ProductNothingToShip\r\n                    ? null\r\n                    : <div border-0\"="" classname='\"list-group' list-group-flush="">\r\n                      <div border-bottom\"="" classname='\"list-group-item' pb-3="" pt-1="" px-3="">\r\n                        {salesItem.Targets?.map((target: SalesItemTargetBaseModel, index) =&gt; <splitshippingtarget\r\n )}\r\n="" accountcontactmodel)="" accountcontacts="{getAvailableAccountContactsForTarget(\r\n" key="{target.SerializableAttributes.InternalTrackingID.Value}\r\n" oncontactchanged="{(contact:" salesitem.targets\r\n="" target="{target}\r\n" target,\r\n=""> {\r\n                            if (!contact) {\r\n                              blankDestinationContactInfo(group.key, salesItem, target);\r\n                              return;\r\n                            }\r\n                            setDestinationContactForTarget(\r\n                              group.key,\r\n                              salesItem,\r\n                              target,\r\n                              contact\r\n                            );\r\n                          }}\r\n                          onAddressAdded={(\r\n                            newAddressData: AccountContactModel\r\n                          ) =&gt; {\r\n                            onNewAddressEntered(newAddressData, {\r\n                              groupKey: group.key,\r\n                              salesItem,\r\n                              target\r\n                            });\r\n                          }}\r\n                          decreaseDisabled={\r\n                            target.Quantity &lt;= 1\r\n                              || salesItem.Targets.length &lt;= 1\r\n                              || parentViewState.running\r\n                          }\r\n                          increaseDisabled={\r\n                            (target.Quantity ?? 0) &gt;= (salesItem.TotalQuantity ?? 0)\r\n                              - (salesItem.Targets.length - 1) || parentViewState.running\r\n                          }\r\n                          onQuantityChanged={(val: number) =&gt; {\r\n                            let adjustment: number = 0;\r\n                            if (val &gt; target.Quantity) {\r\n                              adjustment = 1;\r\n                            } else {\r\n                              adjustment = -1;\r\n                            }\r\n                            allocateQuantity(salesItem, target, adjustment);\r\n                          }}\r\n                          removeDisabled={salesItem.Targets.length &lt;= 1 || parentViewState.running}\r\n                          addDisabled={\r\n                            salesItem.Targets.length\r\n                                  &gt;= (salesItem.TotalQuantity ?? 0) || parentViewState.running\r\n                          }\r\n                          onRemoveClicked={() =&gt; {\r\n                            removeShippingTarget(group.key, salesItem, target);\r\n                          }}\r\n                          onAddClicked={() =&gt; {\r\n                            addShippingTarget(group.key, salesItem);\r\n                          }}\r\n                          index={`${outerIndex}_${index}`}\r\n                        /&gt;)}\r\n                      </splitshippingtarget\r\n></div>\r\n                    </div>}\r\n                </fragment>\r\n              );\r\n            })}\r\n          )}\r\n      \r\n      {parentViewState.hasError\r\n        ? \r\n          <errorview error="{parentViewState.errorMessage}">\r\n        \r\n        : null}\r\n    </errorview></card\r\n></row>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ICheckoutSplitShippingStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport {\r\n  AppliedCartItemDiscountModel,\r\n  SalesItemTargetBaseModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { CheckoutTargets } from \"src/Checkout/steps/shipping/CheckoutTargets\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { setCartByType, useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { targetFactory } from \"src/Checkout/steps/shipping/splitShippingFunctions\";\r\n\r\nexport type TItem = SalesItemBaseModel<appliedcartitemdiscountmodel>;\r\ntype TGroupObject = { key: string; salesItems: Array<titem> };\r\nexport type TGroup = TGroupObject[];\r\n\r\nexport const CheckoutSplitShippingStep = (props: ICheckoutSplitShippingStepProps): JSX.Element =&gt; {\r\n  const {\r\n    // TODO: cartBillingContact,\r\n    cartType,\r\n    continueText,\r\n    onCompleteCheckoutSplitShippingStep,\r\n  } = props;\r\n\r\n  const [ grouped, setGrouped ] = useState<tgroup>(null);\r\n  const [ haveInitializedSalesItems, setHaveInitializedSalesItems ] = useState<boolean>(false);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const addressBook = useAddressBook();\r\n  const cefConfig = useCefConfig();\r\n  const cartToUse = useCart(cartType);\r\n  const dispatch = useDispatch();\r\n\r\n  // TODO: const showShipToStoreOption = cefConfig.featureSet.shipping.shipToStore.enabled;\r\n  // TODO: const showInStorePickupOption = cefConfig.featureSet.shipping.inStorePickup.enabled;\r\n  // TODO: const usePhonePrefixLookups = cefConfig?.featureSet?.contacts?.phonePrefixLookups?.enabled;\r\n  // TODO: const hideAddAddressOption = cefConfig?.featureSet?.addressBook?.dashboardCanAddAddresses;\r\n\r\n  useEffect(() =&gt; {\r\n    if (!addressBook || haveInitializedSalesItems || !cartToUse) {\r\n      return;\r\n    }\r\n    const defaultShippingContact = addressBook?.find(ac =&gt; ac.IsPrimary);\r\n    if (itemsExist(cartToUse?.SalesItems)) {\r\n      initializeSalesItems(defaultShippingContact?.SlaveID);\r\n      setHaveInitializedSalesItems(true);\r\n    }\r\n  }, [ addressBook, haveInitializedSalesItems, cartToUse ]);\r\n\r\n  useEffect(() =&gt; {\r\n    // In case this step is returned to\r\n    onChangeWithRatesReset();\r\n  }, []);\r\n\r\n  const onChangeWithRatesReset = () =&gt; {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .ClearCurrentCartShippingRateQuote({ TypeName: cartType })\r\n      .then(_res =&gt; cvApi.shopping.GetCurrentCart({\r\n        TypeName: cartType,\r\n        Validate: true\r\n      }))\r\n      .then(res =&gt; {\r\n        dispatch(setCartByType({ type: cartType, cart: res.data.Result }));\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to clear current cart shipping rate quote\");\r\n      });\r\n  };\r\n\r\n  function initializeSalesItems(defaultShippingContactID?: number): void {\r\n    if (!cartToUse || !itemsExist(cartToUse.SalesItems)) {\r\n      return;\r\n    }\r\n\r\n    let validatedSalesItems = validateTargetQuantities(\r\n      cartToUse.SalesItems,\r\n      defaultShippingContactID\r\n    ).map(item =&gt; ({\r\n      ...item,\r\n      Targets: doCallbackIfTargetsExist(item, () =&gt; setTargetGrouping(item.Targets))\r\n    }));\r\n\r\n    if (addressBook) {\r\n      // Assign target destination contacts\r\n      validatedSalesItems = validatedSalesItems.map((sItem: TItem) =&gt; ({\r\n        ...sItem,\r\n        Targets: doCallbackIfTargetsExist(sItem, () =&gt; setTargetDestinations(sItem.Targets))\r\n      }));\r\n    }\r\n\r\n    const validGrouped = getSalesItemsGroupedByTitle(validatedSalesItems);\r\n\r\n    setGrouped(validGrouped);\r\n  }\r\n\r\n  function validateTargetQuantities(\r\n      items: Array<titem>,\r\n      defaultShippingContactID: number\r\n  ): Array<titem> {\r\n    return items.map((item: TItem) =&gt; {\r\n      // Check if the quantity changed since the last time the targets were generated;\r\n      const result = { ...item };\r\n      if (!item.ProductNothingToShip &amp;&amp; (!itemsExist(item.Targets)\r\n        || !quantitiesMatch(item.Targets, item.TotalQuantity))) {\r\n        // Reset targets because it changed\r\n        // When there is no list, create one with a default Target that has the full\r\n        // Quantity. If we have a default shipping address to use, assign that.\r\n        // WARNING! This is the only location where a targets list should be\r\n        // Initialized in the entire platform!\r\n        result.Targets = [ targetFactory(item.TotalQuantity, addressBook, defaultShippingContactID) ];\r\n      }\r\n      return result;\r\n    });\r\n  }\r\n\r\n  function setTargetGrouping(\r\n      targets: Array<salesitemtargetbasemodel>\r\n  ): Array<salesitemtargetbasemodel> {\r\n    // Check for and collapse duplicates in the full list, this is a processing issue\r\n    // That happens sometimes, but easily corrected by re-grouping\r\n    // Dictionary<array<salesitemtargetbasemodel>&gt;\r\n    const newGrouped: any = groupBy(targets, (target: SalesItemTargetBaseModel) =&gt; JSON.stringify({\r\n      destID: target.DestinationContactID,\r\n      ilID: target.OriginProductInventoryLocationSectionID,\r\n      nothingToShip: target.NothingToShip,\r\n      storeID: target.OriginStoreProductID,\r\n      typeKey: target?.Type?.CustomKey ?? target.TypeKey,\r\n      vendorID: target.OriginVendorProductID\r\n    }));\r\n    const groupedList: Array<salesitemtargetbasemodel> = [];\r\n    const groupedObj = Object.fromEntries(newGrouped);\r\n    Object.keys(groupedObj).forEach(key =&gt; groupedList.push(groupedObj[key][0]));\r\n    return groupedList;\r\n  }\r\n\r\n  function setTargetDestinations(\r\n      targets: Array<salesitemtargetbasemodel>\r\n  ): Array<salesitemtargetbasemodel> {\r\n    if (!addressBook) {\r\n      return targets;\r\n    }\r\n    return targets.map(target =&gt; {\r\n      const result = { ...target };\r\n      if (result.DestinationContactID) {\r\n        const destinationContact = addressBook.find(\r\n          accountContact =&gt; accountContact.SlaveID === result.DestinationContactID\r\n        );\r\n        if (destinationContact) {\r\n          result.DestinationContact = destinationContact.Slave;\r\n        }\r\n      }\r\n      return result;\r\n    });\r\n  }\r\n\r\n  function getSalesItemsGroupedByTitle(\r\n      salesItems: TItem[]\r\n  ): { key: string; salesItems: TItem[] }[] {\r\n    // TODO: implement caching?\r\n    if (!salesItems) {\r\n      console.error(\"No sales items to group with\");\r\n      return [];\r\n    }\r\n\r\n    const titlesMatchedToItems: any = {};\r\n    for (let i = 0; i &lt; salesItems.length; i++) {\r\n      // TODO: remove any by adding Stores and Vendors to TItem in TS\r\n      const curSalesItem = salesItems[i] as any;\r\n      const salesItemTitleValues = [\r\n        curSalesItem.ProductNothingToShip,\r\n        curSalesItem.Stores ? curSalesItem.Stores[0].MasterName : null,\r\n        curSalesItem.Vendors ? curSalesItem.Vendors[0].MasterName : null\r\n      ];\r\n\r\n      const groupTitle = getSplitShippingGroupTitle(salesItemTitleValues);\r\n      if (!titlesMatchedToItems[groupTitle]) {\r\n        titlesMatchedToItems[groupTitle] = [];\r\n      }\r\n      titlesMatchedToItems[groupTitle].push(salesItems[i]);\r\n    }\r\n    const sortedKeys = Object.keys(titlesMatchedToItems).sort();\r\n    return sortedKeys.map(key =&gt; ({\r\n      key,\r\n      salesItems: titlesMatchedToItems[key]\r\n    }));\r\n  }\r\n\r\n  function getSplitShippingGroupTitle(source: string[]): string {\r\n    // TODO: implement caching\r\n    if (!source || !Array.isArray(source)) {\r\n      return null;\r\n    }\r\n    let title = \"\";\r\n    const [ nothingToShip, storeName, vendorName ] = source;\r\n    title += nothingToShip ? \"Non-shippable products\" : \"Shippable products\";\r\n    if (storeName) {\r\n      title += ` sold by ${storeName}`;\r\n    }\r\n    if (vendorName) {\r\n      if (storeName) {\r\n        title += \" and\";\r\n      }\r\n      title += ` supplied by ${vendorName}`;\r\n    }\r\n    return title;\r\n  }\r\n\r\n  function groupBy(list: Array<unknown>, keyGetter: Function) {\r\n    const map = new Map();\r\n    list.forEach(item =&gt; {\r\n      const key = keyGetter(item);\r\n      const collection = map.get(key);\r\n      if (collection) {\r\n        collection.push(item);\r\n      } else {\r\n        map.set(key, [ item ]);\r\n      }\r\n    });\r\n    return map;\r\n  }\r\n\r\n  function quantitiesMatch(targets: SalesItemTargetBaseModel[], quantity: number): boolean {\r\n    return targets.reduce((acc: number, target) =&gt; acc + target.Quantity, 0) === quantity;\r\n  }\r\n\r\n  function itemsExist(items: unknown): boolean {\r\n    return Array.isArray(items) &amp;&amp; items?.length &gt; 0;\r\n  }\r\n\r\n  function doCallbackIfTargetsExist(item: TItem, callback: Function) {\r\n    if (!item.Targets) {\r\n      return null;\r\n    }\r\n    return callback();\r\n  }\r\n\r\n  function cleanTargets(item: TItem) {\r\n    if (!item.Targets) {\r\n      return null;\r\n    }\r\n    if (item.Targets.some(target =&gt; target.MasterID &gt; 0)) {\r\n      console.log(\"Caught a potential issue and fixed it!\");\r\n    }\r\n    return item.Targets.map(target =&gt; ({ ...target, MasterID: null, ID: null }));\r\n  }\r\n\r\n  const onContinueClicked = () =&gt; {\r\n    setRunning();\r\n    const items = grouped\r\n      ?.reduce((curVal, group) =&gt; [ ...curVal, ...group.salesItems ], [])\r\n      .map(item =&gt; ({ ...item, Targets: cleanTargets(item) }));\r\n    cvApi.shopping\r\n      .UpdateCartItems({\r\n        TypeName: cartType,\r\n        Items: items\r\n      })\r\n      .then(res =&gt; {\r\n        if (!res || !res.data || res.status !== 200) {\r\n          throw new Error(\"Failed to update cart items\");\r\n        }\r\n        finishRunning();\r\n        onCompleteCheckoutSplitShippingStep(grouped);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const somethingToShip = Array.isArray(grouped)\r\n    ? grouped.find(grp =&gt; grp.salesItems.some(sItem =&gt; !sItem.ProductNothingToShip)) !== null\r\n    : false;\r\n\r\n  const shippingRatesNeeded = itemsExist(grouped) &amp;&amp; somethingToShip;\r\n\r\n  const allTargetsHaveADestination: boolean\r\n    = grouped\r\n    &amp;&amp; grouped.every(g =&gt; g.salesItems.every(item =&gt; item.ProductNothingToShip\r\n                      || item.Targets.every(tgt =&gt; tgt.DestinationContact)));\r\n\r\n  return (\r\n    <row classname='\"position-relative\"'>\r\n      {viewState.running &amp;&amp; <loadingwidget overlay="{true}">}\r\n      \r\n        {\r\n          <h4 classname='\"mt-2\"' id='\"WhichShippingAddressText\"'>\r\n            {t(somethingToShip ? \"ui.storefront.checkout.shippingTitle\" : \"Nothing to ship.\")}\r\n          </h4>\r\n        }\r\n        <div checkbox="" classname='\"form-group' mb-0\"="">\r\n          <p id='\"SplitShippingText\"'>{t(\"ui.storefront.checkout.splitShipping.SelectADestination.Message\")}</p>\r\n        </div>\r\n      \r\n      \r\n        <checkouttargets\r\n accountcontacts="{addressBook}\r\n" cart="{cartToUse}\r\n" cefconfig="{cefConfig}\r\n" grouped="{grouped}\r\n" itemsexist="{itemsExist}\r\n" parentfinishrunning="{finishRunning}\r\n" parentsetrunning="{setRunning}\r\n" parentviewstate="{viewState}\r\n" setgrouped="{setGrouped}\r\n" shippingratesneeded="{shippingRatesNeeded}\r\n" submitdisabled="{false}\r\n">\r\n        <row>\r\n          \r\n            <div classname='\"d-flex' mb-4\"="">\r\n              <button\r\n !alltargetshaveadestination}\r\n="" &&="" =="" disabled="{somethingToShip" id='\"btnGetShippingRateQuotes\"\r\n' onclick="{()" variant='\"primary\"\r\n'> {\r\n                  if (somethingToShip &amp;&amp; !allTargetsHaveADestination) {\r\n                    return;\r\n                  }\r\n                  onContinueClicked();\r\n                }}&gt;\r\n                {continueText}\r\n              \r\n            </button\r\n></div>\r\n          \r\n        </row>\r\n      \r\n    </checkouttargets\r\n></loadingwidget></row>\r\n  );\r\n};\r\n","import { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Card, Col, Form } from \"react-bootstrap\";\r\nimport { Modal } from \"src/_shared/modals\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { TextInputFormGroup } from \"src/_shared/forms/formGroups\";\r\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\r\nimport { CardInputFormGroup } from \"src/_shared/forms/formGroups/CardInputFormGroup\";\r\n\r\ninterface IWalletEntryData {\r\n  txtWalletCardNumber: string;\r\n  txtWalletCardNickname: string;\r\n  txtWalletCardHolderName: string;\r\n  txtWalletCardType: string;\r\n  ddlWalletExpirationMonth: string;\r\n  ddlWalletExpirationYear: number;\r\n}\r\n\r\nconst monthsAbbreviated = [\r\n  \"Jan\",\r\n  \"Feb\",\r\n  \"Mar\",\r\n  \"Apr\",\r\n  \"May\",\r\n  \"Jun\",\r\n  \"Jul\",\r\n  \"Aug\",\r\n  \"Sep\",\r\n  \"Oct\",\r\n  \"Nov\",\r\n  \"Dec\"\r\n];\r\n\r\nconst thisYear = new Date().getFullYear();\r\n\r\nconst availableExpirationYears: number[] = [];\r\nfor (let i = 0; i &lt; 11; i++) {\r\n  availableExpirationYears.push(thisYear + i);\r\n}\r\n\r\ninterface INewWalletModalProps {\r\n  onConfirm: (data: INewWalletFormConfirmData) =&gt; void;\r\n  onCancel: Function;\r\n  show: boolean;\r\n  loading?: boolean;\r\n}\r\n\r\nexport const NewWalletModal = (props: INewWalletModalProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const { onConfirm, onCancel, show, loading } = props;\r\n  const { register, handleSubmit, setValue, clearErrors, reset, formState } = useForm<iwalletentrydata>({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const handleConfirmButtonClicked: SubmitHandler<iwalletentrydata> = (data): void =&gt; {\r\n    const formatted: INewWalletFormConfirmData = {\r\n      CardHolderName: data.txtWalletCardHolderName,\r\n      CardNickName: data.txtWalletCardNickname,\r\n      CardType: data.txtWalletCardType,\r\n      CreditCardNumber: data.txtWalletCardNumber?.replaceAll(/[\\s-]+/gu, \"\"),\r\n      ExpirationMonth: monthsAbbreviated.indexOf(data.ddlWalletExpirationMonth) + 1,\r\n      ExpirationYear: String(data.ddlWalletExpirationYear)\r\n    };\r\n    if (onConfirm) {\r\n      onConfirm(formatted);\r\n      reset(\r\n        {\r\n          ddlWalletExpirationMonth: monthsAbbreviated[0],\r\n          ddlWalletExpirationYear: availableExpirationYears[0],\r\n          txtWalletCardHolderName: \"\",\r\n          txtWalletCardNickname: \"\",\r\n          txtWalletCardNumber: \"\"\r\n        },\r\n        {\r\n          keepDirty: false,\r\n          keepErrors: false,\r\n          keepIsSubmitted: false,\r\n          keepIsValid: false,\r\n          keepSubmitCount: false,\r\n          keepTouched: false\r\n        }\r\n      );\r\n      clearErrors();\r\n    }\r\n  };\r\n\r\n  function handleCancel() {\r\n    onCancel();\r\n    reset(\r\n      {\r\n        ddlWalletExpirationMonth: monthsAbbreviated[0],\r\n        ddlWalletExpirationYear: availableExpirationYears[0],\r\n        txtWalletCardHolderName: \"\",\r\n        txtWalletCardNickname: \"\",\r\n        txtWalletCardNumber: \"\"\r\n      },\r\n      {\r\n        keepDirty: false,\r\n        keepErrors: false,\r\n        keepIsSubmitted: false,\r\n        keepIsValid: false,\r\n        keepSubmitCount: false,\r\n        keepTouched: false\r\n      }\r\n    );\r\n  }\r\n\r\n  return (\r\n    <modal loading="{loading}\r\n" oncancel="{handleCancel}\r\n" show="{show}\r\n" size='\"md\"' title='{t(\"ui.storefront.userDashboard.wallet.AddANewEntry\")}\r\n' titleid='\"txtNewWalletModalTitle\"\r\n'>\r\n      {show\r\n        &amp;&amp; \r\n          {/* TODO: replace this form with NewWalletForm */}\r\n          <form\r\n autocomplete='\"off\"\r\n' border-0\"\r\n="" card="" classname='\"form-vertical' h-100="" onsubmit="{handleSubmit(handleConfirmButtonClicked)}" wallet-card-panel="">\r\n            {loading\r\n              ? <loadingwidget>\r\n              : <card.body classname='\"p-0\"'>\r\n                <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"mb-2\"\r\n' formidentifier='\"txtWalletCardNickname\"\r\n' labelkey='\"ui.storefront.wallet.walletCard.CardNickname\"\r\n' maxlength="{128}\r\n" placeholderkey='\"ui.storefront.wallet.walletCard.CardNickname\"\r\n' register="{register}\r\n" required="{true}\r\n">\r\n                <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"mb-2\"\r\n' formidentifier='\"txtWalletCardHolderName\"\r\n' labelkey='\"ui.storefront.wallet.walletCard.CardHolderName\"\r\n' maxlength="{128}\r\n" placeholderkey='\"ui.storefront.wallet.walletCard.CardHolderName\"\r\n' register="{register}\r\n" required="{true}\r\n">\r\n                <cardinputformgroup\r\n errors="{formState.errors}\r\n" formidentifier='\"txtCreditCard\"\r\n' register="{register}\r\n" setvalue="{setValue}\r\n">\r\n                {/* <textinputformgroup\r\n 13="" 19="" 3456\"\r\n="" 5678="" 9012="" =="" a="" account="" and="" card="" card#\r\n="" contain="" correct="" credit="" digits="" digits\"\r\n="" ensure="" enter="" entered="" errors="{formState.errors}\r\n" exceed="" for="" formclasses='\"mb-2\"\r\n' formidentifier='\"txtWalletCardNumber\"\r\n' have="" in="" labelkey='\"ui.storefront.wallet.walletCard.CardNumber\"\r\n' maxlength="{23}\r\n" maxlengthmessage='\"Must' may="" minimum="" minlength="{16}\r\n" minlengthmessage='\"Must' not="" number="" number.\"\r\n="" of="" onkeydown="{e" only="" pattern="{/^(\\d{4}\\s){4}\\d{1,3}|^(\\d{4}\\s){3}\\d{1,4}$/u}\r\n" patternmessage='\"Card' placeholdertext='\"1234' please="" register="{register}\r\n" required="{true}\r\n" spaces="" spaces.\r\n="" the="" you=""> {\r\n                    const backspacePressed = e.key === \"Backspace\";\r\n                    const currentValue = e.currentTarget.value;\r\n                    if (!backspacePressed) {\r\n                      const lengthNoSpaces = currentValue.replace(/ /gu, \"\").length;\r\n                      if (\r\n                        lengthNoSpaces !== 0\r\n                        &amp;&amp; lengthNoSpaces % 4 === 0\r\n                        &amp;&amp; currentValue.length &lt; 24\r\n                      ) {\r\n                        setValue(\"txtWalletCardNumber\", `${currentValue} `);\r\n                      }\r\n                    } else if (currentValue[currentValue.length - 2] === \" \") {\r\n                      setValue(\r\n                        \"txtWalletCardNumber\",\r\n                        currentValue.substr(0, currentValue.length - 1)\r\n                      );\r\n                    }\r\n                  }}\r\n                /&gt; */}\r\n                <div classname='\"mb-2\"'>\r\n                  <form.label htmlfor='\"txtWalletCardExpiration\"'>\r\n                    <span data-sid='\"txtWalletCardExpiration\"'>{t(\"ui.storefront.wallet.walletCard.Expiration\")}</span>\r\n                    <span classname='\"text-danger\"'> *</span>\r\n                  </form.label>\r\n                  <div align-items-center\"="" classname='\"d-flex'>\r\n                    <form.select\r\n classname='\"me-1' custom-select\"\r\n="" id='\"ddlWalletExpirationMonth\"\r\n' {...register(\"ddlwalletexpirationmonth\")}="">\r\n                      {monthsAbbreviated.map(month =&gt; <option key="{month}">{month}</option>)}\r\n                    \r\n                    <form.select\r\n classname='\"ms-1' custom-select\"\r\n="" id='\"ddlWalletExpirationYear\"\r\n' {...register(\"ddlwalletexpirationyear\")}="">\r\n                      {availableExpirationYears.map(year =&gt; <option key="{year.toString()}">{year}</option>)}\r\n                    \r\n                  </form.select\r\n></form.select\r\n></div>\r\n                </div>\r\n              </textinputformgroup\r\n></cardinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></card.body>\r\n            }\r\n            <hr classname='\"mx-n3\"'/>\r\n            <card.footer bg-transparent="" border-0\"="" classname='\"p-0' d-flex="" justify-content-end="">\r\n              <button\r\n =="" aria-label='\"Cancel\"\r\n' id='\"btnWalletCancel\"\r\n' name='\"btnWalletCancel\"\r\n' onclick="{()" title='\"Cancel\"\r\n' variant='\"outline-secondary\"\r\n'> handleCancel()}&gt;\r\n                <span classname='\"ms-1\"'>{t(\"ui.storefront.common.Cancel\")}</span>\r\n              \r\n              <button\r\n !formstate.isvalid}\r\n="" classname='\"ms-2\"\r\n' disabled="{loading" id='\"btnWalletSave\"\r\n' name='\"btnWalletSave\"\r\n' title='{t(\"ui.storefront.userDashboard.wallet.AddEntry\")}' type='\"submit\"\r\n' variant='\"primary\"\r\n' ||="">\r\n                <span classname='\"ms-1\"'>{t(\"ui.storefront.userDashboard.wallet.AddEntry\")}</span>\r\n              \r\n            </button\r\n></button\r\n></card.footer>\r\n          \r\n        \r\n      }\r\n    </loadingwidget></form\r\n></modal>\r\n  );\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { RootState } from \"src/_redux/store\";\r\nimport { setWallet } from \"src/_redux/slices/walletSlice\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useState } from \"react\";\r\n\r\nexport interface IWalletFactory {\r\n  addWalletEntry: (entry: WalletModel) =&gt; Promise<walletmodel>;\r\n  deactivateWalletEntry: (id: number) =&gt; Promise<void>;\r\n  markEntryAsDefault: (id: number) =&gt; Promise<void>;\r\n  reloadWallet: (force?: boolean) =&gt; Promise<void>;\r\n}\r\n\r\nexport const useWalletFactory = (): IWalletFactory | null =&gt; {\r\n  const dispatch = useDispatch();\r\n  // NOTE: Cannot use useWallet hook, since it uses this hook\r\n  const walletState: WalletModel[] = useSelector((state: RootState) =&gt; state.wallet.Wallet);\r\n\r\n  const [ walletFactory ] = useState<iwalletfactory>({\r\n    addWalletEntry: (entry: WalletModel): Promise<walletmodel> =&gt; {\r\n      // Make sure the first created wallet entry gets set as default\r\n      if (!walletState?.length || !walletState.find(w =&gt; w.IsDefault)) {\r\n        entry.IsDefault = true;\r\n      }\r\n      return cvApi.payments\r\n        .CreateCurrentUserWalletEntry(entry)\r\n        .then(r =&gt; {\r\n          if (!r?.data?.ActionSucceeded) {\r\n            throw r?.data?.Messages ?? [ \"Failed to create new wallet\" ];\r\n          }\r\n          return walletFactory.reloadWallet(true).then(() =&gt; r.data.Result);\r\n        });\r\n    },\r\n\r\n    deactivateWalletEntry: (id: number): Promise<void> =&gt; {\r\n      return cvApi.payments\r\n        .DeactivateCurrentUserWalletEntry(id)\r\n        .then(r =&gt; {\r\n          if (!r?.data?.ActionSucceeded) {\r\n            throw r?.data?.Messages ?? [ \"Failed to deactivate wallet entry\" ];\r\n          }\r\n          return walletFactory.reloadWallet(true);\r\n        });\r\n    },\r\n\r\n    markEntryAsDefault: (id: number): Promise<void> =&gt; {\r\n      return cvApi.payments\r\n        .CurrentUserMarkWalletEntryAsDefault(id)\r\n        .then(r =&gt; {\r\n          if (!r?.data?.ActionSucceeded) {\r\n            throw r?.data?.Messages ?? [ \"Failed to mark entry as default\" ];\r\n          }\r\n          return walletFactory.reloadWallet(true);\r\n        });\r\n    },\r\n\r\n    reloadWallet: (force?: boolean): Promise<void> =&gt; {\r\n      if (force) {\r\n        promiser.flush(\"loadWallet\");\r\n      }\r\n      return promiser.resolve(\r\n        \"loadWallet\",\r\n        () =&gt; cvApi.payments\r\n          .GetCurrentUserWallet()\r\n          .then(r =&gt; {\r\n            if (!r?.data?.ActionSucceeded) {\r\n              throw r?.data?.Messages ?? [ \"Failed to load wallet\" ];\r\n            }\r\n            const wallet = r.data.Result ?? [];\r\n            dispatch(setWallet(wallet));\r\n            return wallet;\r\n          })\r\n      ).then();\r\n    }\r\n  });\r\n\r\n  return walletFactory;\r\n};\r\n","import { useEffect } from \"react\";\r\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { RootState } from \"src/_redux/store\";\r\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\r\n\r\ninterface IWalletSliceState {\r\n  Wallet: WalletModel[];\r\n}\r\n\r\nexport const walletSlice = createSlice({\r\n  name: \"wallet\",\r\n  initialState: {\r\n    Wallet: null\r\n  } as IWalletSliceState,\r\n  reducers: {\r\n    setWallet: (state, action: PayloadAction<walletmodel[]>) =&gt; {\r\n      state.Wallet = action.payload;\r\n    }\r\n  }\r\n});\r\n\r\nexport const { setWallet } = walletSlice.actions;\r\nexport const useWallet = (): WalletModel[] | null =&gt; {\r\n  const wallet = useSelector((state: RootState) =&gt; state.wallet.Wallet);\r\n  const walletFactory = useWalletFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (wallet === null &amp;&amp; walletFactory !== null) {\r\n      walletFactory.reloadWallet();\r\n    }\r\n  }, [ wallet, walletFactory ]);\r\n\r\n  return wallet;\r\n};\r\n\r\nexport default walletSlice.reducer;\r\n","import { useEffect, useState } from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport creditCardType from \"credit-card-type\";\r\nimport { INewWalletFormConfirmData, NewWalletForm } from \"src/_shared/forms/NewWalletForm\";\r\nimport {\r\n  ICreditCardFormData,\r\n  IPaymentMethodCreditCardBodyProps\r\n} from \"src/Checkout/_checkoutTypes\";\r\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\r\nimport { WalletSwitch } from \"src/Dashboard/Wallet/WalletSwitch\";\r\n\r\nconst thisYear = new Date().getFullYear();\r\n\r\nconst availableExpirationYears: number[] = [];\r\nfor (let i = 0; i &lt; 11; i++) {\r\n  availableExpirationYears.push(thisYear + i);\r\n}\r\n\r\nexport const PaymentMethodCreditCardBody = (props: IPaymentMethodCreditCardBodyProps): JSX.Element =&gt; {\r\n  const {\r\n    onSubmit,\r\n    onSelectedWalletChanged,\r\n    continueText,\r\n    submitDisabled,\r\n    initialWalletID,\r\n    usingGuestCheckout\r\n  } = props;\r\n\r\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState(null);\r\n  const [ walletCVV, setWalletCVV ] = useState<string>(\"\");\r\n  const { t } = useTranslation();\r\n  const wallet = useWallet();\r\n\r\n  const {\r\n    handleSubmit,\r\n    setValue,\r\n    formState\r\n  } = useForm<icreditcardformdata>({\r\n    mode: \"all\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  useEffect(() =&gt; {\r\n    if (onSelectedWalletChanged) {\r\n      onSelectedWalletChanged(selectedWalletItem);\r\n    }\r\n    if (walletCVV?.length) {\r\n      setWalletCVV(\"\");\r\n    }\r\n  }, [ selectedWalletItem ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!wallet || usingGuestCheckout || selectedWalletItem) {\r\n      return;\r\n    }\r\n    const initialDesiredWallet = wallet.find(w =&gt; w.ID === initialWalletID);\r\n    if (initialDesiredWallet) {\r\n      setSelectedWalletItem(initialDesiredWallet);\r\n      setValue(\"ddlSelectedCard\", initialDesiredWallet.ID.toString());\r\n    }\r\n  }, [ wallet, initialWalletID ]);\r\n\r\n  const onClickSubmit = (): void =&gt; {\r\n    if (selectedWalletItem &amp;&amp; walletCVV?.length &gt; 2) {\r\n      onSubmit(\"PayByWalletEntry\", {\r\n        WalletCVV: walletCVV,\r\n        WalletID: selectedWalletItem.ID\r\n      });\r\n    }\r\n  };\r\n\r\n  const onSubmitGuestCreditCard = (data: INewWalletFormConfirmData): void =&gt; {\r\n    onSubmit(\"PayByCreditCard\", {\r\n      ...data,\r\n      CVV: data.CreditCardCVV,\r\n      CardNumber: data.CreditCardNumber,\r\n      CardType: creditCardType(data.CreditCardNumber)[0].niceType\r\n    });\r\n  };\r\n\r\n  if (usingGuestCheckout) {\r\n    return \r\n      <row>\r\n        \r\n          <newwalletform\r\n =="" onconfirm="{data"> onSubmitGuestCreditCard(data)}\r\n            submitBtnText={continueText}\r\n            btnAlign=\"start\"\r\n            hideNickName={true}\r\n            submitBtnDisabled={submitDisabled}\r\n          /&gt;\r\n        \r\n      </newwalletform\r\n></row>\r\n    ;\r\n  }\r\n\r\n  return (\r\n    <row classname='\"mb-3\"'>\r\n      \r\n        <row>\r\n          \r\n            <walletswitch\r\n =="" onchange="{walletItem"> {\r\n                setSelectedWalletItem(walletItem);\r\n                setWalletCVV(\"\");\r\n              }}\r\n              onCVVChange={(cvv: string) =&gt; {\r\n                setWalletCVV(cvv);\r\n              }}\r\n              CVV={walletCVV}\r\n              usingGuestCheckout={usingGuestCheckout}\r\n            /&gt;\r\n          \r\n        </walletswitch\r\n></row>\r\n        <row>\r\n          \r\n            <button\r\n !formstate.isvalid="" !formstate.isvalid\r\n="" 3\r\n="" <="" classname='\"my-3\"\r\n' disabled="{\r\n" first\r\n="" id='\"btnSubmit_purchaseStepPayment\"\r\n' must="" stay="" variant='\"primary\"\r\n' walletcvv.length="" ||=""> 4\r\n                || !(/^\\d*$/u).test(walletCVV)\r\n                || submitDisabled\r\n              }\r\n              title={continueText ?? t(\r\n                \"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\"\r\n              )}\r\n              type=\"button\"\r\n              onClick={onClickSubmit}&gt;\r\n              {continueText\r\n                ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\r\n            \r\n          \r\n        </button\r\n></row>\r\n      \r\n    </row>\r\n  );\r\n};\r\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\r\nimport { Button, ButtonGroup, Card, Col, Form, InputGroup, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\r\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\r\n\r\ninterface IWalletEntryCardProps {\r\n  walletItem: WalletModel;\r\n  setDeleteWalletItem?: Function\r\n  isDefault?: boolean;\r\n  title?: string;\r\n  walletCVV?: string;\r\n  setWalletCVV?: Function;\r\n  index?: number; // Used in data-sids\r\n}\r\n\r\nexport const WalletEntryCard = (props: IWalletEntryCardProps): JSX.Element =&gt; {\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const wallet = useWallet();\r\n  const walletFactory = useWalletFactory();\r\n\r\n  function setDefaultWalletEntryForCurrentUser(ID: number): void {\r\n    setRunning();\r\n    walletFactory\r\n      .markEntryAsDefault(ID)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  const getIconByCardType = (type: string) =&gt; {\r\n    switch (type) {\r\n      case \"visa\":\r\n        return \"fab fa-cc-visa\";\r\n      case \"mastercard\":\r\n        return \"fab fa-cc-mastercard\";\r\n      case \"discover\":\r\n        return \"fab fa-cc-discover\";\r\n      default:\r\n        return \"fal fa-credit-card\";\r\n    }\r\n  };\r\n\r\n  return (\r\n    <card classname='\"h-100' position-relative\"="">\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      <card.header :="" ?="" \"alert-info\"="" \"d-flex="" align-items-center\"="" classname="{props.isDefault\r\n" justify-content-between="" }="">\r\n        {props.isDefault ? t(\"ui.storefront.userDashboard.wallet.DefaultEntry\")\r\n          : <h4 bold="" classname='\"m-0' d-inline\"="" id="{`CardNickname_${props.index}`}">{props.walletItem.Name}</h4>\r\n        }\r\n      </card.header>\r\n      { props.isDefault\r\n          &amp;&amp; <card.body classname='\"p-2\"'>\r\n            <form.select\r\n =="" classname='\"form-control' custom-select\"\r\n="" onchange="{e"> {\r\n                setDefaultWalletEntryForCurrentUser(Number(e.target.value));\r\n              }}\r\n              value={props.walletItem ? props.walletItem.ID : \"\"}\r\n              id=\"ddlDefaultEntry\"\r\n              name=\"ddlDefaultEntry\"&gt;\r\n              <option !="=" disabled="{props.walletItem" null}="" value="{null}">\r\n                {t(\"ui.storefront.userDashboard.wallet.PleaseSelectADefaultEntry\")}\r\n              </option>\r\n              {wallet.map((entry: WalletModel) =&gt; {\r\n                const { ID, Name } = entry;\r\n                return (\r\n                  <option key="{ID}\r\n" label="{Name}\r\n" value="{ID}">\r\n                    {Name}\r\n                  </option>\r\n                );\r\n              })}\r\n            \r\n          </form.select\r\n></card.body>\r\n      }\r\n      {props.walletItem\r\n        ? &lt;&gt;\r\n          <card.body classname='\"p-2\"'>\r\n            <div classname='{\"w-100' wallet-panel\"}="">\r\n              <div classname='{\"w-100' p-2\"}="">\r\n                <row classname='\"align-items-center\"'>\r\n                  \r\n                    <p classname='\"h3' id="{`CardNumberText_${props.index}`}" mt-0\"="">\r\n                      ••••  •••• \r\n                      •••• \r\n                      {props.walletItem.CreditCardNumber}\r\n                    </p>\r\n                  \r\n                  \r\n                    <p classname='\"h3' mt-0\"="">\r\n                      <i classname="{getIconByCardType(props.walletItem.CardType)}">\r\n                      <span classname='\"sr-only\"'>{props.walletItem.CardType}</span>\r\n                    </i></p><i classname="{getIconByCardType(props.walletItem.CardType)}">\r\n                  \r\n                </i></row><i classname="{getIconByCardType(props.walletItem.CardType)}">\r\n                <row>\r\n                  \r\n                    <p classname='\"small' mb-1\"="">{t(\"ui.storefront.wallet.walletCard.CardHolderName\")}</p>\r\n                    <p classname='\"mb-1\"' id="{`CardHolderName_${props.index}`}">{props.walletItem.CardHolderName}</p>\r\n                  \r\n                  \r\n                    <p classname='\"small' id='\"CheckoutCardValidThrough\"' mb-1\"="">\r\n                      {t(\"ui.storefront.checkout.checkoutCard.ValidThrough\")}\r\n                    </p>\r\n                    <p classname='\"mb-1\"' id="{`CardExpirationText_${props.index}`}\r\n">\r\n                      {props.walletItem.ExpirationMonth.toString().padStart(2, \"0\")}\r\n                      /\r\n                      {props.walletItem.ExpirationYear}\r\n                    </p>\r\n                  \r\n                  {props.setWalletCVV\r\n                    &amp;&amp; \r\n                      <form.group>\r\n                        <form.label htmlfor='\"txtWalletCVV\"'>\r\n                          <span>{t(\"ui.storefront.checkout.views.paymentInformation.CVV\")}</span>\r\n                        </form.label>\r\n                        <inputgroup>\r\n                          <input\r\n =="" onchange="{e" value="{props.walletCVV}\r\n"> props.setWalletCVV(e.target.value)}\r\n                            style={{ width: \"60px\" }}\r\n                            id=\"txtWalletCVV\"\r\n                          /&gt;\r\n                        </input\r\n></inputgroup>\r\n                      </form.group>\r\n                      {props.walletCVV.length &amp;&amp; props.walletCVV.length &lt; 3\r\n                        || props.walletCVV.length &gt; 4\r\n                        || !(/^\\d*$/u).test(props.walletCVV) &amp;&amp; <div classname='\"d-flex' justify-content-end\"="">\r\n                          <ul classname='\"list-unstyled\"'>\r\n                            {Boolean(props.walletCVV.length) &amp;&amp; props.walletCVV.length &lt; 3\r\n                          &amp;&amp; <li>\r\n                            <span classname='\"text-danger\"'>\r\n                              CVV must be at least 3 digits\r\n                            </span>\r\n                          </li>\r\n                            }\r\n                            {props.walletCVV.length &gt; 4\r\n                          &amp;&amp; <li>\r\n                            <span classname='\"text-danger\"'>\r\n                              CVV may not be more than 4 digits\r\n                            </span>\r\n                          </li>\r\n                            }\r\n                            {!(/^\\d*$/u).test(props.walletCVV)\r\n                          &amp;&amp; <li>\r\n                            <span classname='\"text-danger\"'>\r\n                              CVV must contain only numbers\r\n                            </span>\r\n                          </li>\r\n                            }\r\n                          </ul>\r\n                        </div>}\r\n                    \r\n                  }\r\n                </row>\r\n              </i></div><i classname="{getIconByCardType(props.walletItem.CardType)}">\r\n            </i></div><i classname="{getIconByCardType(props.walletItem.CardType)}">\r\n          </i></card.body><i classname="{getIconByCardType(props.walletItem.CardType)}">\r\n          {!props.isDefault &amp;&amp; props.setDeleteWalletItem\r\n            &amp;&amp; <buttongroup as="{Card.Footer}" classname='\"p-0\"'>\r\n              {/* TODO- show errors */}\r\n              <button\r\n =="" classname='\"text-danger' onclick="{()" size='\"lg\"\r\n' text-decoration-none="" underline-hover\"\r\n="" variant='\"link\"\r\n'> props.setDeleteWalletItem(props.walletItem)}\r\n                id={`btnCardEntryDelete_${props.index}`}\r\n                name={`btnCardEntryDelete_${props.index}`}\r\n                title=\"Delete\"&gt;\r\n                <i aria-hidden='\"true\"' classname='\"fal' fa-trash\"="">\r\n                <span classname='\"ms-1\"'>\r\n                  {t(\"ui.storefront.common.Remove\")}\r\n                </span>\r\n              \r\n            </i></button\r\n></buttongroup><i aria-hidden='\"true\"' classname='\"fal' fa-trash\"="">\r\n          }\r\n        \r\n        : null}\r\n    </i></i></loadingwidget></card><i classname="{getIconByCardType(props.walletItem.CardType)}"><i aria-hidden='\"true\"' classname='\"fal' fa-trash\"="">\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\r\nimport { NewWalletModal } from \"src/Dashboard/Wallet/NewWalletModal\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\r\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\r\nimport { WalletEntryCard } from \"src/Dashboard/Wallet/WalletEntryCard\";\r\n\r\ninterface IWalletSwitchProps {\r\n  classes?: string;\r\n  disabled?: boolean;\r\n  hideWalletBlock?: boolean;\r\n  onChange: (walletItem: WalletModel) =&gt; void;\r\n  CVV: string;\r\n  onCVVChange?: (cvv: string) =&gt; void;\r\n  title?: string;\r\n  initialWalletID?: number;\r\n  usingGuestCheckout?: boolean;\r\n  // excludeAdd and children are intended for use at the same time\r\n  excludeAdd?: boolean;\r\n  children?: React.ReactNode;\r\n}\r\n\r\nexport const WalletSwitch = (props: IWalletSwitchProps): JSX.Element =&gt; {\r\n  const { onChange, onCVVChange, CVV, title, classes, initialWalletID, disabled, hideWalletBlock } = props;\r\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState(null);\r\n  const [ showNewWalletModal, setShowNewWalletModal ] = useState(false);\r\n  const { viewState } = useViewState();\r\n  const { setRunning, finishRunning } = useViewState();\r\n  const walletFactory = useWalletFactory();\r\n  const { t } = useTranslation();\r\n  const currentUser = useCurrentUser();\r\n  const wallet = useWallet();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!wallet) {\r\n      return;\r\n    }\r\n    const initialDesiredWalletItem = wallet.find(w =&gt; w.ID === initialWalletID);\r\n    if (initialDesiredWalletItem) {\r\n      setSelectedWalletItem(initialDesiredWalletItem);\r\n      onChange(initialDesiredWalletItem);\r\n      return;\r\n    }\r\n    const defaultWalletItem = wallet.find(w =&gt; w.IsDefault);\r\n    if (defaultWalletItem) {\r\n      setSelectedWalletItem(defaultWalletItem);\r\n      onChange(defaultWalletItem);\r\n    }\r\n  }, [ initialWalletID ]);\r\n\r\n  function addUserWalletItem(data: INewWalletFormConfirmData): void {\r\n    if (!currentUser || props.usingGuestCheckout) {\r\n      return;\r\n    }\r\n    setRunning();\r\n    const { CreditCardNumber, CardNickName, CardHolderName, CardType, ExpirationMonth, ExpirationYear } = data;\r\n    const walletData = {\r\n      Active: true,\r\n      CardHolderName,\r\n      CardType,\r\n      CreatedDate: new Date(),\r\n      CreditCardNumber,\r\n      ExpirationMonth,\r\n      ExpirationYear: Number(ExpirationYear),\r\n      ID: 0,\r\n      IsDefault: false,\r\n      Name: CardNickName,\r\n      User: currentUser,\r\n      UserID: currentUser.ID\r\n\r\n      // AccountNumber: \"\",\r\n      // RoutingNumber: \"\",\r\n      // BankName: \"\",\r\n      // Token: \"\",\r\n      // CardType: \"\",\r\n      // UserKey: \"\",\r\n      // CurrencyID: 1,\r\n      // CurrencyKey: \"USD\",\r\n      // CurrencyName: \"\"\r\n      // Currency: CurrencyModel\r\n    } as WalletModel;\r\n    walletFactory\r\n      .addWalletEntry(walletData)\r\n      .then(res =&gt; {\r\n        setShowNewWalletModal(false);\r\n        setSelectedWalletItem(res);\r\n        // TODO, automatically assign just added card, if in payment method\r\n        // setValue(\"ddlSelectedCard\", res.ID.toString(), { shouldValidate: true });\r\n        onChange(res);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err\r\n        );\r\n      });\r\n  }\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <div ${classes="" ??="" \"\"}`}="" classname="{`wrap" mb-2="">\r\n        <strong classname='\"d-block\"'>{title ?? \"\"}</strong>\r\n        <inputgroup align-items-end="" classname='\"d-flex' mb-2\"="">\r\n          <form.select\r\n :="" =="" ?="" \"\"}\r\n="" aria-label='\"walletSwitchSelect\"\r\n' disabled="{disabled}\r\n" id='\"walletSwitchSelect\"\r\n' onchange="{e" required\r\n="" selectedwalletitem.id="" value="{selectedWalletItem"> {\r\n              const currentContactVal = wallet.find(\r\n                (c: { ID: number }) =&gt; c.ID.toString() === e.target.value\r\n              );\r\n              if (currentContactVal) {\r\n                onChange(currentContactVal);\r\n              }\r\n              setSelectedWalletItem(currentContactVal);\r\n            }}&gt;\r\n            <option\r\n :="" ?="" \"\"}`}="" \"disabled\"="" classname="{`${selectedWalletItem" disabled="{Boolean(selectedWalletItem)}\r\n">\r\n              Please select a card\r\n            \r\n            {wallet\r\n              &amp;&amp; wallet.map(walletItem =&gt; {\r\n                const { ID, CustomKey, Name } = walletItem;\r\n                return (\r\n                  <option key="{ID}" value="{ID}">\r\n                    {Name || CustomKey}\r\n                  </option>\r\n                );\r\n              })}\r\n          \r\n          {props.children}\r\n          {!props.excludeAdd &amp;&amp; <button\r\n =="" id='\"btnAddCardToWallet\"\r\n' onclick="{()" variant='\"secondary\"\r\n'> setShowNewWalletModal(true)}&gt;\r\n            {t(\"ui.storefront.checkout.views.paymentInformation.AddCardToWallet\")}\r\n          }\r\n        </button\r\n></option\r\n></form.select\r\n></inputgroup>\r\n        {selectedWalletItem &amp;&amp; !hideWalletBlock\r\n          ? <walletentrycard\r\n setwalletcvv="{(cvv:" string)="" walletcvv="{CVV}\r\n" walletitem="{selectedWalletItem}\r\n"> {\r\n              if (onCVVChange) {\r\n                onCVVChange(cvv);\r\n              }\r\n            }}\r\n          /&gt;\r\n          : null}\r\n        {viewState.hasError &amp;&amp; <errorview error="{viewState.errorMessage}">}\r\n      </errorview></walletentrycard\r\n></div>\r\n      {!props.excludeAdd &amp;&amp; <newwalletmodal\r\n =="" oncancel="{()" onconfirm="{addUserWalletItem}\r\n" show="{showNewWalletModal}\r\n"> setShowNewWalletModal(false)}\r\n      /&gt;}\r\n    \r\n  );\r\n};\r\n","import React, { useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { IUploadResult } from \"src/_api/cvApi.shared\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport scssVariables from \"src/_meta/css/exposedToJSVariables.module.scss\";\r\nimport axios from \"src/axios\";\r\nimport { FileEntityType } from \"src/_api/cvApi._DtoClasses\";\r\n\r\n/* TODO:\r\nasync function uploadFile(\r\n    body: FormData,\r\n    setPercentage: React.Dispatch<react.setstateaction<number>&gt;\r\n) {\r\n  try {\r\n    / * TODO:\r\n    const options = {\r\n      onUploadProgress: (progressEvent: any) =&gt; {\r\n        console.log(progressEvent, \" progress event\");\r\n        const { loaded, total } = progressEvent;\r\n        const percent = Math.floor(loaded * 100 / total);\r\n        if (percent &lt;= 100 &amp;&amp; setPercentage) {\r\n          setPercentage(percent);\r\n        }\r\n      }\r\n    };\r\n    * /\r\n    const dto = {} as UploadStoredFileDto;\r\n    const result = await cvApi.media.UploadStoredFile(dto);\r\n    return result.data;\r\n  } catch (error) {\r\n    console.error(error);\r\n    return null;\r\n  }\r\n}\r\n*/\r\n\r\nconst ProgressBar = (props: any) =&gt; {\r\n  const { percentage } = props;\r\n  if (!percentage) {\r\n    return null;\r\n  }\r\n  return (\r\n    <div\r\n \"5px\"="" bg-light="" classname='\"w-100' height:="" mt-3="" position-relative\"\r\n="" rounded="" style="{{" }}="">\r\n      <div\r\n 1s\",\r\n="" \"100%\"\r\n="" \"width="" `${percentage}%`,\r\n="" background:="" height:="" scssvariables.success,\r\n="" style="{{\r\n" transition:="" width:="" }}="">\r\n    \r\n  );\r\n};\r\n\r\ninterface IFileUploadWidgetProps {\r\n  allowMultiple?: boolean;\r\n  limit?: number;\r\n  acceptableFileTypes?: Array<string>;\r\n  uploadCallback?: Function;\r\n  uploadCallbackRich?: Function\r\n  // Should be required\r\n  uploadType: FileEntityType;\r\n}\r\n\r\nexport const FileUploadWidget = (props: IFileUploadWidgetProps): JSX.Element =&gt; {\r\n  const [ percentage, setPercentage ] = useState<number>(0);\r\n  const [ uploadedFiles, setUploadedFiles ] = useState<array<iuploadresult>&gt;([]);\r\n  const [ inputKey, setInputKey ] = useState<string>(\"\");\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  async function handleFile(e: React.ChangeEvent<htmlinputelement>) {\r\n    try {\r\n      setRunning();\r\n      const [ file ] = e.target.files;\r\n      const formData = new FormData();\r\n      formData.append(\"EntityFileType\", String(props.uploadType));\r\n      formData.append(\"file\", file, file.name);\r\n      // Using a direct axios post since uploadFiles sends an empty body to API\r\n      const fileUploadResponse = await axios.post(\r\n        [ \"Media\", \"StoredFiles\", \"Upload\", \".json\" ].join(\"/\"),\r\n        formData\r\n      );\r\n      if (!fileUploadResponse?.data) {\r\n        finishRunning(true, \"Failed to upload\");\r\n        return;\r\n      }\r\n      const files : Array<iuploadresult> = fileUploadResponse.data.UploadFiles;\r\n      // TODO: match FormData with IUpload and IUploadResult types\r\n      setUploadedFiles(prevUploadedFiles =&gt; [ ...prevUploadedFiles, ...files ]);\r\n      if (props.uploadCallback) {\r\n        props.uploadCallback([ ...uploadedFiles, ...files ].map(x =&gt; x.FileName));\r\n      }\r\n      if (props.uploadCallbackRich) {\r\n        props.uploadCallbackRich([ ...uploadedFiles, ...files ].map(x =&gt; ({\r\n          name: x.FileName,\r\n          path: x.FilePath,\r\n        })));\r\n      }\r\n      setInputKey(Math.random().toString(36));\r\n      setPercentage(0);\r\n      finishRunning();\r\n    } catch (err: any) {\r\n      setPercentage(0);\r\n      finishRunning(true, err);\r\n    }\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <div border-1="" classname='\"bg-light' my-2="" p-3\"="">\r\n        <input\r\n disabled="{viewState.running}\r\n" key="{inputKey}\r\n" name='\"StoredFiles\"\r\n' onchange="{handleFile}\r\n" type='\"file\"\r\n'>\r\n        <progressbar percentage="{percentage}">\r\n      </progressbar></input\r\n></div>\r\n      {uploadedFiles.length\r\n        ? <ul border="" classname='\"bg-white' list-unstyled="" px-3\"="" py-2="">\r\n          {uploadedFiles.map(file =&gt; {\r\n            const pathPieces = file.FileName.split(\"\\\\\");\r\n            const name = pathPieces[pathPieces.length - 1];\r\n            return (\r\n              <li\r\n align-items-center="" classname='\"d-flex' justify-content-between\"\r\n="" key="{file.FileName}">\r\n                <span>{name}</span>\r\n                <button =="" onclick="{()" variant='\"none\"\r\n'> {\r\n                    setUploadedFiles(prevUploadedFiles =&gt; prevUploadedFiles.filter(x =&gt; x.FileName !== file.FileName));\r\n                    if (props.uploadCallback) {\r\n                      props.uploadCallback(uploadedFiles.filter(x =&gt; x.FileName !== file.FileName));\r\n                    }\r\n                  }}&gt;\r\n                  <i classname='\"fal' fa-trash="" text-danger\"="">\r\n                </i></button><i classname='\"fal' fa-trash="" text-danger\"="">\r\n              \r\n            );\r\n          })}\r\n        </i></li\r\n></ul><i classname='\"fal' fa-trash="" text-danger\"="">\r\n        : null}\r\n    </i></div><i classname='\"fal' fa-trash="" text-danger\"="">\r\n  );\r\n};\r\n\r\nFileUploadWidget.defaultProps = {\r\n  allowMultiple: false,\r\n  acceptableFileTypes: [ \".jpg\", \".png\", \".docx\", \".pdf\" ]\r\n};\r\n\r\n/*\r\n  **** Delete Process ****\r\n  User clicks on delete button for a given file\r\n  Update uploadedItems state to remove selected file by ID (.filter)\r\n\r\n  The following reactions happen...\r\n    - new <li> shows up for added item from uploadedItems\r\n      - include icon, delete button, name of file, percentage in view for item\r\n    - </li><li> removed when item deleted from uploadedItems\r\n    - label next to input button changes (\"uploading\" | \"done\" | \"\")\r\n    - input disabled/enabled based on limit\r\n      - error message if limit reached\r\n*/\r\n","import { useState } from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { IInvoiceFormData, IPaymentMethodInvoiceBodyProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { TextInputFormGroup } from \"src/_shared/forms/formGroups\";\r\nimport { FileUploadWidget } from \"src/_shared/common/FileUploadWidget\";\r\nimport { FileEntityType } from \"src/_api/cvApi._DtoClasses\";\r\n\r\nconst thisYear = new Date().getFullYear();\r\n\r\nconst availableExpirationYears: number[] = [];\r\nfor (let i = 0; i &lt; 11; i++) {\r\n  availableExpirationYears.push(thisYear + i);\r\n}\r\n\r\nexport const PaymentMethodInvoiceBody = (props: IPaymentMethodInvoiceBodyProps): JSX.Element =&gt; {\r\n  const { onSubmit, continueText, submitDisabled } = props;\r\n  const [ uploadedFileNames, setUploadedFileNames ] = useState<array<string>&gt;([]);\r\n  const { t } = useTranslation();\r\n\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    formState: { errors }\r\n  } = useForm<iinvoiceformdata>({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const onSubmitInvoiceForm: SubmitHandler<iinvoiceformdata> = (data): void =&gt; {\r\n    const { txtPONumber } = data;\r\n    onSubmit({\r\n      CustomerPurchaseOrderNumber: txtPONumber,\r\n      uploadedFileNames\r\n    });\r\n  };\r\n\r\n  return (\r\n    <row as="{Form}\r\n" classname='\"mb-3\"\r\n' onsubmit="{handleSubmit(onSubmitInvoiceForm)}">\r\n      \r\n        <row classname='\"mb-3\"'>\r\n          \r\n            <textinputformgroup\r\n errors="{errors}\r\n" formidentifier='\"txtPONumber\"\r\n' is="" labelkey='\"ui.storefront.checkout.views.paymentInformation.poNumber\"\r\n' labeltext='\"PO' number="" number\"\r\n="" or="" order="" placeholderkey='\"ui.storefront.checkout.views.paymentInformation.enterYourPurchaseOrderOrReferenceNumber\"\r\n' placeholdertext='\"Enter' purchase="" reference="" register="{register}\r\n" required="{true}\r\n" required\"\r\n="" requiredmessage='\"Purchase' your="">\r\n            <fileuploadwidget\r\n string[])="" uploadcallback="{(newFileNames:" uploadtype="{FileEntityType.StoredFileSalesOrder}\r\n"> {\r\n                setUploadedFileNames(newFileNames);\r\n              }}/&gt;\r\n          \r\n        </fileuploadwidget\r\n></textinputformgroup\r\n></row>\r\n        <row>\r\n          \r\n            <button\r\n and="" classname='{\"my-3\"}\r\n' disabled="{submitDisabled}\r\n" id='\"btnSubmit_purchaseStepPayment\"\r\n' order="" purchase\"\r\n="" title='\"Confirm' type='\"submit\"' variant='\"primary\"\r\n'>\r\n              {continueText\r\n                ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\r\n            \r\n          \r\n        </button\r\n></row>\r\n      \r\n    </row>\r\n  );\r\n};\r\n","import { IPaymentMethodQuoteBodyProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\n\r\nexport const PaymentMethodQuoteBody = (props: IPaymentMethodQuoteBodyProps): JSX.Element =&gt; {\r\n  const { onSubmit, continueText, submitDisabled } = props;\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <row classname='\"mb-3\"'>\r\n      \r\n        <p>{t(\"ui.storefront.checkout.views.paymentInformation.QuoteMeContent\")}</p>\r\n      \r\n      \r\n        <button\r\n =="" ??="" \"confirm="" and="" classname='{\"my-3\"}\r\n' disabled="{submitDisabled}\r\n" id='\"btnSubmit_purchaseStepPayment\"\r\n' onclick="{()" order="" purchase\"}\r\n="" title="{continueText" variant='\"primary\"\r\n'> onSubmit()}&gt;\r\n          {continueText\r\n            ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\r\n        \r\n      \r\n    </button\r\n></row>\r\n  );\r\n};\r\n","import { Button, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { IPaymentMethodFreeBodyProps } from \"src/Checkout/_checkoutTypes\";\r\n\r\nexport const PaymentMethodFreeBody = (props: IPaymentMethodFreeBodyProps): JSX.Element =&gt; {\r\n  const { onSubmit, continueText, submitDisabled } = props;\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <row classname='\"mb-3\"'>\r\n      \r\n        <p>{t(\"ui.storefront.purchasing.payments.method.free.Message\")}</p>\r\n      \r\n      \r\n        <button\r\n =="" ??="" \"confirm="" and="" classname='{\"my-3\"}\r\n' disabled="{submitDisabled}\r\n" id='\"btnSubmit_purchaseStepPayment\"\r\n' onclick="{()" order="" purchase\"}\r\n="" title="{continueText" variant='\"primary\"\r\n'> onSubmit()}&gt;\r\n          {continueText\r\n            ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\r\n        \r\n      \r\n    </button\r\n></row>\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { IPaymentMethodECheckBodyProps } from \"src/Checkout/_checkoutTypes\";\r\n\r\n// eslint-disable-next-line max-len\r\nexport const PaymentMethodECheckBody = (props: IPaymentMethodECheckBodyProps): JSX.Element =&gt; <h1>PaymentMethodECheckBody Component</h1>;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Col, Form, Row } from \"react-bootstrap\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { PaymentMethodCreditCardBody } from \"src/Checkout/steps/payment/methods/PaymentMethodCreditCardBody\";\r\nimport { PaymentMethodInvoiceBody } from \"src/Checkout/steps/payment/methods/PaymentMethodInvoiceBody\";\r\nimport { PaymentMethodQuoteBody } from \"src/Checkout/steps/payment/methods/PaymentMethodQuoteBody\";\r\nimport { PaymentMethodFreeBody } from \"src/Checkout/steps/payment/methods/PaymentMethodFreeBody\";\r\nimport { PaymentMethodECheckBody } from \"src/Checkout/steps/payment/methods/PaymentMethodECheckBody\";\r\nimport { ICheckoutPaymentStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\n\r\n// TODO: use ServiceStrings to type\r\ntype TPaymentMethod =\r\n  | \"purchasePaymentMethodACH\"\r\n  | \"purchasePaymentMethodCreditCard\"\r\n  | \"purchasePaymentMethodEcheck\"\r\n  | \"purchasePaymentMethodFree\"\r\n  | \"purchasePaymentMethodInvoice\"\r\n  | \"purchasePaymentMethodPayoneer\"\r\n  | \"purchasePaymentMethodPayPal\"\r\n  | \"purchasePaymentMethodQuoteMe\"\r\n  | \"purchasePaymentMethodStoreCredit\"\r\n  | \"purchasePaymentMethodWireTransfer\";\r\n\r\nexport const CheckoutPaymentStep = (props: ICheckoutPaymentStepProps): JSX.Element =&gt; {\r\n  const {\r\n    onCompleteCheckoutPaymentStep,\r\n    continueText,\r\n    existingPaymentData,\r\n    initialBillingContact,\r\n    methodIsGuest\r\n  } = props;\r\n\r\n  const [ cartBillingContact, setCartBillingContact ] = useState(initialBillingContact ?? null);\r\n  const [ selectedPaymentMethod, setSelectedPaymentMethod ] = useState<tpaymentmethod>(null);\r\n  const [ methods, setMethods ] = useState<any[]>(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const addressFactory = useAddressBookFactory();\r\n  const cefConfig = useCefConfig();\r\n  const cart = useCart(ServiceStrings.carts.types.cart);\r\n  const addressBook = useAddressBook();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig?.purchase?.paymentMethods) {\r\n      return;\r\n    }\r\n    // TODO: consider different cart types\r\n    const paymentMethodNames = Object.keys(cefConfig.purchase.paymentMethods);\r\n    let builtMethods = paymentMethodNames.map(name =&gt; ({\r\n      ...cefConfig.purchase.paymentMethods[name]\r\n    }));\r\n    if (cart.Totals.Total &gt; 0) {\r\n      builtMethods = builtMethods.filter(m =&gt; m.name !== \"purchasePaymentMethodFree\");\r\n    }\r\n    if (methodIsGuest) {\r\n      builtMethods = builtMethods.filter(m =&gt; cefConfig.purchase.allowedGuestMethods.includes(m.name));\r\n    }\r\n    setMethods(builtMethods);\r\n    setSelectedPaymentMethod(builtMethods[0].name as TPaymentMethod);\r\n  }, [ cefConfig ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!addressBook || cartBillingContact) {\r\n      return;\r\n    }\r\n    const defaultBillingContact = addressBook.find(accountContact =&gt; accountContact.IsBilling);\r\n    if (defaultBillingContact) {\r\n      setCartBillingContact(defaultBillingContact);\r\n    }\r\n  }, [ addressBook ]);\r\n\r\n  if (!cefConfig || !selectedPaymentMethod) {\r\n    return <loadingwidget>;\r\n  }\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <row classname='\"mb-3\"'>\r\n        \r\n          <h4 classname='\"mt-2' mb-3\"="">\r\n            <span id='\"CheckoutPaymentStageWhichAddressText\"'>\r\n              {t(\"ui.storefront.checkout.billingInfo.whichAddy\")}\r\n            </span>\r\n             <span classname='\"text-danger\"'>*</span>\r\n          </h4>\r\n        \r\n        \r\n          <row>\r\n            \r\n              <contactswitch\r\n =="" accountcontacts="{addressBook}\r\n" onchange="{contact"> setCartBillingContact(contact)}\r\n                initialContact={cartBillingContact}\r\n                allowAdd={true}\r\n                useAddButton={true}\r\n                onAddressAdded={newAddressData =&gt; {\r\n                  addressFactory.createNewAddress(newAddressData).then(newContact =&gt; {\r\n                    setCartBillingContact(newContact);\r\n                  });\r\n                }}\r\n              /&gt;\r\n            \r\n          </contactswitch\r\n></row>\r\n        \r\n      </row>\r\n      {viewState.hasError\r\n        ? <row>\r\n          \r\n            <alert variant='\"danger\"'>{viewState.errorMessage}</alert>\r\n          \r\n        </row>\r\n        : null}\r\n      <row>\r\n        \r\n          <h4 classname='\"mt-2' mb-3\"="">\r\n            <span id='\"CheckoutPaymentStageHowPayText\"'>\r\n              {t(\"ui.storefront.checkout.paymentInfo.howPay\")}\r\n            </span>\r\n             <span classname='\"text-danger\"'>*</span>\r\n          </h4>\r\n        \r\n        \r\n          {methods\r\n            &amp;&amp; methods.map(methodData =&gt; {\r\n              const { name, titleKey } = methodData;\r\n              return (\r\n                <div key="{name}">\r\n                  <input\r\n =="=" checked="{selectedPaymentMethod" id="{`rd_${name}`}\r\n" name}\r\n="" onchange="{()" type='\"radio\"\r\n' value="{`rd_${name}`}\r\n"> setSelectedPaymentMethod(name)}&gt;\r\n                  \r\n                   \r\n                  <label>{name === \"purchasePaymentMethodInvoice\" ? \"Invoice / PO Number\" : t(titleKey)}</label>\r\n                </input\r\n></div>\r\n              );\r\n            })}\r\n        \r\n        \r\n          <p classname='\"my-4\"'>\r\n            <span id='\"ChecksPayableAndCardPercentageChargeText\"'>\r\n              {t(\"ui.storefront.checkout.paymentInfo.ChecksPayableAndCardPercentageCharge2\")}\r\n            </span>\r\n          </p>\r\n        \r\n        \r\n          {selectedPaymentMethod === \"purchasePaymentMethodCreditCard\"\r\n            &amp;&amp; <paymentmethodcreditcardbody\r\n \"paybycreditcard\"="" \"paybywalletentry\",="" any)="" continuetext="{continueText}\r\n" creditcarddata:="" onsubmit="{(type:" |=""> {\r\n                setRunning();\r\n                cvApi.shopping\r\n                  .CurrentCartSetBillingContact({\r\n                    TypeName: ServiceStrings.carts.types.cart,\r\n                    BillingContact: cartBillingContact.Slave\r\n                  }).then(res =&gt; {\r\n                    if (res?.data?.ActionSucceeded) {\r\n                      onCompleteCheckoutPaymentStep(\r\n                        {\r\n                          [type]: {\r\n                            ...creditCardData\r\n                          }\r\n                        },\r\n                        ServiceStrings.checkout.paymentMethods.creditCard,\r\n                        cartBillingContact\r\n                      );\r\n                    } else {\r\n                      throw new Error(\"Failed to update billing contact on cart\");\r\n                    }\r\n                  })\r\n                  .catch(err =&gt; {\r\n                    finishRunning(true, err);\r\n                  });\r\n              }}\r\n              initialWalletID={\r\n                existingPaymentData &amp;&amp; existingPaymentData.PayByWalletEntry\r\n                  ? existingPaymentData.PayByWalletEntry.WalletID\r\n                  : null\r\n              }\r\n              submitDisabled={!cartBillingContact}\r\n              usingGuestCheckout={methodIsGuest}\r\n            /&gt;\r\n          }\r\n          {selectedPaymentMethod === \"purchasePaymentMethodInvoice\"\r\n            &amp;&amp; <paymentmethodinvoicebody\r\n any)="" continuetext="{continueText}\r\n" onsubmit="{(invoiceFormData:"> {\r\n                cvApi.shopping\r\n                  .CurrentCartSetBillingContact({\r\n                    TypeName: ServiceStrings.carts.types.cart,\r\n                    BillingContact: cartBillingContact.Slave\r\n                  }).then(res =&gt; {\r\n                    if (res?.data?.ActionSucceeded) {\r\n                      onCompleteCheckoutPaymentStep(\r\n                        {\r\n                          PayByBillMeLater: {\r\n                            ...invoiceFormData\r\n                          },\r\n                          FileNames: invoiceFormData.uploadedFileNames\r\n                        },\r\n                        ServiceStrings.checkout.paymentMethods.invoice,\r\n                        cartBillingContact,\r\n                        invoiceFormData.uploadedFileNames\r\n                      );\r\n                    } else {\r\n                      throw new Error(\"Failed to update billing contact on cart\");\r\n                    }\r\n                  })\r\n                  .catch(err =&gt; {\r\n                    finishRunning(true, err);\r\n                  });\r\n              }}\r\n              submitDisabled={!cartBillingContact}\r\n            /&gt;\r\n          }\r\n          {selectedPaymentMethod === \"purchasePaymentMethodQuoteMe\"\r\n            &amp;&amp; <paymentmethodquotebody\r\n =="" continuetext="{continueText}\r\n" onsubmit="{()"> {\r\n                onCompleteCheckoutPaymentStep(\r\n                  {},\r\n                  ServiceStrings.checkout.paymentMethods.quoteMe,\r\n                  cartBillingContact\r\n                );\r\n              }}\r\n              submitDisabled={!cartBillingContact}\r\n            /&gt;\r\n          }\r\n          {selectedPaymentMethod === \"purchasePaymentMethodFree\" &amp;&amp; cart.Totals.Total &lt;= 0\r\n            &amp;&amp; <paymentmethodfreebody\r\n =="" continuetext="{continueText}\r\n" onsubmit="{()"> {\r\n                onCompleteCheckoutPaymentStep({}, ServiceStrings.checkout.paymentMethods.free);\r\n              }}\r\n              submitDisabled={!cartBillingContact}\r\n            /&gt;\r\n          }\r\n          {selectedPaymentMethod === \"purchasePaymentMethodEcheck\"\r\n            &amp;&amp; <paymentmethodecheckbody\r\n =="" continuetext="{continueText}\r\n" onsubmit="{()"> {\r\n                // TODO: fill body\r\n                onCompleteCheckoutPaymentStep(\r\n                  {},\r\n                  ServiceStrings.checkout.paymentMethods.echeck,\r\n                  cartBillingContact\r\n                );\r\n              }}\r\n              submitDisabled={!cartBillingContact}\r\n            /&gt;\r\n          }\r\n        \r\n      </paymentmethodecheckbody\r\n></paymentmethodfreebody\r\n></paymentmethodquotebody\r\n></paymentmethodinvoicebody\r\n></paymentmethodcreditcardbody\r\n></row>\r\n    \r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { ICheckoutConfirmationStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\n\r\nexport const CheckoutConfirmationStep = (props: ICheckoutConfirmationStepProps): JSX.Element =&gt; {\r\n  const { children, continueText, parentRunning, onCompleteCheckoutConfirmationStep } = props;\r\n  const { t } = useTranslation();\r\n\r\n  const {\r\n    handleSubmit\r\n  } = useForm();\r\n\r\n  const onSubmit = () =&gt; {\r\n    onCompleteCheckoutConfirmationStep();\r\n  };\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <div classname='\"step' step-four\"="">\r\n        <div classname='\"checkout-box\"'>\r\n          <row>\r\n            \r\n              {`${t(\"Click below to request a quote\")}!`}\r\n            \r\n          </row>\r\n        </div>\r\n      </div>\r\n      <form classname='\"row' onsubmit="{handleSubmit(onSubmit)}" position-relative\"="">\r\n        {parentRunning ? <loadingwidget overlay="{true}"> : null}\r\n        {children ?? null}\r\n        \r\n          <input\r\n btn-primary="" classname='\"btn' id='\"btnSubmit_checkoutStepConfirmation\"\r\n' my-3\"\r\n="" name='\"btnSubmit_checkoutStepConfirmation\"\r\n' title="{continueText}\r\n" type='\"submit\"\r\n'>\r\n        \r\n      \r\n    \r\n  );\r\n};\r\n","import { Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { CartModel, CartTotals, RateQuoteModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\n\r\ninterface ISplitShippingTotalsProps {\r\n  targetedCarts: CartModel[];\r\n  masterCart: CartModel;\r\n}\r\n\r\nexport const SplitShippingTotals = (props: ISplitShippingTotalsProps): JSX.Element =&gt; {\r\n  const { targetedCarts, masterCart } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  function totalTargetedCartsShippingRaw(): number {\r\n    if (!targetedCarts || !targetedCarts.length) {\r\n      return -1;\r\n    }\r\n    let valid = true;\r\n    let total = 0;\r\n    targetedCarts.forEach(x =&gt; {\r\n      if (x.NothingToShip) {\r\n        // Skip\r\n        return true;\r\n      }\r\n      if (!x.RateQuotes\r\n        || !x.RateQuotes.length\r\n        || !x.RateQuotes.some((y: RateQuoteModel) =&gt; y.Active &amp;&amp; y.Selected)\r\n      ) {\r\n        valid = false;\r\n        return false;\r\n      }\r\n      const selectedRateQuote = x.RateQuotes.find((y: RateQuoteModel) =&gt; y.Active &amp;&amp; y.Selected);\r\n      total += selectedRateQuote.Rate;\r\n      return true;\r\n    });\r\n    return valid ? total : -1;\r\n  }\r\n\r\n  function grandTotal(type: string = ServiceStrings.carts.types.cart): string {\r\n    const shipping = totalTargetedCartsShippingRaw();\r\n    if (shipping &lt; 0) {\r\n      return t(\"ui.storefront.cartService.targetCarts.InvalidValueSelectRateQuote.Message\");\r\n    }\r\n    const totals: CartTotals = masterCart.Totals;\r\n    if (!totals) {\r\n      return currencyFormatter.format(0);\r\n    }\r\n    const newTotal\r\n      = (totals.SubTotal || 0)\r\n      + (shipping || 0)\r\n      + (totals.Handling || 0)\r\n      + (totals.Fees || 0)\r\n      + (targetedCarts.reduce((curVal, curCart) =&gt; curVal + (curCart.Totals?.Tax || 0), 0))\r\n      // eslint-disable-next-line @typescript-eslint/no-extra-parens\r\n      + (Math.abs(totals.Discounts || 0) * -1);\r\n    return currencyFormatter.format(newTotal);\r\n  }\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <p big\"="" classname='\"text-end' fw-bold="">\r\n          <span id='\"TotalShippingText\"'>\r\n            {t(\"ui.storefront.checkout.splitShipping.TotalShipping.Colon\")}\r\n          </span>\r\n           \r\n          <span id='\"TotalShippingAmountText\"'>\r\n            {currencyFormatter.format(\r\n              targetedCarts.reduce((accu, curCart) =&gt; {\r\n                if (curCart.NothingToShip) {\r\n                  return accu;\r\n                }\r\n                if (!Array.isArray(curCart.RateQuotes) || !curCart.RateQuotes.length) {\r\n                  return accu;\r\n                }\r\n                const selectedRateQuote = curCart.RateQuotes?.find(\r\n                  (rq: RateQuoteModel) =&gt; rq.Active &amp;&amp; rq.Selected\r\n                );\r\n                if (!selectedRateQuote) {\r\n                  return accu;\r\n                }\r\n                return accu + selectedRateQuote.Rate;\r\n              }, 0)\r\n            )}\r\n          </span>\r\n          <br/>\r\n          <span id='\"TotalTaxesText\"'>\r\n            {t(\"ui.storefront.checkout.splitShipping.TotalTaxes.Colon\")}\r\n          </span>\r\n           \r\n          <span id='\"TotalTaxesAmountText\"'>\r\n            {currencyFormatter.format(\r\n              targetedCarts.reduce((curVal, curCart) =&gt; curVal + (curCart.Totals?.Tax || 0), 0)\r\n            )}\r\n          </span>\r\n          <br/>\r\n          <span id='\"NewGrandTotalText\"'>\r\n            {t(\"ui.storefront.checkout.splitShipping.NewGrandTotal.Colon\")}\r\n          </span>\r\n           <span id='\"NewGrandTotalAmountText\"'>{grandTotal()}</span>\r\n        </p>\r\n      \r\n    </row>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ICheckoutShippingRatesStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { CartModel, RateQuoteModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport { PurchaseRateQuotesManagerWidget } from \"src/Checkout/PurchaseRateQuotesManagerWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport {\r\n  AnalyzeCurrentCartToTargetCartsDto,\r\n  ApplyCurrentCartShippingRateQuoteDto\r\n} from \"src/_api\";\r\nimport { SplitShippingTotals } from \"src/Checkout/steps/shipping/SplitShippingTotals\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { AxiosError } from \"axios\";\r\nimport { CEFActionErrorResponse } from \"src/_api/cvApi.shared\";\r\nimport { IHTTPResponseT } from \"src/_shared/customHooks/_customHooksTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport _ from \"lodash\";\r\n\r\nexport const CheckoutShippingRatesStep = (props: ICheckoutShippingRatesStepProps): JSX.Element =&gt; {\r\n  const {\r\n    onCompleteCheckoutShippingRatesStep,\r\n    continueText,\r\n    masterCart,\r\n    onTargetedCartsChanged,\r\n    cartType\r\n  } = props;\r\n\r\n  const [ targetedCarts, setTargetedCarts ] = useState<cartmodel[]>(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n\r\n  const shippingRatesEstimatorEnabled\r\n    = cefConfig?.featureSet?.shipping?.rates?.estimator?.enabled;\r\n\r\n  useEffect(() =&gt; {\r\n    loadTargetedCarts();\r\n  }, []);\r\n\r\n  useEffect(() =&gt; {\r\n    if (onTargetedCartsChanged) {\r\n      onTargetedCartsChanged(targetedCarts);\r\n    }\r\n  }, [ targetedCarts ]);\r\n\r\n  function getTargetedCarts() {\r\n    const dto: AnalyzeCurrentCartToTargetCartsDto = {\r\n      WithCartInfo: { CartTypeName: cartType },\r\n      IsSameAsBilling: false,\r\n      IsPartialPayment: false,\r\n      // Clear previous target setups\r\n      ResetAnalysis: true\r\n    };\r\n    let analyzeFn = cvApi.providers.AnalyzeCurrentCartToTargetCarts;\r\n    if (cartType === ServiceStrings.carts.types.quote) {\r\n      analyzeFn = cvApi.providers.AnalyzeCurrentQuoteCartToTargetQuoteCarts;\r\n    }\r\n    return analyzeFn(dto);\r\n  }\r\n\r\n  function getCartItemsForCarts(carts: CartModel[]) {\r\n    return Promise.all(\r\n      carts\r\n        .filter(x =&gt; x.ID !== null &amp;&amp; x.TypeName !== cartType)\r\n        .map(x =&gt; cvApi.shopping.GetCartItems({\r\n          Active: true,\r\n          AsListing: true,\r\n          MasterID: x.ID\r\n        }))\r\n    );\r\n  }\r\n\r\n  function getCartShippingContactForCarts(carts: CartModel[]) {\r\n    return Promise.all(\r\n      carts.map(x =&gt; cvApi.shopping.CurrentCartGetShippingContact({\r\n        TypeName: x.TypeName\r\n      }))\r\n    );\r\n  }\r\n\r\n  function getShippingRateQuotesForCarts(carts: CartModel[]) {\r\n    return Promise.all(\r\n      carts\r\n        .filter(\r\n          cart =&gt; _.every(cart.SalesItems, salesItem =&gt; _.every(salesItem.Targets, target =&gt; !target.NothingToShip))\r\n        )\r\n        .map(cart =&gt; cvApi.shopping.GetCurrentCartShippingRateQuotes({\r\n          TypeName: cart.TypeName,\r\n          Expedited: false\r\n        }))\r\n    );\r\n  }\r\n\r\n  function getCartsSortedByNothingToShip(carts: CartModel[]): CartModel[] {\r\n    return carts.sort((cartOne, cartTwo) =&gt; {\r\n      if (cartOne.NothingToShip &amp;&amp; cartTwo.NothingToShip) {\r\n        return 0;\r\n      }\r\n      if (cartOne.NothingToShip) {\r\n        return -1;\r\n      }\r\n      return 1;\r\n    });\r\n  }\r\n\r\n  function handleRateQuotesDiscounts(rateQuotes: RateQuoteModel[]) {\r\n    if (!rateQuotes) {\r\n      return rateQuotes;\r\n    }\r\n    for (let j = 0; j &lt; rateQuotes.length; j++) {\r\n      const curRateQuote = rateQuotes[j];\r\n      // @ts-ignore\r\n      curRateQuote.original = curRateQuote.Rate;\r\n      // @ts-ignore\r\n      curRateQuote.discounted = curRateQuote.Rate;\r\n      const shippingDiscounts = itemsExist(masterCart.Discounts)\r\n        ? masterCart.Discounts.filter(discount =&gt; discount.DiscountTypeID === 2)\r\n        : [];\r\n      if (!itemsExist(shippingDiscounts)) {\r\n        continue;\r\n      }\r\n      let discounted = curRateQuote.Rate;\r\n      shippingDiscounts\r\n        .sort(\r\n          (discountOne, discountTwo) =&gt; discountOne.DiscountPriority - discountTwo.DiscountPriority\r\n        )\r\n        .forEach(discount =&gt; {\r\n          if (discount.DiscountValueType === 0) {\r\n            // Percent\r\n            discounted *= 1 - discount.DiscountValue;\r\n          } else if (discount.DiscountValueType === 1) {\r\n            // Dollar\r\n            discounted -= discount.DiscountValue;\r\n          }\r\n        });\r\n      // @ts-ignore\r\n      curRateQuote.discounted = discounted;\r\n    }\r\n    return rateQuotes;\r\n  }\r\n\r\n  function loadTargetedCarts() {\r\n    setRunning(t(\"ui.storefront.common.Analyzing.Elipses\"));\r\n    let targetedCartsCopy: CartModel[] = [];\r\n    getTargetedCarts()\r\n      .then(res =&gt; {\r\n        if (!res.data.ActionSucceeded) {\r\n          throw new Error(res.data.Messages[0]);\r\n        }\r\n        targetedCartsCopy = res.data.Result.filter(x =&gt; x.ID !== null &amp;&amp; x.TypeName !== cartType);\r\n        return getCartItemsForCarts(targetedCartsCopy);\r\n      })\r\n      .then(resArr =&gt; {\r\n        resArr.forEach(pagedResult =&gt; {\r\n          if (!pagedResult?.data?.Results || !pagedResult?.data?.TotalCount) {\r\n            console.warn(\"No results on one of the paged results that should have had children!\");\r\n            return;\r\n          }\r\n          for (let i = 0; i &lt; targetedCartsCopy.length; i++) {\r\n            const cart = targetedCartsCopy[i];\r\n            if (cart.ID === pagedResult.data.Results[0].MasterID) {\r\n              cart.SalesItems = pagedResult.data.Results;\r\n            }\r\n          }\r\n        });\r\n        return getCartShippingContactForCarts(targetedCartsCopy);\r\n      })\r\n      .then(resArr =&gt; {\r\n        for (let i = 0; i &lt; resArr.length; i++) {\r\n          if (!resArr[i].data.ActionSucceeded) {\r\n            targetedCartsCopy[i].ShippingContactID = null;\r\n            targetedCartsCopy[i].ShippingContact = null;\r\n            continue;\r\n          }\r\n          targetedCartsCopy[i].ShippingContact = resArr[i].data.Result;\r\n          targetedCartsCopy[i].ShippingContactID = resArr[i].data.Result.ID;\r\n        }\r\n        return getShippingRateQuotesForCarts(targetedCartsCopy);\r\n      })\r\n      .then(resArr =&gt; {\r\n        const shippableCarts = targetedCartsCopy.filter(cart =&gt; !cart.NothingToShip);\r\n        for (let i = 0; i &lt; resArr.length; i++) {\r\n          const response = resArr[i];\r\n          if (!response.data || !response.data.ActionSucceeded) {\r\n            finishRunning(\r\n              true,\r\n              null,\r\n              response.data.Messages ?? [ \"Failed to get shipping rate quotes\" ]\r\n            );\r\n            return;\r\n          }\r\n          let rateQuotes = response.data.Result;\r\n          if (itemsExist(rateQuotes)) {\r\n            rateQuotes = handleRateQuotesDiscounts(rateQuotes);\r\n            const selected = rateQuotes.find(q =&gt; q.Selected);\r\n            if (selected) {\r\n              shippableCarts[i].Totals.Shipping = selected.Rate;\r\n            }\r\n            shippableCarts[i].RateQuotes = rateQuotes;\r\n          }\r\n        }\r\n        targetedCartsCopy = getCartsSortedByNothingToShip(targetedCartsCopy);\r\n        setTargetedCarts(targetedCartsCopy);\r\n        finishRunning();\r\n      })\r\n      .catch((err: AxiosError<ihttpresponset<cefactionerrorresponse>&gt;) =&gt; {\r\n        finishRunning(true, err?.response?.data ?? \"Failed to get rate quotes\");\r\n      });\r\n  }\r\n\r\n  function itemsExist(items: unknown): boolean {\r\n    return Array.isArray(items) &amp;&amp; items?.length &gt; 0;\r\n  }\r\n\r\n  function onRateQuoteSelected(cartTypeName: string, selectedRateQuoteID: number): void {\r\n    setRunning();\r\n    const dto: ApplyCurrentCartShippingRateQuoteDto = {\r\n      // TODO: RequestedShipDate\r\n      TypeName: cartTypeName,\r\n      RateQuoteID: selectedRateQuoteID\r\n    };\r\n    cvApi.shopping\r\n      .ApplyCurrentCartShippingRateQuote(dto)\r\n      .then(r =&gt; {\r\n        if (!r.data.ActionSucceeded) {\r\n          // This.cvViewStateService.processCEFActionResponseMessages(r.data);\r\n          finishRunning(true, null, r.data.Messages);\r\n          return Promise.reject(new Error(\"Action failed\"));\r\n        }\r\n        return cvApi.shopping.GetCurrentCart({\r\n          TypeName: cartTypeName,\r\n          Validate: cartTypeName === ServiceStrings.carts.types.cart\r\n        });\r\n      })\r\n      .then(res =&gt; {\r\n        if (!res.data.ActionSucceeded) {\r\n          finishRunning(\r\n            true,\r\n            null,\r\n            res.data.Messages ?? [ \"Failed to get current cart after rate quote selected\" ]\r\n          );\r\n          return;\r\n        }\r\n        setTargetedCarts(prevTargetedCarts =&gt; prevTargetedCarts.map(cart =&gt; {\r\n          if (cart.TypeName === cartTypeName) {\r\n            // TODO: just return res.data.Result\r\n            // RateQuotes should be present in response to GetCurrentCart\r\n            return res.data.Result;\r\n          }\r\n          return cart;\r\n        }));\r\n        finishRunning();\r\n      })\r\n      .catch(reason =&gt; finishRunning(true, reason));\r\n  }\r\n\r\n  return (\r\n    &lt;&gt;\r\n      {viewState.running &amp;&amp; <loadingwidget ??="" \"\"}="" message="{viewState.waitMessage" overlay="{true}">}\r\n      <row>\r\n        \r\n          <h4 id='\"lbResolvedToTargetsMessage\"'>\r\n            {t(\r\n              shippingRatesEstimatorEnabled\r\n                ? \"ui.storefront.checkout.splitShipping.EachItemHasBeenResolvedToAShipment.Message\"\r\n                : \"ui.storefront.checkout.splitShipping.EachItemHasBeenResolvedToAShipmentNoEstimator.Message\"\r\n            )}\r\n          </h4>\r\n        \r\n        {viewState.errorMessage\r\n          ? \r\n            <errorview error="{viewState.errorMessage}">\r\n          \r\n          : null}\r\n      </errorview></row>\r\n      <row>\r\n        {targetedCarts?.map(cart =&gt; {\r\n          const { TypeName, NothingToShip, SalesItems } = cart;\r\n          const rateQuoteSelected: boolean = cart?.RateQuotes?.some(\r\n            (quote: RateQuoteModel) =&gt; quote.Selected\r\n          );\r\n          return (\r\n            \r\n              {/* TODO: add other condition to NothingToShip */}\r\n              <card\r\n !viewstate.haserror="" ${\r\n="" &&="" :="" ?="" \"\"\r\n="" \"is-valid\"="" classname="{`mb-3" nothingtoship="" ratequoteselected="" ||="" }`}="">\r\n                <card.header classname='\"ps-3\"' id='\"txtProductsBeingShipped\"'>\r\n                  {t(NothingToShip ? \"Non-shippable products\" : \"Product(s) being shipped\")}\r\n                </card.header>\r\n                <card.body classname='\"p-3\"'>\r\n                  {SalesItems.sort((itemOne, itemTwo) =&gt; {\r\n                    if (itemOne.Name &amp;&amp; itemTwo.Name) {\r\n                      return itemOne.Name &gt; itemTwo.Name ? 1 : -1;\r\n                    }\r\n                    return itemOne.ProductName &gt; itemTwo.ProductName ? 1 : -1;\r\n                  }).map((sItem, index) =&gt; <div classname='\"d-block\"\r\n' id="{`ShipGroupProduct_${index}`}" key="{sItem.ID}\r\n">\r\n                    {`${sItem.TotalQuantity ?? 0} x\r\n                      ${sItem.Name ?? sItem.ProductName} (${sItem.Sku ?? sItem.ProductKey})`}\r\n                  </div>)}\r\n                </card.body>\r\n                {NothingToShip\r\n                  ? null\r\n                  : &lt;&gt;\r\n                    <card.header id='\"txtYourFullAddress\"'>\r\n                      {t(\"ui.storefront.checkout.views.shippingInformation.yourFullAddress\")}\r\n                    </card.header>\r\n                    {cart.ShippingContact\r\n                      ? <card.body classname='\"p-3' row\"="">\r\n                        <div classname='\"col-6\"'>\r\n                          <addressblock\r\n address="{cart.ShippingContact.Address}\r\n" contact="{cart.ShippingContact}\r\n" hideemail1="{true}\r\n" hidefax1="{true}\r\n" hidephone1="{true}\r\n" hidephone2="{true}\r\n" hidephone3="{true}\r\n">\r\n                        </addressblock\r\n></div>\r\n                        <div classname='\"col-6\"'>\r\n                          <addressblock\r\n address="{cart.ShippingContact.Address}\r\n" contact="{cart.ShippingContact}\r\n" hidecity="{true}\r\n" hidecompany="{true}\r\n" hidecountrykey="{true}\r\n" hidename="{true}\r\n" hidepostalcode="{true}\r\n" hideregionname="{true}\r\n" hidestreet1="{true}\r\n" hidestreet2="{true}\r\n" hidestreet3="{true}\r\n">\r\n                        </addressblock\r\n></div>\r\n                      </card.body>\r\n                      : null}\r\n                    <card.header id='\"txtYourShippingRateQuotes\"'>\r\n                      {t(\"ui.storefront.cart.cartShippingEstimator.yourShippingRateQuotes\")}\r\n                    </card.header>\r\n                    <card.body classname='\"p-0\"'>\r\n                      {cart.ShippingContact &amp;&amp; shippingRatesEstimatorEnabled\r\n                        ? <div classname='\"w-100\"'>\r\n                          <purchaseratequotesmanagerwidget\r\n =="" onrateselected="{rateQuote" quotes="{cart.RateQuotes}\r\n"> {\r\n                              onRateQuoteSelected(cart.TypeName, rateQuote.ID);\r\n                            }}\r\n                          /&gt;\r\n                        </purchaseratequotesmanagerwidget\r\n></div>\r\n                        : null}\r\n                    </card.body>\r\n                  }\r\n              \r\n            \r\n          );\r\n        })}\r\n      </card\r\n></row>\r\n      {shippingRatesEstimatorEnabled &amp;&amp; targetedCarts\r\n        ? <splitshippingtotals mastercart="{masterCart}" targetedcarts="{targetedCarts}">\r\n        : null}\r\n      <row>\r\n        \r\n          <button\r\n !targetedcarts\r\n="" ?.filter(cart="" classname='\"mb-3\"\r\n' disabled="{\r\n" id='\"btnContinueToPayment\"\r\n' variant='\"primary\"\r\n'> !cart.NothingToShip)\r\n                .every((cart: CartModel) =&gt; cart.RateQuotes?.some((quote: RateQuoteModel) =&gt; quote.Selected))\r\n            }\r\n            onClick={() =&gt; {\r\n              onCompleteCheckoutShippingRatesStep();\r\n            }}&gt;\r\n            {continueText}\r\n          \r\n        \r\n      </button\r\n></row>\r\n    \r\n  );\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { ICheckoutCompletedStepProps } from \"src/Checkout/_checkoutTypes\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport const CheckoutCompletedStep = (props: ICheckoutCompletedStepProps): JSX.Element =&gt; {\r\n  const { masterOrderID, subOrderIDs, quoteIDs, methodIsGuest } = props;\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n\r\n  return (\r\n    <div classname='\"step' step-three\"="">\r\n      <div classname='\"checkout-box\"'>\r\n        <row>\r\n          \r\n            <h4 classname='\"mb-4\"' id='\"lbThankYouForYourPurchase\"'>\r\n              {`${t(\"ui.storefront.checkout.views.orderConfirmation.thankYouForYouPurchase\")}!`}\r\n            </h4>\r\n          \r\n        </row>\r\n        <row classname='\"mb-4\"'>\r\n          <div classname='\"col-12' col-sm-6\"="">\r\n            <p id='\"PurchaseSuccessText\"'>\r\n              {t(\r\n                \"ui.storefront.checkout.views.orderConfirmation.yourPurchaseWasSuccessfulAndIsInTheProcessOfBeing\"\r\n              )}\r\n            </p>\r\n          </div>\r\n          {quoteIDs\r\n            ? \r\n              <h4>\r\n                {t(\"ui.storefront.submitQuote.confirmation.MasterQuote\")} \r\n                <strong>{quoteIDs.masterID}</strong>\r\n              </h4>\r\n              <p classname='\"small' font-weight-bold\"="">\r\n                {t(\"ui.storefront.submitQuote.confirmation.MasterQuote.Message\")}\r\n              </p>\r\n              <h4>\r\n                {t(\"ui.storefront.submitQuote.confirmation.SubQuote.OptionalPlural\")} \r\n                <strong>{quoteIDs.slaveIDs.join(\", \")}</strong>\r\n              </h4>\r\n              <p classname='\"small' font-weight-bold\"="">\r\n                {t(\"ui.storefront.submitQuote.confirmation.SubQuote.Message\")}\r\n              </p>\r\n            \r\n            : masterOrderID\r\n              ? \r\n                <div classname='\"col-12\"'>\r\n                  <h5>\r\n                    <span data-sid='\"CheckoutMasterOrdertext\"'>\r\n                      {t(\"ui.storefront.checkout.views.orderConfirmation.MasterOrder\")}</span>\r\n                   \r\n                    <b>{masterOrderID}</b>\r\n                  </h5>\r\n                  <p bold\"="" classname='\"small' id='\"CheckoutMasterOrderMessage\"'>\r\n                    {t(\"ui.storefront.checkout.views.orderConfirmation.MasterOrder.Message\")}\r\n                  </p>\r\n                  <h5>\r\n                    <span data-sid='\"CheckoutSubOrderText\"'>\r\n                      {t(\"ui.storefront.checkout.views.orderConfirmation.SubOrder.OptionalPlural\")}\r\n                    </span>\r\n                   \r\n                    {subOrderIDs.map((subOrderID: number) =&gt; <fragment key="{subOrderID}">\r\n                      <b>\r\n                        {`${subOrderID\r\n                        }${subOrderID === subOrderIDs[subOrderIDs.length - 1] ? \"\" : \", \"}`}\r\n                      </b>\r\n                    </fragment>)}\r\n                  </h5>\r\n                  <p classname='\"small\"' id='\"CheckoutSubOrderMessage\"'>\r\n                    {t(\"ui.storefront.checkout.views.orderConfirmation.SubOrder.Message\")}\r\n                  </p>\r\n                </div>\r\n              \r\n              : null\r\n          }\r\n        </row>\r\n        <row classname='\"mb-3\"'>\r\n          \r\n            <div classname='\"d-flex' justify-content-end\"="">\r\n              <a\r\n \"catalog\")}="" btn-primary="" cefconfig?.routes?.catalog?.root,="" classname='\"btn' data-sid='\"btnCheckoutContinueShopping\"\r\n' href="{corsLink(cefConfig," underline-hover-none\"\r\n="">\r\n                {t(\"ui.storefront.cart.continueShopping\")}\r\n              \r\n              {methodIsGuest\r\n                ? null\r\n                : quoteIDs\r\n                  ? <a btn-secondary="" classname='\"btn' data-sid='\"btnCheckoutQuoteHistory\"' href='\"/dashboard/quotes\"\r\n' me-2="" underline-hover-none\"\r\n="">\r\n                    {t(\"ui.storefront.submitQuote.confirmation.YourQuoteHistory\")}\r\n                  </a>\r\n                  : <a btn-secondary="" classname='\"btn' data-sid='\"btnCheckoutOrderHistory\"' href='\"/dashboard/orders\"\r\n' underline-hover-none\"\r\n="">\r\n                    {t(\"ui.storefront.checkout.confirmation.YourOrderHistory\")}\r\n                  </a>\r\n              }\r\n            </a\r\n></div>\r\n          \r\n        </row>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Fragment, useCallback, useEffect, useReducer, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Container, Row } from \"react-bootstrap\";\r\nimport { CheckoutStepsHeader } from \"src/Checkout/steps/_shared/CheckoutStepsHeader\";\r\nimport { MiniCart } from \"src/Cart/views/MiniCart\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ICheckoutProps, IQuoteIDs } from \"src/Checkout/_checkoutTypes\";\r\nimport { IPurchaseStep, useCheckoutStepFactory } from \"src/_shared/customHooks/useCheckoutStepFactory\";\r\nimport { CheckoutMethodStep } from \"src/Checkout/steps/method/CheckoutMethodStep\";\r\nimport { CheckoutBillingStep } from \"src/Checkout/steps/billing/CheckoutBillingStep\";\r\nimport { CheckoutShippingStep } from \"src/Checkout/steps/shipping/CheckoutShippingStep\";\r\nimport { CheckoutSplitShippingStep, TGroup } from \"src/Checkout/steps/shipping/CheckoutSplitShippingStep\";\r\nimport { CheckoutPaymentStep } from \"src/Checkout/steps/payment/CheckoutPaymentStep\";\r\nimport { CheckoutConfirmationStep } from \"src/Checkout/steps/confirmation/CheckoutConfirmationStep\";\r\nimport { AccountContactModel, AppliedCartItemDiscountModel, CartModel, CartTotals } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport {\r\n  ProcessCurrentCartToTargetOrdersDto,\r\n  ProcessCurrentQuoteCartToTargetQuotesDto\r\n} from \"src/_api/cvApi.Providers\";\r\nimport { CheckoutShippingRatesStep } from \"src/Checkout/steps/shippingRates/CheckoutShippingRatesStep\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { CheckoutCompletedStep } from \"./steps/completed/CheckoutCompletedStep\";\r\nimport { setCartByType, useCart } from \"src/_redux/slices/cartSlice\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nconst methodStepComplete = \"methodStepComplete\";\r\nconst billingStepComplete = \"billingStepComplete\";\r\nconst paymentStepComplete = \"paymentStepComplete\";\r\nconst shippingStepComplete = \"shippingStepComplete\";\r\nconst splitShippingStepComplete = \"splitShippingStepComplete\";\r\nconst shippingRatesStepComplete = \"shippingRatesStepComplete\";\r\nconst confirmationStepComplete = \"confirmationStepComplete\";\r\n\r\ntype CheckoutMethod = \"authenticated\" | \"guest\";\r\n\r\ninterface ICheckoutStepDataState {\r\n  billingStepData: {\r\n    cartBillingContact?: AccountContactModel;\r\n  };\r\n  methodStepData: {\r\n    method: CheckoutMethod;\r\n  };\r\n  paymentStepData?: {\r\n    paymentStyle?: string;\r\n    cartBillingContact?: AccountContactModel;\r\n    payBy?: any;\r\n    uploadedFiles?: string[];\r\n  };\r\n  shippingStepData: {\r\n    sameAsBilling?: boolean;\r\n    cartShippingContact?: AccountContactModel;\r\n  };\r\n  splitShippingStepData: {\r\n    complete: boolean;\r\n    grouped?: TGroup;\r\n  };\r\n  shippingRatesStepData: {\r\n    complete: boolean;\r\n  };\r\n}\r\n\r\nfunction reducer(\r\n    state: ICheckoutStepDataState,\r\n    action: { type: string; payload?: any }\r\n): ICheckoutStepDataState {\r\n  switch (action.type) {\r\n    case methodStepComplete: {\r\n      return {\r\n        ...state,\r\n        methodStepData: {\r\n          method: action.payload\r\n        }\r\n      };\r\n    }\r\n    case paymentStepComplete: {\r\n      return {\r\n        ...state,\r\n        paymentStepData: {\r\n          paymentStyle: action.payload.paymentStyle,\r\n          cartBillingContact: action.payload.cartBillingContact,\r\n          payBy: action.payload.payBy,\r\n          uploadedFiles: action.payload.uploadedFiles\r\n        }\r\n      };\r\n    }\r\n    case billingStepComplete: {\r\n      return {\r\n        ...state,\r\n        billingStepData: {\r\n          cartBillingContact: action.payload.cartBillingContact\r\n        }\r\n      };\r\n    }\r\n    case shippingStepComplete: {\r\n      return {\r\n        ...state,\r\n        shippingStepData: {\r\n          cartShippingContact: action.payload.cartShippingContact,\r\n          sameAsBilling: action.payload.sameAsBilling\r\n        }\r\n      };\r\n    }\r\n    case shippingRatesStepComplete: {\r\n      return {\r\n        ...state,\r\n        shippingRatesStepData: {\r\n          complete: true\r\n        }\r\n      };\r\n    }\r\n    case splitShippingStepComplete: {\r\n      return {\r\n        ...state,\r\n        splitShippingStepData: {\r\n          complete: true,\r\n          grouped: action.payload\r\n        }\r\n      };\r\n    }\r\n    case confirmationStepComplete: {\r\n      return { ...state };\r\n    }\r\n    default: {\r\n      throw new Error(\"Failed to account for completed step\");\r\n    }\r\n  }\r\n}\r\n\r\nexport const Checkout = (props: ICheckoutProps): JSX.Element =&gt; {\r\n  const {\r\n    cartType,\r\n  } = props;\r\n\r\n  const [ step, setStep ] = useState<number>(1);\r\n  const [ allSteps, setAllSteps ] = useState<array<ipurchasestep>&gt;(null);\r\n  const [ completedMasterOrderID, setCompletedMasterOrderID ] = useState<number>(null);\r\n  const [ completedSubOrderIDs, setCompletedSubOrderIDs ] = useState<array<number>&gt;(null);\r\n  const [ completedQuoteIDs, setCompletedQuoteIDs ] = useState<iquoteids>(null);\r\n  const [ checkoutComplete, setCheckoutComplete ] = useState<boolean>(false);\r\n  const [ targetedCarts, setTargetedCarts ] = useState<cartmodel[]>(null);\r\n  const [ gatheredTotals, setGatheredTotals ] = useState<carttotals>(null);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const checkoutStepFactory = useCheckoutStepFactory();\r\n\r\n  const cartToUse = useCart(cartType);\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n  const cartFactory = useCartFactory();\r\n  const reduxDispatch = useDispatch();\r\n\r\n  const [ state, dispatch ] = useReducer(reducer, {\r\n    billingStepData: {\r\n      cartBillingContact: null\r\n    },\r\n    methodStepData: {\r\n      method: null\r\n    },\r\n    paymentStepData: {\r\n      paymentStyle: null,\r\n      cartBillingContact: null,\r\n      payBy: null\r\n    },\r\n    shippingRatesStepData: {\r\n      complete: false\r\n    },\r\n    shippingStepData: {\r\n      sameAsBilling: false,\r\n      cartShippingContact: null\r\n    },\r\n    splitShippingStepData: {\r\n      complete: false,\r\n      grouped: null\r\n    }\r\n  });\r\n\r\n  useEffect(() =&gt; {\r\n    proceedOrPurchase();\r\n  }, [ state ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!currentUser &amp;&amp; state.methodStepData.method !== \"guest\"\r\n      || currentUser &amp;&amp; state.methodStepData.method === \"guest\") {\r\n      setStep(1);\r\n    }\r\n  }, [ currentUser ]);\r\n\r\n  useEffect(() =&gt; {\r\n    const shippingRatesStepIndex = allSteps?.findIndex(\r\n      (stepI: IPurchaseStep) =&gt; stepI.name === ServiceStrings.checkout.steps.shippingRates\r\n        || stepI.name === ServiceStrings.submitQuote.steps.shippingRates\r\n    );\r\n    if (shippingRatesStepIndex &gt; -1 &amp;&amp; step &lt; shippingRatesStepIndex + 1) {\r\n      // We went back to a step before shippingRates, remove shipping amount\r\n      updateTotalsOfAllCarts(null);\r\n      return;\r\n    }\r\n    updateTotalsOfAllCarts(targetedCarts);\r\n  }, [ cartToUse, cartType, targetedCarts, step ]);\r\n\r\n  const proceedOrPurchase = (): void =&gt; {\r\n    if (!allSteps) {\r\n      return;\r\n    }\r\n    if (step !== allSteps.length - 1) {\r\n      setStep(prevStep =&gt; prevStep + 1);\r\n      return;\r\n    }\r\n    confirmAndPurchase();\r\n  };\r\n\r\n  function confirmAndPurchase() {\r\n    // /Providers/SubmitQuote/ProcessCurrentCartToTargetOrders\r\n    setRunning();\r\n    let dto: ProcessCurrentCartToTargetOrdersDto = {\r\n      IsPartialPayment: false,\r\n      IsSameAsBilling: false,\r\n      SpecialInstructions: null,\r\n      WithCartInfo: {\r\n        CartSessionID: cartToUse?.SessionID,\r\n        CartTypeName: cartType\r\n      },\r\n      WithUserInfo: {\r\n        IsNewAccount: false,\r\n        UserID: currentUser?.ID,\r\n        UserName: currentUser?.UserName\r\n      }\r\n    };\r\n    if (cartType === ServiceStrings.carts.types.quote) {\r\n      purchaseWithQuote(dto as ProcessCurrentQuoteCartToTargetQuotesDto);\r\n      return;\r\n    }\r\n    if (!state.paymentStepData?.paymentStyle || !state.paymentStepData?.payBy) {\r\n      console.debug(state);\r\n      finishRunning(true, \"Invalid payment or shipping data. Could not proceed to purchase.\");\r\n      return;\r\n    }\r\n    const { paymentStyle, ...paymentData } = state.paymentStepData;\r\n    dto = {\r\n      ...dto,\r\n      Billing: state.paymentStepData.cartBillingContact?.Slave,\r\n      IsSameAsBilling: state.shippingStepData.sameAsBilling,\r\n      ...paymentData.payBy,\r\n      PaymentStyle: paymentStyle,\r\n      WithCartInfo: {\r\n        CartSessionID: cartToUse.SessionID,\r\n        CartTypeName: cartType\r\n      }\r\n    };\r\n    if (paymentStyle === ServiceStrings.checkout.paymentMethods.creditCard) {\r\n      dto.Shipping = state.shippingStepData.sameAsBilling\r\n        ? state.paymentStepData.cartBillingContact?.Slave\r\n        : state.shippingStepData.cartShippingContact?.Slave;\r\n    }\r\n    cvApi.providers\r\n      .ProcessCurrentCartToTargetOrders(dto)\r\n      .then(result =&gt; {\r\n        if (result.data.Succeeded) {\r\n          setCompletedMasterOrderID(result.data.OrderIDs[0]);\r\n          setCompletedSubOrderIDs([ ...result.data.OrderIDs.slice(1) ]);\r\n          return cartFactory.reloadCart(ServiceStrings.carts.types.cart, true);\r\n        }\r\n        throw new Error(result.data?.ErrorMessage\r\n          ?? result.data?.ErrorMessages\r\n          ? result.data.ErrorMessages[0]\r\n          : \"Failed to process cart\");\r\n      })\r\n      .then(() =&gt; {\r\n        setStep(prevStep =&gt; prevStep + 1);\r\n        setCheckoutComplete(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setCheckoutComplete(true);\r\n        finishRunning(true, typeof err === \"string\"\r\n          ? err\r\n          : err.message\r\n          ?? \"Failed to process current cart to target orders\");\r\n      });\r\n  }\r\n\r\n  function purchaseWithQuote(purchaseWithQuoteDto: ProcessCurrentQuoteCartToTargetQuotesDto) {\r\n    cvApi.providers\r\n      .ProcessCurrentQuoteCartToTargetQuotes(purchaseWithQuoteDto)\r\n      .then(result =&gt; {\r\n        if (result.data?.Succeeded) {\r\n          const [ masterQuoteID, ...subQuoteIDs ] = result.data.QuoteIDs;\r\n          setCompletedQuoteIDs({\r\n            masterID: masterQuoteID,\r\n            slaveIDs: subQuoteIDs\r\n          });\r\n          return cartFactory.reloadCart(ServiceStrings.carts.types.quote, true);\r\n        }\r\n        finishRunning(true, null, result.data.ErrorMessages);\r\n        throw new Error(result.data?.ErrorMessage\r\n          ?? result.data?.ErrorMessages\r\n          ? result.data.ErrorMessages[0]\r\n          : \"Failed to process quote cart\");\r\n      })\r\n      .then(() =&gt; {\r\n        setStep(prevStep =&gt; prevStep + 1);\r\n        setCheckoutComplete(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setCheckoutComplete(true);\r\n        finishRunning(true, typeof err === \"string\"\r\n          ? err\r\n          : err.message\r\n          ?? \"Failed to process current cart to target orders\");\r\n      });\r\n  }\r\n\r\n  const onCompleteCheckoutMethodStep = (method = \"authenticated\"): void =&gt; {\r\n    dispatch({\r\n      type: methodStepComplete,\r\n      payload: method\r\n    });\r\n  };\r\n\r\n  const onCompleteCheckoutBillingStep = (\r\n    cartBillingContact: AccountContactModel\r\n  ): void =&gt; {\r\n    dispatch({\r\n      type: billingStepComplete,\r\n      payload: { cartBillingContact }\r\n    });\r\n  };\r\n\r\n  const onCompleteCheckoutShippingStep = (\r\n    cartShippingContact: AccountContactModel,\r\n    sameAsBilling: boolean\r\n  ): void =&gt; {\r\n    dispatch({\r\n      type: shippingStepComplete,\r\n      payload: { cartShippingContact, sameAsBilling }\r\n    });\r\n  };\r\n\r\n  const onCompleteCheckoutShippingRatesStep = (): void =&gt; {\r\n    dispatch({ type: shippingRatesStepComplete });\r\n  };\r\n\r\n  const onCompleteCheckoutSplitShippingStep = (grouped: TGroup): void =&gt; {\r\n    dispatch({\r\n      type: splitShippingStepComplete,\r\n      payload: grouped\r\n    });\r\n  };\r\n\r\n  const onCompleteCheckoutPaymentStep = (\r\n    paymentData: any,\r\n    paymentStyle: string,\r\n    billingContact: AccountContactModel,\r\n    uploadedFiles: string[]\r\n  ) =&gt; {\r\n    dispatch({\r\n      type: paymentStepComplete,\r\n      payload: {\r\n        paymentStyle,\r\n        payBy: paymentData,\r\n        cartBillingContact: billingContact,\r\n        uploadedFiles\r\n      }\r\n    });\r\n  };\r\n\r\n  const onCompleteCheckoutConfirmationStep = () =&gt; {\r\n    dispatch({ type: confirmationStepComplete });\r\n  };\r\n\r\n  const getModifiedValue = (startingValue: number, modifier: number = 0, mode: number = 0): number =&gt; {\r\n    switch (mode) {\r\n      case 1: {\r\n        // Override Price\r\n        return modifier;\r\n      }\r\n      case 2: {\r\n        // +/- Amount\r\n        return startingValue + modifier;\r\n      }\r\n      case 3: {\r\n        // +/- Percent from -100% to positive 100000%\r\n        return startingValue * ((modifier + 100) / 100);\r\n      }\r\n      default: {\r\n        // No change\r\n        return startingValue;\r\n      }\r\n    }\r\n  };\r\n\r\n  const getTotal = (totals: CartTotals): number =&gt; totals.SubTotal\r\n      + getModifiedValue(totals.Fees, cartToUse.SubtotalFeesModifier, cartToUse.SubtotalFeesModifierMode)\r\n      + getModifiedValue(\r\n        totals.Shipping,\r\n        cartToUse.SubtotalShippingModifier,\r\n        cartToUse.SubtotalShippingModifierMode\r\n      )\r\n      + getModifiedValue(\r\n        totals.Handling,\r\n        cartToUse.SubtotalHandlingModifier,\r\n        cartToUse.SubtotalHandlingModifierMode\r\n      )\r\n      + getModifiedValue(totals.Tax, cartToUse.SubtotalTaxesModifier, cartToUse.SubtotalTaxesModifierMode)\r\n      + getModifiedValue(\r\n        totals.Discounts,\r\n        cartToUse.SubtotalDiscountsModifier,\r\n        cartToUse.SubtotalDiscountsModifierMode\r\n      );\r\n\r\n  // eslint-disable-next-line arrow-body-style\r\n  const getTotalShippingRaw = (carts: CartModel[]): number =&gt; {\r\n    return carts.reduce((curVal, cartI) =&gt; curVal + (cartI?.Totals?.Shipping ?? 0), 0);\r\n  };\r\n\r\n  // eslint-disable-next-line arrow-body-style\r\n  const getTotalTaxesRaw = (carts: CartModel[]): number =&gt; {\r\n    return carts.reduce((curVal, cartI) =&gt; curVal + (cartI?.Totals?.Tax ?? 0), 0);\r\n  };\r\n\r\n  const getSalesItemsWithCorrectExtendedPrice = (\r\n    salesItems: SalesItemBaseModel<appliedcartitemdiscountmodel>[]\r\n  ): SalesItemBaseModel<appliedcartitemdiscountmodel>[] =&gt; {\r\n    if (!salesItems || !Array.isArray(salesItems)) {\r\n      if (cefConfig.debug) {\r\n        console.log(\"Missing sales items to modify extended price of\");\r\n      }\r\n      return salesItems;\r\n    }\r\n    return salesItems.map(item =&gt; {\r\n      const {\r\n        UnitSoldPrice,\r\n        UnitCorePrice,\r\n        UnitSoldPriceModifier,\r\n        UnitSoldPriceModifierMode,\r\n        Quantity,\r\n        QuantityBackOrdered,\r\n        QuantityPreSold\r\n      } = item;\r\n      const soldAt = getModifiedValue(\r\n        !UnitSoldPrice || UnitSoldPrice === null ? UnitCorePrice : UnitSoldPrice,\r\n        UnitSoldPriceModifier,\r\n        UnitSoldPriceModifierMode\r\n      );\r\n      const totalQuantity = (Quantity || 0)\r\n        + (QuantityBackOrdered || 0)\r\n        + (QuantityPreSold || 0);\r\n      const newItem = {\r\n        ...item,\r\n        TotalQuantity: totalQuantity,\r\n        ExtendedPrice: soldAt * totalQuantity,\r\n      };\r\n      // TODO: newItem.ExtendedPriceInSellingCurrency = () =&gt; soldAt\r\n      // TODO:    * (Quantity + (QuantityBackOrdered || 0) + (QuantityPreSold || 0));\r\n      return newItem;\r\n    });\r\n  };\r\n\r\n  const updateTotalsOfAllCarts = (targetedCartsI: CartModel[] = []): void =&gt; {\r\n    if (!cartToUse?.Totals) {\r\n      return;\r\n    }\r\n\r\n    const totals: CartTotals = {\r\n      ...cartToUse.Totals,\r\n      Total: 0,\r\n      SubTotal: 0\r\n    };\r\n    const cartItemsWithCorrectExtendedPrice: SalesItemBaseModel<appliedcartitemdiscountmodel>[]\r\n      = getSalesItemsWithCorrectExtendedPrice(cartToUse.SalesItems);\r\n    totals.SubTotal = cartItemsWithCorrectExtendedPrice.reduce(\r\n      (curVal, item) =&gt; curVal + (isNaN(item.ExtendedPrice) ? 0 : item.ExtendedPrice) || 0,\r\n      0\r\n    );\r\n    totals.Shipping = 0;\r\n    if (targetedCartsI?.length) {\r\n      totals.Shipping += getTotalShippingRaw(targetedCartsI);\r\n    }\r\n    totals.Tax = 0;\r\n    if (targetedCartsI?.length) {\r\n      totals.Tax += getTotalTaxesRaw(targetedCartsI);\r\n    }\r\n    totals.Total = getTotal(totals);\r\n    setGatheredTotals(totals);\r\n  };\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig || allSteps || !cartToUse?.SalesItems || !checkoutStepFactory) {\r\n      return;\r\n    }\r\n    let fullSteps: IPurchaseStep[] = checkoutStepFactory.getPurchaseSteps();\r\n    if (cartType === ServiceStrings.carts.types.quote) {\r\n      fullSteps = checkoutStepFactory.getSubmitQuoteSteps();\r\n    }\r\n    const noItemsGetShipped = cartToUse.SalesItems.every(item =&gt; item.ProductNothingToShip);\r\n    if (noItemsGetShipped) {\r\n      const stepsToRemove = [\r\n        ServiceStrings.checkout.steps.shipping,\r\n        ServiceStrings.checkout.steps.splitShipping,\r\n        ServiceStrings.checkout.steps.shippingRates,\r\n        ServiceStrings.submitQuote.steps.shipping,\r\n        ServiceStrings.submitQuote.steps.splitShipping,\r\n        ServiceStrings.submitQuote.steps.shippingRates\r\n      ];\r\n      fullSteps = fullSteps.filter(stepI =&gt; !stepsToRemove.includes(stepI.name));\r\n    }\r\n    fullSteps = fullSteps.map((stepI, index) =&gt; {\r\n      const continueText = t(fullSteps[index + 1]?.continueTextKey ?? \"\");\r\n      return {\r\n        ...stepI,\r\n        continueText\r\n      };\r\n    });\r\n    setAllSteps(fullSteps);\r\n  }, [ cefConfig, cartToUse, checkoutStepFactory ]);\r\n\r\n  const cartInvalid = cartToUse?.Messages &amp;&amp; cartToUse.Messages.some(x =&gt; x.indexOf(\"ERROR!\") !== -1);\r\n\r\n  if (!cartToUse) {\r\n    return <loadingwidget>;\r\n  }\r\n\r\n  if (!cartToUse?.SalesItems?.length &amp;&amp; !checkoutComplete) {\r\n    return (\r\n      <section classname='\"section-checkout\"'>\r\n        <div classname='\"container\"'>\r\n          <row>\r\n            \r\n              <h3>{t(\"ui.storefront.checkout.cartEmpty\")}</h3>\r\n              <a\r\n \"catalog\")}\r\n="" btn-primary="" cefconfig.routes.catalog.root,="" classname='\"btn' href="{corsLink(cefConfig," underline-hover-none\"="">\r\n                {t(\"ui.storefront.cart.continueShopping\")}\r\n              \r\n            \r\n          </a\r\n></row>\r\n        </div>\r\n      </section>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <section classname='\"section-checkout\"'>\r\n      <container>\r\n        <div classname='\"section-head\"'>\r\n          <h1 classname='\"title' fw-normal="" mt-3\"="">\r\n            {t(cartType === ServiceStrings.carts.types.cart\r\n              ? \"ui.storefront.memberships.membershipRegistration.membershipLevelPurchase\"\r\n              : \"ui.storefront.common.SubmitQuote\")}\r\n          </h1>\r\n        </div>\r\n        <row>\r\n          \r\n            <div classname='\"checkout-steps\"'>\r\n              {cartInvalid ? <errorview error='{\"Cart' invalid\"}="" is=""> : Array.isArray(allSteps)\r\n                ? allSteps.map((stepData, index) =&gt; {\r\n                  const { continueText, titleKey } = stepData;\r\n                  let component = null;\r\n                  switch (stepData.name) {\r\n                    case ServiceStrings.checkout.steps.billing: {\r\n                      component\r\n                        = <checkoutbillingstep\r\n continuetext="{continueText}\r\n" key="{stepData.name}\r\n" oncompletecheckoutbillingstep="{onCompleteCheckoutBillingStep}\r\n">;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.checkout.steps.shipping: {\r\n                      component\r\n                        = <checkoutshippingstep\r\n cartbillingcontact="{state.paymentStepData.cartBillingContact}\r\n" continuetext="{continueText}\r\n" key="{stepData.name}\r\n" oncompletecheckoutshippingstep="{onCompleteCheckoutShippingStep}\r\n">;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.checkout.steps.shippingRates:\r\n                    case ServiceStrings.submitQuote.steps.shippingRates: {\r\n                      component\r\n                        = <checkoutshippingratesstep\r\n =="" continuetext="{continueText}\r\n" key="{stepData.name}\r\n" oncompletecheckoutshippingratesstep="{onCompleteCheckoutShippingRatesStep}\r\n" ontargetedcartschanged="{newTargetedCarts"> setTargetedCarts(newTargetedCarts)}\r\n                          masterCart={cartToUse}\r\n                          cartType={cartType}\r\n                        /&gt;;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.checkout.steps.confirmation:\r\n                    case ServiceStrings.submitQuote.steps.confirmation: {\r\n                      component\r\n                        = <checkoutconfirmationstep\r\n continuetext="{continueText}\r\n" key="{stepData.name}\r\n" oncompletecheckoutconfirmationstep="{onCompleteCheckoutConfirmationStep}\r\n" parentrunning="{viewState.running}\r\n">;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.checkout.steps.completed:\r\n                    case ServiceStrings.submitQuote.steps.completed: {\r\n                      component\r\n                        = <checkoutcompletedstep\r\n =="=" \"guest\"}\r\n="" key="{stepData.name}\r\n" masterorderid="{completedMasterOrderID}\r\n" methodisguest="{state.methodStepData.method" quoteids="{completedQuoteIDs}\r\n" suborderids="{completedSubOrderIDs}\r\n">;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.checkout.steps.method: {\r\n                      component\r\n                        = <checkoutmethodstep\r\n continuetext="{continueText}\r\n" key="{stepData.name}\r\n" oncompletecheckoutmethodstep="{onCompleteCheckoutMethodStep}\r\n">;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.submitQuote.steps.method: {\r\n                      component\r\n                        = <checkoutmethodstep\r\n continuetext="{continueText}\r\n" forcenoguestcheckout="{true}\r\n" key="{stepData.name}\r\n" oncompletecheckoutmethodstep="{onCompleteCheckoutMethodStep}\r\n">;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.checkout.steps.payment: {\r\n                      component\r\n                        = <checkoutpaymentstep\r\n =="=" \"guest\"}\r\n="" continuetext="{continueText}\r\n" existingpaymentdata="{state.paymentStepData.payBy}\r\n" initialbillingcontact="{state.paymentStepData.cartBillingContact}\r\n" key="{stepData.name}\r\n" methodisguest="{state.methodStepData.method" oncompletecheckoutpaymentstep="{onCompleteCheckoutPaymentStep}\r\n">;\r\n                      break;\r\n                    }\r\n                    case ServiceStrings.checkout.steps.splitShipping:\r\n                    case ServiceStrings.submitQuote.steps.splitShipping: {\r\n                      component\r\n                        = <checkoutsplitshippingstep\r\n cartbillingcontact="{state.paymentStepData.cartBillingContact}\r\n" carttype="{cartType}\r\n" continuetext="{continueText}\r\n" key="{stepData.name}\r\n" oncompletecheckoutsplitshippingstep="{onCompleteCheckoutSplitShippingStep}\r\n">;\r\n                      break;\r\n                    }\r\n                    default: {\r\n                      console.error(\r\n                        `Failed to find step for checkout in cefConfig, name: ${stepData.name}`\r\n                      );\r\n                      break;\r\n                    }\r\n                  }\r\n                  return (\r\n                    <fragment key="{titleKey}">\r\n                      <row>\r\n                        \r\n                          <checkoutstepsheader\r\n valid="{step">= index + 2 || step === allSteps.length}\r\n                            isActiveStep={step === index + 1}\r\n                            titleKey={titleKey}\r\n                            index={index + 1}\r\n                            allowEdit={\r\n                              index + 1 &lt; step\r\n                              &amp;&amp; stepData.isEditable\r\n                              &amp;&amp; !viewState.running\r\n                              &amp;&amp; step &lt; allSteps.length\r\n                            }\r\n                            onEditClicked={() =&gt; setStep(index + 1)}\r\n                          /&gt;\r\n                          <hr/>\r\n                        \r\n                      </checkoutstepsheader\r\n></row>\r\n                      <row +="" 1="" :="" =="=" ?="" \"\"}="" \"mb-3\"="" classname="{step" index="">\r\n                        \r\n                          {step === index + 1 &amp;&amp; !viewState.running\r\n                            ? component\r\n                            : step === index + 1 &amp;&amp; viewState.running\r\n                              ? <loadingwidget>\r\n                              : null}\r\n                        \r\n                      </loadingwidget></row>\r\n                    </fragment>\r\n                  );\r\n                }) : null}\r\n            </checkoutsplitshippingstep\r\n></checkoutpaymentstep\r\n></checkoutmethodstep\r\n></checkoutmethodstep\r\n></checkoutcompletedstep\r\n></checkoutconfirmationstep\r\n></checkoutshippingratesstep\r\n></checkoutshippingstep\r\n></checkoutbillingstep\r\n></errorview></div>\r\n          \r\n          \r\n            {!checkoutComplete &amp;&amp; <minicart totals="{gatheredTotals}" type="{cartType}">}\r\n          \r\n        </minicart></row>\r\n        {viewState.hasError\r\n          &amp;&amp; <row>\r\n            \r\n              <errorview\r\n :="" ?="" ??="" \"an="" error="{\r\n" occurred\"\r\n="" viewstate.errormessage="" viewstate.errormessages[0]\r\n="" viewstate.errormessages\r\n="" }\r\n="">\r\n            \r\n          </errorview\r\n></row>\r\n        }\r\n      </container>\r\n    </section>\r\n  );\r\n};\r\n","/**\r\n * @file React/src/_shared/customHooks/useEffectSkipFirst.ts\r\n * @author Copyright (c) 2022-2024 clarity-ventures.com. All rights reserved.\r\n * @desc useEffectSkipFirst hook\r\n */\r\nimport { useEffect, useRef } from \"react\";\r\n\r\nfunction useEffectSkipFirst(fn: Function, arr: any[]): any {\r\n  const isFirst = useRef(true);\r\n\r\n  useEffect(() =&gt; {\r\n    if (isFirst.current) {\r\n      isFirst.current = false;\r\n      return undefined;\r\n    }\r\n\r\n    return fn();\r\n  }, arr);\r\n}\r\nexport default useEffectSkipFirst;\r\n","/**\r\n * @format\r\n * @file React/src/Catalog/controls/Stock.tsx\r\n * @author Copyright (c) 2019-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Product detail stock widget\r\n */\r\n\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Col, Row } from \"react-bootstrap\";\r\nimport { CalculatedInventories } from \"src/_api/cvApi.shared\";\r\n\r\ninterface IProductStockProps {\r\n  inventory: CalculatedInventories;\r\n  productID: number;\r\n}\r\n\r\nconst Stock = (props: IProductStockProps): JSX.Element =&gt; {\r\n  const { inventory } = props;\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <row classname='\"cef-product-stock\"' id='\"pnlProductDetailsStock\"'>\r\n      {inventory.IsUnlimitedStock\r\n        &amp;&amp; \r\n          <alert bg-transparent\"="" border-0="" classname='\"p-0' m-0="" variant='\"success\"'>\r\n            {t(\"ui.storefront.common.Unlimited\")}\r\n          </alert>\r\n        \r\n      }\r\n      {!inventory.IsUnlimitedStock &amp;&amp; inventory.QuantityOnHand &gt; 0\r\n        &amp;&amp; \r\n          <alert bg-transparent\"="" border-0="" classname='\"p-0' m-0="" variant='\"success\"'>\r\n            <span>{inventory.QuantityOnHand}</span>\r\n             <span>{t(\"ui.storefront.common.InStock\")}</span>\r\n          </alert>\r\n        \r\n      }\r\n      {!inventory.IsUnlimitedStock &amp;&amp; inventory.AllowBackOrder &amp;&amp; inventory.QuantityOnHand &lt;= 0\r\n        &amp;&amp; \r\n          <alert bg-transparent\"="" border-0="" classname='\"p-0' m-0="" variant='\"warning\"'>\r\n            {t(\"ui.storefront.common.OnBackorder\")}\r\n          </alert>\r\n        \r\n      }\r\n      {!inventory.IsUnlimitedStock &amp;&amp; !inventory.AllowBackOrder &amp;&amp; inventory.QuantityOnHand &lt;= 0\r\n        &amp;&amp; \r\n          <alert bg-transparent\"="" border-0="" classname='\"p-0' m-0="" variant='\"danger\"'>\r\n            {t(\"ui.storefront.common.OutOfStock\")}\r\n          </alert>\r\n        \r\n      }\r\n    </row>\r\n  );\r\n};\r\n\r\nexport default Stock;\r\n","/* eslint-disable arrow-body-style */\r\n/* eslint-disable max-len */\r\n/* eslint-disable prefer-template */\r\n/**\r\n * @file React/src/Catalog/controls/MagicImageCarousel2.tsx\r\n * @author Copyright (c) 2022-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Magic image carousel widget\r\n */\r\nimport { useEffect, useState } from \"react\";\r\nimport { Anchor, Col, Container, Row } from \"react-bootstrap\";\r\nimport { ProductImageModel, ProductModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { corsImageLink } from \"src/_shared/common/Cors\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ninterface MagicImageCarouselProps {\r\n    product: ProductModel;\r\n    // options?: ReactImageGalleryProps;\r\n    magicScrollOptions?: {\r\n      items?: number,\r\n      pagination?: boolean,\r\n      draggable?: boolean,\r\n      height?: number | string,\r\n      onAfterRender?: any\r\n      orientation?: string\r\n    }\r\n    magicZoomOptions?: {\r\n      selectorTrigger?: string,\r\n      transitionEffect?: boolean,\r\n      zoomWidth?: string,\r\n    }\r\n    thumbnailImageResizerParamsBody?: object,\r\n    mediumImageResizerParamsBody?: object,\r\n    largeImageResizerParamsBody?: object\r\n}\r\n\r\ninterface ProductDetailWindow extends Window {\r\n  MagicZoom?: {\r\n    start: Function,\r\n    stop: Function\r\n  };\r\n  MagicScroll?: {\r\n    start: Function,\r\n    stop: Function\r\n  };\r\n  MagicScrollOptions?: object;\r\n  $: any;\r\n}\r\n// eslint-disable-next-line init-declarations\r\ndeclare let window: ProductDetailWindow;\r\n\r\nexport const MagicImageCarousel2 = (props: MagicImageCarouselProps): JSX.Element =&gt; {\r\n  const [ masterProductImages, setMasterProductImages ] = useState<productimagemodel[]>([]);\r\n\r\n  const cefConfig = useCefConfig();\r\n\r\n  // Default prop values\r\n  const { mediumImageResizerParamsBody = {\r\n    width: 366,\r\n    height: 366,\r\n    mode: \"pad\",\r\n    scale: \"both\"\r\n  }, largeImageResizerParamsBody = {\r\n    width: 800,\r\n    height: 800,\r\n    mode: \"pad\",\r\n    scale: \"both\"\r\n  }, thumbnailImageResizerParamsBody = {\r\n    width: 100,\r\n    height: 100,\r\n    mode: \"pad\",\r\n    scale: \"both\"\r\n  } } = props;\r\n\r\n  useEffect(() =&gt; {\r\n    window.MagicScrollOptions = props.magicScrollOptions;\r\n  }, [ props.magicScrollOptions ]);\r\n\r\n  useEffect(() =&gt; {\r\n    return () =&gt; {\r\n      // componentwillunmount in functional component.\r\n      // Anything in here is fired on component unmount.\r\n      if (window.MagicScroll) {\r\n        window.MagicScroll.stop(\"scroll-1\");\r\n      }\r\n      if (window.MagicZoom) {\r\n        window.MagicScroll.stop(\"productDetailImage\");\r\n      }\r\n    };\r\n  }, []);\r\n\r\n  const loadImageFromMaster = async (masterID: number): Promise<void> =&gt; {\r\n    const r = await cvApi.products.GetProductImages({ MasterID: masterID });\r\n    if (!r.data?.Results?.length) {\r\n      return;\r\n    }\r\n    setMasterProductImages(r.data.Results);\r\n  };\r\n\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n\r\n  let loadGfsFallbackImg = false;\r\n\r\n  if (!props.product.Images?.length &amp;&amp; !masterProductImages?.length\r\n      &amp;&amp; props.product.ProductsAssociatedWith?.length &gt; 0) {\r\n    const assocProdIDs = props.product.ProductsAssociatedWith\r\n      .filter(x =&gt; x.MasterPrimaryImageFileName)\r\n      .map(x =&gt; x.MasterID);\r\n    if (assocProdIDs?.length) {\r\n      loadImageFromMaster(assocProdIDs[0]);\r\n      return null;\r\n    }\r\n    loadGfsFallbackImg = true;\r\n  }\r\n\r\n  if (loadGfsFallbackImg) {\r\n    return (\r\n      <container classname='\"h-100\"'>\r\n        <img\r\n alt='\"GFS' chemicals\"\r\n="" src='\"/DesktopModules/ClarityEcommerce/UI-Storefront/Content/placeholder.jpg\"\r\n' width='\"100%\"\r\n'>\r\n      </img\r\n></container>\r\n    );\r\n  }\r\n\r\n  if (!props.magicScrollOptions.items) {\r\n    props.magicScrollOptions.items = props.product.Images?.length ?? masterProductImages.length;\r\n  }\r\n\r\n  const primaryImage = props.product.Images\r\n    ? props.product.Images.find((x: ProductImageModel) =&gt; x.IsPrimary)\r\n    : masterProductImages.find((x: ProductImageModel) =&gt; x.IsPrimary);\r\n  if (!primaryImage?.OriginalFileFormat) {\r\n    console.warn(\"Primary product image missing for product #\" + props.product.ID);\r\n    return (\r\n      <container classname='\"h-100\"'>\r\n        <img\r\n alt='\"GFS' chemicals\"\r\n="" src='\"/DesktopModules/ClarityEcommerce/UI-Storefront/Content/placeholder.jpg\"\r\n' width='\"100%\"\r\n'>\r\n      </img\r\n></container>\r\n    );\r\n  }\r\n  const large = corsImageLink(cefConfig, primaryImage.OriginalFileName, \"products\", largeImageResizerParamsBody);\r\n  const vertical = props.magicScrollOptions.orientation === \"vertical\";\r\n\r\n  const ScrollElement = () =&gt; <div classname='\"MagicScroll\"\r\n' data-options="{convertObjectToHtmlDataOptions(props.magicScrollOptions)}" id='\"scroll-1\"\r\n'>\r\n    {(props.product.Images ?? masterProductImages)?.map((image: ProductImageModel, i) =&gt; {\r\n      const largeScroll = corsImageLink(cefConfig, image.OriginalFileName, \"products\", largeImageResizerParamsBody);\r\n      const thumbScroll = corsImageLink(cefConfig, image.OriginalFileName, \"products\", thumbnailImageResizerParamsBody);\r\n      return <image\r\n =="" alt="{image.CustomKey}\r\n" cefconfig="{cefConfig}\r\n" classname='\"pre-thumb' data-image="{largeScroll}\r\n" data-zoom-id='\"productDetailImage\"\r\n' href="{largeScroll}\r\n" imageresizerparamsbody="{largeImageResizerParamsBody}\r\n" key="{image.ID}\r\n" mx-1\"\r\n="" onload="{()" src="{thumbScroll}\r\n"> {\r\n          if (!window.MagicScroll) {\r\n            return;\r\n          }\r\n          if (!props.magicScrollOptions.height) {\r\n            props.magicScrollOptions.height = window.$(\"#productDetailImage\").height();\r\n          }\r\n          window.MagicScroll.start(\"scroll-1\");\r\n        }}\r\n      /&gt;;\r\n    })}\r\n  </image\r\n></div>;\r\n  return (\r\n    <container classname='\"h-100\"'>\r\n      <row classname='\"h-100\"' id='\"productDetailImageContainer\"'>\r\n        \r\n          <image\r\n =="" aid='\"productDetailImage\"\r\n' alt="{primaryImage.OriginalFileName}\r\n" cefconfig="{cefConfig}\r\n" classname='\"MagicZoom\"\r\n' data-options="{convertObjectToHtmlDataOptions(props.magicZoomOptions)}\r\n" href="{large}\r\n" imageresizerparamsbody="{largeImageResizerParamsBody}\r\n" onload="{()" src="{large}\r\n"> {\r\n              if (!window.MagicZoom) {\r\n                return;\r\n              }\r\n              window.MagicZoom.start(\"productDetailImage\");\r\n            }}\r\n          /&gt;\r\n          {!vertical &amp;&amp; <scrollelement>}\r\n        \r\n        { vertical\r\n        &amp;&amp; \r\n          <scrollelement>\r\n        \r\n        }\r\n      </scrollelement></scrollelement></image\r\n></row>\r\n    </container>\r\n  );\r\n};\r\n\r\nconst Image = (props: any) =&gt; {\r\n  const [ fallBackError, setFallBackError ] = useState<boolean>(false);\r\n  if (fallBackError) {\r\n    const placeholder = corsImageLink(props.cefConfig, undefined, \"products\", props.imageResizerParamsBody);\r\n    return <anchor\r\n data-image="{placeholder}\r\n" data-zoom-id='{props[\"data-zoom-id\"]}\r\n' href="{placeholder}" id="{props.aid}\r\n">\r\n      <img alt='\"placeholder\"\r\n' onload="{props.onLoad}" src="{placeholder}\r\n"/>\r\n    ;\r\n  }\r\n  return <anchor\r\n classname="{props.className}\r\n" data-image='{props[\"data-image\"]}\r\n' data-options='{props[\"data-options\"]}' data-zoom-id='{props[\"data-zoom-id\"]}\r\n' href="{props.href}\r\n" id="{props.aid}\r\n">\r\n    <img\r\n =="" alt="{props.alt}\r\n" onerror="{()" src="{props.src}\r\n" style="{props.style}\r\n"> {\r\n        if (fallBackError) {\r\n          return;\r\n        }\r\n        setFallBackError(true);\r\n      }}\r\n      onLoad={props.onLoad} /&gt;\r\n  ;\r\n};\r\n\r\nfunction convertObjectToHtmlDataOptions(object: {[key: string]: any}): string {\r\n  let str = \"\";\r\n  const keys = Object.keys(object);\r\n  for (let i = 0; i &lt; keys.length; i++) {\r\n    const key = keys[i];\r\n    const value = object[key];\r\n    if (typeof value == \"string\") {\r\n      // eslint-disable-next-line no-useless-concat\r\n      str += key + \":\" + \"'\" + value + \"'\" + \";\";\r\n      return str;\r\n    }\r\n    str += key + \":\" + value + \";\";\r\n  }\r\n  return str;\r\n}\r\n","/* eslint-disable arrow-body-style */\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IRatingSummaryProps {\r\n  scale: number;\r\n  // Average\r\n  value: number;\r\n  // Amount of ratings\r\n  reviewID?: number;\r\n  count: number;\r\n  hideCount?: boolean;\r\n}\r\n\r\nexport const RatingSummary = (props: IRatingSummaryProps): JSX.Element =&gt; {\r\n  const { scale, value, count, hideCount } = props;\r\n  const { t } = useTranslation();\r\n\r\n  // Just exists so the key in the list isn't the index\r\n  const [ starsList, setStarsList ] = useState&lt;{ amount: number }[]&gt;(null);\r\n\r\n  useEffect(() =&gt; {\r\n    if (scale) {\r\n      setStarsList(Array(scale)\r\n        .fill(null)\r\n        .map((_n, i) =&gt; ({ amount: i + 1 })));\r\n    }\r\n  }, [ scale ]);\r\n\r\n  return (\r\n    <div classname='\"product-rating\"'>\r\n      <span classname='\"d-inline-flex\"'>\r\n        {starsList &amp;&amp; starsList\r\n          .map((star, index) =&gt; {\r\n            const starAmount = star.amount - value;\r\n            const calcAmount = starAmount * 100;\r\n            const offset = starAmount &lt;= 0 ? 100\r\n              : starAmount &gt;= 1\r\n                ? 0 : calcAmount;\r\n\r\n            return <svg\r\n 0="" 19\"\r\n="" 20="" classname='\"svg-inline--fa.fa-w-18\"' height='\"22\"\r\n' key="{star.amount}\r\n" viewbox='\"0' width='\"24\"\r\n' xmlns='\"http://www.w3.org/2000/svg\"\r\n'>\r\n              <defs>\r\n                <lineargradient id="{`half_${index}_${props.reviewID}`}">\r\n                  <stop offset="{`${offset}%`}" stopcolor='\"#f8d200\"'>\r\n                  <stop offset="{`${offset}%`}" stopcolor='\"#D9D9D9\"'>\r\n                </stop></stop></lineargradient>\r\n              </defs>\r\n              <path\r\n 0l2.546="" 1.757="" 11.34.49="" 14.332="" 18.09="" 4.122="" 4.429="" 5.88="" 6.495="" 6.751z\"\r\n="" 6.909l6.964-.414l10="" 6.965.415-5.39="" d='\"M10' eslint-disable-next-line="" fill="{`url('#half_${index}_${props.reviewID}')`}" max-len\r\n="">\r\n            ;\r\n          })}\r\n        <span classname='\"ms-2\"'>\r\n          {`${Math.round(10 * value) / 10} / ${scale}`}\r\n           \r\n          {hideCount\r\n            ? null\r\n            : <span id='\"UserRatingsText\"'>\r\n              <span>\r\n                {`(${count} ${t(\r\n                  \"ui.storefront.product.reviews.ratingSummary.userRating.Plural\"\r\n                )})`}\r\n              </span>\r\n            </span>}\r\n        </span>\r\n      </path\r\n></svg\r\n></span>\r\n    </div>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { ProductAssociationModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\ninterface IVariantSwatchesProps {\r\n  listOfVariants: ProductAssociationModel[];\r\n  selectedVariantProductId: number;\r\n  onVariantSwatchClicked: (seoUrl: string) =&gt; void;\r\n}\r\n\r\nexport const VariantSwatches = (props: IVariantSwatchesProps): JSX.Element =&gt; {\r\n  const { listOfVariants, selectedVariantProductId, onVariantSwatchClicked } = props;\r\n  const [ swatchImages, setSwatchImages ] = useState&lt;{ [variantProductId: number]: string }&gt;(null);\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!listOfVariants) {\r\n      return;\r\n    }\r\n    getSwatchImagesForMasterProduct();\r\n  }, [ listOfVariants ]);\r\n\r\n  function getSwatchImagesForMasterProduct(): void {\r\n    if (!listOfVariants) {\r\n      return;\r\n    }\r\n    Promise.all(listOfVariants.map(variant =&gt; cvApi.products.GetProductImages({\r\n      Active: true,\r\n      MasterID: variant.SlaveID\r\n    })))\r\n      .then(resArr =&gt; {\r\n        setSwatchImages(resArr.reduce((accumulator, currentValue) =&gt; {\r\n          const imgs = currentValue.data.Results;\r\n          const variantSwatchImg = imgs.find(img =&gt; img.TypeName === \"Product Swatch\");\r\n          const variantPrimaryImg = imgs.find(img =&gt; img.IsPrimary);\r\n          let swatchImgName: string = null;\r\n          if (variantSwatchImg?.OriginalFileName) {\r\n            swatchImgName = variantSwatchImg.OriginalFileName;\r\n          } else if (variantPrimaryImg?.OriginalFileName) {\r\n            swatchImgName = variantPrimaryImg.OriginalFileName;\r\n          } else if (imgs &amp;&amp; imgs[0] &amp;&amp; imgs[0].OriginalFileName) {\r\n            swatchImgName = imgs[0].OriginalFileName;\r\n          }\r\n          accumulator[imgs[0]?.MasterID] = swatchImgName;\r\n          return accumulator;\r\n        }, {} as { [ variantProductId: number ]: string }));\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n      });\r\n  }\r\n\r\n  if (!listOfVariants || !swatchImages) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <label classname='\"mb-1\"'>{t(\"ui.storefront.product.detail.productDetails.Options\")}</label>\r\n      \r\n      {listOfVariants\r\n        &amp;&amp; listOfVariants.map(variant =&gt; {\r\n          let imgFileName = null;\r\n          if (swatchImages &amp;&amp; swatchImages[variant.SlaveID]) {\r\n            imgFileName = swatchImages[variant.SlaveID];\r\n          }\r\n          return (\r\n            \r\n              <button\r\n :="" =="" ?="" \"outline-secondary\"\r\n="" \"outline-success\"\r\n="" aria-label="{variant.SlaveName}\r\n" classname='{\"w-100' onclick="{()" p-1\"}\r\n="" selectedvariantproductid="==" title="{variant.SlaveName}\r\n" variant="{\r\n" variant.slaveid\r\n="" }\r\n=""> onVariantSwatchClicked(variant.SlaveSeoUrl)}&gt;\r\n                <imagewithfallback\r\n 36,\r\n="" \"both\"\r\n="" \"pad\",\r\n="" alt="{variant.SlaveName}\r\n" classname='\"img-fluid\"\r\n' height:="" imageresizerparamsbody="{{\r\n" mode:="" scale:="" src="{imgFileName}\r\n" width:="" }}\r\n="">\r\n              \r\n            \r\n          );\r\n        })}\r\n    </imagewithfallback\r\n></button\r\n></row>\r\n  );\r\n};\r\n","import { Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ProductAssociationModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface IVariantDropdownProps {\r\n  listOfVariants: ProductAssociationModel[];\r\n  selectedVariantSeoUrl: string;\r\n  onVariantSelected: (seoUrl: string) =&gt; void;\r\n}\r\n\r\nexport const VariantDropdown = (props: IVariantDropdownProps): JSX.Element =&gt; {\r\n  const { listOfVariants, selectedVariantSeoUrl, onVariantSelected } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  if (!listOfVariants || !selectedVariantSeoUrl || !onVariantSelected) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <form.group classname='\"mb-2\"'>\r\n      <label classname='\"control-label' fw-normal="" htmlfor='\"variations\"' mb-1\"="">\r\n        {t(\"ui.storefront.common.PackageSizes\")}\r\n      </label>\r\n      <inputgroup>\r\n        <select =="" classname='\"form-control' id='\"variations\"\r\n' name='\"variations\"\r\n' onchange="{e" text-end\"\r\n=""> onVariantSelected(e.target.value)}\r\n          value={selectedVariantSeoUrl}\r\n          required={true}&gt;\r\n          <option disabled="{true}" value='\"\"\r\n'>\r\n            {t(\"ui.storefront.product.detail.productDetails.pleaseSelectAProductVersion\")}\r\n          </option>\r\n          {listOfVariants\r\n            .filter(x =&gt; x.SlaveSeoUrl &amp;&amp; x.SlaveName?.toLowerCase()?.includes(\"discontinued\") != true)\r\n            .map(variant =&gt; <option ??="" key="{variant.ID}\r\n" label='{variant?.SlaveSerializableAttributes?.[\"Package' size\"]?.value="" value="{variant.SlaveSeoUrl}" variant.slavename}\r\n="">\r\n          </option>)}\r\n        </select>\r\n      </inputgroup>\r\n    </form.group>\r\n  );\r\n};\r\n","import React, { useState } from \"react\";\r\nimport { Carousel as BootstrapCarousel } from \"react-bootstrap\";\r\n\r\ninterface ICarouselProps {\r\n  items: React.ReactNode[];\r\n  showPagination?: boolean;\r\n  hideArrows?: boolean;\r\n}\r\n\r\nexport const Carousel = (props: ICarouselProps): JSX.Element =&gt; {\r\n  const { items, showPagination, hideArrows } = props;\r\n  const [ activeSlideIndex, setActiveSlideIndex ] = useState<number>(0);\r\n\r\n  if (!items) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <bootstrapcarousel\r\n :="" <i="" ?="" classname='\"col-12\"\r\n' controls="{true}\r\n" fa-2x="" fa-chevron-left="" hidearrows\r\n="" indicators="{Boolean(showPagination)}\r\n" null\r\n="" previcon="{\r\n" text-dark\"="" wrap="{true}\r\n">\r\n      }\r\n      nextIcon={\r\n        hideArrows\r\n          ? null\r\n          : <i classname='\"fal' fa-2x="" fa-chevron-right="" text-dark\"="">\r\n      }\r\n      activeIndex={activeSlideIndex}\r\n      onSelect={(selectedIndex, _e) =&gt; setActiveSlideIndex(selectedIndex)}\r\n      interval={null}&gt;\r\n      {\r\n        // @ts-ignore TODO: use a better key\r\n        items.map(item =&gt; <bootstrapcarousel.item classname='\"px-5\"' key="{item.key}">\r\n          {item}\r\n        </bootstrapcarousel.item>)}\r\n    \r\n  );\r\n};\r\n","import { Fragment, useEffect, useState } from \"react\";\r\nimport { Card, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Carousel } from \"src/_shared/common/Carousel\";\r\nimport { ProductCard } from \"src/Catalog/views/ProductCard\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ProductAssociationModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\n\r\ninterface IRelatedProductsListProps {\r\n  products: Array<productassociationmodel>;\r\n}\r\n\r\nexport const RelatedProductsList = (props: IRelatedProductsListProps): JSX.Element =&gt; {\r\n  const { products } = props;\r\n\r\n  const [ productSets, setProductSets ] = useState&lt;{ ID: number, products: ProductModel[] }[]&gt;(null);\r\n\r\n  const { t } = useTranslation();\r\n  const pricingFactory = usePricingFactory();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const cefConfig: CEFConfig = useCefConfig();\r\n  // TODO: use the viewState.running\r\n  const { setRunning, finishRunning } = useViewState();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig || !pricingFactory || !inventoryFactory) {\r\n      return;\r\n    }\r\n    getAndSetFullProducts(cefConfig?.featureSet.pricing.enabled, cefConfig?.featureSet.inventory.enabled);\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ cefConfig, pricingFactory, inventoryFactory ]);\r\n\r\n  if (!products || !products.length) {\r\n    return <div classname='\"d-none\"'></div>;\r\n  }\r\n\r\n  // Similar function in Catalog.tsx, consider refactoring\r\n  async function getAndSetFullProducts(\r\n      withPricing: boolean,\r\n      withInventory: boolean\r\n  ) {\r\n    const debugMsg = \"Catalog/views/RelatedProductsList getAndSetFullProducts\";\r\n    setRunning();\r\n    const productIDs = products.map(product =&gt; product.SlaveID);\r\n    if (!productIDs.length) {\r\n      finishRunning(true, `${debugMsg} no productIDs`);\r\n      return;\r\n    }\r\n    try {\r\n      let newProducts = (\r\n        await cvApi.products.GetProductsByIDs({ IDs: productIDs })\r\n      ).data;\r\n      if (withPricing) {\r\n        // Assign prices\r\n        newProducts = await pricingFactory.bulkFactoryAssign(newProducts);\r\n      }\r\n      if (withInventory) {\r\n        // Assign inventory\r\n        newProducts = await inventoryFactory.bulkFactoryAssign(newProducts);\r\n      }\r\n      const sets = [];\r\n      for (let i = 0; i &lt; newProducts.length; i += 4) {\r\n        const thisSet: { ID: number, products: ProductModel[] } = {\r\n          ID: i,\r\n          products: []\r\n        };\r\n        for (let j = 0; j &lt; 4; j++) {\r\n          if (newProducts[i + j]) {\r\n            thisSet.products.push(newProducts[i + j]);\r\n          }\r\n        }\r\n        sets.push(thisSet);\r\n      }\r\n      setProductSets(sets);\r\n    } catch (err) {\r\n      if (cefConfig.debug) {\r\n        console.debug(debugMsg, err);\r\n      }\r\n      finishRunning(true, `${debugMsg}: Failed to get products by product ids`);\r\n    }\r\n  }\r\n\r\n  return (\r\n    <fragment>\r\n      <row classname='\"d-none' d-lg-block="" mb-5\"="">\r\n        <carousel\r\n .map((set):="" ?="" items="{\r\n" jsx.element="" productsets="" productsets\r\n=""> <row key="{set.ID}">\r\n                {set.products.map((product, index) =&gt; <productcard\r\n col-xl-3\"\r\n="" customclasses='\"col-6' index="{index}\r\n" key="{product.ID}\r\n" product="{product}\r\n">)}\r\n              </productcard\r\n></row>) : null\r\n          }\r\n        /&gt;\r\n      </carousel\r\n></row>\r\n      <row classname='\"d-block' d-lg-none="" mb-5\"="">\r\n        \r\n          <h2 classname='\"mt-4\"'>\r\n            {t(\"ui.storefront.product.widgets.relatedProducts.relatedProducts\")}\r\n          </h2>\r\n          <carousel .map((set):="" ?="" items="{productSets" jsx.element="" productsets\r\n=""> <row key="{set.ID}">\r\n              \r\n                {\r\n                  // eslint-disable-next-line @typescript-eslint/no-extra-parens\r\n                  set.products.map(product =&gt; {\r\n                    const { ID, SeoUrl, Name, CustomKey } = product;\r\n                    let base: number = null;\r\n                    let sale: number = null;\r\n                    if (product.readPrices) {\r\n                      const prices = product.readPrices();\r\n                      ({ sale, base } = prices);\r\n                    }\r\n                    return (\r\n                      <card key="{ID}">\r\n                        <card.body classname='\"p-3\"'>\r\n                          <div classname='\"d-flex\"'>\r\n                            <div classname='\"img-holder' me-3\"="">\r\n                              {/* //TODO: replaced direct import of placeholder image with fallback w/ no src,\r\n                                needs to be real image */}\r\n                              <imagewithfallback\r\n src="{product.PrimaryImageFileName}\r\n">\r\n                            </imagewithfallback\r\n></div>\r\n                            <div>\r\n                              <a\r\n \"productdetail\")}\r\n="" classname='\"card-title\"' href="{corsLink(cefConfig," seourl,="">\r\n                                <span classname='\"rows-2\"'>{Name}</span>\r\n                              \r\n                              <card.text as='\"div\"' classname='\"my-1\"'>\r\n                                <div classname='\"product-sku' rows-1\"="">\r\n                                  <span classname='\"code\"'>\r\n                                    {t(\"ui.storefront.cart.SKU\")}: {CustomKey}\r\n                                  </span>\r\n                                </div>\r\n                              </card.text>\r\n                              <div classname='\"my-1\"'>\r\n                                {sale === base\r\n                                  ? <span classname='\"text-body' very-big\"="">\r\n                                    {sale === null ? \"Price not found\" : currencyFormatter.format(sale)}\r\n                                  </span>\r\n                                  : <span>\r\n                                    <del classname='\"text-danger' small\"="">\r\n                                      {base === null ? \"Price not found\" : currencyFormatter.format(base)}\r\n                                    </del> <span classname='\"text-success' very-big\"="">\r\n                                      {sale === null ? \"Price not found\" : currencyFormatter.format(sale)}\r\n                                    </span>\r\n                                  </span>}\r\n                              </div>\r\n                            </a\r\n></div>\r\n                          </div>\r\n                        </card.body>\r\n                      </card>\r\n                    );\r\n                  })}\r\n              \r\n            </row>) : null} /&gt;\r\n        \r\n      </carousel></row>\r\n    </fragment>\r\n  );\r\n};\r\n","/* eslint-disable sort-keys */\r\n/* eslint-disable operator-linebreak */\r\n/* eslint-disable @typescript-eslint/no-extra-parens */\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Container, ListGroup, Row } from \"react-bootstrap\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { Price } from \"src/Catalog/controls/Price\";\r\nimport Stock from \"src/Catalog/controls/Stock\";\r\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\r\nimport { MagicImageCarousel2 } from \"src/Catalog/controls/MagicImageCarousel2\";\r\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { VariantSwatches } from \"src/Catalog/controls/VariantSwatches\";\r\nimport { VariantDropdown } from \"src/Catalog/controls/VariantDropdown\";\r\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\r\nimport { RelatedProductsList } from \"src/Catalog/views/RelatedProductsList\";\r\n\r\nexport const ClothingProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n  return (\r\n    <section>\r\n      {/* For DNN:cef:ProductMetaService */}\r\n      <input\r\n id='\"productID\"\r\n' type='\"hidden\"\r\n' value="{props.productVariant.ID}\r\n">\r\n      {props.prices &amp;&amp; props.prices.base &amp;&amp; (\r\n        <input\r\n id='\"productBasePrice\"\r\n' type='\"hidden\"\r\n' value="{props.prices.base}\r\n">\r\n      )}\r\n      <container classname='\"px-0\"'>\r\n        <div classname='\"product-one\"'>\r\n          <row>\r\n            <col\r\n classname='\"mb-3\"' md="{6}\r\n" xs="{12}\r\n">\r\n              <magicimagecarousel2 366,\r\n="" 800,\r\n="" \"150%\"\r\n="" \"both\"\r\n="" \"crop\",\r\n="" \"hover\",\r\n="" \"vertical\",\r\n="" draggable:="" false,\r\n="" height:="" largeimageresizerparamsbody="{{\r\n" magicscrolloptions="{{\r\n" magiczoomoptions="{{\r\n" mode:="" orientation:="" pagination:="" product="{props.productVariant}\r\n" scale:="" selectortrigger:="" transitioneffect:="" true,\r\n="" width:="" zoomwidth:="" }}\r\n="">\r\n            \r\n            <col\r\n classname='\"mb-3\"' md="{6}\r\n" xs="{12}\r\n">\r\n              {/* Breadcrumbs from props.children */}\r\n              {props.children}\r\n              <h1\r\n classname='\"cef-product-title' id='\"productName\"\r\n' mt-0\"="">\r\n                {props.productVariant.Name}\r\n              \r\n              <hr/>\r\n              <row>\r\n                <col\r\n classname='\"cef-product-info\"' xs="{12}\r\n">\r\n                  {cefConfig.featureSet.reviews.enabled &amp;&amp; (\r\n                    <div classname='\"cef-ratings' mb-3\"="" w-100="">\r\n                      <ratingsummary\r\n 0}\r\n="" ??="" count="{props.reviewsForAverage?.length" scale="{5}\r\n" value="{props.average}\r\n">\r\n                    </ratingsummary\r\n></div>\r\n                  )}\r\n                  <div classname='\"product-info\"'>\r\n                    {cefConfig.featureSet.pricing.enabled &amp;&amp; (\r\n                      <price\r\n colclasses='\"h1\"\r\n' mutediscounttext="{true}\r\n" prices="{props.prices}\r\n" sizeclass='\"very-small\"\r\n'>\r\n                    )}\r\n                    {cefConfig.featureSet.inventory.enabled &amp;&amp; (\r\n                      <div classname='\"mb-3\"'>\r\n                        <stock\r\n inventory="{props.inventory}\r\n" productid="{props.productVariant.ID}\r\n">\r\n                      </stock\r\n></div>\r\n                    )}\r\n                    <listgroup\r\n as='\"ul\"\r\n' classname='\"list-unstyled\"'>\r\n                      <listgroup.item classname='\"border-0' p-0\"="">\r\n                        <span classname='\"dt\"'>\r\n                          {t(\"ui.storefront.product.detail.productDetails.SKU\")} \r\n                          {props.productVariant?.CustomKey}\r\n                        </span>\r\n                      </listgroup.item>\r\n                      <listgroup.item classname='\"border-0' p-0\"="">\r\n                        <span classname='\"dt\"'>\r\n                          {t(\"ui.storefront.common.Unit\")} {props.productVariant?.UnitOfMeasure}\r\n                        </span>\r\n                      </listgroup.item>\r\n                    \r\n                  </listgroup\r\n></price\r\n></div>\r\n                  {cefConfig.productDetails.variantSwatches.enabled &amp;&amp; props.listOfVariants &amp;&amp; (\r\n                    <variantswatches\r\n listofvariants="{props.listOfVariants}\r\n" onvariantswatchclicked="{props.updateProductVariant}\r\n" selectedvariantproductid="{props.productVariant.ID}\r\n">\r\n                  )}\r\n                  <hr/>\r\n                  <div>\r\n                    <h5>{t(\"ui.storefront.product.detail.productDetails.quickDescription\")}</h5>\r\n                    <p>{props.productVariant?.ShortDescription}</p>\r\n                  </div>\r\n                \r\n                <col\r\n xs="{12}">\r\n                  <div classname='\"mb-2\"'>\r\n                    {props.listOfVariants?.length &amp;&amp; cefConfig.productDetails.variantDropdown.enabled &amp;&amp; (\r\n                      <variantdropdown\r\n listofvariants="{props.listOfVariants}\r\n" onvariantselected="{props.updateProductVariant}\r\n" selectedvariantseourl="{props.productVariant?.SeoUrl}\r\n">\r\n                    )}\r\n                    <productcardactionbuttonwidget\r\n addtocartbtnvariant='\"success\"\r\n' buttonview='\"addToCart\"\r\n' outofstockbtnclasses='\"rounded\"\r\n' product="{props.productVariant}\r\n" quotecartbtnseparated="{true}\r\n" useoutofstockinsteadofviewdetails="{true}\r\n">\r\n                  </productcardactionbuttonwidget\r\n></variantdropdown\r\n></div>\r\n                  <productcardcontrolswidget\r\n inventory="{props.inventory}\r\n" product="{props.productVariant}\r\n" render='\"vertical\"\r\n'>\r\n                \r\n              </productcardcontrolswidget\r\n></col\r\n></variantswatches\r\n></col\r\n></row>\r\n            \r\n          </h1\r\n></col\r\n></magicimagecarousel2></col\r\n></row>\r\n        </div>\r\n        {props.productVariant?.ProductAssociations\r\n          &amp;&amp; <relatedproductslist products="{props.productVariant.ProductAssociations}">}\r\n      </relatedproductslist></container>\r\n    </input\r\n></input\r\n></section>\r\n  );\r\n};\r\n","/** @format */\r\n\r\ninterface ITabContentProps {\r\n  // Grabbed by parent\r\n  label: string;\r\n  // Remove this\r\n  title?: string;\r\n  children: JSX.Element[] | JSX.Element;\r\n}\r\n\r\nexport const TabContent = (p: ITabContentProps): JSX.Element =&gt; <div classname='\"tab-pane' mt-4\"="" show="">{p.children}</div>;\r\n","/** @format */\r\n\r\nimport { useState } from \"react\";\r\n\r\ninterface ITabsProps {\r\n  onSwitch?: Function;\r\n  tabClasses?: string;\r\n  tabContainerClasses?: string;\r\n  children: JSX.Element[];\r\n}\r\n\r\nexport const Tabs = (props: ITabsProps): JSX.Element =&gt; {\r\n  const { onSwitch, tabClasses, tabContainerClasses, children } = props;\r\n  const [ tabToShow, setTabToShow ] = useState<number>(0);\r\n\r\n  const filteredChildren = children.filter(c =&gt; c &amp;&amp; c.props.label);\r\n\r\n  return (\r\n    <div ${tabcontainerclasses="" ??="" \"\"}`}="" classname="{`tabs">\r\n      <nav>\r\n        <ul classname='\"nav' nav-tabs\"="">\r\n          {filteredChildren.map((c, index: number) =&gt; <li key="{c.props.label}">\r\n            <button\r\n ${index="==" ${tabclasses="" :="" =="" ?="" ??="" \"\"}="" \"\"}`}\r\n="" \"active\"="" classname="{`nav-link" onclick="{()" tabtoshow="" type='\"button\"\r\n'> {\r\n                setTabToShow(index);\r\n                if (onSwitch) {\r\n                  onSwitch();\r\n                }\r\n              }}&gt;\r\n              {c.props.label}\r\n            \r\n          </button\r\n></li>)}\r\n        </ul>\r\n      </nav>\r\n      <div classname='\"my-2\"'>{filteredChildren[tabToShow]}</div>\r\n    </div>\r\n  );\r\n};\r\n","import { GeneralAttributeModel, ProductModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport Interweave from \"interweave\";\r\n\r\ninterface IProductDetailsTabAttributeProps {\r\n  product: ProductModel;\r\n  attribute: GeneralAttributeModel;\r\n}\r\n\r\nexport const ProductDetailsTabAttribute = (\r\n  props: IProductDetailsTabAttributeProps\r\n): JSX.Element =&gt; {\r\n  const { product, attribute } = props;\r\n\r\n  return (\r\n    <div id="{`${attribute.CustomKey}Text`}">\r\n      <dt>{attribute.DisplayName || attribute.Name || attribute.CustomKey}</dt>\r\n      <dd>\r\n        <span>\r\n          {product.SerializableAttributes\r\n            &amp;&amp; product.SerializableAttributes[attribute.Name || attribute.CustomKey]\r\n            &amp;&amp; <interweave\r\n allowattributes="{true}\r\n" allowelements="{true}\r\n" attribute.customkey].value}\r\n="" content="{product.SerializableAttributes[attribute.Name" ||="">}\r\n        </interweave\r\n></span>{\" \"}\r\n        {!attribute.IsMarkup\r\n          &amp;&amp; <span>{product.SerializableAttributes[attribute.CustomKey]?.UofM}</span>\r\n        }\r\n      </dd>\r\n    </div>\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport Interweave from \"interweave\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ProductDetailsTabAttribute } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabAttribute\";\r\nimport { IFullTabSetTab } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabs\";\r\n\r\ninterface IProductDetailsTabsDefaultTabContentProps {\r\n  product: ProductModel;\r\n  fullTabSet: IFullTabSetTab[];\r\n}\r\n\r\nexport const ProductDetailsTabsDefaultTabContent = (props: IProductDetailsTabsDefaultTabContentProps): JSX.Element =&gt; {\r\n  const { product, fullTabSet } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <row classname='\"description\"' id='\"tabMoreInformation\"'>\r\n      {product &amp;&amp; product.Description\r\n        ? \r\n          <h3 id='\"ProductOverviewText\"'>{t(\"ui.storefront.product.detail.productDetails.productOverview\")}</h3>\r\n          <div id='\"ProductOverviewDescriptionText\"'>\r\n            <interweave allowattributes="{true}\r\n" allowelements="{true}" content="{product.Description}\r\n">\r\n          </interweave></div>\r\n        \r\n        : null}\r\n      {fullTabSet\r\n        .filter(ft =&gt; ft.key === \"default-tab\")\r\n        .map(fullTab =&gt; {\r\n          const { header, attributes } = fullTab;\r\n          return (\r\n            \r\n              <h3 classname='\"my-4\"' id='\"SpecificationsText\"'>\r\n                {t(\"ui.storefront.product.detail.productDetails.Specifications\")}\r\n              </h3>\r\n              {attributes\r\n                .sort((attr1, attr2) =&gt; {\r\n                  if (attr1.SortOrder &amp;&amp; attr2.SortOrder) {\r\n                    return attr1.SortOrder - attr2.SortOrder;\r\n                  }\r\n                  return 0;\r\n                })\r\n                .map((attr: GeneralAttributeModel) =&gt; <dl key="{attr.CustomKey}">\r\n                  <productdetailstabattribute attribute="{attr}" product="{product}">\r\n                </productdetailstabattribute></dl>)}\r\n            \r\n          );\r\n        })}\r\n    </row>\r\n  );\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IRatingEntryProps {\r\n  scale: number;\r\n  ratingAmount: number;\r\n  setRatingAmount: Function;\r\n}\r\n\r\nexport const RatingEntry = (props: IRatingEntryProps): JSX.Element =&gt; {\r\n  const { scale, ratingAmount, setRatingAmount } = props;\r\n\r\n  const [ ratingHovered, setRatingHovered ] = useState<number>(0);\r\n  // Just exists so the key in the list isn't the index\r\n  const [ starsList, setStarsList ] = useState&lt;{ amount: number }[]&gt;(null);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() =&gt; {\r\n    if (scale) {\r\n      setStarsList(Array(scale)\r\n        .fill(null)\r\n        .map((_n, i) =&gt; ({ amount: i + 1 })));\r\n    }\r\n  }, [ scale ]);\r\n\r\n  if (!starsList) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div classname='\"d-inline-flex' mb-0\"="" product-rating="">\r\n      {starsList &amp;&amp; starsList\r\n        .map(star =&gt; {\r\n          const filled = ratingHovered &gt; 0\r\n            ? star.amount &lt;= ratingHovered\r\n            : star.amount &lt;= ratingAmount;\r\n          return <svg\r\n 0="" 19\"\r\n="" 20="" =="" classname='\"svg-inline--fa.fa-w-18\"\r\n' height='\"22\"\r\n' key="{star.amount}\r\n" onmouseenter="{()" viewbox='\"0' width='\"24\"\r\n' xmlns='\"http://www.w3.org/2000/svg\"\r\n'> setRatingHovered(star.amount)}\r\n            onMouseLeave={() =&gt; setRatingHovered(0)}\r\n            onClick={() =&gt; setRatingAmount(star.amount)}&gt;\r\n            <path\r\n 0l2.546="" 1.757="" 11.34.49="" 14.332="" 18.09="" 4.122="" 4.429="" 5.88="" 6.495="" 6.751z\"\r\n="" 6.909l6.964-.414l10="" 6.965.415-5.39="" :="" ?="" \"#d9d9d9\"}`}="" \"#f8d200\"="" d='\"M10' eslint-disable-next-line="" fill="{`${filled" max-len\r\n="">\r\n          ;\r\n        })}\r\n      <span classname='\"ms-2\"' id='\"SelectYourRatingText\"'>\r\n        {t(\"ui.storefront.product.reviews.ratingEntry.selectYourRating\")}\r\n      </span>\r\n    </path\r\n></svg\r\n></div>\r\n  );\r\n};\r\n","import { Fragment, useState } from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Card, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { RatingEntry } from \"src/Catalog/views/RatingEntry\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { CreateReviewDto } from \"src/_api\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\ninterface IReviewEntryProps {\r\n  id: number;\r\n}\r\n\r\ninterface IMyProfileDataEntry {\r\n  txtProductReviewTitle?: string;\r\n  txtProductReviewComment?: string;\r\n}\r\n\r\nexport const ReviewEntry = (props: IReviewEntryProps): JSX.Element =&gt; {\r\n  const { id } = props;\r\n\r\n  const [ submitted, setSubmitted ] = useState<boolean>(false);\r\n  const [ ratingAmount, setRatingAmount ] = useState<number>(0);\r\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const currentUser = useCurrentUser();\r\n\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    formState: { errors }\r\n  } = useForm<imyprofiledataentry>({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const saveReview: SubmitHandler<imyprofiledataentry> = data =&gt; {\r\n    const { txtProductReviewTitle, txtProductReviewComment } = data;\r\n    if (!ratingAmount) {\r\n      return;\r\n    }\r\n    setRunning();\r\n    cvApi.reviews\r\n      .CreateReview({\r\n        Active: true,\r\n        Approved: false,\r\n        Comment: txtProductReviewComment,\r\n        CreatedDate: new Date(),\r\n        ProductID: id,\r\n        SubmittedByUserID: null,\r\n        Title: txtProductReviewTitle,\r\n        TypeID: 0,\r\n        Value: ratingAmount\r\n      } as CreateReviewDto)\r\n      .then(_res =&gt; {\r\n        setSubmitted(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  return (\r\n    <form\r\n ${\r\n="" :="" ?="" \"\"\r\n="" \"border-success\"="" classname="{`d-flex" flex-column="" mt-2="" onsubmit="{handleSubmit(saveReview)}" position-relative="" submitted="" }`}\r\n="">\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      <h5 classname='\"w-100\"'>{t(\"ui.storefront.product.reviews.productReview.writeAReview\")}</h5>\r\n      {currentUser\r\n        ? <div classname='\"w-100\"'>\r\n          <form.group>\r\n            <form.label classname='\"my-1\"' id='\"WriteAReviewRatingText\"'>\r\n              {t(\"ui.storefront.product.reviews.reviewEntry.Rating\")}\r\n            </form.label>\r\n            <inputgroup classname='\"mb-1\"'>\r\n              <ratingentry\r\n ratingamount="{ratingAmount}\r\n" scale="{5}\r\n" setratingamount="{setRatingAmount}\r\n">\r\n            </ratingentry\r\n></inputgroup>\r\n          </form.group>\r\n          <form.group>\r\n            <form.label\r\n classname='\"my-1\"\r\n' htmlfor='\"txtProductReviewTitle\"\r\n' id='\"WriteAReviewTitleText\"'>\r\n              {t(\"ui.storefront.common.Title\")}\r\n            \r\n            <inputgroup>\r\n              <form.control\r\n disabled="{submitted}\r\n" id='\"txtProductReviewTitle\"\r\n' name='\"txtProductReviewTitle\"\r\n' type='\"text\"\r\n' {...register(\"txtproductreviewtitle\")}\r\n="">\r\n            </form.control\r\n></inputgroup>\r\n            {errors.txtProductReviewTitle\r\n              ? <alert variant='\"danger\"'>\r\n                <i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n                 \r\n                <span>{errors.txtProductReviewTitle?.message}</span>\r\n              </i></alert><i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n              : null}\r\n          </i></form.label\r\n></form.group><i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n          <form.group>\r\n            <form.label classname='\"my-1\"' htmlfor='\"txtProductReviewComment\"'>\r\n              {t(\"ui.storefront.product.reviews.reviewEntry.Comment\")}\r\n            </form.label>\r\n            <inputgroup>\r\n              <form.control\r\n as='\"textarea\"\r\n' classname='\"mb-1\"\r\n' disabled="{submitted}\r\n" id='\"txtProductReviewComment\"\r\n' {...register(\"txtproductreviewcomment\")}\r\n="">\r\n              {errors.txtProductReviewComment\r\n                ? <alert variant='\"danger\"'>\r\n                  <i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n                  <span classname='\"sr-only\"'>\r\n                    {t(\"ui.storefront.common.Error\")}\r\n                  </span>\r\n                   \r\n                  <span>{errors.txtProductReviewComment?.message}</span>\r\n                </i></alert><i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n                : null}\r\n            </i></form.control\r\n></inputgroup><i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n          </i></form.group><i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n          <div classname='\"d-flex' justify-content-end\"="">\r\n            <button\r\n disabled="{submitted}" id='\"btnSaveReview\"\r\n' name='\"btnSaveReview\"\r\n' title='\"Save\"\r\n' type='\"submit\"\r\n' variant='\"primary\"\r\n'>\r\n              {t(\"ui.storefront.common.Save\")}\r\n            \r\n          </button\r\n></div>\r\n        </i></i></div><i classname='\"fal' fa-exclamation-triangle="" fa-fw\"=""><i classname='\"fal' fa-exclamation-triangle="" fa-fw\"="">\r\n        : <fragment>\r\n          <loginmodal\r\n =="" oncancel="{()" show="{showLoginModal}\r\n"> setShowLoginModal(false)}\r\n            onConfirm={() =&gt; setShowLoginModal(false)}\r\n          /&gt;\r\n          <button\r\n =="" classname='\"mt-2\"\r\n' in="" onclick="{()" review\"\r\n="" size='\"lg\"\r\n' title='\"Sign' to="" variant='\"primary\"\r\n'> setShowLoginModal(true)}&gt;\r\n            {t(\"ui.storefront.product.reviews.reviewEntry.signInToReview\")}\r\n          \r\n        </button\r\n></loginmodal\r\n></fragment>\r\n      }\r\n      {submitted\r\n        ? <card.footer bg-success="" classname='\"border-success' text-white\"="">\r\n          <p>\r\n            {t(\r\n              \"ui.storefront.product.reviews.reviewEntry.successYourReviewHasBeenSaved\"\r\n            )}\r\n          </p>\r\n          <p classname='\"mb-0\"'>\r\n            <b>{t(\"ui.storefront.common.Note\")}</b>\r\n            : \r\n            <span id='\"ReviewAdminNote\"'>\r\n              {t(\r\n                \"ui.storefront.product.reviews.reviewEntry.theWebsiteAdministratorRequiresThatReviewsAreApprovedBefore\"\r\n              )}\r\n            </span>\r\n          </p>\r\n        </card.footer>\r\n        : null}\r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Card, Col, Row } from \"react-bootstrap\";\r\nimport { ReviewEntry } from \"src/Catalog/views/ReviewEntry\";\r\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\r\nimport { ProductReviewInformationModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\n\r\ninterface IReviewsMainProps {\r\n  id: number;\r\n}\r\n\r\nexport const ReviewsMain = (props: IReviewsMainProps): JSX.Element =&gt; {\r\n  const { id } = props;\r\n\r\n  const [ productReviewData, setProductReviewData ] = useState<productreviewinformationmodel null="" |="">(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  useEffect(() =&gt; {\r\n    setRunning();\r\n    cvApi.products\r\n      .GetProductReview(id)\r\n      .then(res =&gt; {\r\n        setProductReviewData(res.data);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n        finishRunning(true, err);\r\n      });\r\n  }, []);\r\n\r\n  const approvedReviews = productReviewData?.Reviews?.filter(r =&gt; r.Approved);\r\n  if (approvedReviews?.length) {\r\n    approvedReviews.sort((a, b) =&gt; a.SortOrder - b.SortOrder);\r\n  }\r\n  const reviewsForAverage = approvedReviews?.filter(ar =&gt; ar.Value &gt; 0);\r\n  const average\r\n    = reviewsForAverage\r\n      ?.map((ar): number =&gt; ar.Value)\r\n      .reduce((a: number, b: number): number =&gt; a + b, 0) / reviewsForAverage?.length;\r\n\r\n  return (\r\n    <row classname='\"mb-2' pb-2\"="">\r\n      \r\n        {approvedReviews &amp;&amp; approvedReviews.length\r\n          ? <row>\r\n            \r\n              <ratingsummary\r\n count="{reviewsForAverage?.length}\r\n" scale="{5}\r\n" value="{average}\r\n">\r\n            \r\n            {approvedReviews.map(review =&gt; {\r\n              const { ID, Title, Value, Comment } = review;\r\n              return (\r\n                \r\n                  <card>\r\n                    <card.header>\r\n                      <div classname='\"d-flex' justify-content-between\"="">\r\n                        <span>{Title}</span>\r\n                        {Value &gt; 0\r\n                          ? <ratingsummary\r\n count="{0}\r\n" hidecount="{true}\r\n" reviewid="{ID}\r\n" scale="{5}\r\n" value="{Value}\r\n">\r\n                          : null}\r\n                      </ratingsummary\r\n></div>\r\n                    </card.header>\r\n                    <card.body>\r\n                      <card.text>{Comment}</card.text>\r\n                    </card.body>\r\n                  </card>\r\n                \r\n              );\r\n            })}\r\n          </ratingsummary\r\n></row>\r\n          : <p>\r\n            {t(\r\n              \"ui.storefront.product.reviews.reviewList.thereAreNoReviewsForThisProduct\"\r\n            )}\r\n          </p>\r\n        }\r\n      \r\n      \r\n        <reviewentry id="{id}">\r\n      \r\n      {viewState.hasError &amp;&amp; \r\n        <errorview error="{viewState.errorMessage}">\r\n      }\r\n    </errorview></reviewentry></row>\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { IHttpPromiseCallbackArg, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { GeneralAttributeModel, GeneralAttributePagedResults } from \"src/_api/cvApi._DtoClasses\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { TabContent } from \"src/_shared/common/TabContent\";\r\nimport { Tabs } from \"src/_shared/common/Tabs\";\r\nimport {\r\n  ProductDetailsTabsDefaultTabContent\r\n} from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabsDefaultTabContent\";\r\nimport { ReviewsMain } from \"src/Catalog/views/ReviewsMain\";\r\nimport { ProductDetailsTabAttribute } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabAttribute\";\r\n\r\nexport interface IFullTabSetTab {\r\n  attributes: GeneralAttributeModel[];\r\n  key: string;\r\n  header: string;\r\n  sort: number;\r\n}\r\n\r\ninterface IKeysTabbedAndGrouped {\r\n  [key: string]: Array<string>;\r\n}\r\n\r\ninterface IProductDetailsTabsProps {\r\n  product: ProductModel;\r\n  master?: ProductModel;\r\n}\r\n\r\nexport const ProductDetailsTabs = (props: IProductDetailsTabsProps): JSX.Element =&gt; {\r\n  const { product, master } = props;\r\n\r\n  const [ fullTabSet, setFullTabSet ] = useState<array<ifulltabsettab>&gt;(null);\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!fullTabSet &amp;&amp; product &amp;&amp; cefConfig) {\r\n      loadAttributes();\r\n    }\r\n  }, [ fullTabSet, product, cefConfig ]);\r\n\r\n  const containsNoResults = (httpResponse: IHttpPromiseCallbackArg<generalattributepagedresults>): boolean =&gt; {\r\n    const hasData = httpResponse?.data?.Results?.length;\r\n    return !hasData;\r\n  };\r\n\r\n  function loadAttributes(): void {\r\n    const keys = [];\r\n    for (const attributeName in product.SerializableAttributes) {\r\n      keys.push(attributeName);\r\n    }\r\n    cvApi.attributes\r\n      .GetGeneralAttributes({\r\n        Active: true,\r\n        AsListing: true,\r\n        HideFromProductDetailView: false,\r\n        CustomKeysStrict: true,\r\n        CustomKeys: keys,\r\n      })\r\n      .then(res =&gt; {\r\n        if (containsNoResults(res)) {\r\n          console.warn(\"Failed to fetch general attributes\");\r\n          return;\r\n        }\r\n        const generalAttributes: GeneralAttributeModel[] = res.data.Results;\r\n        // Sort attributes by name\r\n        generalAttributes.sort((a, b) =&gt; a.Name.localeCompare(b.Name));\r\n        // Move \"disclaimer\" attribute to beginning\r\n        const disclaimerAttr = generalAttributes.find(x =&gt; x.CustomKey.toLowerCase() === \"disclaimer\" );\r\n        if (disclaimerAttr &amp;&amp; generalAttributes.indexOf(disclaimerAttr) &gt; 0) {\r\n          generalAttributes.splice(generalAttributes.indexOf(disclaimerAttr), 1);\r\n          generalAttributes.unshift(disclaimerAttr);\r\n        }\r\n        const keysTabbedAndGrouped = getKeysTabbedAndGrouped(generalAttributes);\r\n        let fullTabSetI = Object.entries(keysTabbedAndGrouped).map(keyValArr =&gt; {\r\n          const [ tabIdentifier, tabAttributesList ] = keyValArr;\r\n          const fullTab: any = {\r\n            attributes: generalAttributes.filter(genAttr =&gt; tabAttributesList.includes(genAttr.CustomKey)),\r\n            key: tabIdentifier,\r\n            header: t(\"ui.storefront.product.detail.productDetails.Specifications\")\r\n          };\r\n          if (tabIdentifier === \"default-tab\") {\r\n            fullTab.header = t(\"ui.storefront.product.ProductAttributes\");\r\n            fullTab.sort = -999999;\r\n          } else {\r\n            return null;\r\n          }\r\n          return fullTab;\r\n        });\r\n        fullTabSetI = fullTabSetI.filter(x =&gt; x !== null);\r\n        if (cefConfig?.featureSet?.reviews?.enabled) {\r\n          fullTabSetI.push({\r\n            attributes: [],\r\n            key: \"reviews-tab\",\r\n            header: t(\"ui.storefront.product.widgets.relatedProducts.Reviews\"),\r\n            sort: 999999\r\n          });\r\n        }\r\n        fullTabSetI.push({\r\n          attributes: [],\r\n          key: \"sds-tab\",\r\n          header: \"SDS\",\r\n          sort: 1,\r\n        });\r\n        fullTabSetI.push({\r\n          attributes: [],\r\n          key: \"certificates-tab\",\r\n          header: \"Certificates\",\r\n          sort: 2,\r\n        });\r\n        fullTabSetI.push({\r\n          attributes: [],\r\n          key: \"faq-tab\",\r\n          header: \"FAQs\",\r\n          sort: 3,\r\n        });\r\n        fullTabSetI.sort((fullTab1, fullTab2) =&gt; fullTab1.sort - fullTab2.sort);\r\n        setFullTabSet(fullTabSetI);\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n      });\r\n  }\r\n\r\n  function getKeysTabbedAndGrouped(generalAttributes: GeneralAttributeModel[] = []) {\r\n    const keysTabbedAndGrouped: IKeysTabbedAndGrouped = {};\r\n    for (const attributeName in product.SerializableAttributes) {\r\n      if (!Object.hasOwn(product.SerializableAttributes, attributeName)) {\r\n        continue;\r\n      }\r\n      const attribute = generalAttributes.find(a =&gt; a.CustomKey === attributeName);\r\n      let thisTabKey = \"default-tab\";\r\n      if (attribute?.IsTab) {\r\n        thisTabKey = attributeName;\r\n      }\r\n      if (!keysTabbedAndGrouped[thisTabKey]) {\r\n        keysTabbedAndGrouped[thisTabKey] = [];\r\n      }\r\n      keysTabbedAndGrouped[thisTabKey].push(attributeName);\r\n    }\r\n    return keysTabbedAndGrouped;\r\n  }\r\n\r\n  function isValidHTML(htmlString: string) {\r\n    try {\r\n      const parser = new DOMParser();\r\n      const doc = parser.parseFromString(htmlString, \"text/html\");\r\n\r\n      // If the parser creates a 'parsererror' element, the HTML is invalid\r\n      return !doc.querySelector(\"parsererror\");\r\n    } catch (error) {\r\n      return false; // In case of any errors, treat the string as invalid\r\n    }\r\n  }\r\n\r\n  if (!fullTabSet || !fullTabSet.length) {\r\n    return null;\r\n  }\r\n  return (\r\n    <row>\r\n      \r\n        <tabs mb-4\"="" tabcontainerclasses='\"mt-2'>\r\n          {fullTabSet.map(fullTab =&gt; {\r\n            const { header, key, attributes } = fullTab;\r\n            if (key === \"default-tab\") {\r\n              return (\r\n                <tabcontent key="{key}" label='{t(\"ui.storefront.product.ProductAttributes\")}'>\r\n                  <productdetailstabsdefaulttabcontent fulltabset="{fullTabSet}" product="{product}">\r\n                </productdetailstabsdefaulttabcontent></tabcontent>\r\n              );\r\n            }\r\n            switch (key) {\r\n              case \"reviews-tab\": {\r\n                return (\r\n                  <tabcontent\r\n key="{key}" label='{t(\"ui.storefront.product.widgets.relatedProducts.Reviews\")}\r\n' title='{t(\"ui.storefront.product.detail.productDetails.productReviews\")}\r\n'>\r\n                    <reviewsmain id="{product.ID}">\r\n                  \r\n                );\r\n              }\r\n              case \"sds-tab\": {\r\n                return (\r\n                  <tabcontent\r\n key="{key}" label='\"SDS\"\r\n' title='\"Safety\"\r\n'>\r\n                    <h3>Safety Data Sheet (SDS)</h3>\r\n                    <a +="" \"msds.pdf\"}\r\n="" classname='\"text-decoration-none\"\r\n' href='{\"/Portals/0/msds/\"' product.brandname="" target='\"_blank\"\r\n'>View Safety Data Sheet  <i aria-hidden='\"true\"' classname='\"fa' fa-file\"=""></i>\r\n                    </a>\r\n                  \r\n                );\r\n              }\r\n              case \"certificates-tab\": {\r\n                return (\r\n                  <tabcontent\r\n analysis\"\r\n="" key="{key}" label='\"Certificates\"\r\n' of="" title='\"Certificates'>\r\n                    <h3>Certificates of Analysis (COAs)</h3>\r\n                    <span>Coming soon...</span>\r\n                  \r\n                );\r\n              }\r\n              case \"faq-tab\": {\r\n                const faqsSerializableAttribute = product?.SerializableAttributes?.[\"FAQS\"]?.Value\r\n                  ?? master?.SerializableAttributes?.[\"FAQS\"]?.Value\r\n                  ?? \"N/A\";\r\n                  return (\r\n                    <tabcontent\r\n asked="" key="{key}\r\n" label='\"FAQs\"\r\n' questions\"\r\n="" title='\"Frequently'>\r\n                      <h3>Frequently Asked Questions (FAQs)</h3>\r\n                      {isValidHTML(faqsSerializableAttribute) ? (\r\n                        <div __html:="" dangerouslysetinnerhtml="{{" faqsserializableattribute="" }}="">\r\n                      ) : (\r\n                        <div>{faqsSerializableAttribute}</div>\r\n                      )}\r\n                    \r\n                  );\r\n              }\r\n            }\r\n            return (\r\n              <tabcontent key="{header}" label="{key}">\r\n                <row>\r\n                  \r\n                    <h3>{header}</h3>\r\n                    {attributes\r\n                      .sort((attr1, attr2) =&gt; {\r\n                        if (attr1.SortOrder &amp;&amp; attr2.SortOrder) {\r\n                          return attr1.SortOrder - attr2.SortOrder;\r\n                        }\r\n                        return 0;\r\n                      })\r\n                      .map(attr =&gt; <dl key="{attr.CustomKey}">\r\n                        <productdetailstabattribute attribute="{attr}" product="{product}">\r\n                      </productdetailstabattribute></dl>)}\r\n                  \r\n                </row>\r\n              </tabcontent>\r\n            );\r\n          })}\r\n        \r\n      \r\n    \r\n  );\r\n};\r\n","/* eslint-disable operator-linebreak */\r\n/* eslint-disable @typescript-eslint/no-extra-parens */\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Container, ListGroup, Row } from \"react-bootstrap\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { Price } from \"./controls/Price\";\r\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\r\nimport { RelatedProductsList } from \"src/Catalog/views/RelatedProductsList\";\r\n// import { MagicImageCarousel } from \"src/Catalog/controls/MagicImageCarousel\";\r\nimport { MagicImageCarousel2 } from \"src/Catalog/controls/MagicImageCarousel2\";\r\nimport { ProductDetailsTabs } from \"./views/ProductDetailsTabs/ProductDetailsTabs\";\r\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { VariantSwatches } from \"src/Catalog/controls/VariantSwatches\";\r\nimport { VariantDropdown } from \"src/Catalog/controls/VariantDropdown\";\r\nimport { VariantTable } from \"src/Catalog/controls/VariantTable\";\r\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\r\nimport { ProductCardStockWidget } from \"src/Catalog/views/ProductCardWidgets\";\r\n\r\nexport const DefaultProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n  if (!props.productVariant) {\r\n    return null;\r\n  }\r\n  return (\r\n    <section>\r\n      {/* For DNN:cef:ProductMetaService */}\r\n      <input\r\n id='\"productID\"\r\n' type='\"hidden\"\r\n' value="{props.productVariant.ID}\r\n">\r\n      {props.prices &amp;&amp; props.prices.base &amp;&amp; (\r\n        <input\r\n id='\"productBasePrice\"\r\n' type='\"hidden\"\r\n' value="{props.prices.base}\r\n">\r\n      )}\r\n      <container classname='\"px-0\"'>\r\n        <div classname='\"product-one\"'>\r\n          <row>\r\n            <col\r\n classname='\"mb-3\"' md="{4}\r\n" xs="{12}\r\n">\r\n              <magicimagecarousel2 4,\r\n="" 51\r\n="" \"150%\"\r\n="" \"hover\",\r\n="" draggable:="" false,\r\n="" height:="" items:="" magicscrolloptions="{{\r\n" magiczoomoptions="{{\r\n" pagination:="" product="{props.productVariant}\r\n" selectortrigger:="" transitioneffect:="" true,\r\n="" zoomwidth:="" }}="" }}\r\n="">\r\n            \r\n            <col\r\n classname='\"mb-3\"' md="{8}\r\n" xs="{12}\r\n">\r\n              <h1\r\n classname='\"cef-product-title' id='\"productName\"\r\n' mb-4\"="" mt-0="" text-black="">\r\n                {props.productVariant.Name}\r\n              \r\n              <h4 classname='\"text-black\"'>CAS No. {props.productVariant?.SerializableAttributes?.[\"CAS No.\"]?.Value ?? \"No CAS No.\"}</h4>\r\n              <row>\r\n                <hr/>\r\n                <col\r\n classname='\"cef-product-info\"' md="{8}\r\n" xs="{12}\r\n">\r\n                  {cefConfig.featureSet.reviews.enabled &amp;&amp; (\r\n                    <div classname='\"cef-ratings' mb-3\"="" w-100="">\r\n                      <ratingsummary\r\n 0}\r\n="" ??="" count="{props.reviewsForAverage?.length" scale="{5}\r\n" value="{props.average}\r\n">\r\n                    </ratingsummary\r\n></div>\r\n                  )}\r\n                  <div classname='\"product-info\"'>\r\n                    {cefConfig.featureSet.pricing.enabled &amp;&amp; (\r\n                      <price\r\n colclasses='\"h1' fw-normal\"\r\n="" mutediscounttext="{true}\r\n" prices="{props.prices}\r\n" product="{props.productVariant}\r\n" sizeclass='\"very-small\"\r\n'>\r\n                    )}\r\n                    {cefConfig.featureSet.inventory.enabled &amp;&amp; (\r\n                      <div classname='\"mb-1' text-uppercase\"="">\r\n                        <productcardstockwidget\r\n alertclasses='\"p-0' bg-transparent="" border-0="" d-inline-block="" mb-0\"\r\n="" product="{props.productVariant}\r\n">\r\n                      </productcardstockwidget\r\n></div>\r\n                    )}\r\n                    <listgroup\r\n as='\"ul\"\r\n' classname='\"list-unstyled\"'>\r\n                      <listgroup.item classname='\"border-0' d-flex\"="" fw-bold="" p-0="" row="">\r\n                        \r\n                          {t(\"ui.storefront.product.ItemNumber\")}:\r\n                        \r\n                        \r\n                          {props.productVariant.BrandName}\r\n                        \r\n                      </listgroup.item>\r\n                      <listgroup.item classname='\"border-0' d-flex\"="" fw-bold="" p-0="" row="">\r\n                        \r\n                          {t(\"ui.storefront.product.detail.productDetails.SKU\")}\r\n                        \r\n                        \r\n                          {props.productVariant.CustomKey}\r\n                        \r\n                      </listgroup.item>\r\n                      <listgroup.item classname='\"border-0' d-flex\"="" fw-bold="" p-0="" row="">\r\n                        \r\n                          {t(\"ui.storefront.cart.packageSize\")}\r\n                        \r\n                        \r\n                          {props.productVariant?.SerializableAttributes?.['Package Size']?.Value ?? \"No package size defined\"}\r\n                        \r\n                      </listgroup.item>\r\n                      <listgroup.item classname='\"border-0' d-flex\"="" fw-bold="" p-0="" row="">\r\n                        \r\n                          {t(\"ui.storefront.product.Grade\")}\r\n                        \r\n                        \r\n                          {props.productVariant?.SerializableAttributes?.['Grade']?.Value ?? \"No grade defined\"}\r\n                        \r\n                      </listgroup.item>\r\n                    \r\n                  </listgroup\r\n></price\r\n></div>\r\n                  {cefConfig.productDetails.variantSwatches.enabled &amp;&amp; props.listOfVariants &amp;&amp; (\r\n                    <variantswatches\r\n listofvariants="{props.listOfVariants}\r\n" onvariantswatchclicked="{props.updateProductVariant}\r\n" selectedvariantproductid="{props.productVariant.ID}\r\n">\r\n                  )}\r\n                  {false &amp;&amp; props.masterProduct?.TypeKey === \"VARIANT-MASTER\" &amp;&amp; props.listOfVariants?.length &amp;&amp; (\r\n                    <row>\r\n                      \r\n                        <productdetailstabs master="{props.masterProduct}" product="{props.productVariant}">\r\n                      \r\n                  </productdetailstabs></row>)}\r\n                \r\n                <col\r\n sm="{4}" xs="{12}\r\n">\r\n                  {/* <div classname='\"d-block' mb-1\"="">\r\n                    {cefConfig.productDetails.variantWizard.enabled &amp;&amp; listOfVariants &amp;&amp; (\r\n                      <variantwizard\r\n listofvariants="{listOfVariants}\r\n" onupdateproductvariant="{updateProductVariant}\r\n" selectedvariantproductid="{productVariant.ID}\r\n">\r\n                    )}\r\n                  </variantwizard\r\n></div> */}\r\n                  <div classname='\"cef-buy-product\"'>\r\n                    {props.masterProduct?.TypeKey === \"VARIANT-MASTER\" &amp;&amp; props.listOfVariants?.length &amp;&amp; (\r\n                      <variantdropdown\r\n listofvariants="{props.listOfVariants}\r\n" onvariantselected="{props.updateProductVariant}\r\n" selectedvariantseourl="{props.productVariant.SeoUrl}\r\n">\r\n                    )}\r\n                    <productcardactionbuttonwidget\r\n addtocartbtnvariant='\"success\"\r\n' buttonview='\"addToCart\"\r\n' product="{props.productVariant}\r\n" quotecartbtnseparated="{true}\r\n" useoutofstockinsteadofviewdetails="{true}\r\n">\r\n                  </productcardactionbuttonwidget\r\n></variantdropdown\r\n></div>\r\n                  <productcardcontrolswidget\r\n inventory="{props.inventory}\r\n" product="{props.productVariant}\r\n" render='\"vertical\"\r\n'>\r\n                \r\n              </productcardcontrolswidget\r\n></col\r\n></variantswatches\r\n></col\r\n></row>\r\n            \r\n          </h1\r\n></col\r\n></magicimagecarousel2></col\r\n></row>\r\n        </div>\r\n        {props.productVariant &amp;&amp; (\r\n          <row>\r\n            \r\n              <productdetailstabs master="{props.masterProduct}" product="{props.productVariant}">\r\n            \r\n          </productdetailstabs></row>\r\n        )}\r\n        {props.productVariant.ProductAssociations\r\n          &amp;&amp; <relatedproductslist products="{props.productVariant.ProductAssociations}">}\r\n      </relatedproductslist></container>\r\n    </input\r\n></input\r\n></section>\r\n  );\r\n};\r\n","/**\r\n * @file React/src/Catalog/controls/RecentlyViewedProductsList.tsx\r\n * @author Copyright (c) 2022-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Product detail recently viewed products list widget\r\n */\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ListGroup, ListGroupItem } from \"react-bootstrap\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets/ProductCardNameWidget\";\r\n\r\ninterface IRecentlyViewedProductsListProps {\r\n  size?: number;\r\n}\r\n\r\nexport const RecentlyViewedProductsList = (props: IRecentlyViewedProductsListProps): JSX.Element =&gt; {\r\n  const [ products, setProducts ] = useState<productmodel[]>();\r\n  const promiserKey = \"cvApi.tracking.RecentlyViewedProducts\";\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  useEffect(() =&gt; {\r\n    setRunning();\r\n    promiser.resolve(\r\n      promiserKey,\r\n      () =&gt; cvApi.tracking.GetRecentlyViewedProducts({ Paging: { Size: props.size ?? 4, StartIndex: 1 } })\r\n    ).then(result =&gt; {\r\n      setProducts(result.data);\r\n      finishRunning();\r\n    })\r\n      .catch(error =&gt; {\r\n        finishRunning(true, error);\r\n      });\r\n  }, []);\r\n  if (!products?.length) {\r\n    return null;\r\n  }\r\n  if (viewState.running) {\r\n    return <loadingwidget>;\r\n  }\r\n  return &lt;&gt;\r\n    <h4>{t(\"ui.storefront.product.widgets.recentlyViewed.recentlyViewed\")}</h4>\r\n    <listgroup>\r\n      {products.map(product =&gt; {\r\n        return <listgroupitem +="" key="{product.CustomKey" product.id}="">\r\n          <imagewithfallback\r\n 40,\r\n="" \"both\"\r\n="" \"pad\",\r\n="" classname='\"me-2\"\r\n' height:="" imageresizerparamsbody="{{\r\n" mode:="" scale:="" src="{product.PrimaryImageFileName}\r\n" width:="" }}\r\n="">\r\n          <productcardnamewidget\r\n ??="" product.customkey}\r\n="" productname="{product.Name" productseourl="{product.SeoUrl}\r\n">\r\n        </productcardnamewidget\r\n></imagewithfallback\r\n></listgroupitem>;\r\n      })}\r\n    </listgroup>\r\n  ;\r\n};\r\n","/**\r\n * @file React/src/Catalog/controls/MoreFromCategoryList.tsx\r\n * @author Copyright (c) 2022-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Product detail more from category list widget\r\n */\r\nimport { useEffect, useState } from \"react\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport { ListGroup, ListGroupItem } from \"react-bootstrap\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets/ProductCardNameWidget\";\r\nimport { SearchSort } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface IRecentlyViewedProductsListProps {\r\n  size?: number;\r\n  categorySearchString: string;\r\n}\r\n\r\nexport const MoreFromCategoryList = (props: IRecentlyViewedProductsListProps): JSX.Element =&gt; {\r\n  const [ products, setProducts ] = useState<productmodel[]>();\r\n  const searchDto = {\r\n    Category: props.categorySearchString,\r\n    Page: 1,\r\n    PageSetSize: props.size ?? 4,\r\n    PageSize: props.size ?? 4,\r\n    Sort: SearchSort.Relevance,\r\n  };\r\n  const searchPromiserKey = `cvApi.providers.SearchProductCatalogWithProvider(${JSON.stringify(searchDto)})`;\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  useEffect(() =&gt; {\r\n    setRunning();\r\n    promiser.resolve(\r\n      searchPromiserKey,\r\n      () =&gt; cvApi.providers.SearchProductCatalogWithProvider(searchDto)\r\n    ).then(result =&gt; {\r\n      if (!result.data.ResultIDs) {\r\n        finishRunning(true);\r\n        return;\r\n      }\r\n      const productPromiserKey = `cvApi.products.GetProductsByIDs({ IDs: ${result.data.ResultIDs} })`;\r\n      promiser.resolve(\r\n        productPromiserKey,\r\n        () =&gt; cvApi.products.GetProductsByIDs({ IDs: result.data.ResultIDs })\r\n      ).then(result2 =&gt; {\r\n        if (!result2.data) {\r\n          finishRunning(true);\r\n          return;\r\n        }\r\n        setProducts(result2.data);\r\n        finishRunning();\r\n      })\r\n        .catch(error2 =&gt; {\r\n          finishRunning(true, error2);\r\n        });\r\n    })\r\n      .catch(error1 =&gt; {\r\n        finishRunning(true, error1);\r\n      });\r\n  }, []);\r\n  if (!products?.length) {\r\n    return null;\r\n  }\r\n  if (viewState.running) {\r\n    return <loadingwidget>;\r\n  }\r\n  return &lt;&gt;\r\n    <h4>{t(\"ui.storefront.product.detail.productDetails.moreFromCategory\")}</h4>\r\n    <listgroup>\r\n      {products.map(product =&gt; {\r\n        return <listgroupitem +="" key="{product.CustomKey" product.id}="">\r\n          <imagewithfallback\r\n 40,\r\n="" \"both\"\r\n="" \"pad\",\r\n="" classname='\"me-2\"\r\n' height:="" imageresizerparamsbody="{{\r\n" mode:="" scale:="" src="{product.PrimaryImageFileName}\r\n" width:="" }}\r\n="">\r\n          <productcardnamewidget\r\n ??="" product.customkey}\r\n="" productname="{product.Name" productseourl="{product.SeoUrl}\r\n">\r\n        </productcardnamewidget\r\n></imagewithfallback\r\n></listgroupitem>;\r\n      })}\r\n    </listgroup>\r\n  ;\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Col, Container, ListGroup, Row } from \"react-bootstrap\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { Price } from \"src/Catalog/controls/Price\";\r\nimport Stock from \"src/Catalog/controls/Stock\";\r\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\r\nimport { RelatedProductsList } from \"src/Catalog/views/RelatedProductsList\";\r\n// import { MagicImageCarousel } from \"src/Catalog/controls/MagicImageCarousel\";\r\nimport { MagicImageCarousel2 } from \"src/Catalog/controls/MagicImageCarousel2\";\r\nimport { ProductDetailsTabs } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabs\";\r\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { VariantSwatches } from \"src/Catalog/controls/VariantSwatches\";\r\nimport { VariantDropdown } from \"src/Catalog/controls/VariantDropdown\";\r\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\r\nimport { RecentlyViewedProductsList } from \"src/Catalog/controls/RecentlyViewedProductsList\";\r\nimport { MoreFromCategoryList } from \"src/Catalog/controls/MoreFromCategoryList\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\n\r\nexport const RecentlyViewedProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n  return (\r\n    <section>\r\n      {/* For DNN:cef:ProductMetaService */}\r\n      <input\r\n id='\"productID\"\r\n' type='\"hidden\"\r\n' value="{props.productVariant.ID}\r\n">\r\n      {props.prices &amp;&amp; props.prices.base\r\n        &amp;&amp; <input\r\n id='\"productBasePrice\"\r\n' type='\"hidden\"\r\n' value="{props.prices.base}\r\n">\r\n      }\r\n      <container>\r\n        <row>\r\n          {/* Default view */}\r\n          \r\n            <container classname='\"px-0\"'>\r\n              <row classname='\"product-one\"'>\r\n                <col\r\n classname='\"mb-3\"' md="{4}\r\n" xs="{12}\r\n">\r\n                  <magicimagecarousel2 4,\r\n="" 51\r\n="" \"150%\"\r\n="" \"hover\",\r\n="" draggable:="" false,\r\n="" height:="" items:="" magicscrolloptions="{{\r\n" magiczoomoptions="{{\r\n" pagination:="" product="{props.productVariant}\r\n" selectortrigger:="" transitioneffect:="" true,\r\n="" zoomwidth:="" }}="" }}\r\n="">\r\n                \r\n                <col\r\n classname='\"mb-3\"' md="{8}\r\n" xs="{12}\r\n">\r\n                  <h1\r\n classname='\"cef-product-title' id='\"productName\"\r\n' mt-0\"="">\r\n                    {props.productVariant.Name}\r\n                  \r\n                  <hr/>\r\n                  <row>\r\n                    <col\r\n classname='\"cef-product-info\"' md="{8}\r\n" xs="{12}\r\n">\r\n                      {cefConfig.featureSet.reviews.enabled\r\n                        &amp;&amp; <div classname='\"cef-ratings' mb-3\"="" w-100="">\r\n                          <ratingsummary\r\n 0}\r\n="" ??="" count="{props.reviewsForAverage?.length" scale="{5}\r\n" value="{props.average}\r\n">\r\n                        </ratingsummary\r\n></div>\r\n                      }\r\n                      <div classname='\"product-info\"'>\r\n                        {cefConfig.featureSet.pricing.enabled\r\n                          &amp;&amp; <price\r\n colclasses='\"h1\"\r\n' mutediscounttext="{true}\r\n" prices="{props.prices}\r\n" sizeclass='\"very-small\"\r\n'>\r\n                        }\r\n                        {cefConfig.featureSet.inventory.enabled\r\n                          &amp;&amp; <div classname='\"mb-3\"'>\r\n                            <stock\r\n inventory="{props.inventory}\r\n" productid="{props.productVariant.ID}\r\n">\r\n                          </stock\r\n></div>\r\n                        }\r\n                        <listgroup\r\n as='\"ul\"\r\n' classname='\"list-unstyled\"'>\r\n                          <listgroup.item classname='\"border-0' p-0\"="">\r\n                            <span classname='\"dt\"'>\r\n                              {t(\"ui.storefront.product.detail.productDetails.SKU\")} \r\n                              {props.productVariant?.CustomKey}\r\n                            </span>\r\n                          </listgroup.item>\r\n                          <listgroup.item classname='\"border-0' p-0\"="">\r\n                            <span classname='\"dt\"'>\r\n                              {t(\"ui.storefront.common.Unit\")} {props.productVariant?.UnitOfMeasure}\r\n                            </span>\r\n                          </listgroup.item>\r\n                        \r\n                      </listgroup\r\n></price\r\n></div>\r\n                      {cefConfig.productDetails.variantSwatches.enabled &amp;&amp; props.listOfVariants\r\n                        &amp;&amp; <variantswatches\r\n listofvariants="{props.listOfVariants}\r\n" onvariantswatchclicked="{props.updateProductVariant}\r\n" selectedvariantproductid="{props.productVariant.ID}\r\n">\r\n                      }\r\n                      <hr/>\r\n                      <div>\r\n                        <h5>{t(\"ui.storefront.product.detail.productDetails.quickDescription\")}</h5>\r\n                        <p>{props.productVariant?.ShortDescription}</p>\r\n                      </div>\r\n                    \r\n                    <col\r\n sm="{4}" xs="{12}\r\n">\r\n                      {/* <div classname='\"d-block' mb-1\"="">\r\n                        {cefConfig.productDetails.variantWizard.enabled &amp;&amp; listOfVariants &amp;&amp; (\r\n                          <variantwizard\r\n listofvariants="{listOfVariants}\r\n" onupdateproductvariant="{updateProductVariant}\r\n" selectedvariantproductid="{productVariant.ID}\r\n">\r\n                        )}\r\n                      </variantwizard\r\n></div> */}\r\n                      <div classname='\"mb-2\"'>\r\n                        {props.listOfVariants?.length &amp;&amp; cefConfig.productDetails.variantDropdown.enabled\r\n                          &amp;&amp; <variantdropdown\r\n listofvariants="{props.listOfVariants}\r\n" onvariantselected="{props.updateProductVariant}\r\n" selectedvariantseourl="{props.productVariant?.SeoUrl}\r\n">\r\n                        }\r\n                        <productcardactionbuttonwidget\r\n addtocartbtnvariant='\"success\"\r\n' buttonview='\"addToCart\"\r\n' product="{props.productVariant}\r\n" quotecartbtnseparated="{true}\r\n" useoutofstockinsteadofviewdetails="{true}\r\n">\r\n                      </productcardactionbuttonwidget\r\n></variantdropdown\r\n></div>\r\n                      <productcardcontrolswidget\r\n inventory="{props.inventory}\r\n" product="{props.productVariant}\r\n" render='\"vertical\"\r\n'>\r\n                    \r\n                  </productcardcontrolswidget\r\n></col\r\n></variantswatches\r\n></col\r\n></row>\r\n                \r\n              </h1\r\n></col\r\n></magicimagecarousel2></col\r\n></row>\r\n              {props.productVariant\r\n                &amp;&amp; <row>\r\n                  \r\n                    <productdetailstabs product="{props.productVariant}">\r\n                  \r\n                </productdetailstabs></row>\r\n              }\r\n              {props.productVariant?.ProductAssociations\r\n                &amp;&amp; <relatedproductslist products="{props.productVariant.ProductAssociations}">}\r\n            </relatedproductslist></container>\r\n          \r\n          \r\n            <div classname='\"mb-4\"'>\r\n              <recentlyviewedproductslist>\r\n            </recentlyviewedproductslist></div>\r\n            <div classname='\"mb-4\"'>\r\n              {<morefromcategorylist categorysearchstring="{getPrimaryCategorySearchString(props.productVariant)}">}\r\n            </morefromcategorylist></div>\r\n          \r\n        </row>\r\n      </container>\r\n\r\n    </input\r\n></input\r\n></section>\r\n  );\r\n};\r\n\r\nfunction getPrimaryCategorySearchString(product: ProductModel): string {\r\n  if (!product.Categories) {\r\n    return null;\r\n  }\r\n  let string = \"\";\r\n  let depth = 0;\r\n  for (let i = 0; i &lt; product.Categories.length; i++) {\r\n    const productCategory = product.Categories[i];\r\n    if (!productCategory.SlaveName || !productCategory.SlaveKey) {\r\n      continue;\r\n    }\r\n    const { length } = productCategory.SlaveKey.split(\"_\");\r\n    if (length &gt; depth) {\r\n      depth = length;\r\n      string = `${productCategory.SlaveName}|${productCategory.SlaveKey}`;\r\n    }\r\n  }\r\n  return string;\r\n}\r\n","/* eslint-disable arrow-body-style */\r\nimport { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\r\nimport { ConfirmationModal } from \"src/_shared/modals\";\r\nimport { NewWalletModal } from \"src/Dashboard/Wallet/NewWalletModal\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { WalletEntryCard } from \"src/Dashboard/Wallet/WalletEntryCard\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\r\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\nconst thisYear = new Date().getFullYear();\r\n\r\nconst availableExpirationYears: number[] = [];\r\nfor (let i = 0; i &lt; 11; i++) {\r\n  availableExpirationYears.push(thisYear + i);\r\n}\r\n\r\nexport const Wallet = (): JSX.Element =&gt; {\r\n  const [ showAddCard, setShowAddCard ] = useState<boolean>(false);\r\n  const [ deleteWalletItem, setDeleteWalletItem ] = useState<walletmodel>(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const wallet = useWallet();\r\n  const walletFactory = useWalletFactory();\r\n  const currentUser = useCurrentUser();\r\n\r\n  function addUserWalletItem(data: INewWalletFormConfirmData): void {\r\n    setRunning();\r\n    const {\r\n      CreditCardNumber,\r\n      CardNickName,\r\n      CardHolderName,\r\n      ExpirationMonth,\r\n      ExpirationYear\r\n    } = data;\r\n    const walletData = {\r\n      Active: true,\r\n      CardHolderName,\r\n      CreatedDate: new Date(),\r\n      CreditCardNumber,\r\n      ExpirationMonth,\r\n      ExpirationYear: Number(ExpirationYear),\r\n      ID: 0,\r\n      IsDefault: false,\r\n      Name: CardNickName,\r\n      User: currentUser,\r\n      UserID: currentUser.ID\r\n\r\n      // AccountNumber: \"\",\r\n      // RoutingNumber: \"\",\r\n      // BankName: \"\",\r\n      // Token: \"\",\r\n      // CardType: \"\",\r\n      // UserKey: \"\",\r\n      // CurrencyID: 1,\r\n      // CurrencyKey: \"USD\",\r\n      // CurrencyName: \"\"\r\n      // Currency: CurrencyModel\r\n    } as WalletModel;\r\n    walletFactory\r\n      .addWalletEntry(walletData)\r\n      .then(() =&gt; {\r\n        setShowAddCard(false);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to add wallet item.\");\r\n      });\r\n  }\r\n\r\n  function deactiveUserWalletItem(id: number): void {\r\n    setRunning();\r\n    walletFactory\r\n      .deactivateWalletEntry(id)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n        setDeleteWalletItem(null);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  const getIconByCardType = (type: string) =&gt; {\r\n    switch (type) {\r\n      case \"visa\":\r\n        return \"fab fa-cc-visa\";\r\n      case \"mastercard\":\r\n        return \"fab fa-cc-mastercard\";\r\n      case \"discover\":\r\n        return \"fab fa-cc-discover\";\r\n      default:\r\n        return \"fal fa-credit-card\";\r\n    }\r\n  };\r\n\r\n  if (wallet === null) {\r\n    return <loadingwidget>;\r\n  }\r\n\r\n  return (\r\n    <row classname='\"position-relative\"'>\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      \r\n        <h1 id='\"udWalletTitleText\"'>{t(\"ui.storefront.userDashboard2.userDashboard.Wallet\")}</h1>\r\n        <row classname='\"row-cols-1' row-cols-fk-6\"="" row-cols-lg-3="" row-cols-md-2="" row-cols-sm-2="" row-cols-tk-5="" row-cols-xl-3="">\r\n          \r\n            <card classname='\"h-100\"'>\r\n              <card.header classname='\"alert-success\"'>\r\n                {t(\"ui.storefront.userDashboard.wallet.AddANewEntry\")}\r\n              </card.header>\r\n              <card.body classname='\"p-2\"'>\r\n                <button\r\n =="" cef-add-card-to-wallet="" classname='\"btn-block' h-100="" mb-1\"\r\n="" onclick="{()" p-4="" variant='\"outline-secondary\"\r\n' w-100=""> setShowAddCard(true)}\r\n                  id=\"btnAddCreditCardWallet\"\r\n                  name=\"btnAddCreditCardWallet\"\r\n                  disabled={showAddCard}\r\n                  style={{ height: \"216px\" }}&gt;\r\n                  <svg\r\n 0="" 30="" 31\"\r\n="" height='\"31px\"\r\n' version='\"1.1\"\r\n' viewbox='\"0' width='\"30px\"\r\n' xmlns='\"http://www.w3.org/2000/svg\"'>\r\n                    <g\r\n fill='\"none\"\r\n' fillrule='\"evenodd\"' stroke='\"none\"\r\n' strokewidth='\"1\"\r\n'>\r\n                      <g\r\n -260.000000)\"\r\n="" fill='\"#B6B6B6\"' transform='\"translate(-847.000000,'>\r\n                        {/* eslint-disable-next-line max-len */}\r\n                        <path 847,267.090582="" 847,275.370117="" 847.697674,275.370117="" 847.697674,283.273373="" 853.720465,290.370117="" 853.860465,275.762675="" 854.096744,261.067792="" 854.26,275.02128="" 854.28186,275.01942="" 854.325581,275.718954="" 861.643721,267.513838="" 861.651163,267.695699="" 861.805581,283.398954="" 861.956279,267.336164="" 862,260.370117="" 862,261.067792="" 862,283.398954="" 862,289.672443="" 862,290.370117="" 862.170698,267.308722="" 862.348837,283.044536="" 862.352558,283.238954="" 869.674419,275.02128="" 869.868837,275.017559="" 869.903256,289.672443="" 870.028837,275.370117="" 870.028837,275.564536="" 870.279535,260.370117="" 876.302326,267.466861="" 876.302326,275.370117="" 877,275.370117="" 877,283.649652="" c847,283.649652="" c847.697674,267.466861="" c853.720465,260.370117="" c853.794884,275.065001="" c854.096744,289.672443="" c854.303721,275.01942="" c861.647442,283.238954="" c861.776744,267.357559="" c862.194419,283.398954="" c862.35814,267.47942="" c869.868837,275.722675="" c869.903256,261.067792="" c870.028837,275.175699="" c870.279535,290.370117="" c876.302326,283.273373="" c877,267.090582="" d='\"M862,260.370117' l854.325581,275.02128="" l861.651163,275.02128="" l861.651163,275.718954="" l861.651163,283.044536="" l861.956279,267.336164="" l862.348837,267.695699="" l862.348837,275.02128="" l862.348837,275.718954="" l869.674419,275.718954="" m861.956279,267.336164="" m862,261.067792="" z="" z\"=""></path>\r\n                      \r\n                    \r\n                  \r\n                  <br/>\r\n                  <span>{t(\"ui.storefront.wallet.walletList.AddCard\")}</span>\r\n                \r\n              </g\r\n></g\r\n></svg\r\n></button\r\n></card.body>\r\n            </card>\r\n          \r\n          {wallet &amp;&amp; wallet.length\r\n            ? \r\n              <walletentrycard =="" walletitem="{wallet.find(w"> w.IsDefault)} isDefault={true} /&gt;\r\n            \r\n            : null}\r\n          <newwalletmodal\r\n =="" oncancel="{()" onconfirm="{addUserWalletItem}\r\n" show="{showAddCard}\r\n"> setShowAddCard(false)}\r\n            loading={viewState.running}\r\n          /&gt;\r\n        </newwalletmodal\r\n></walletentrycard></row>\r\n        <row classname='\"row-cols-1' row-cols-fk-6\"="" row-cols-lg-3="" row-cols-md-2="" row-cols-sm-2="" row-cols-tk-5="" row-cols-xl-3="">\r\n          {wallet\r\n            &amp;&amp; wallet.map((walletItem: WalletModel, i: number): JSX.Element =&gt; {\r\n              return (\r\n                &lt;&gt;\r\n                  \r\n                    <walletentrycard\r\n index="{i}" setdeletewalletitem="{setDeleteWalletItem}\r\n" walletitem="{walletItem}\r\n">\r\n                  \r\n                \r\n              );\r\n            })}\r\n          <confirmationmodal\r\n =="" cancelbtnlabel='{t(\"ui.storefront.common.No\")}\r\n' card?\"\r\n="" confirmbtnlabel='{t(\"ui.storefront.common.Yes\")}\r\n' onconfirm="{()" remove="" show="{Boolean(deleteWalletItem)}\r\n" sure="" this="" title='\"Are' to="" want="" you=""> deactiveUserWalletItem(deleteWalletItem.ID)}\r\n            onCancel={() =&gt; setDeleteWalletItem(null)}\r\n            size=\"md\"&gt;\r\n            <card.body classname='\"p-2\"'>\r\n              <p classname='\"font-weight-bold\"'>\r\n                {deleteWalletItem?.CardHolderName}\r\n              </p>\r\n              <p id='\"CardNumberText\"'>\r\n                •••• •••• •••• \r\n                {deleteWalletItem?.CreditCardNumber}\r\n              </p>\r\n              <div classname='\"mb-0\"' id='\"WalletEntryExpirationText\"'>\r\n                <span>\r\n                  {t(\"ui.storefront.wallet.walletCard.Expiration.Abbreviation\")}\r\n                </span>\r\n                <span>\r\n                  {deleteWalletItem?.ExpirationMonth.toString().padStart(\r\n                    2,\r\n                    \"0\"\r\n                  )}\r\n                  /{deleteWalletItem?.ExpirationYear}\r\n                </span>\r\n              </div>\r\n            </card.body>\r\n          \r\n        </confirmationmodal\r\n></walletentrycard\r\n></row>\r\n      \r\n      {viewState.hasError\r\n        &amp;&amp; \r\n          <errorview error="{viewState.errorMessage}">\r\n        \r\n      }\r\n    </errorview></loadingwidget></row>\r\n  );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"staticHeadphoneWrapper\":\"StaticHeadphonesProductDetailsTemplate_staticHeadphoneWrapper__63d7f\",\"disabled\":\"StaticHeadphonesProductDetailsTemplate_disabled__8VZrN\",\"container\":\"StaticHeadphonesProductDetailsTemplate_container__ztG22\",\"btn\":\"StaticHeadphonesProductDetailsTemplate_btn__blZd6\",\"title\":\"StaticHeadphonesProductDetailsTemplate_title__OmscH\",\"head-text\":\"StaticHeadphonesProductDetailsTemplate_head-text__FOuj-\",\"arrow-link\":\"StaticHeadphonesProductDetailsTemplate_arrow-link__h8mEV\",\"card\":\"StaticHeadphonesProductDetailsTemplate_card__agyeA\",\"card-img-top\":\"StaticHeadphonesProductDetailsTemplate_card-img-top__EvYW6\",\"shadow-img\":\"StaticHeadphonesProductDetailsTemplate_shadow-img__RKWMI\",\"card-title\":\"StaticHeadphonesProductDetailsTemplate_card-title__LcsVD\",\"card-body\":\"StaticHeadphonesProductDetailsTemplate_card-body__sWizd\",\"section-jumbotron\":\"StaticHeadphonesProductDetailsTemplate_section-jumbotron__6gUfu\",\"slider-box\":\"StaticHeadphonesProductDetailsTemplate_slider-box__GaA6o\",\"slider-dots\":\"StaticHeadphonesProductDetailsTemplate_slider-dots__VVsxq\",\"slick-active\":\"StaticHeadphonesProductDetailsTemplate_slick-active__dG6-J\",\"description-box\":\"StaticHeadphonesProductDetailsTemplate_description-box__nA8cO\",\"description\":\"StaticHeadphonesProductDetailsTemplate_description__EdBsQ\",\"header-description\":\"StaticHeadphonesProductDetailsTemplate_header-description__8Uflt\",\"description-wrap\":\"StaticHeadphonesProductDetailsTemplate_description-wrap__yWtEd\",\"subtitle\":\"StaticHeadphonesProductDetailsTemplate_subtitle__EByBg\",\"input-group\":\"StaticHeadphonesProductDetailsTemplate_input-group__jv7VJ\",\"input-number\":\"StaticHeadphonesProductDetailsTemplate_input-number__PWFVy\",\"quantity-nav\":\"StaticHeadphonesProductDetailsTemplate_quantity-nav__skhMf\",\"form-control\":\"StaticHeadphonesProductDetailsTemplate_form-control__LjBos\",\"input-btn\":\"StaticHeadphonesProductDetailsTemplate_input-btn__NkVkk\",\"holder\":\"StaticHeadphonesProductDetailsTemplate_holder__EV-jh\",\"length-box\":\"StaticHeadphonesProductDetailsTemplate_length-box__JYBeu\",\"text\":\"StaticHeadphonesProductDetailsTemplate_text__vGfru\",\"length-list\":\"StaticHeadphonesProductDetailsTemplate_length-list__ol3KT\",\"item\":\"StaticHeadphonesProductDetailsTemplate_item__zaNE5\",\"active\":\"StaticHeadphonesProductDetailsTemplate_active__LmrhQ\",\"sum-box\":\"StaticHeadphonesProductDetailsTemplate_sum-box__Hh9fJ\",\"text-uppercase\":\"StaticHeadphonesProductDetailsTemplate_text-uppercase__h7jA-\",\"section-text\":\"StaticHeadphonesProductDetailsTemplate_section-text__KSBQC\",\"section-studio\":\"StaticHeadphonesProductDetailsTemplate_section-studio__8VCoQ\",\"studio-box\":\"StaticHeadphonesProductDetailsTemplate_studio-box__7GwvD\",\"position-box\":\"StaticHeadphonesProductDetailsTemplate_position-box__-twNt\",\"play-btn\":\"StaticHeadphonesProductDetailsTemplate_play-btn__Icp27\",\"section-similar\":\"StaticHeadphonesProductDetailsTemplate_section-similar__p0Txk\",\"similar-description\":\"StaticHeadphonesProductDetailsTemplate_similar-description__-fSQW\",\"section-look\":\"StaticHeadphonesProductDetailsTemplate_section-look__a7HpD\",\"box-list\":\"StaticHeadphonesProductDetailsTemplate_box-list__7gTd6\",\"img-box\":\"StaticHeadphonesProductDetailsTemplate_img-box__CSsim\",\"pin\":\"StaticHeadphonesProductDetailsTemplate_pin__uFtOg\",\"descr-tooltip\":\"StaticHeadphonesProductDetailsTemplate_descr-tooltip__ZqGgz\",\"blurred-img\":\"StaticHeadphonesProductDetailsTemplate_blurred-img__K99ly\",\"list\":\"StaticHeadphonesProductDetailsTemplate_list__VyPEv\",\"opener\":\"StaticHeadphonesProductDetailsTemplate_opener__GoiY8\",\"box\":\"StaticHeadphonesProductDetailsTemplate_box__ey6mQ\",\"section-creator\":\"StaticHeadphonesProductDetailsTemplate_section-creator__oARQO\",\"creator-holder\":\"StaticHeadphonesProductDetailsTemplate_creator-holder__tOlfW\",\"image-box\":\"StaticHeadphonesProductDetailsTemplate_image-box__D3bHi\",\"name-transform\":\"StaticHeadphonesProductDetailsTemplate_name-transform__XtaxB\",\"slider\":\"StaticHeadphonesProductDetailsTemplate_slider__IRE9U\",\"slick-list\":\"StaticHeadphonesProductDetailsTemplate_slick-list__efmW7\",\"dragging\":\"StaticHeadphonesProductDetailsTemplate_dragging__PHsYS\",\"slick-track\":\"StaticHeadphonesProductDetailsTemplate_slick-track__Ir4uV\",\"slick-loading\":\"StaticHeadphonesProductDetailsTemplate_slick-loading__jz8B5\",\"slick-slide\":\"StaticHeadphonesProductDetailsTemplate_slick-slide__7Kyhg\",\"slick-initialized\":\"StaticHeadphonesProductDetailsTemplate_slick-initialized__5iD--\",\"slick-vertical\":\"StaticHeadphonesProductDetailsTemplate_slick-vertical__90spL\",\"slick-arrow\":\"StaticHeadphonesProductDetailsTemplate_slick-arrow__pzRtl\",\"slick-hidden\":\"StaticHeadphonesProductDetailsTemplate_slick-hidden__ThBJx\",\"compensate-for-scrollbar\":\"StaticHeadphonesProductDetailsTemplate_compensate-for-scrollbar__iLHpF\",\"sidebar\":\"StaticHeadphonesProductDetailsTemplate_sidebar__2DZ5U\",\"search-form\":\"StaticHeadphonesProductDetailsTemplate_search-form__IwzZE\",\"post-password-form\":\"StaticHeadphonesProductDetailsTemplate_post-password-form__WuDgk\",\"navigation-single\":\"StaticHeadphonesProductDetailsTemplate_navigation-single__0AuIH\",\"next\":\"StaticHeadphonesProductDetailsTemplate_next__vbA2P\",\"prev\":\"StaticHeadphonesProductDetailsTemplate_prev__fzB34\",\"bg-body\":\"StaticHeadphonesProductDetailsTemplate_bg-body__Fm9nt\",\"fancybox-rotate\":\"StaticHeadphonesProductDetailsTemplate_fancybox-rotate__bww1X\"};","/* eslint-disable max-len */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable react/no-unescaped-entities */\r\n/* eslint-disable arrow-body-style */\r\n/* eslint-disable operator-linebreak */\r\n/* eslint-disable @typescript-eslint/no-extra-parens */\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { Col, Container, ListGroup, Row } from \"react-bootstrap\";\r\nimport { corsImageLink } from \"src/_shared/common/Cors\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { MagicImageCarousel } from \"src/Catalog/controls/MagicImageCarousel\";\r\nimport { Price } from \"src/Catalog/controls/Price\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\r\nimport { ProductCardPricingWidget } from \"./views/ProductCardWidgets\";\r\nimport { ProductDetailsTabs } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabs\";\r\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\r\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\r\nimport { RelatedProductsList } from \"src/Catalog/views/RelatedProductsList\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { VariantDropdown } from \"./controls/VariantDropdown\";\r\nimport { VariantSwatches } from \"src/Catalog/controls/VariantSwatches\";\r\nimport classes from \"src/Catalog/StaticHeadphonesProductDetailsTemplate.module.scss\";\r\nimport Interweave from \"interweave\";\r\nimport Stock from \"src/Catalog/controls/Stock\";\r\n\r\nexport const StaticHeadphonesProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig() as CEFConfig;\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig) {\r\n      return;\r\n    }\r\n    // add a bg to the body class only on this page to match master-qa.clarityclient.com\r\n    document.getElementsByTagName(\"body\")[0].classList.add(classes[\"bg-body\"]);\r\n  }, [ cefConfig ]);\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n  const primaryImage = props.productVariant.Images?.find(x =&gt; x.IsPrimary);\r\n  return (\r\n    <section>\r\n      {/* For DNN:cef:ProductMetaService */}\r\n      <input\r\n id='\"productID\"\r\n' type='\"hidden\"\r\n' value="{props.productVariant.ID}\r\n">\r\n      {props.prices &amp;&amp; props.prices.base &amp;&amp; (\r\n        <input\r\n id='\"productBasePrice\"\r\n' type='\"hidden\"\r\n' value="{props.prices.base}\r\n">\r\n      )}\r\n      <div id="{classes.staticHeadphoneWrapper}">\r\n        <main\r\n classname="{classes.headphone}\r\n" id='\"main\"\r\n' role='\"main\"'>\r\n          {/* \"Jumbotron section\" */}\r\n          <section ${classes.jumbotron}`}="" classname='{`${classes[\"section-jumbotron\"]}'>\r\n            <container>\r\n              <div align-items-start`}="" classname='{`${classes[\"jumbotron-box\"]}' d-lg-flex="">\r\n                <div classname='{`${classes[\"slider-box\"]}`}'>\r\n                  <div classname="{classes.slider}">\r\n                    {/* TODO: slick slider? */}\r\n                    {primaryImage ?\r\n                      <div\r\n +="" classname="{classes.slide}" key="{primaryImage.ID" primaryimage.originalfilename}\r\n="">\r\n                        <imagewithfallback\r\n 445="" 445,="" alt="{primaryImage.Name}" height:="" imageresizerparamsbody="{{" kind='\"products\"\r\n' src="{primaryImage.OriginalFileName}\r\n" width:="" }}\r\n="">\r\n                      </imagewithfallback\r\n></div\r\n></div> : null}\r\n                  </div>\r\n                </div>\r\n                <div classname='{`${classes[\"description-box\"]}`}'>\r\n                  <div classname="{`${classes.description}`}">\r\n                    <div classname='{`${classes[\"header-description\"]}`}'>\r\n                      <row>\r\n                        \r\n                          <h1 classname="{`${classes.title}" mb-0`}="">{props.productVariant.Name}</h1>\r\n                          {props.productVariant.SerializableAttributes\r\n                            &amp;&amp; props.productVariant.SerializableAttributes[\"Model #\"]?.Value\r\n                            &amp;&amp; <span classname="{`${classes.subtitle}" text-uppercase`}="">\r\n                              {props.productVariant.SerializableAttributes[\"Model #\"].Value}\r\n                            </span>\r\n                          }\r\n                        \r\n                        \r\n                          <productcardactionbuttonwidget\r\n addtocartbtnvariant='\"success\"\r\n' buttonview='\"addToCart\"\r\n' outofstockbtnclasses='\"rounded\"\r\n' product="{props.productVariant}\r\n" quotecartbtnseparated="{true}\r\n" useoutofstockinsteadofviewdetails="{true}\r\n">\r\n                        \r\n                      </productcardactionbuttonwidget\r\n></row>\r\n                    </div>\r\n                    <div classname='{`${classes[\"description-wrap\"]}`}'>\r\n                      <div classname="{`${classes.holder}" d-flex="" justify-content-between`}="">\r\n                        <div classname='{`${classes[\"length-box\"]}`}'>\r\n                          <span classname='\"text' text-uppercase\"="">Cord Length</span>\r\n                          <ul classname='{`${classes[\"length-list\"]}' d-flex`}="" list-unstyled="">\r\n                            <li classname="{classes.item}">\r\n                              <a href='\"#\"'>6'</a>\r\n                            </li>\r\n                            <li classname="{classes.item}">\r\n                              <a href='\"#\"'>8'</a>\r\n                            </li>\r\n                            <li classname="{classes.item}">\r\n                              <a\r\n classname='\"active\"\r\n' href='\"#\"'>\r\n                                12'\r\n                              \r\n                            </a\r\n></li>\r\n                            <li classname="{classes.item}">\r\n                              <a href='\"#\"'>16'</a>\r\n                            </li>\r\n                            <li classname="{classes.item}">\r\n                              <a href='\"#\"'>20'</a>\r\n                            </li>\r\n                          </ul>\r\n                        </div>\r\n                        <productcardpricingwidget\r\n product="{props.productVariant}\r\n">\r\n                      </productcardpricingwidget\r\n></div>\r\n                      <div id='\"ProductOverviewDescriptionText\"'>\r\n                        <interweave allowattributes="{true}\r\n" allowelements="{true}" content="{props.productVariant.Description}\r\n">\r\n                      </interweave></div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              </container></section></main\r\n></div>\r\n            \r\n          </input\r\n></input\r\n></section>\r\n          {/* \"Text section\" */}\r\n          <section classname='{`${classes[\"section-text\"]}`}'>\r\n            <container>\r\n              <row align-items-md-center\"="" classname='\"flex-md-row-reverse'>\r\n                \r\n                  <img \"img02.png\",="" \"products\",="" alt='\"img02.png\"\r\n' null)}\r\n="" src="{corsImageLink(cefConfig,"/>\r\n                \r\n                \r\n                  <div classname='{`${classes[\"head-text\"]}`}'>\r\n                    <h1 classname="{classes.title}">\r\n                      <mark>M</mark> usic like you've never heard it\r\n                    </h1>\r\n                  </div>\r\n                  <p>\r\n                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore\r\n                    et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\r\n                    aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate.\r\n                  </p>\r\n                \r\n              </row>\r\n            </container>\r\n          </section>\r\n          {/* Studio section */}\r\n          <section \"img-04.png\",="" \"products\",="" `url(${corsimagelink(cefconfig,="" backgroundimage:="" classname='{classes[\"section-studio\"]}' null)})`="" style="{{" }}="">\r\n            <container>\r\n              <row>\r\n                \r\n                  <div \"img03.jpg\",="" \"products\",="" `url(${corsimagelink(cefconfig,="" backgroundimage:="" classname='{classes[\"studio-box\"]}' null)})`="" style="{{" }}="">\r\n                    <div align-items-center`}="" classname='{`${classes[\"position-box\"]}' d-flex="">\r\n                      <div classname='{`${classes[\"play-btn\"]}`}'>\r\n                        {/* eslint-disable-next-line jsx-a11y/anchor-has-content */}\r\n                        <a classname='\"icon-icon06\"\r\n' data-fancybox\r\n="" href='\"http://www.youtube.com/watch?v=_sI_Ps7JSEk\"' rel='\"noreferrer\"\r\n' target='{\"_blank\"}\r\n'></a>\r\n                      </div>\r\n                      <div classname="{`${classes.text}`}">\r\n                        <span classname="{`${classes.subtitle}`}">watch</span>\r\n                        <strong classname="{`${classes.title}`}">In the Studio</strong>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                \r\n              </row>\r\n            </container>\r\n          </section>\r\n          {/* Similar section */}\r\n          <section classname='{`${classes[\"section-similar\"]}`}'>\r\n            <container>\r\n              <row>\r\n                \r\n                  <header classname='{`${classes[\"head-text\"]}`}'>\r\n                    <h1 classname="{`${classes.title}`}">\r\n                      <mark>S</mark>imilar Headphones\r\n                    </h1>\r\n                  </header>\r\n                  <div classname="{`${classes.text}`}">\r\n                    <p>\r\n                      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut\r\n                      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris\r\n                      nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate.\r\n                    </p>\r\n                    <a\r\n 'attributesall':="" 'attributesany':="" 'audio|electronics_audio',="" 'categoriesall':="" 'categoriesany':="" 'category':="" 'priceranges':="" 'term':="" classname='{`${classes[\"arrow-link\"]}`}\r\n' href='\"#\"\r\n' null="" null,="" ui-sref-plus\r\n="" uisrp-is-catalog='\"true\"\r\n' uisrp-params='\"{' uisrp-state='\"searchCatalog.products.results.both\"\r\n' }\"="">\r\n                      Shop Full Collection<i classname='{`${classes[\"icon-icon05\"]}`}'></i>\r\n                    \r\n                  </a\r\n></div>\r\n                \r\n                {/* Placeholder content */}\r\n                \r\n                  <div classname='{`${classes[\"similar-box\"]}`}'>\r\n                    <row>\r\n                      \r\n                        <a\r\n href='\"#\"'>\r\n                          <div classname="{classes.card}">\r\n                            <div classname='{`${classes[\"card-img-top\"]}`}'>\r\n                              <img\r\n \"img05.png\",="" \"products\",="" alt='\"images' classname='{`${classes[\"shadow-img\"]}`}\r\n' description\"\r\n="" null)}\r\n="" src="{corsImageLink(cefConfig,">\r\n                            </img\r\n></div>\r\n                            <div classname='{`${classes[\"card-body\"]}`}'>\r\n                              <div align-items-center="" classname='\"card-header' d-flex="" justify-content-between\"="">\r\n                                <div classname="{classes.text}">\r\n                                  <h5 classname='{`${classes[\"card-title\"]}`}'>\r\n                                    <span>Doueppler</span>\r\n                                  </h5>\r\n                                  <span classname='{`${classes[\"similar-description\"]}`}'>DPD-20X74</span>\r\n                                </div>\r\n                                <div classname="{classes.arrow}">\r\n                                  <span classname='{`${classes[\"arrow-link\"]}`}'>\r\n                                    <i classname='{`${classes[\"icon-icon05\"]}`}'></i>\r\n                                  </span>\r\n                                </div>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        \r\n                      \r\n                      \r\n                        <a\r\n href='\"#\"'>\r\n                          <div classname="{classes.card}">\r\n                            <div classname='{`${classes[\"card-img-top\"]}`}'>\r\n                              <img\r\n \"img06.png\",="" \"products\",="" alt='\"images' description\"\r\n="" null)}\r\n="" src="{corsImageLink(cefConfig,">\r\n                            </img\r\n></div>\r\n                            <div classname='{`${classes[\"card-body\"]}`}'>\r\n                              <div align-items-center="" classname='\"card-header' d-flex="" id='\"udWalletCardHeader\"' justify-content-between\"="">\r\n                                <div classname="{classes.text}">\r\n                                  <h5 classname='{`${classes[\"card-title\"]}`}'>\r\n                                    <span>Susvara</span>\r\n                                  </h5>\r\n                                  <span classname='{`${classes[\"similar-description\"]}`}'>Strybridge®</span>\r\n                                </div>\r\n                                <div classname="{classes.arrow}">\r\n                                  <span classname='{`${classes[\"arrow-link\"]}`}'>\r\n                                    <i classname='{`${classes[\"icon-icon05\"]}`}'></i>\r\n                                  </span>\r\n                                </div>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        \r\n                      \r\n                    </a\r\n></a\r\n></row>\r\n                  </div>\r\n                \r\n              </row>\r\n            </container>\r\n          </section>\r\n        \r\n      </loadingwidget></walletmodel></boolean></loadingwidget></productmodel[]></loadingwidget></productmodel[]></div>\r\n    \r\n  );\r\n};\r\n","import _ from \"lodash\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { Button, Col, Container, Modal, Row } from \"react-bootstrap\";\r\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\r\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { ProductCardNameWidget, ProductCardPricingWidget } from \"src/Catalog/views/ProductCardWidgets\";\r\n\r\nexport const VariantsCustomProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element =&gt; {\r\n  const [ open, setOpen ] = useState&lt;{[id: number]: boolean}&gt;({});\r\n  const relatedProducts = _.filter(\r\n    props.productVariant?.ProductAssociations,\r\n    variant =&gt; variant.TypeKey === \"RELATED-PRODUCT\"\r\n  );\r\n  useEffect(() =&gt; {\r\n    setOpen(prev =&gt; {\r\n      const next = { ...prev };\r\n      _.forEach(relatedProducts, rp =&gt; {\r\n        next[rp.SlaveID] = false;\r\n      });\r\n      return next;\r\n    });\r\n  }, [ props.productVariant.ProductAssociations ]);\r\n  if (_.isEmpty(relatedProducts)) {\r\n    return null;\r\n  }\r\n  return (\r\n    <div>\r\n      {relatedProducts.map(rp =&gt; {\r\n        return <modal\r\n =="" key="{`productModal${rp.SlaveID}`}\r\n" onhide="{()" show="{open[rp.SlaveID]}\r\n"> {\r\n            setOpen(prev =&gt; {\r\n              const next = { ...prev };\r\n              next[rp.SlaveID] = false;\r\n              return next;\r\n            });\r\n          }}\r\n          fullscreen={true}\r\n          centered={true}&gt;\r\n          <modal.body>\r\n            <imagewithfallback\r\n =="" classname='\"pointer' imageresizerparamsbody="{{}}\r\n" img-fluid="" kind='\"products\"\r\n' onclick="{()" src="{rp.MasterPrimaryImageFileName}\r\n" w-100\"\r\n=""> {\r\n                setOpen(prev =&gt; {\r\n                  const next = { ...prev };\r\n                  next[rp.SlaveID] = false;\r\n                  return next;\r\n                });\r\n              }} /&gt;\r\n          </imagewithfallback\r\n></modal.body>\r\n        ;\r\n      })}\r\n      <container>\r\n        <row>\r\n          \r\n            <row>\r\n              {relatedProducts.map(rp =&gt; <col\r\n key="{`productModalOpener${rp.SlaveID}`}\r\n" sm="{6}" xs="{12}\r\n">\r\n                <imagewithfallback\r\n =="" classname='\"pointer' img-fluid="" kind='\"products\"\r\n' onclick="{()" src="{rp.MasterPrimaryImageFileName}\r\n" w-100\"\r\n=""> {\r\n                    setOpen(prev =&gt; {\r\n                      const next = { ...prev };\r\n                      next[rp.SlaveID] = true;\r\n                      return next;\r\n                    });\r\n                  }\r\n                  }\r\n                /&gt;\r\n              )}\r\n            </imagewithfallback\r\n></col\r\n></row>\r\n          \r\n          \r\n            <h2>\r\n              <productcardnamewidget\r\n productname="{props.productVariant.Name}\r\n" productseourl="{props.productVariant.SeoUrl}\r\n">\r\n            </productcardnamewidget\r\n></h2>\r\n            <productcardpricingwidget\r\n product="{props.productVariant}\r\n">\r\n            {relatedProducts.map(rp =&gt; <button\r\n key="{`relatedProductSwitcher${rp.SlaveID}`}\r\n" variant='\"none\"'>\r\n              <imagewithfallback\r\n 100,\r\n="" 100\r\n="" =="" \"both\",\r\n="" \"pad\",\r\n="" imageresizerparamsbody="{{\r\n" kind='\"products\"\r\n' maxheight:="" maxwidth:="" mode:="" onclick="{()" scale:="" src="{rp.MasterPrimaryImageFileName}\r\n" }}\r\n=""> props.updateProductVariant(rp.SlaveSeoUrl)}\r\n              /&gt;\r\n            )}\r\n            { props.productVariant.SerializableAttributes?.Size\r\n              &amp;&amp; \r\n                <row>\r\n                  {props.productVariant.SerializableAttributes.Size.Value.split(\",\")\r\n                    .map(size =&gt; {`M ${size}`})}\r\n                </row>\r\n              }\r\n            <productcardactionbuttonwidget product="{props.productVariant}">\r\n          \r\n        </productcardactionbuttonwidget></imagewithfallback\r\n></button\r\n></productcardpricingwidget\r\n></row>\r\n      </container>\r\n    </modal\r\n></div>\r\n  );\r\n};\r\n","import { ClothingProductDetailsTemplate } from \"src/Catalog/ClothingProductDetailsTemplate\";\r\nimport { DefaultProductDetailsTemplate } from \"src/Catalog/DefaultProductDetailsTemplate\";\r\nimport { RecentlyViewedProductDetailsTemplate } from \"src/Catalog/RecentlyViewedProductDetailsTemplate\";\r\nimport { StaticHeadphonesProductDetailsTemplate } from \"src/Catalog/StaticHeadphonesProductDetailsTemplate\";\r\nimport { VariantsCustomProductDetailsTemplate } from \"src/Catalog/VariantsCustomProductDetailsTemplate\";\r\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\r\nimport { Col, Container, Row } from \"react-bootstrap\";\r\n\r\nexport const TemplatePicker = (props: ProductDetailsTemplateProps): JSX.Element =&gt; {\r\n  switch (props.productVariant.SerializableAttributes?.Template?.Value) {\r\n    case \"StaticHeadphone\": {\r\n      return <staticheadphonesproductdetailstemplate {...props}="">;\r\n    }\r\n    case \"Clothing\": {\r\n      return (\r\n        &lt;&gt;\r\n          <container>\r\n            <row>\r\n              \r\n                {props.children}\r\n              \r\n            </row>\r\n          </container>\r\n          <clothingproductdetailstemplate {...props}="">\r\n        \r\n      );\r\n    }\r\n    case \"RecentlyViewed\": {\r\n      return (\r\n        &lt;&gt;\r\n          <container>\r\n            <row>\r\n              \r\n                {props.children}\r\n              \r\n            </row>\r\n          </container>\r\n          <recentlyviewedproductdetailstemplate {...props}="">\r\n        \r\n      );\r\n    }\r\n    case \"VariantsCustom\": {\r\n      return (\r\n        &lt;&gt;\r\n          <container>\r\n            <row>\r\n              \r\n                {props.children}\r\n              \r\n            </row>\r\n          </container>\r\n          <variantscustomproductdetailstemplate {...props}="">\r\n        \r\n      );\r\n    }\r\n    default: {\r\n      return (\r\n        &lt;&gt;\r\n          <container>\r\n            <row>\r\n              \r\n                {props.children}\r\n              \r\n            </row>\r\n          </container>\r\n          <defaultproductdetailstemplate {...props}="">\r\n        \r\n      );\r\n    }\r\n  }\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Breadcrumb, Col, Container, Row } from \"react-bootstrap\";\r\nimport { StringParam, useQueryParam } from \"use-query-params\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { CalculatedInventories, CalculatedPrices, IHttpPromiseCallbackArg, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ProductAssociationModel, ProductReviewInformationModel, ReviewModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport useEffectSkipFirst from \"src/_shared/customHooks/useEffectSkipFirst\";\r\nimport promiser from \"src/_shared/Promiser\";\r\nimport { TemplatePicker } from \"src/Catalog/TemplatePicker\";\r\n\r\nexport type ProductDetailsTemplateProps = {\r\n  productVariant: ProductModel;\r\n  masterProduct: ProductModel;\r\n  prices: CalculatedPrices;\r\n  inventory: CalculatedInventories;\r\n  reviewsForAverage: ReviewModel[];\r\n  listOfVariants: ProductAssociationModel[];\r\n  average: number;\r\n  updateProductVariant: (seoUrl: string) =&gt; void;\r\n  children?: React.ReactNode;\r\n}\r\n\r\nexport const ProductDetails = (): JSX.Element =&gt; {\r\n  const [ masterProduct, setMasterProduct ] = useState<productmodel>(null);\r\n  const [ productVariant, setProductVariant ] = useState<productmodel>(null);\r\n  const [ listOfVariants, setListOfVariants ] = useState<productassociationmodel[]>(null);\r\n  const [ reviewData, setReviewData ] = useState<productreviewinformationmodel>(null);\r\n  const cefConfig = useCefConfig() as CEFConfig;\r\n  const [ seoUrl, setSeoUrl ] = useState<string>(\"\");\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig) {\r\n      return;\r\n    }\r\n    readSeoUrl();\r\n  }, [ cefConfig, seoUrl ]);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n\r\n  const { t } = useTranslation();\r\n\r\n  useEffectSkipFirst(() =&gt; {\r\n    if (!cefConfig || !pricingFactory || !inventoryFactory) {\r\n      return;\r\n    }\r\n    // Ignore the initial setting of the seoUrl if the product is a master, but watch and reinitialize for others\r\n    initializeProduct();\r\n  }, [ seoUrl ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (\r\n      !cefConfig\r\n      || cefConfig.featureSet.pricing.enabled &amp;&amp; !pricingFactory\r\n      || cefConfig.featureSet.inventory.enabled &amp;&amp; !inventoryFactory\r\n    ) {\r\n      return;\r\n    }\r\n    initializeProduct();\r\n  }, [ cefConfig, inventoryFactory, pricingFactory ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (masterProduct &amp;&amp; masterProduct.ProductAssociations) {\r\n      const newListOfVariants: ProductAssociationModel[] = masterProduct.ProductAssociations\r\n        ? masterProduct.ProductAssociations.filter(\r\n          childProduct =&gt; childProduct.TypeKey === \"VARIANT-OF-MASTER\"\r\n        ).sort((a, b) =&gt; a.SortOrder - b.SortOrder)\r\n        : null;\r\n      const idsToUse = newListOfVariants.map(va0 =&gt; va0.SlaveID);\r\n      newListOfVariants.length &amp;&amp; cvApi.products.GetProductsByIDs({ IDs: idsToUse })\r\n        .then(r =&gt; {\r\n          if (r?.data === null) {\r\n            sortAndSetVariants(newListOfVariants);\r\n            return;\r\n          }\r\n          const matchingDictionary: { [ id: number]: ProductModel } = {};\r\n          r.data.forEach(va1 =&gt; {\r\n            matchingDictionary[va1.ID] = va1;\r\n          });\r\n          newListOfVariants.forEach(va2 =&gt; {\r\n            va2.SlaveSerializableAttributes = matchingDictionary[va2.SlaveID].SerializableAttributes;\r\n          });\r\n          sortAndSetVariants(newListOfVariants);\r\n        })\r\n        .catch(err =&gt; console.error(err));\r\n    }\r\n  }, [ masterProduct ]);\r\n\r\n  const sortAndSetVariants = (variantsList: ProductAssociationModel[]) =&gt; {\r\n    setListOfVariants(variantsList.sort((variantOne, variantTwo) =&gt; {\r\n      if (variantOne.SortOrder &amp;&amp; variantTwo.SortOrder) {\r\n        return variantOne.SortOrder - variantTwo.SortOrder;\r\n      }\r\n      return 0;\r\n    }));\r\n  };\r\n\r\n  const readSeoUrl = () =&gt; {\r\n    const pathname = window.location.pathname;\r\n    let val = pathname.replace(new RegExp(`^${cefConfig?.routes.productDetail.root}/`, \"igu\"), \"\");\r\n    if (val.indexOf(\"?\") !== -1) {\r\n      // Cut off any query string params\r\n      val = val.substring(0, val.indexOf(\"?\") - 1);\r\n    }\r\n    setSeoUrl(val);\r\n  };\r\n\r\n  const loadReviews = (product: ProductModel) =&gt; {\r\n    setRunning();\r\n    return new Promise((resolve, reject) =&gt; {\r\n      // Always resolve, reviews shouldn't prevent the page from loading\r\n      if (!cefConfig.featureSet.reviews.enabled) {\r\n        resolve(true);\r\n        finishRunning();\r\n        return;\r\n      }\r\n      const promiserKey = `cvApi.products.GetProductReview(${product.ID})`;\r\n      promiser.resolve(promiserKey, () =&gt; cvApi.products.GetProductReview(product.ID))\r\n        .then((res: IHttpPromiseCallbackArg<productreviewinformationmodel>) =&gt; {\r\n          if (res.data) {\r\n            setReviewData(res.data);\r\n          }\r\n          finishRunning();\r\n          resolve(true);\r\n        })\r\n        .catch((err: { Messages: any; }) =&gt; {\r\n          if (cefConfig?.debug) {\r\n            console.error(err, ` Failed to fetch reviews for product ${product.Name}`);\r\n          }\r\n          finishRunning(true, null, err?.Messages ?? [ \"Failed to fetch reviews for product\" ]);\r\n          resolve(false);\r\n        });\r\n    });\r\n  };\r\n\r\n  const initializeProduct = async () =&gt; {\r\n    setRunning();\r\n    try {\r\n      if (!seoUrl) {\r\n        throw new Error(\"No seoUrl present\");\r\n      }\r\n      let masterProductI: ProductModel = null;\r\n      let productToSet: ProductModel = null;\r\n      const urlProduct = await getProduct(seoUrl);\r\n      switch (urlProduct.TypeName.toLowerCase()) {\r\n        case \"variant master\": {\r\n          masterProductI = urlProduct;\r\n          // Get first variant and use it instead\r\n          if (!masterProductI.ProductAssociations || !masterProductI.ProductAssociations[0]) {\r\n            throw new Error(\"There are no variants for this master product\");\r\n          }\r\n          const firstVariantSeoUrl = masterProductI.ProductAssociations[0].SlaveSeoUrl;\r\n          const firstVariant = await getProduct(firstVariantSeoUrl);\r\n          window.history.pushState({}, null, `${cefConfig.routes.productDetail.root}/${firstVariantSeoUrl}`);\r\n          readSeoUrl();\r\n          productToSet = firstVariant;\r\n          break;\r\n        }\r\n        case \"variant\": {\r\n          if (!urlProduct.ProductsAssociatedWith || !urlProduct.ProductsAssociatedWith[0]) {\r\n            throw new Error(\"There are no variants for this product\");\r\n          }\r\n          masterProductI = await getProduct(urlProduct.ProductsAssociatedWith[0].MasterSeoUrl, true);\r\n          productToSet = urlProduct;\r\n          break;\r\n        }\r\n        default: {\r\n          masterProductI = urlProduct;\r\n          productToSet = urlProduct;\r\n        }\r\n      }\r\n      await loadReviews(productToSet);\r\n      if (masterProductI) {\r\n        setMasterProduct(masterProductI);\r\n      }\r\n      setProductVariant(productToSet);\r\n      finishRunning();\r\n    } catch (err: any) {\r\n      if (cefConfig?.debug) {\r\n        console.error(err);\r\n      }\r\n      finishRunning(true, err.Message ?? err.Messages ? err.Messages[0] : \"Failed to load product\");\r\n    }\r\n  };\r\n\r\n  const updateProductVariant = (variantSeoUrl: string) =&gt; {\r\n    if (variantSeoUrl === seoUrl) {\r\n      // Do Nothing\r\n      return;\r\n    }\r\n    setRunning();\r\n    window.history.pushState({}, null, `${cefConfig.routes.productDetail.root}/${variantSeoUrl}`);\r\n    readSeoUrl();\r\n  };\r\n\r\n  async function getProduct(seoUrlI: string, isMaster: boolean = false) {\r\n    try {\r\n      const promiserKey1 = `CheckProductExistsBySeoUrl({ SeoUrl: ${seoUrlI} })`;\r\n      const productID = (await promiser\r\n        .resolve(promiserKey1, () =&gt; cvApi.products.CheckProductExistsBySeoUrl({ SeoUrl: seoUrlI }))).data;\r\n      const promiserKey2 = `GetProductByID(${productID})`;\r\n      let productData = (await promiser\r\n        .resolve(promiserKey2, () =&gt; cvApi.products.GetProductByID(productID))).data as ProductModel;\r\n      if (cefConfig.featureSet.inventory.enabled &amp;&amp; inventoryFactory) {\r\n        productData = await inventoryFactory.factoryAssign(productData);\r\n      }\r\n      if (cefConfig.featureSet.pricing.enabled &amp;&amp; pricingFactory &amp;&amp; !isMaster) {\r\n        console.debug('About to get pricing for: ', productID);\r\n        productData = await pricingFactory.factoryAssign(productData);\r\n      }\r\n      return productData;\r\n    } catch (err) {\r\n      if (cefConfig?.debug) {\r\n        console.error(err);\r\n      }\r\n      finishRunning(true, \"Failed to get product\");\r\n      return null;\r\n    }\r\n  }\r\n\r\n  const getProductView = (): JSX.Element =&gt; {\r\n    const pricingEnabled = cefConfig?.featureSet?.pricing?.enabled;\r\n    const inventoryEnabled = cefConfig?.featureSet?.inventory?.enabled;\r\n    if (\r\n      viewState.running\r\n      || !productVariant\r\n      || !cefConfig\r\n      || pricingEnabled &amp;&amp; !productVariant.readPrices\r\n      || inventoryEnabled &amp;&amp; !productVariant.readInventory\r\n    ) {\r\n      return (\r\n        <section>\r\n          <div classname='\"container\"'>\r\n            <loadingwidget>\r\n          </loadingwidget></div>\r\n        </section>\r\n      );\r\n    }\r\n\r\n    let prices: CalculatedPrices = null;\r\n    let inventory: CalculatedInventories = null;\r\n    if (pricingEnabled &amp;&amp; productVariant.readPrices) {\r\n      prices = productVariant.readPrices();\r\n    }\r\n\r\n    if (pricingEnabled &amp;&amp; inventoryEnabled &amp;&amp; productVariant.readInventory\r\n    ) {\r\n      inventory = productVariant.readInventory();\r\n    }\r\n\r\n    const approvedReviews = reviewData?.Reviews?.filter(r =&gt; r.Approved).sort(\r\n      (a, b) =&gt; a.SortOrder - b.SortOrder\r\n    );\r\n    const reviewsForAverage = approvedReviews?.filter(ar =&gt; ar.Value &gt; 0);\r\n    const average\r\n      = reviewsForAverage\r\n        ?.map((ar): number =&gt; ar.Value)\r\n        .reduce((a: number, b: number): number =&gt; a + b, 0) / reviewsForAverage?.length || 0;\r\n    const templateProps: ProductDetailsTemplateProps = {\r\n      average,\r\n      inventory,\r\n      listOfVariants,\r\n      masterProduct,\r\n      prices,\r\n      productVariant,\r\n      reviewsForAverage,\r\n      updateProductVariant\r\n    };\r\n    const Breadcrumbs = () =&gt; <breadcrumb \"p-2="" classname='\"mb-2\"' classname:="" listprops="{{" mb-0\"="" }}="">\r\n      <breadcrumb.item classname='\"breadcrumbs-title\"' href='\"/\"'>\r\n        {t(\"ui.storefront.common.Home\")}\r\n      </breadcrumb.item>\r\n      <breadcrumb.item cefconfig?.routes?.catalog?.root)}="" href="{corsLink(cefConfig,">\r\n        {t(\"ui.storefront.product.detail.productDetails.Catalog\")}\r\n      </breadcrumb.item>\r\n      <breadcrumb.item>\r\n        <span>{productVariant ? productVariant.Name : null}</span>\r\n      </breadcrumb.item>\r\n    </breadcrumb>;\r\n    return <templatepicker {...templateprops}=""><breadcrumbs></breadcrumbs></templatepicker>;\r\n  };\r\n\r\n  return (\r\n    &lt;&gt;\r\n      {getProductView()}\r\n    \r\n  );\r\n};\r\n\r\nexport default ProductDetails;\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Button, Card, Col, Form } from \"react-bootstrap\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface IAddressBookCardProps {\r\n  accountContactID?: number;\r\n  accountContacts: Array<accountcontactmodel>;\r\n  type: \"Shipping\" | \"Billing\" | \"Other\";\r\n  showDropdown?: boolean;\r\n  showDeleteAddressConfirmationModalID: number;\r\n  setShowDeleteAddressConfirmationModalID: Function;\r\n  handleDefaultAddressChanged?: Function;\r\n  handleEditAddressClicked?: Function;\r\n  deleteAddress?: Function;\r\n  markAccountContact?: Function;\r\n}\r\n\r\nexport const AddressBookCard = (props: IAddressBookCardProps): JSX.Element =&gt; {\r\n  const [ selectedAccountContact, setSelectedAccountContact ]\r\n    = useState<accountcontactmodel>(null);\r\n  const {\r\n    accountContactID,\r\n    accountContacts,\r\n    type,\r\n    showDropdown,\r\n    handleEditAddressClicked,\r\n    showDeleteAddressConfirmationModalID,\r\n    handleDefaultAddressChanged,\r\n    setShowDeleteAddressConfirmationModalID,\r\n    deleteAddress\r\n  } = props;\r\n  const { ID, Slave } = selectedAccountContact ?? {};\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!accountContacts) {\r\n      return;\r\n    }\r\n    let selectedContact = null;\r\n    if (accountContactID) {\r\n      selectedContact = accountContacts.find(\r\n        (accountContact: AccountContactModel) =&gt; accountContact.ID === accountContactID\r\n      );\r\n      setSelectedAccountContact(selectedContact);\r\n      return;\r\n    }\r\n    const findKey = type === \"Billing\" ? \"IsBilling\" : \"IsPrimary\";\r\n    selectedContact = accountContacts.find((contact: AccountContactModel) =&gt; contact[findKey]);\r\n    setSelectedAccountContact(selectedContact);\r\n  }, [ accountContacts ]);\r\n\r\n  const getAccountContact = (id: number) =&gt; accountContacts.find(\r\n    (accountContact: AccountContactModel) =&gt; accountContact.ID === id\r\n  );\r\n\r\n  return (\r\n    \r\n      <card classname='\"h-100\"'>\r\n        <card.header classname='\"text-uppercase\"' id="{`DefaultLabel_${type}`}">\r\n          {type === \"Billing\"\r\n            ? \"Default Billing\"\r\n            : type === \"Shipping\"\r\n              ? \"Default Shipping\"\r\n              : Slave?.AddressKey}\r\n        </card.header>\r\n        {showDropdown\r\n          ? <card.body classname='\"p-2\"'>\r\n            <form.select\r\n -1}\r\n="" =="" ??="" aria-label='\"sort\"\r\n' classname='\"form-control' d-inline-block\"\r\n="" data-sid="{`menuItem_${type}`}\r\n" onchange="{e" value="{selectedAccountContact?.ID"> {\r\n                const newAccountContactID = parseInt(e.target.value, 10);\r\n                handleDefaultAddressChanged(\r\n                  newAccountContactID,\r\n                  type === \"Billing\"\r\n                );\r\n                setSelectedAccountContact(\r\n                  getAccountContact(newAccountContactID)\r\n                );\r\n              }}&gt;\r\n              <option disabled="{true}" value="{-1}">\r\n                Please select a {type} address\r\n              </option>\r\n              {accountContacts\r\n                &amp;&amp; accountContacts.map((ac: AccountContactModel): JSX.Element =&gt; <option\r\n ac.customkey\r\n="" ac.slave.address.customkey\r\n="" ac.slave.address.street1\r\n="" ac.slave.customkey\r\n="" key="{ac.ID}\r\n" label="{\r\n" value="{ac.ID}" ||="" }\r\n="">\r\n                  {ac.Slave.Address.CustomKey\r\n                        || ac.CustomKey\r\n                        || ac.Slave.CustomKey\r\n                        || ac.Slave.Address.Street1}\r\n                )}\r\n            \r\n          </option\r\n></form.select\r\n></card.body>\r\n          : null}\r\n        {selectedAccountContact\r\n          ? &lt;&gt;\r\n            <card.body classname='\"p-2\"'>\r\n              <addressblock\r\n address="{Slave.Address}\r\n" contact="{Slave}\r\n">\r\n            </addressblock\r\n></card.body>\r\n            <card.footer classname='\"btn-group' p-0\"="">\r\n              {handleEditAddressClicked\r\n                &amp;&amp; <button\r\n =="" classname='\"text-decoration-none' onclick="{()" underline-hover\"\r\n="" variant='\"link\"\r\n'> handleEditAddressClicked(selectedAccountContact)\r\n                  }&gt;\r\n                  <i classname='\"fal' fa-lg\"="" fa-pencil-alt="">{\" \"}\r\n                  <span>{t(\"ui.storefront.common.Edit\")}</span>\r\n                \r\n              }\r\n              {deleteAddress\r\n                &amp;&amp; <button\r\n =="" classname='\"text-danger' onclick="{()" text-decoration-none="" underline-hover\"\r\n="" variant='\"link\"\r\n'> setShowDeleteAddressConfirmationModalID(ID)}&gt;\r\n                  <i classname='\"fal' fa-lg\"="" fa-trash="">{\" \"}\r\n                  <span>{t(\"ui.storefront.common.Delete\")}</span>\r\n                \r\n              }\r\n              <confirmationmodal\r\n =="=" address?\"\r\n="" address\"\r\n="" confirmbtnlabel='\"Delete' id}\r\n="" onconfirm="{()" really="" remove="" show="{showDeleteAddressConfirmationModalID" this="" title='\"Do' to="" want="" you=""> deleteAddress(ID)}\r\n                onCancel={() =&gt; setShowDeleteAddressConfirmationModalID(null)}&gt;\r\n                <addressblock\r\n address="{Slave.Address}\r\n" contact="{Slave}\r\n">\r\n              \r\n            </addressblock\r\n></confirmationmodal\r\n></i></button\r\n></i></button\r\n></card.footer><i classname='\"fal' fa-lg\"="" fa-pencil-alt=""><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n          \r\n          : null}\r\n      </i></i></card><i classname='\"fal' fa-lg\"="" fa-pencil-alt=""><i classname='\"fal' fa-lg\"="" fa-trash="">\r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Card, Col, Row } from \"react-bootstrap\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { NewAddressModal } from \"src/Dashboard/AddressBook/NewAddressModal\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { AddressBookCard } from \"src/Dashboard/AddressBook/AddressBookCard\";\r\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport const AddressBook = (): JSX.Element =&gt; {\r\n  const [ hasDefaultBilling, setHasDefaultBilling ] = useState<boolean>(false);\r\n  const [ hasDefaultShipping, setHasDefaultShipping ] = useState<boolean>(false);\r\n  const [ showAddAddressModal, setShowAddAddressModal ] = useState(false);\r\n  const [ accountContactToEdit, setAccountContactToEdit ] = useState<accountcontactmodel>(null);\r\n  const [ showDeleteAddressConfirmationModalID, setShowDeleteAddressConfirmationModalID ]\r\n    = useState(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const addressBook = useAddressBook();\r\n  const addressBookFactory = useAddressBookFactory();\r\n  const cefConfig = useCefConfig();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!addressBook?.length &amp;&amp; hasDefaultBilling &amp;&amp; hasDefaultShipping) {\r\n      return;\r\n    }\r\n    const defaultBilling = addressBook?.find(\r\n      (contact: AccountContactModel) =&gt; contact.IsBilling\r\n    );\r\n    const defaultShipping = addressBook?.find(\r\n      (contact: AccountContactModel) =&gt; contact.IsPrimary\r\n    );\r\n    setHasDefaultBilling(Boolean(defaultBilling));\r\n    setHasDefaultShipping(Boolean(defaultShipping));\r\n  }, [ addressBook ]);\r\n\r\n  function markAccountContactAsPrimaryShipping(contactID: number): void {\r\n    setRunning();\r\n    addressBookFactory.markAsDefaultShipping(contactID)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function markAccountContactAsDefaultBilling(contactID: number): void {\r\n    setRunning();\r\n    addressBookFactory.markAsDefaultBilling(contactID)\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function editExistingAddress(userAddressData: AccountContactModel): void {\r\n    const fieldsToUpdate = [\r\n      \"CustomKey\",\r\n      \"Name\",\r\n      \"Slave.Fax1\",\r\n      \"Slave.Email1\",\r\n      \"Slave.FirstName\",\r\n      \"Slave.LastName\",\r\n      \"Slave.FullName\",\r\n      \"Slave.Phone1\",\r\n      \"Slave.Phone2\",\r\n      \"Slave.Phone3\",\r\n      \"Slave.Address.City\",\r\n      \"Slave.Address.Company\",\r\n      \"Slave.Address.Country\",\r\n      \"Slave.Address.CountryCode\",\r\n      \"Slave.Address.CountryKey\",\r\n      \"Slave.Address.CountryName\",\r\n      \"Slave.Address.CustomKey\",\r\n      \"Slave.Address.PostalCode\",\r\n      \"Slave.Address.Region\",\r\n      \"Slave.Address.RegionCode\",\r\n      \"Slave.Address.RegionID\",\r\n      \"Slave.Address.RegionKey\",\r\n      \"Slave.Address.RegionName\",\r\n      \"Slave.Address.Street1\",\r\n      \"Slave.Address.Street2\",\r\n      \"Slave.Address.Street3\"\r\n    ];\r\n    const accountContactToEditCopy = { ...accountContactToEdit };\r\n\r\n    fieldsToUpdate.forEach(field =&gt; {\r\n      const accessors = field.split(\".\");\r\n      const deepValue = accessors.reduce((accu, accessor) =&gt; accu &amp;&amp; accu[accessor] || null, userAddressData);\r\n      accessors.reduce((accu, accessor, i) =&gt; {\r\n        const isLast = accessors.length === i + 1;\r\n        accu[accessor] = isLast ? deepValue : accu[accessor];\r\n        return accu[accessor];\r\n      }, accountContactToEditCopy);\r\n    });\r\n\r\n    setRunning();\r\n    addressBookFactory.updateExistingAddress(accountContactToEditCopy)\r\n      .then(() =&gt; {\r\n        setShowAddAddressModal(false);\r\n        setAccountContactToEdit(null);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setShowAddAddressModal(false);\r\n        setAccountContactToEdit(null);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function deleteAddress(ID: number): void {\r\n    setRunning();\r\n    addressBookFactory.deleteAddress(ID)\r\n      .then(() =&gt; {\r\n        setShowDeleteAddressConfirmationModalID(null);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setShowDeleteAddressConfirmationModalID(null);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  const handleEditAddressClicked = (accountContact: AccountContactModel) =&gt; {\r\n    setShowAddAddressModal(true);\r\n    setAccountContactToEdit({ ...accountContact });\r\n  };\r\n\r\n  const handleDefaultAddressChanged = (accountContactID: number, isBilling: boolean) =&gt; {\r\n    if (isBilling) {\r\n      markAccountContactAsDefaultBilling(accountContactID);\r\n      return;\r\n    }\r\n    markAccountContactAsPrimaryShipping(accountContactID);\r\n  };\r\n\r\n  if (addressBook === null || !cefConfig) {\r\n    return <loadingwidget>;\r\n  }\r\n\r\n  const canEditAddresses = cefConfig?.featureSet?.addressBook?.dashboardCanAddAddresses;\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <section classname='\"section-address\"'>\r\n          <div>\r\n            <div classname='\"section-title\"'>\r\n              <h1 classname='\"title\"' id='\"udAddressBookTitleText\"'>{t(\"ui.storefront.common.AddressBook\")}</h1>\r\n            </div>\r\n            <row>\r\n              { !canEditAddresses\r\n                &amp;&amp; \r\n                  <div alert-info\"="" classname='\"alert'>\r\n                    {/*\r\n                    *** This does not work like a normal HREF (which we need) ***\r\n                    <link\r\n as="" classname='\"alert-info-link\"\r\n' string}="" title='{t(\"ui.storefront.common.ContactUs\")' to='\"/Contact-Us\"\r\n'>\r\n                      {t(\"ui.storefront.userDashboard2.controls.addressBook2.ContactSupportForAddressChanges\")}\r\n                     */}\r\n                    <a as="" classname='\"alert-info-link\"\r\n' href='\"/Contact-Us\"\r\n' string}="" title='{t(\"ui.storefront.common.ContactUs\")'>\r\n                      {t(\"ui.storefront.userDashboard2.controls.addressBook2.ContactSupportForAddressChanges\")}\r\n                    </a>\r\n                  </link\r\n></div>\r\n                \r\n              }\r\n              \r\n                <section classname='\"section-addresses\"'>\r\n                  <row>\r\n                    { canEditAddresses\r\n                      &amp;&amp; \r\n                        <card classname='\"h-100\"'>\r\n                          <card.header id='\"AddAddressText\"'>\r\n                            {t(\"ui.storefront.checkout.splitShipping.addressModal.AddAddress\")}\r\n                          </card.header>\r\n                          <card.body classname='\"p-2\"'>\r\n                            <button\r\n =="" classname='\"p-3' h-100="" id='\"btnAddAddress\"\r\n' name='\"btnAddAddress\"\r\n' onclick="{()" variant='\"outline-secondary\"\r\n' w-100\"\r\n=""> setShowAddAddressModal(true)}&gt;\r\n                              <svg\r\n 0="" 30="" 31\"\r\n="" height='\"31px\"\r\n' version='\"1.1\"\r\n' viewbox='\"0' width='\"30px\"\r\n' xmlns='\"http://www.w3.org/2000/svg\"'>\r\n                                <g fill='\"none\"\r\n' fillrule='\"evenodd\"' stroke='\"none\"\r\n' strokewidth='\"1\"\r\n'>\r\n                                  <g -260.000000)\"="" fill='\"#B6B6B6\"' transform='\"translate(-847.000000,'>\r\n                                    {/* eslint-disable-next-line max-len */}\r\n                                    <path 847,267.090582="" 847,275.370117="" 847.697674,275.370117="" 847.697674,283.273373="" 853.720465,290.370117="" 853.860465,275.762675="" 854.096744,261.067792="" 854.26,275.02128="" 854.28186,275.01942="" 854.325581,275.718954="" 861.643721,267.513838="" 861.651163,267.695699="" 861.805581,283.398954="" 861.956279,267.336164="" 862,260.370117="" 862,261.067792="" 862,283.398954="" 862,289.672443="" 862,290.370117="" 862.170698,267.308722="" 862.348837,283.044536="" 862.352558,283.238954="" 869.674419,275.02128="" 869.868837,275.017559="" 869.903256,289.672443="" 870.028837,275.370117="" 870.028837,275.564536="" 870.279535,260.370117="" 876.302326,267.466861="" 876.302326,275.370117="" 877,275.370117="" 877,283.649652="" c847,283.649652="" c847.697674,267.466861="" c853.720465,260.370117="" c853.794884,275.065001="" c854.096744,289.672443="" c854.303721,275.01942="" c861.647442,283.238954="" c861.776744,267.357559="" c862.194419,283.398954="" c862.35814,267.47942="" c869.868837,275.722675="" c869.903256,261.067792="" c870.028837,275.175699="" c870.279535,290.370117="" c876.302326,283.273373="" c877,267.090582="" d='\"M862,260.370117' l854.325581,275.02128="" l861.651163,275.02128="" l861.651163,275.718954="" l861.651163,283.044536="" l861.956279,267.336164="" l862.348837,267.695699="" l862.348837,275.02128="" l862.348837,275.718954="" l869.674419,275.718954="" m861.956279,267.336164="" m862,261.067792="" z="" z\"=""></path>\r\n                                  </g>\r\n                                </g>\r\n                              \r\n                              <br/>\r\n                              <span>\r\n                                {t(\"ui.storefront.userDashboard2.controls.addressBook2.AddAddress\")}\r\n                              </span>\r\n                              <br/>\r\n                            \r\n                            <newaddressmodal\r\n =="" onconfirm="{addressData"> {\r\n                                if (accountContactToEdit) {\r\n                                  editExistingAddress(addressData);\r\n                                  return;\r\n                                }\r\n                                setRunning();\r\n                                addressBookFactory\r\n                                  .createNewAddress(addressData)\r\n                                  .then(() =&gt; {\r\n                                    setShowAddAddressModal(false);\r\n                                    finishRunning();\r\n                                  })\r\n                                  .catch(err =&gt; {\r\n                                    setShowAddAddressModal(false);\r\n                                    finishRunning(true, err);\r\n                                  });\r\n                              }}\r\n                              onCancel={() =&gt; {\r\n                                setShowAddAddressModal(false);\r\n                                setAccountContactToEdit(null);\r\n                              }}\r\n                              show={showAddAddressModal}\r\n                              accountContact={accountContactToEdit}\r\n                              parentRunning={viewState.running}\r\n                              idSuffix={accountContactToEdit?.Slave?.ID.toString()}\r\n                            /&gt;\r\n                          </newaddressmodal\r\n></svg\r\n></button\r\n></card.body>\r\n                        </card>\r\n                      \r\n                    }\r\n                    <addressbookcard\r\n :="" ?="" accountcontacts="{addressBook}\r\n" data-sid='\"udAddressBookDefaultBilling\"\r\n' deleteaddress="{canEditAddresses" handledefaultaddresschanged="{handleDefaultAddressChanged}\r\n" handleeditaddressclicked="{canEditAddresses" markaccountcontact="{markAccountContactAsDefaultBilling}\r\n" null}\r\n="" setshowdeleteaddressconfirmationmodalid="{\r\n" setshowdeleteaddressconfirmationmodalid\r\n="" showdeleteaddressconfirmationmodalid="{showDeleteAddressConfirmationModalID}\r\n" showdropdown="{true}\r\n" type='\"Billing\"\r\n' }\r\n="">\r\n                    <addressbookcard\r\n :="" ?="" accountcontacts="{addressBook}\r\n" data-sid='\"udAddressBookDefaultShipping\"\r\n' deleteaddress="{canEditAddresses" handledefaultaddresschanged="{handleDefaultAddressChanged}\r\n" handleeditaddressclicked="{canEditAddresses" markaccountcontact="{markAccountContactAsDefaultBilling}\r\n" null}\r\n="" setshowdeleteaddressconfirmationmodalid="{\r\n" setshowdeleteaddressconfirmationmodalid\r\n="" showdeleteaddressconfirmationmodalid="{showDeleteAddressConfirmationModalID}\r\n" showdropdown="{true}\r\n" type='\"Shipping\"\r\n' }\r\n="">\r\n                    {!hasDefaultBilling\r\n                      &amp;&amp; \r\n                        <alert variant='\"danger\"'>\r\n                          <i classname='\"fal' fa-exclamation-triangle\"="">\r\n                           \r\n                          <b>{(!hasDefaultBilling\r\n                            &amp;&amp; t(\"ui.storefront.userDashboard2.controls.addressBook2.YouDontHaveABillingAddress\"))}\r\n                          </b>\r\n                           \r\n                          <span>\r\n                            {hasDefaultBilling\r\n                              ? t(\"ui.storefront.userDashboard2.controls.addressBook2.PleaseClickSetAsDefault\")\r\n                              : t(\"ui.storefront.userDashboard2.controls.addressBook2.PleaseClickSetAsBilling\")}\r\n                          </span>\r\n                           \r\n                          <i classname='\"fal' fa-dollar-sign\"="">\r\n                           \r\n                          <span>\r\n                            {t(\r\n                              // eslint-disable-next-line max-len\r\n                              \"ui.storefront.userDashboard2.controls.addressBook2.OnAnAddressBelowOrAddAddressFirstAndThenSelectOneNote\"\r\n                            )}\r\n                          </span>\r\n                        </i></i></alert><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n                      \r\n                    }\r\n                    {!hasDefaultShipping\r\n                      &amp;&amp; \r\n                        <alert variant='\"danger\"'>\r\n                          <i classname='\"fal' fa-exclamation-triangle\"="">\r\n                           \r\n                          <b>\r\n                            {!hasDefaultShipping\r\n                              &amp;&amp; t(\r\n                                \"ui.storefront.userDashboard2.controls.addressBook2.YouDontHaveADefaultShippingAddress\"\r\n                              )}\r\n                          </b>\r\n                           \r\n                          <span>\r\n                            {!hasDefaultShipping\r\n                              &amp;&amp; t(\"ui.storefront.userDashboard2.controls.addressBook2.PleaseClickSetAsDefault\")}\r\n                          </span>\r\n                           \r\n                          <i classname='\"fal' fa-dollar-sign\"="">\r\n                           \r\n                          <span>\r\n                            {t(\r\n                              // eslint-disable-next-line max-len\r\n                              \"ui.storefront.userDashboard2.controls.addressBook2.OnAnAddressBelowOrAddAddressFirstAndThenSelectOneNote\"\r\n                            )}\r\n                          </span>\r\n                        </i></i></alert><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n                      \r\n                    }\r\n                    {addressBook\r\n                      &amp;&amp; addressBook.map((accountContact: AccountContactModel) =&gt; <addressbookcard\r\n :="" ?="" accountcontactid="{accountContact.ID}\r\n" accountcontacts="{addressBook}\r\n" deleteaddress="{canEditAddresses" handleeditaddressclicked="{canEditAddresses" key="{accountContact.ID}\r\n" null}\r\n="" setshowdeleteaddressconfirmationmodalid="{\r\n" setshowdeleteaddressconfirmationmodalid\r\n="" showdeleteaddressconfirmationmodalid="{\r\n" showdeleteaddressconfirmationmodalid\r\n="" type='\"Other\"\r\n' }\r\n="">)}\r\n                  </addressbookcard\r\n></i></i></i></i></addressbookcard\r\n></addressbookcard\r\n></row><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n                </i></i></i></i></section><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n              \r\n            </i></i></i></i></row><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n            <errorview error="{viewState.errorMessage}">\r\n          </errorview></i></i></i></i></div><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n        </i></i></i></i></section><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n      \r\n    </i></i></i></i></row><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"=""><i classname='\"fal' fa-exclamation-triangle\"=""><i classname='\"fal' fa-dollar-sign\"="">\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport {\r\n  PasswordInputFormGroup,\r\n  TextInputFormGroup\r\n} from \"src/_shared/forms/formGroups\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\r\n\r\ninterface IMyProfileDataEntry {\r\n  txtProfileDisplayName: string;\r\n  txtProfileEmail1: string;\r\n  txtProfileFax1: string;\r\n  txtProfileFirstName: string;\r\n  txtProfileLastName: string;\r\n  txtProfilePasswordCurrent: string;\r\n  txtProfilePasswordNew: string;\r\n  txtProfilePhone1: string;\r\n}\r\n\r\nexport const MyProfile = (): JSX.Element =&gt; {\r\n  const [ userName, setUserName ] = useState<string>(\"\");\r\n  const [ showSavedMessage, setShowSavedMessage ] = useState(false);\r\n  // const [ currentUser, setCurrentUser ] = useState<usermodel>(null);\r\n  const currentUser = useCurrentUser();\r\n  const authFactory = useAuthFactory();\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    setValue,\r\n    formState\r\n  } = useForm<imyprofiledataentry>({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() =&gt; {\r\n    if (currentUser.ID &gt; 0) {\r\n      const { DisplayName, UserName } = currentUser;\r\n      const { FirstName, LastName, FullName, Email1, Phone1, Fax1 }\r\n        = currentUser.Contact;\r\n      if (FirstName &amp;&amp; LastName) {\r\n        setValue(\"txtProfileFirstName\", FirstName);\r\n        setValue(\"txtProfileLastName\", LastName);\r\n      } else {\r\n        const nameSegments = FullName.split(\" \");\r\n        setValue(\"txtProfileFirstName\", nameSegments[0]);\r\n        setValue(\"txtProfileLastName\", nameSegments[nameSegments.length - 1]);\r\n      }\r\n      setValue(\"txtProfileEmail1\", Email1);\r\n      setValue(\"txtProfilePhone1\", Phone1);\r\n      setValue(\"txtProfileFax1\", Fax1);\r\n      setValue(\"txtProfileDisplayName\", DisplayName);\r\n      setUserName(UserName);\r\n    }\r\n  }, [ currentUser ]);\r\n\r\n  const handleSaveButtonClicked: SubmitHandler<imyprofiledataentry> = (data): void =&gt; {\r\n    setRunning();\r\n    const {\r\n      txtProfileDisplayName,\r\n      txtProfileEmail1,\r\n      txtProfileFax1,\r\n      txtProfileFirstName,\r\n      txtProfileLastName,\r\n      txtProfilePasswordCurrent,\r\n      txtProfilePasswordNew,\r\n      txtProfilePhone1\r\n    } = data;\r\n    cvApi.authentication\r\n      .ValidatePassword({\r\n        UserName: userName,\r\n        Password: txtProfilePasswordCurrent\r\n      })\r\n      .then(result =&gt; {\r\n        if (!result?.data?.ActionSucceeded) {\r\n          throw new Error(\"Password invalid\");\r\n        }\r\n        if (txtProfilePasswordNew.length) {\r\n          return cvApi.authentication.ChangePassword({\r\n            UserName: userName,\r\n            Password: txtProfilePasswordCurrent,\r\n            NewPassword: txtProfilePasswordNew\r\n          });\r\n        }\r\n        return result;\r\n      })\r\n      .then(_res =&gt; authFactory.updateCurrentUser({\r\n        ...currentUser,\r\n        DisplayName: txtProfileDisplayName,\r\n        Contact: {\r\n          ...currentUser.Contact,\r\n          Email1: txtProfileEmail1,\r\n          Fax1: txtProfileFax1,\r\n          FirstName: txtProfileFirstName,\r\n          LastName: txtProfileLastName,\r\n          Phone1: txtProfilePhone1\r\n        }\r\n      }))\r\n      .then(() =&gt; {\r\n        setShowSavedMessage(true);\r\n        setValue(\"txtProfilePasswordCurrent\", \"\");\r\n        setValue(\"txtProfilePasswordNew\", \"\");\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  return (\r\n    <row as="{Form}" classname='\"position-relative\"'>\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      \r\n        <h1>{t(\"ui.storefront.userDashboard2.userDashboard.MyProfile\")}</h1>\r\n      \r\n      \r\n        <row>\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-6' formidentifier='\"txtProfileFirstName\"\r\n' labelkey='\"ui.storefront.common.FirstName\"\r\n' maxlength="{128}\r\n" mb-2\"\r\n="" placeholderkey='\"ui.storefront.common.FirstName\"\r\n' register="{register}\r\n" required="{true}\r\n">\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-6' formidentifier='\"txtProfileLastName\"\r\n' labelkey='\"ui.storefront.common.LastName\"\r\n' maxlength="{128}\r\n" mb-2\"\r\n="" placeholderkey='\"ui.storefront.common.LastName\"\r\n' register="{register}\r\n" required="{true}\r\n">\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12' formidentifier='\"txtProfileDisplayName\"\r\n' labelkey='\"ui.storefront.common.DisplayName\"\r\n' maxlength="{128}\r\n" mb-2\"\r\n="" placeholderkey='\"ui.storefront.common.DisplayName\"\r\n' register="{register}\r\n">\r\n        </textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></row>\r\n      \r\n      \r\n        <row>\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-6' formidentifier='\"txtProfilePhone1\"\r\n' isphone="{true}\r\n" labelkey='\"ui.storefront.common.Phone\"\r\n' mb-2\"\r\n="" register="{register}\r\n">\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-6\"\r\n' formidentifier='\"txtProfileFax1\"\r\n' isfax="{true}\r\n" labelkey='\"ui.storefront.common.Fax\"\r\n' register="{register}\r\n">\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12\"\r\n' formidentifier='\"txtProfileEmail1\"\r\n' isemail="{true}\r\n" labelkey='\"ui.storefront.common.Email\"\r\n' register="{register}\r\n">\r\n        </textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></row>\r\n      \r\n      \r\n        <hr classname='\"w-100' mt-0="" my-3\"=""/>\r\n      \r\n      \r\n        <row>\r\n          <passwordinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12' formidentifier='\"txtProfilePasswordCurrent\"\r\n' labelkey='\"ui.storefront.userDashboard2.controls.userProfile.CurrentPasswordRequiredForProfileChanges\"\r\n' mb-2\"\r\n="" placeholderkey='\"ui.storefront.userDashboard2.controls.userProfile.EnterYourCurrentPassword\"\r\n' register="{register}\r\n" required="{true}\r\n" suppressrequirements="{true}\r\n" tooltipkey='\"ui.storefront.user.registration.PasswordRequirements.Message\"\r\n'>\r\n          <passwordinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12\"\r\n' formidentifier='\"txtProfilePasswordNew\"\r\n' labelkey='\"ui.storefront.userDashboard2.controls.userProfile.OptionallySetANewPassword\"\r\n' minlength="{7}\r\n" placeholderkey='\"ui.storefront.userDashboard2.controls.userProfile.EnterYourNewPassword\"\r\n' register="{register}\r\n" required="{false}\r\n" tooltipkey='\"ui.storefront.user.registration.PasswordRequirements.Message\"\r\n'>\r\n        </passwordinputformgroup\r\n></passwordinputformgroup\r\n></row>\r\n      \r\n      \r\n        <row classname='\"mt-3\"'>\r\n          \r\n            <button\r\n !formstate.isvalid}\r\n="" classname='\"mb-3\"\r\n' disabled="{viewState.running" id='\"btnSaveUserProfile\"\r\n' name='\"btnSaveUserProfile\"\r\n' onclick="{handleSubmit(handleSaveButtonClicked)}\r\n" size='\"lg\"\r\n' title='\"Save\"' type='\"submit\"\r\n' variant='\"primary\"\r\n' ||="">\r\n              {t(\"ui.storefront.common.Save\")}\r\n            \r\n          \r\n          \r\n            {showSavedMessage\r\n              &amp;&amp; <alert classname='\"mb-0\"' variant='\"success\"'>\r\n                <i classname='\"fal' fa-check-circle\"="">{\" \"}\r\n                {t(\"ui.storefront.common.Success.Exclamation\")}{\" \"}\r\n                {t(\"ui.storefront.menu.miniMenu.Profile\")}{\" \"}\r\n                {t(\"ui.storefront.product.reviews.reviewEntry.hasBeenSaved\")}\r\n              </i></alert><i classname='\"fal' fa-check-circle\"="">\r\n            }\r\n            {viewState.hasError\r\n              &amp;&amp; <errorview error="{\r\n" t(\"ui.storefront.userdashboard2.controls.userprofile.anerrorwasencounteredpleasetryagain\")\r\n="" }="">\r\n            }\r\n          \r\n        </errorview></i></button\r\n></row><i classname='\"fal' fa-check-circle\"="">\r\n      \r\n    </i></loadingwidget></row><i classname='\"fal' fa-check-circle\"="">\r\n  );\r\n};","/** @format */\r\n\r\nimport { useState } from \"react\";\r\nimport { Accordion, Button, Card, Col, Dropdown, Form, ListGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport useCustomCompareEffect from \"src/_shared/customHooks/useCustomCompareEffect\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport {\r\n  compareProductCatalogSearchForm,\r\n  useProductSearchViewModel\r\n} from \"src/_shared/customHooks/catalog/useProductSearchViewModel\";\r\nimport { IHttpPromiseCallbackArg, ProductSearchViewModel } from \"src/_api/cvApi.shared\";\r\nimport {\r\n  ICVGridToolbarAttributesFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarAttributeFilter = (props: ICVGridToolbarAttributesFilterProps): JSX.Element =&gt; {\r\n  const { toolbarFilterTitle, uniqueFieldID, attributesState, onRemoveAttributeChange, onAddAttributeChange } = props;\r\n  const { setRunning, finishRunning } = useViewState();\r\n  const [ productSearchViewModel, setProductSearchViewModel ] = useProductSearchViewModel();\r\n  const [ expandedAttributes, setExpandedAttributes ] = useState<string[]>([]);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  useCustomCompareEffect(catalogSearch, productSearchViewModel?.Form, compareProductCatalogSearchForm);\r\n\r\n  function catalogSearch(): void {\r\n    setRunning();\r\n    if (!productSearchViewModel?.Form) {\r\n      return;\r\n    }\r\n\r\n    // TODO: need a way to cancel this promise if it's running and the productSearchViewModel gets modified again\r\n    cvApi.providers\r\n      .SearchProductCatalogWithProvider(productSearchViewModel.Form)\r\n      .then((res: IHttpPromiseCallbackArg<productsearchviewmodel>) =&gt; {\r\n        setProductSearchViewModel(res.data);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err?.message || \"Failed to search product catalog with provider\");\r\n      });\r\n  }\r\n\r\n  function toggleFilterOnAttribute(attr: string): void {\r\n    setRunning();\r\n    if (attributesState.includes(attr)) {\r\n      const attrIndex = attributesState.indexOf(attr);\r\n      onRemoveAttributeChange(attrIndex);\r\n    }\r\n    if (!attributesState.includes(attr)) {\r\n      onAddAttributeChange(attr);\r\n    }\r\n    finishRunning();\r\n  }\r\n\r\n  return (\r\n    \r\n      <form.label htmlfor="{uniqueFieldID}">{toolbarFilterTitle}</form.label>\r\n      <form.group controlid="{uniqueFieldID}">\r\n        <dropdown \"center\"="" \"flex\",="" display:="" justifycontent:="" style="{{" }}="">\r\n          <dropdown.toggle variant='\"outline-dark\"'>Select an Attribute</dropdown.toggle>\r\n          <dropdown.menu>\r\n            <card.body\r\n \"50vh\",\r\n="" \"5vw\"\r\n="" \"auto\",\r\n="" bg-light\"\r\n="" classname='\"p-3' maxheight:="" minwidth:="" overflowy:="" style="{{\r\n" }}="">\r\n              <listgroup as='\"ul\"' classname='\"collapse-filter' list-unstyled="" mb-0\"="">\r\n                {productSearchViewModel?.Attributes\r\n                  &amp;&amp; productSearchViewModel?.Attributes?.map((attr: any): JSX.Element =&gt; {\r\n                    const { Key, Value } = attr;\r\n                    return (\r\n                      <accordion.item\r\n \"left\"="" classname='\"border-0\"' eventkey='\"attributes-collapse\"\r\n' key="{Key}\r\n" style="{{" textalign:="" }}\r\n="">\r\n                        <button\r\n =="" align-items-center="" border-0="" classname='\"bg-light' d-flex="" justify-content-between="" onclick="{()" p-0="" variant='\"link\"\r\n' w-100\"\r\n=""> {\r\n                            if (expandedAttributes.includes(Key)) {\r\n                              setExpandedAttributes(expandedAttributes.filter((a: any) =&gt; a !== Key));\r\n                            } else {\r\n                              setExpandedAttributes([ ...expandedAttributes, Key ]);\r\n                            }\r\n                          }}&gt;\r\n                          <span>{Key}</span>\r\n                          <i :="" ?="" \"fal="" classname="{expandedAttributes.includes(Key)\r\n" fa-minus="" fa-plus="" fa-sm\"\r\n="" fa-sm\"}="">\r\n                        \r\n                        <listgroup\r\n ${\r\n="" :="" ?="" \"\"\r\n="" \"flex-start\"="" \"show\"="" alignitems:="" classname="{`collapse" collapse-list="" expandedattributes.includes(key)="" list-unstyled="" style="{{" }`}="" }}\r\n="">\r\n                          {Value\r\n                            &amp;&amp; Value.map(\r\n                              (item: { Key: string }): JSX.Element =&gt; <accordion.item\r\n bg-light="" border-0="" classname='\"py-0' eventkey="{item.Key}\r\n" key="{item.Key}\r\n" w-100\"="">\r\n                                <form.check classname='\"mb-0\"' inline\r\n="" type='\"checkbox\"\r\n'>\r\n                                  <form.check.label classname='\"mb-0\"'>\r\n                                    <form.check.input\r\n =="" onclick="{e" type='\"checkbox\"\r\n'> toggleFilterOnAttribute(item.Key)}\r\n                                    /&gt;\r\n                                       \r\n                                    <span>{item.Key}</span>\r\n                                  </form.check.input\r\n></form.check.label>\r\n                                </form.check>\r\n                              \r\n\r\n                            )}\r\n                        </accordion.item\r\n></listgroup\r\n></i></button\r\n></accordion.item\r\n></listgroup><i :="" ?="" \"fal="" classname="{expandedAttributes.includes(Key)\r\n" fa-minus="" fa-plus="" fa-sm\"\r\n="" fa-sm\"}="">\r\n                      \r\n                    );\r\n                  })}\r\n                <listgroup.item bg-light="" border-0\"="" classname='\"filter-item' d-flex="" justify-content-end="" mt-3="">\r\n                  <button =="" onclick="{()" size='\"sm\"\r\n' variant='\"secondary\"\r\n'> setExpandedAttributes([])}&gt;\r\n                    {t(\"ui.storefront.searchCatalog.filters.CollapseAll\")}\r\n                  </button>\r\n                  <button\r\n classname='\"ms-1\"\r\n' onclick="{():" size='\"sm\"\r\n' variant='\"primary\"\r\n' void=""> {\r\n                      setExpandedAttributes(productSearchViewModel?.Attributes?.map((a: any) =&gt; a.Key));\r\n                    }}&gt;\r\n                    {t(\"ui.storefront.searchCatalog.filters.ExpandAll\")}\r\n                  \r\n                </button\r\n></listgroup.item>\r\n              \r\n            \r\n          </i></card.body\r\n></dropdown.menu><i :="" ?="" \"fal="" classname="{expandedAttributes.includes(Key)\r\n" fa-minus="" fa-plus="" fa-sm\"\r\n="" fa-sm\"}="">\r\n        </i></dropdown><i :="" ?="" \"fal="" classname="{expandedAttributes.includes(Key)\r\n" fa-minus="" fa-plus="" fa-sm\"\r\n="" fa-sm\"}="">\r\n      </i></form.group><i :="" ?="" \"fal="" classname="{expandedAttributes.includes(Key)\r\n" fa-minus="" fa-plus="" fa-sm\"\r\n="" fa-sm\"}="">\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { Card, Col, Form, InputGroup, ListGroup } from \"react-bootstrap\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { ProductSuggestResult } from \"src/_api/cvApi._DtoClasses\";\r\nimport {\r\n  ICVGridToolbarAutoCompleteFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarAutoCompleteFilter = (props: ICVGridToolbarAutoCompleteFilterProps): JSX.Element =&gt; {\r\n  const { toolbarFilterTitle, uniqueFieldID, onCallFilterClicked, onTextAndSuggestionChange } = props;\r\n\r\n  const [ suggestions, setSuggestions ] = useState<array<productsuggestresult>&gt;([]);\r\n  const [ showSuggestions, setShowSuggestions ] = useState(false);\r\n  const [ , setError ] = useState(null);\r\n  const [ text, setText ] = useState(\"\");\r\n\r\n  useEffect(() =&gt; {\r\n    if (suggestions &amp;&amp; suggestions.length) {\r\n      setShowSuggestions(true);\r\n    }\r\n  }, [ suggestions ]);\r\n\r\n  const handleTextChange = (e: React.ChangeEvent<htmlinputelement>): void =&gt; {\r\n    const sugs: Array<productsuggestresult> = [];\r\n    const { value } = e.target;\r\n    onTextAndSuggestionChange(value);\r\n    if (value.length &gt; 0) {\r\n      cvApi.providers\r\n        .SuggestProductCatalogWithProvider({\r\n          Page: 1,\r\n          PageSetSize: 8,\r\n          PageSize: 8,\r\n          Query: value,\r\n          Sort: 0\r\n        })\r\n        .then(result =&gt; {\r\n          setSuggestions(result.data);\r\n        })\r\n        .catch(err =&gt; {\r\n          setError(err);\r\n        });\r\n    }\r\n    setSuggestions(sugs);\r\n    setText(value);\r\n  };\r\n\r\n  const onClickSuggestion = (itemName: string) =&gt; {\r\n    setText(itemName);\r\n    onTextAndSuggestionChange(itemName);\r\n    setShowSuggestions(false);\r\n  };\r\n\r\n  return (\r\n    \r\n      <form.label htmlfor="{uniqueFieldID}">{toolbarFilterTitle}</form.label>\r\n      <inputgroup>\r\n        <form.control\r\n aria-label="{uniqueFieldID}\r\n" id="{uniqueFieldID}\r\n" onkeydown="{(e:" placeholder="{toolbarFilterTitle}\r\n" react.keyboardevent<htmlinputelement="" type='\"text\"\r\n'>) =&gt; {\r\n            if (e.key === \"Enter\") {\r\n              onCallFilterClicked();\r\n            }\r\n            if (e.key === \"Backspace\") {\r\n              setShowSuggestions(false);\r\n            }\r\n          }}\r\n          onChange={handleTextChange}\r\n          value={text}\r\n        /&gt;\r\n        {showSuggestions\r\n          ? <card.body 1000="" \"105%\",="" bg-white\"="" border="" classname='\"position-absolute' style="{{" top:="" zindex:="" }}="">\r\n            <listgroup as='\"ul\"' classname='\"list-unstyled' mb-0\"="">\r\n              {suggestions.map(suggestion =&gt; <listgroup.item\r\n =="" classname='\"p-2\"\r\n' key="{suggestion.Name}\r\n" onclick="{()"> onClickSuggestion(suggestion.Name)}&gt;\r\n                {suggestion.Name}\r\n              )}\r\n            </listgroup.item\r\n></listgroup>\r\n          </card.body>\r\n          : null}\r\n      </form.control\r\n></inputgroup>\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Col, Form } from \"react-bootstrap\";\r\nimport {\r\n  ICVGridToolbarBooleanFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarBooleanFilter = (props: ICVGridToolbarBooleanFilterProps): JSX.Element =&gt; {\r\n  const { toolbarFilterTitle, uniqueFieldID, onBooleanChange } = props;\r\n  return (\r\n    \r\n      <form.label htmlfor="{uniqueFieldID}" id='\"UserDashboardSelectFilterText\"'>\r\n        {toolbarFilterTitle}\r\n      </form.label>\r\n      <form.select =="" id="{uniqueFieldID}" onchange="{e"> onBooleanChange(e.target.value)}&gt;\r\n        <option value='\"Either\"'>Either</option>\r\n        <option value='\"true\"'>True</option>\r\n        <option value='\"false\"'>False</option>\r\n      </form.select>\r\n    \r\n  );\r\n};\r\n","import { Button, Col, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ICVGridToolbarFilterBtns } from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarFilterBtns = (props: ICVGridToolbarFilterBtns): JSX.Element =&gt; {\r\n  const { onCallFilterClicked, onResetClicked, isFilterColumnsAvailable } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    isFilterColumnsAvailable\r\n      &amp;&amp; <form.group as="{Col}\r\n" classname='\"search-bar\"' sm='\"auto\"\r\n'>\r\n        <form.label> </form.label>\r\n        <inputgroup>\r\n          <button\r\n =="" classname='\"p-1\"\r\n' id='\"btnGridFilter\"\r\n' onclick="{()" variant='\"primary\"\r\n'> onCallFilterClicked()}\r\n            title=\"Filter\"&gt;\r\n            <i classname='\"fal' fa-filter="" fa-fw\"="">\r\n            <span classname='\"sr-only\"'>{t(\"ui.storefront.common.Filter\")}</span>\r\n          \r\n          <button\r\n =="" classname='\"p-1' ms-1\"\r\n="" onclick="{()" variant='\"secondary\"\r\n'> onResetClicked()}&gt;\r\n            <i aria-hidden='\"true\"' classname='\"fal' fa-fw\"="" fa-undo="">\r\n            <span classname='\"sr-only\"'>\r\n              {t(\"ui.storefront.common.Reset\")}\r\n            </span>\r\n          \r\n        </i></button\r\n></i></button\r\n></inputgroup><i classname='\"fal' fa-filter="" fa-fw\"=""><i aria-hidden='\"true\"' classname='\"fal' fa-fw\"="" fa-undo="">\r\n      </i></i></form.group><i classname='\"fal' fa-filter="" fa-fw\"=""><i aria-hidden='\"true\"' classname='\"fal' fa-fw\"="" fa-undo="">\r\n  );\r\n};\r\n","import { Col, Form } from \"react-bootstrap\";\r\nimport {\r\n  ICVGridToolbarIDFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarIDFilter = (props: ICVGridToolbarIDFilterProps): JSX.Element =&gt; {\r\n  const {\r\n    showLabels,\r\n    toolbarFilterTitle,\r\n    uniqueFieldID,\r\n    onCallFilterClicked,\r\n    onIdChanged,\r\n    idValue\r\n  } = props;\r\n\r\n  return (\r\n    \r\n      {showLabels ? <form.label htmlfor="{uniqueFieldID}">{toolbarFilterTitle}</form.label> : null}\r\n      <form.control\r\n aria-label="{uniqueFieldID}\r\n" id="{uniqueFieldID}\r\n" onkeydown="{(e:" placeholder="{toolbarFilterTitle}\r\n" react.keyboardevent<htmlinputelement="" type='\"text\"\r\n'>) =&gt; {\r\n          if (e.key === \"Enter\") {\r\n            onCallFilterClicked();\r\n          }\r\n        }}\r\n        onChange={e =&gt; onIdChanged(e.target.value)}\r\n        value={idValue}\r\n      /&gt;\r\n    \r\n  );\r\n};\r\n","import { Col, Form } from \"react-bootstrap\";\r\nimport {\r\n  ICVGridToolbarInputFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarInputFilter = (props: ICVGridToolbarInputFilterProps): JSX.Element =&gt; {\r\n  const { uniqueFieldID, toolbarFilterTitle, onCallFilterClicked, onInputChange, inputValue }\r\n    = props;\r\n\r\n  return (\r\n    \r\n      <form.label htmlfor="{uniqueFieldID}">{toolbarFilterTitle}</form.label>\r\n      <form.control\r\n aria-label="{uniqueFieldID}\r\n" id="{uniqueFieldID}\r\n" onkeydown="{(e:" placeholder="{toolbarFilterTitle}\r\n" react.keyboardevent<htmlinputelement="" type='\"text\"\r\n'>) =&gt; {\r\n          if (e.key === \"Enter\") {\r\n            onCallFilterClicked();\r\n          }\r\n        }}\r\n        onChange={e =&gt; onInputChange(e.target.value)}\r\n        value={inputValue}\r\n      /&gt;\r\n    \r\n  );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"dateInput\":\"CVGrid_dateInput__c3KL2\"};","import { Col, Form, InputGroup } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { DateTime } from \"luxon\";\r\nimport classes from \"src/_shared/common/CVGrid.module.scss\";\r\nimport {\r\n  ICVGridToolbarMinMaxDateFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarMinMaxDateFilter = (\r\n  props: ICVGridToolbarMinMaxDateFilterProps\r\n): JSX.Element =&gt; {\r\n  const {\r\n    toolbarFilterTitle,\r\n    uniqueFieldID,\r\n    minDateValue,\r\n    maxDateValue,\r\n    onMinDateChange,\r\n    onMaxDateChange\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    \r\n      <form.label classname='\"w-100\"' htmlfor="{uniqueFieldID}">\r\n        {toolbarFilterTitle}\r\n      </form.label>\r\n      <div\r\n align-items-center="" classname='\"datepicker' d-flex="" data-datepicker='{\"rangepicker\": true}' mb-2="" mb-lg-0\"\r\n="">\r\n        <inputgroup classname='\"me-2\"'>\r\n          <form.control\r\n =="" ??="" \"\"}\r\n="" \r\n="" aria-label='\"date-in\"\r\n' classname="{classes.dateInput}\r\n" data-datepicker-from='{\"minDate\":0}' id="{uniqueFieldID}\r\n" onchange="{e" placeholder='\"00/00/0000\"\r\n' type='\"date\"\r\n' value="{minDateValue"> {\r\n              let newMinDate = \"\";\r\n              if (DateTime.fromFormat(e.target.value, \"y-LL-dd\").isValid) {\r\n                newMinDate = e.target.value;\r\n              }\r\n              onMinDateChange(newMinDate);\r\n            }}\r\n          /&gt;\r\n          <inputgroup.text>\r\n            {t(\"ui.storefront.common.To.Lowercase\")}\r\n          </inputgroup.text>\r\n          <form.control\r\n =="" ??="" \"\"}\r\n="" \r\n="" aria-label='\"date-to\"\r\n' classname="{classes.dateInput}\r\n" data-datepicker-to='{\"maxDate\":10}' onchange="{e" placeholder='\"00/00/0000\"\r\n' type='\"date\"\r\n' value="{maxDateValue"> {\r\n              let newMaxDate = \"\";\r\n              if (DateTime.fromFormat(e.target.value, \"y-LL-dd\").isValid) {\r\n                newMaxDate = e.target.value;\r\n              }\r\n              onMaxDateChange(newMaxDate);\r\n            }}\r\n          /&gt;\r\n        </form.control\r\n></form.control\r\n></inputgroup>\r\n      \r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Col, Form } from \"react-bootstrap\";\r\nimport {\r\n  ICVGridToolbarMinMaxNumFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarMinMaxNumFilter = (props: ICVGridToolbarMinMaxNumFilterProps): JSX.Element =&gt; {\r\n  const {\r\n    toolbarFilterTitle,\r\n    uniqueFieldID,\r\n    toolbarValuesState,\r\n    onNumChange,\r\n    onCallFilterClicked,\r\n    toolbarFilterMin,\r\n    toolbarFilterMax,\r\n    toolbarFilterPlaceholder\r\n  } = props;\r\n\r\n  return (\r\n    \r\n      <form.label htmlfor="{uniqueFieldID}">{toolbarFilterTitle}</form.label>\r\n      <form.control\r\n aria-label="{uniqueFieldID}\r\n" classname='\"form-control\"\r\n' id="{uniqueFieldID}\r\n" max="{toolbarFilterMax}\r\n" min="{toolbarFilterMin}\r\n" onkeydown="{(e:" placeholder="{toolbarFilterPlaceholder" react.keyboardevent<htmlinputelement="" toolbarfiltertitle}\r\n="" type='\"number\"\r\n' ||="">) =&gt; {\r\n          if (e.key === \"Enter\") {\r\n            onCallFilterClicked();\r\n          }\r\n        }}\r\n        onChange={e =&gt; onNumChange(e.target.value)}\r\n        value={toolbarValuesState[toolbarFilterTitle]}\r\n      /&gt;\r\n    \r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Col, Form } from \"react-bootstrap\";\r\nimport { BaseModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport {\r\n  ICVGridToolbarSelectFilterProps\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\nexport const CVGridToolbarSelectFilter = (props: ICVGridToolbarSelectFilterProps): JSX.Element =&gt; {\r\n  const { toolbarFilterTitle, uniqueFieldID, optionValue, onSelectChanged, toolbarFilterOptions } = props;\r\n\r\n  return (\r\n    \r\n      <form.label htmlfor="{uniqueFieldID}" id='\"UserDashboardSelectFilterText\"'>\r\n        {toolbarFilterTitle}\r\n      </form.label>\r\n      <form.select =="" id="{uniqueFieldID}\r\n" onchange="{e"> onSelectChanged(e.target.value)}\r\n        value={optionValue}&gt;\r\n        <option value='\"All\"'>All</option>\r\n        {toolbarFilterOptions.map((option: BaseModel) =&gt; {\r\n          const { CustomKey } = option;\r\n          return (\r\n            <option key="{CustomKey}" value="{CustomKey}">\r\n              {CustomKey}\r\n            </option>\r\n          );\r\n        })}\r\n      </form.select>\r\n    \r\n  );\r\n};\r\n","import { Row } from \"react-bootstrap\";\r\nimport { useState } from \"react\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport {\r\n  CVGridToolbarAttributeFilter,\r\n  CVGridToolbarAutoCompleteFilter,\r\n  CVGridToolbarBooleanFilter,\r\n  CVGridToolbarFilterBtns,\r\n  CVGridToolbarIDFilter,\r\n  CVGridToolbarInputFilter,\r\n  CVGridToolbarMinMaxDateFilter,\r\n  CVGridToolbarMinMaxNumFilter,\r\n  CVGridToolbarSelectFilter\r\n} from \"src/_shared/common/CVGridToolbarFilterComponents\";\r\nimport { IToolbarValuesState } from \"src/_shared/common/CVGridToolbarFilterComponents/_CVGridToolbarFilterTypes\";\r\n\r\ninterface ICVGridToolbarProps {\r\n  filterColumns: Array<any>;\r\n  onFilterClicked: Function;\r\n  onResetClicked: () =&gt; void;\r\n  showLabels: boolean;\r\n}\r\nexport const CVGridToolbar = (props: ICVGridToolbarProps): JSX.Element =&gt; {\r\n  const { filterColumns, onFilterClicked, onResetClicked, showLabels }\r\n    = props;\r\n\r\n  const initialState: any = {};\r\n  for (let i = 0; i &lt; filterColumns.length; i++) {\r\n    if (filterColumns[i].hidden || !filterColumns[i].toolbarFilterTitle) {\r\n      continue;\r\n    }\r\n    if (filterColumns[i].toolbarFilterType === \"minmaxdate\") {\r\n      initialState[filterColumns[i].toolbarFilterTitle] = {\r\n        MinDate: \"\",\r\n        MaxDate: \"\"\r\n      };\r\n      continue;\r\n    }\r\n    if (filterColumns[i].toolbarFilterType === \"attribute\") {\r\n      initialState[filterColumns[i].toolbarFilterTitle] = [];\r\n      continue;\r\n    }\r\n    initialState[filterColumns[i].toolbarFilterTitle] = \"\";\r\n  }\r\n\r\n  const [ toolbarValuesState, setToolbarValuesState ] = useState<itoolbarvaluesstate>(initialState);\r\n  const [ , setLastCallData ] = useState<itoolbarvaluesstate>(null);\r\n\r\n  const onCallFilterClicked = (): void =&gt; {\r\n    const convertedData = handleConversion();\r\n    setLastCallData(convertedData);\r\n    onFilterClicked(convertedData);\r\n  };\r\n\r\n  const handleConversion = () =&gt; {\r\n    // Intentionally any\r\n    let convertedData: IToolbarValuesState = {};\r\n    for (let i = 0; i &lt; filterColumns.length; i++) {\r\n      if (filterColumns[i].conversion) {\r\n        const dataToSend = filterColumns[i].conversion(\r\n          toolbarValuesState[filterColumns[i].toolbarFilterTitle]\r\n        );\r\n        convertedData = {\r\n          ...convertedData,\r\n          ...dataToSend\r\n        };\r\n      } else {\r\n        convertedData = {\r\n          ...convertedData,\r\n          [filterColumns[i].toolbarFilterTitle]:\r\n            toolbarValuesState[filterColumns[i].toolbarFilterTitle]\r\n        };\r\n      }\r\n    }\r\n    return convertedData;\r\n  };\r\n\r\n  const handleReset = () =&gt; {\r\n    if (onResetClicked) {\r\n      onResetClicked();\r\n    }\r\n  };\r\n\r\n  return (\r\n    <row classname='\"mb-2\"'>\r\n      {filterColumns.map((col, index) =&gt; {\r\n        const uniqueFieldID = `${col.toolbarFilterType}${index}_${col.toolbarFilterTitle}`;\r\n        switch (col.toolbarFilterType) {\r\n          case ServiceStrings.cvgrid.filters.id:\r\n            return (\r\n              <cvgridtoolbaridfilter\r\n =="" key="{uniqueFieldID}\r\n" onidchanged="{id" showlabels="{showLabels}\r\n" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" uniquefieldid="{uniqueFieldID}\r\n"> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: id\r\n                })\r\n                }\r\n                idValue={toolbarValuesState[col.toolbarFilterTitle]}\r\n                onCallFilterClicked={onCallFilterClicked}\r\n              /&gt;\r\n            );\r\n          case ServiceStrings.cvgrid.filters.input:\r\n            return (\r\n              <cvgridtoolbarinputfilter\r\n key="{uniqueFieldID}\r\n" oncallfilterclicked="{onCallFilterClicked}\r\n" oninputchange="{(input:" string)="" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" uniquefieldid="{uniqueFieldID}\r\n"> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: input\r\n                })\r\n                }\r\n                inputValue={toolbarValuesState[col.toolbarFilterTitle]}\r\n              /&gt;\r\n            );\r\n          case ServiceStrings.cvgrid.filters.autocomplete:\r\n            return (\r\n              <cvgridtoolbarautocompletefilter\r\n key="{uniqueFieldID}\r\n" oncallfilterclicked="{onCallFilterClicked}\r\n" ontextandsuggestionchange="{(text:" settoolbarvaluesstate="{setToolbarValuesState}\r\n" string)="" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" toolbarvaluesstate="{toolbarValuesState}\r\n" uniquefieldid="{uniqueFieldID}\r\n"> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: text\r\n                })\r\n                }\r\n                filterColumns={filterColumns}\r\n              /&gt;\r\n            );\r\n          case ServiceStrings.cvgrid.filters.attribute:\r\n            return (\r\n              <cvgridtoolbarattributefilter\r\n key="{uniqueFieldID}\r\n" number)="" onremoveattributechange="{(indexI:" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" uniquefieldid="{uniqueFieldID}\r\n"> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: [\r\n                    ...toolbarValuesState[col.toolbarFilterTitle].filter(\r\n                      (_: string, i: number) =&gt; i !== indexI\r\n                    )\r\n                  ]\r\n                })\r\n                }\r\n                onAddAttributeChange={(attribute: string) =&gt; setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: [\r\n                    ...toolbarValuesState[col.toolbarFilterTitle],\r\n                    attribute\r\n                  ]\r\n                })\r\n                }\r\n                attributesState={toolbarValuesState[col.toolbarFilterTitle]}\r\n              /&gt;\r\n            );\r\n          case ServiceStrings.cvgrid.filters.select:\r\n            return (\r\n              <cvgridtoolbarselectfilter\r\n =="" key="{uniqueFieldID}\r\n" onselectchanged="{option" optionvalue="{toolbarValuesState[col.toolbarFilterTitle]}\r\n" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" uniquefieldid="{uniqueFieldID}\r\n"> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: option\r\n                })\r\n                }\r\n                toolbarFilterOptions={col.toolbarFilterOptions}\r\n              /&gt;\r\n            );\r\n          case ServiceStrings.cvgrid.filters.boolean:\r\n            return (\r\n              <cvgridtoolbarbooleanfilter\r\n =="" key="{uniqueFieldID}\r\n" onbooleanchange="{boolean" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" uniquefieldid="{uniqueFieldID}\r\n"> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: boolean\r\n                })\r\n                }\r\n              /&gt;\r\n            );\r\n          case ServiceStrings.cvgrid.filters.minmaxnumber:\r\n            return (\r\n              <cvgridtoolbarminmaxnumfilter\r\n key="{uniqueFieldID}\r\n" onnumchange="{(num:" string)="" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" toolbarvaluesstate="{toolbarValuesState}\r\n" uniquefieldid="{uniqueFieldID}\r\n"> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: num\r\n                })\r\n                }\r\n                onCallFilterClicked={onCallFilterClicked}\r\n                toolbarFilterMin={col.toolbarFilterMin}\r\n                toolbarFilterMax={col.toolbarFilterMax}\r\n                toolbarFilterPlaceholder={col.toolbarFilterPlaceholder}\r\n              /&gt;\r\n            );\r\n          case ServiceStrings.cvgrid.filters.minmaxdate:\r\n            return (\r\n              <cvgridtoolbarminmaxdatefilter\r\n &&="" :="" ?="" key="{uniqueFieldID}\r\n" maxdatevalue="{\r\n" mindatevalue="{\r\n" null\r\n="" onmindatechange="{(minDate:" string)="" toolbarfiltertitle="{col.toolbarFilterTitle}\r\n" toolbarvaluesstate="" toolbarvaluesstate[col.toolbarfiltertitle].maxdate\r\n="" toolbarvaluesstate[col.toolbarfiltertitle].mindate\r\n="" toolbarvaluesstate[col.toolbarfiltertitle]\r\n="" uniquefieldid="{uniqueFieldID}\r\n" }\r\n=""> setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: {\r\n                    ...toolbarValuesState[col.toolbarFilterTitle],\r\n                    MinDate: minDate\r\n                  }\r\n                })\r\n                }\r\n                onMaxDateChange={(maxDate: string) =&gt; setToolbarValuesState({\r\n                  ...toolbarValuesState,\r\n                  [col.toolbarFilterTitle]: {\r\n                    ...toolbarValuesState[col.toolbarFilterTitle],\r\n                    MaxDate: maxDate\r\n                  }\r\n                })\r\n                }\r\n              /&gt;\r\n            );\r\n          default:\r\n            return <div key="{col.toolbarFilterTitle}"></div>;\r\n        }\r\n      })}\r\n      <cvgridtoolbarfilterbtns\r\n =="" isfiltercolumnsavailable="{Boolean(filterColumns.length)}\r\n" oncallfilterclicked="{onCallFilterClicked}\r\n" onresetclicked="{()"> {\r\n          setToolbarValuesState(initialState);\r\n          handleReset();\r\n        }}\r\n      /&gt;\r\n    </cvgridtoolbarfilterbtns\r\n></cvgridtoolbarminmaxdatefilter\r\n></cvgridtoolbarminmaxnumfilter\r\n></cvgridtoolbarbooleanfilter\r\n></cvgridtoolbarselectfilter\r\n></cvgridtoolbarattributefilter\r\n></cvgridtoolbarautocompletefilter\r\n></cvgridtoolbarinputfilter\r\n></cvgridtoolbaridfilter\r\n></row>\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport React, { Fragment } from \"react\";\r\nimport MaterialTable from \"@material-table/core\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport variables from \"src/_meta/css/exposedToJSVariables.module.scss\";\r\nimport { CVGridToolbar } from \"src/_shared/common/CVGridToolbar\";\r\n\r\n// Old: type valueof<t> = T[keyof T];\r\nexport interface IMaterialRowData {\r\n  tableData:{\r\n    id: number;\r\n    index: number;\r\n    uuid: string;\r\n  }\r\n}\r\n\r\ninterface IToolbarFilterColumn {\r\n  // TODO: should be a valueof<servicestrings.cvgrid.filters>\r\n  toolbarFilterType: string;\r\n  toolbarFilterOptions?: Array<any>;\r\n  toolbarFilterTitle: string;\r\n\r\n  // TODO: Add toolbarFilterStateKey\r\n  toolbarFilterPlaceholder?: string;\r\n  toolbarFilterMin?: number;\r\n  toolbarFilterMax?: number;\r\n}\r\n\r\ninterface ICVGridProps {\r\n  columns: Array<any>;\r\n  filterColumns: IToolbarFilterColumn[];\r\n  data: Array<any>;\r\n  page: number;\r\n  totalCount: number;\r\n  onPageChange: Function;\r\n  onOrderChange: Function;\r\n  isLoading: boolean;\r\n  onFilterClicked: Function;\r\n  onResetClicked: () =&gt; void;\r\n  showLabels?: boolean;\r\n  ref: any;\r\n  defaultPageSize: number;\r\n  defaultPageSizeOptions: number[];\r\n}\r\n\r\nconst CVGridComponent = (props: ICVGridProps, ref: any): JSX.Element =&gt; {\r\n  const {\r\n    columns,\r\n    filterColumns,\r\n    data,\r\n    page,\r\n    totalCount,\r\n    onPageChange,\r\n    onOrderChange,\r\n    isLoading,\r\n    onResetClicked,\r\n    onFilterClicked,\r\n    defaultPageSize,\r\n    defaultPageSizeOptions\r\n  } = props;\r\n\r\n  function TableLoadingWidget() {\r\n    return <loadingwidget overlay="{true}">;\r\n  }\r\n\r\n  return (\r\n    <fragment>\r\n      <cvgridtoolbar\r\n :="" =="=" ?="" filtercolumns="{filterColumns}\r\n" onfilterclicked="{onFilterClicked}\r\n" onresetclicked="{onResetClicked}\r\n" props.showlabels}\r\n="" showlabels="{props.showLabels" true="" undefined="">\r\n      <materialtable\r\n =="" columns="{columns}\r\n" data="{q"> new Promise((resolve, reject) =&gt; {\r\n          resolve({ data, page, totalCount });\r\n        })\r\n        }\r\n        tableRef={ref}\r\n        options={{\r\n          draggable: false,\r\n          emptyRowsWhenPaging: false,\r\n          padding: \"dense\",\r\n          pageSize: defaultPageSize ?? 8,\r\n          pageSizeOptions: defaultPageSizeOptions ?? [ 8, 16, 24 ],\r\n          paginationType: \"stepped\",\r\n          rowStyle: (_rowData, index) =&gt; ({\r\n            backgroundColor: index % 2 === 0 ? variables.light : variables.white\r\n          }),\r\n          thirdSortClick: false,\r\n          toolbar: false\r\n        }}\r\n        onPageChange={(pageI, pageSize) =&gt; {\r\n          onPageChange(pageI, pageSize);\r\n        }}\r\n        onOrderChange={(orderBy, orderDirection) =&gt; {\r\n          onOrderChange(orderBy, orderDirection);\r\n        }}\r\n        components={{\r\n          OverlayLoading: TableLoadingWidget\r\n        }}\r\n        isLoading={isLoading}\r\n        /*\r\n         * Old:\r\n         * detailPanel={(rowData) =&gt; {\r\n         *   return (\r\n         *     <div classname='\"px-4' py-2\"="">\r\n         *       <ul classname='\"list-unstyled\"'>\r\n         *         <li>Quantity: {rowData.rowData.ItemQuantity}</li>\r\n         *         <li>CustomKey: {rowData.rowData.CustomKey}</li>\r\n         *       </ul>\r\n         *     </div>\r\n         *   );\r\n         * }}\r\n         */\r\n      /&gt;\r\n    </materialtable\r\n></cvgridtoolbar\r\n></fragment>\r\n  );\r\n};\r\n\r\nexport const CVGrid = React.forwardRef(CVGridComponent);\r\n","import { useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { NewAddressForm } from \"src/_shared/forms/NewAddressForm\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport const InvoiceModalBillingContactSection = (props: {\r\n  addressBook: AccountContactModel[];\r\n  onChange: (contact: AccountContactModel) =&gt; void;\r\n  initialContact?: AccountContactModel\r\n}): JSX.Element =&gt; {\r\n  const { addressBook, onChange, initialContact } = props;\r\n\r\n  const [ showNewAddressForm, setShowNewAddressForm ] = useState<boolean>(false);\r\n\r\n  const addressFactory = useAddressBookFactory();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n\r\n  function addAddressToAddressBookAndSelect(addressData: AccountContactModel) {\r\n    setRunning();\r\n    addressFactory.createNewAddress(addressData)\r\n      .then(newContact =&gt; {\r\n        onChange(newContact);\r\n        setShowNewAddressForm(false);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n\r\n  const canUpsertAddresses = cefConfig?.featureSet?.addressBook?.dashboardCanAddAddresses;\r\n\r\n  return (\r\n    <div classname='\"position-relative\"'>\r\n      {viewState.running &amp;&amp; <loadingwidget overlay="{true}">}\r\n      <div align-items-start\"="" classname='\"d-flex'>\r\n        <contactswitch\r\n accountcontacts="{addressBook}\r\n" classes='\"flex-grow-1\"\r\n' disabled="{showNewAddressForm}\r\n" hideaddressblock="{showNewAddressForm}\r\n" initialcontact="{initialContact}\r\n" onchange="{onChange}\r\n">\r\n        {showNewAddressForm\r\n          ? <button =="" onclick="{()" variant='\"outline-danger\"'> setShowNewAddressForm(false)}&gt;Cancel</button>\r\n          : canUpsertAddresses\r\n            &amp;&amp; <button =="" data-sid='\"btnInvoicePaymentModalAddressAdd\"\r\n' onclick="{()" variant='\"secondary\"\r\n'> {\r\n              /* Do nothing */\r\n                setShowNewAddressForm(true);\r\n              }}&gt;Add</button>\r\n        }\r\n      </contactswitch\r\n></div>\r\n      {showNewAddressForm &amp;&amp; <div classname='\"mb-3\"'>\r\n        <newaddressform onconfirm="{addAddressToAddressBookAndSelect}" type='\"billing\"'>\r\n      </newaddressform></div>}\r\n    </loadingwidget></div>\r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { INewWalletFormConfirmData, NewWalletForm } from \"src/_shared/forms/NewWalletForm\";\r\nimport { WalletSwitch } from \"src/Dashboard/Wallet/WalletSwitch\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { setWallet, useWallet } from \"src/_redux/slices/walletSlice\";\r\n\r\nexport const InvoiceModalWalletSection = (props: {\r\n  onChange: (walletItem: WalletModel) =&gt; void;\r\n  onCVVChange: (cvv: string) =&gt; void;\r\n  CVV: string;\r\n  initialWalletItem?: WalletModel\r\n}): JSX.Element =&gt; {\r\n  const { onChange, onCVVChange, CVV, initialWalletItem } = props;\r\n\r\n  const [ showNewWalletForm, setShowNewWalletForm ] = useState<boolean>(false);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const currentUser = useCurrentUser();\r\n  const wallet = useWallet();\r\n  const dispatch = useDispatch();\r\n\r\n  function addCardToWalletAndSelect(cardData: INewWalletFormConfirmData) {\r\n    setRunning();\r\n    const {\r\n      CreditCardNumber,\r\n      CreditCardCVV,\r\n      CardNickName,\r\n      CardHolderName,\r\n      ExpirationMonth,\r\n      ExpirationYear\r\n    } = cardData;\r\n    const walletData = {\r\n      CardHolderName,\r\n      CreditCardNumber,\r\n      ExpirationMonth,\r\n      ExpirationYear,\r\n      Name: CardNickName\r\n    };\r\n    let newWalletItemID: number = null;\r\n    cvApi.payments\r\n      .CreateCurrentUserWalletEntry({\r\n        ...walletData,\r\n        Active: true,\r\n        CreatedDate: new Date(),\r\n        ExpirationYear: parseInt(walletData.ExpirationYear, 10),\r\n        ID: null,\r\n        IsDefault: false,\r\n        UserID: currentUser.ID\r\n      })\r\n      .then(res =&gt; {\r\n        if (!res.data.ActionSucceeded) {\r\n          finishRunning(true, \" Failed to create wallet item\");\r\n          return Promise.reject(new Error(\"Failed to create wallet item\"));\r\n        }\r\n        newWalletItemID = res.data.Result.ID;\r\n        return cvApi.payments.GetCurrentUserWallet();\r\n      })\r\n      .then(res =&gt; {\r\n        if (!res.data.ActionSucceeded) {\r\n          throw new Error(\" Failed to fetch wallet\");\r\n        }\r\n        dispatch(setWallet(res.data.Result));\r\n        const newWalletItem = res.data.Result.find(\r\n          w =&gt; w.ID === newWalletItemID\r\n        );\r\n        if (!newWalletItem) {\r\n          finishRunning(true, \" Failed to find added wallet item\");\r\n          return;\r\n        }\r\n        onChange(newWalletItem);\r\n        onCVVChange(CreditCardCVV);\r\n        setShowNewWalletForm(false);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  return (\r\n    <div classname='\"position-relative\"'>\r\n      {viewState.running &amp;&amp; <loadingwidget overlay="{true}">}\r\n      <div align-items-start\"="" classname='\"d-flex'>\r\n        {wallet &amp;&amp; <walletswitch\r\n classes='\"flex-grow-1\"\r\n' cvv="{CVV}\r\n" disabled="{showNewWalletForm}\r\n" excludeadd="{true}\r\n" hidewalletblock="{showNewWalletForm}\r\n" initialwalletid="{initialWalletItem?.ID}\r\n" onchange="{onChange}\r\n" oncvvchange="{onCVVChange}\r\n">\r\n          {showNewWalletForm\r\n            ? <button\r\n =="" data-sid='\"btInvoiceModalNewWalletCancel\"\r\n' onclick="{()" variant='\"outline-danger\"\r\n'> setShowNewWalletForm(false)}&gt;\r\n              {t(\"ui.storefront.common.Cancel\")}\r\n            \r\n            : <button\r\n =="" data-sid='\"btnInvoiceModalNewWalletAdd\"\r\n' onclick="{()" variant='\"secondary\"\r\n'> {\r\n                setShowNewWalletForm(true);\r\n              }}&gt;\r\n              {t(\"ui.storefront.checkout.views.paymentInformation.AddCardToWallet\")}\r\n            }\r\n        }\r\n      </button\r\n></button\r\n></walletswitch\r\n></div>\r\n      {showNewWalletForm &amp;&amp; <div classname='\"mb-3\"'>\r\n        <newwalletform onconfirm="{addCardToWalletAndSelect}" submitbtndisabled="{viewState.running}">\r\n      </newwalletform></div>}\r\n    </loadingwidget></div>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, FormControl, FormGroup, Table } from \"react-bootstrap\";\r\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { AccountContactModel, SalesInvoiceModel, WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { GetCurrentAccountSalesInvoicesDto, GetSurchargeForInvoicePaymentDto } from \"src/_api\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { InvoiceModalBillingContactSection } from \"src/Dashboard/Invoices/InvoiceModalBillingContactSection\";\r\nimport { InvoiceModalWalletSection } from \"src/Dashboard/Invoices/InvoiceModalWalletSection\";\r\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\n\r\ninterface IPayMultipleInvoicesModalProps {\r\n  show: boolean;\r\n  onConfirm?: () =&gt; void;\r\n  onCancel: () =&gt; void;\r\n}\r\n\r\nexport const PayMultipleInvoicesModal = (props: IPayMultipleInvoicesModalProps): JSX.Element =&gt; {\r\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState<walletmodel>(null);\r\n  const [ selectedWalletItemCVV, setSelectedWalletItemCVV ]\r\n    = useState<string>(\"\");\r\n  const [ selectedBillingContact, setSelectedBillingContact ]\r\n    = useState<accountcontactmodel>(null);\r\n  const [ unpaidInvoices, setUnpaidInvoices ] = useState<salesinvoicemodel[]>(null);\r\n  const [ selectedAmounts, setSelectedAmounts ] = useState&lt;{ [ID: string]: string }&gt;(null);\r\n  const [ surchargeAmount, setSurchargeAmount ] = useState<number>(null);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const addressBook = useAddressBook();\r\n\r\n  const { show, onConfirm, onCancel } = props;\r\n\r\n  useEffect(() =&gt; {\r\n    if (!addressBook || selectedBillingContact) {\r\n      return;\r\n    }\r\n    const defaultBilling = addressBook.find(ac =&gt; ac.IsBilling);\r\n    setSelectedBillingContact(defaultBilling ?? null);\r\n  }, [ addressBook ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (show) {\r\n      if (!unpaidInvoices) {\r\n        getInvoices();\r\n      }\r\n    } else {\r\n      setSelectedAmounts(null);\r\n      setUnpaidInvoices(null);\r\n    }\r\n  }, [ show, unpaidInvoices ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (selectedAmounts) {\r\n      calcSurcharge();\r\n    }\r\n  }, [ selectedAmounts, selectedWalletItem, selectedBillingContact ]);\r\n\r\n  async function getInvoices(data: GetCurrentAccountSalesInvoicesDto = {}) {\r\n    setRunning();\r\n    const sendData: GetCurrentAccountSalesInvoicesDto = {\r\n      Sorts: [\r\n        {\r\n          dir: \"desc\",\r\n          field: \"ID\",\r\n          order: 1\r\n        }\r\n      ],\r\n      MinBalanceDue: 0.01,\r\n      ...data\r\n    };\r\n    await cvApi.providers\r\n      .GetCurrentAccountSalesInvoices(sendData)\r\n      .then(result =&gt; {\r\n        const invoicesWithReadableDate = result.data.Results.map(r =&gt; {\r\n          if (!r.CreatedDate) {\r\n            return r;\r\n          }\r\n          const date = new Date(r.CreatedDate);\r\n          return {\r\n            ...r,\r\n            CreatedDate: `${date.toDateString()} ${date.toLocaleTimeString()}`\r\n          };\r\n        });\r\n        setUnpaidInvoices(invoicesWithReadableDate);\r\n        if (!selectedAmounts) {\r\n          setSelectedAmounts(invoicesWithReadableDate.reduce((curVal, curInvoice) =&gt; {\r\n            curVal[curInvoice.ID.toString()] = curInvoice.BalanceDue.toFixed(2);\r\n            return curVal;\r\n          }, {} as { [ID: string]: string }));\r\n        }\r\n        finishRunning(false);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"failed to get current account sales invoices\");\r\n      });\r\n  }\r\n\r\n  const getTotalPaymentAmount = (): number =&gt; {\r\n    if (!selectedAmounts) {\r\n      return 0;\r\n    }\r\n    return Object.values(selectedAmounts).reduce((curVal, amt) =&gt; curVal + parseFloat(amt), 0);\r\n  };\r\n\r\n  const getTotalFees = (): number =&gt; {\r\n    if (!unpaidInvoices || !selectedAmounts) {\r\n      return 0;\r\n    }\r\n    const invoicesReceivingPayment = unpaidInvoices.filter(inv =&gt; parseFloat(selectedAmounts[inv.ID.toString()]) &gt; 0);\r\n    return invoicesReceivingPayment.reduce((sum, inv) =&gt; sum + (inv.Totals.Fees || 0), 0) + (surchargeAmount ?? 0);\r\n  };\r\n\r\n  function payInvoices(): void {\r\n    const {\r\n      ID,\r\n      CardHolderName,\r\n      CardType,\r\n      CreditCardNumber,\r\n      ExpirationMonth,\r\n      ExpirationYear\r\n    } = selectedWalletItem;\r\n    setRunning();\r\n    const amountsOverZero: { [ID: string]: number } = {};\r\n    for (const id in selectedAmounts) {\r\n      if (parseFloat(selectedAmounts[id])) {\r\n        amountsOverZero[id] = parseFloat(selectedAmounts[id]);\r\n      }\r\n    }\r\n    cvApi.providers\r\n      .PayMultipleInvoicesByAmounts({\r\n        Billing: selectedBillingContact.Slave,\r\n        Amounts: amountsOverZero,\r\n        Payment: {\r\n          Active: true,\r\n          Amount: getTotalPaymentAmount() + getTotalFees() + (surchargeAmount ?? 0),\r\n          CVV: selectedWalletItemCVV,\r\n          CardHolderName,\r\n          CardNumber: CreditCardNumber,\r\n          CardType,\r\n          CreatedDate: new Date(),\r\n          // CustomKey: null,\r\n          ExpirationMonth,\r\n          ExpirationYear,\r\n          ID: 0,\r\n          StatusID: null,\r\n          TypeID: null,\r\n          WalletID: ID,\r\n          Zip: null\r\n        }\r\n      })\r\n      .then(res =&gt; {\r\n        finishRunning();\r\n        onConfirm();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err?.data?.Message ?? \"Failed to pay invoices\");\r\n      });\r\n  }\r\n\r\n  function calcSurcharge(): void {\r\n    if (!cefConfig?.featureSet?.surcharges?.enabled || !unpaidInvoices || !selectedAmounts) {\r\n      return;\r\n    }\r\n    // TODO: implement debounce\r\n    if (!selectedWalletItem) {\r\n      finishRunning(true, \"Cannot calculate surcharge, no selected card.\");\r\n      return;\r\n    }\r\n    if (!selectedWalletItem?.SerializableAttributes?.BIN?.Value) {\r\n      finishRunning(true, \"Cannot calculate surcharge, selected card has no BIN number assigned.\");\r\n      return;\r\n    }\r\n    if (!selectedBillingContact?.SlaveID) {\r\n      finishRunning(true, \"Cannot calculate surcharge, current account contact not set.\");\r\n      return;\r\n    }\r\n    const ids = unpaidInvoices.filter(invoice =&gt; parseFloat(selectedAmounts[invoice.ID.toString()]) &gt; 0).map(x =&gt; x.ID);\r\n    const dto = {\r\n      BIN: selectedWalletItem.SerializableAttributes.BIN.Value,\r\n      BillingContactID: selectedBillingContact.SlaveID,\r\n      InvoiceIDs: new Set(ids),\r\n      TotalAmount: getTotalPaymentAmount() + getTotalFees()\r\n    } as GetSurchargeForInvoicePaymentDto;\r\n    if (cefConfig?.debug) {\r\n      console.log(`Sending ${dto}`);\r\n    }\r\n    cvApi.payments.GetSurchargeForInvoicePayment(dto).then(r =&gt; {\r\n      if (!r.data || !r.data.ActionSucceeded) {\r\n        finishRunning(true, \"Cannot calculate surcharge, network error.\");\r\n        return;\r\n      }\r\n      finishRunning();\r\n      setSurchargeAmount(r.data.Result);\r\n    })\r\n      .catch(reason =&gt; finishRunning(true, reason));\r\n  }\r\n\r\n  let totalBalanceDue = 0;\r\n  if (unpaidInvoices?.length) {\r\n    totalBalanceDue = unpaidInvoices.reduce((sum, curInvoice) =&gt; sum + (curInvoice.BalanceDue || 0), 0);\r\n  }\r\n  const totalPaymentAmount = getTotalPaymentAmount();\r\n\r\n  return (\r\n    <confirmationmodal\r\n !selectedwalletitem\r\n="" 3\r\n="" <="" confirmdisabled="{\r\n" onconfirm="{payInvoices}\r\n" selectedwalletitemcvv.length="" show="{show}\r\n" title='{t(\"ui.storefront.userDashboard.controls.salesDetail.PayInvoice.OptionalPlural\")}\r\n' ||=""> 4\r\n        || !selectedAmounts\r\n        || !totalPaymentAmount\r\n        || !selectedBillingContact\r\n        || viewState.running\r\n        || viewState.hasError\r\n      }\r\n      onCancel={onCancel}\r\n      size={ServiceStrings.modalSizes.lg}&gt;\r\n      <div classname='\"text-body' position-relative\"="">\r\n        {selectedAmounts &amp;&amp; unpaidInvoices &amp;&amp; <div classname='\"table-responsive' mb-2\"="" scroll-over-300="" w-100="">\r\n          \r\n            \r\n              \r\n                \r\n                {cefConfig?.featureSet.salesInvoices.hasIntegratedKeys &amp;&amp; }\r\n                \r\n                \r\n              \r\n            \r\n            \r\n              {unpaidInvoices.map(invoice =&gt; {\r\n                const { ID, CustomKey, BalanceDue } = invoice;\r\n                return \r\n                  \r\n                  {cefConfig?.featureSet.salesInvoices.hasIntegratedKeys &amp;&amp; }\r\n                  \r\n                  \r\n                ;\r\n              })}\r\n            \r\n          <table hover\r\n="" size='\"sm\"\r\n' striped=""><thead><tr><th classname='\"w-15' text-end\"="">\r\n                  {t(\"ui.storefront.common.Number.Symbol\")}\r\n                </th><th classname='\"w-25\"'>\r\n                  {t(\"ui.storefront.common.Key\")}\r\n                </th><th classname='\"w-25' text-end\"="">{t(\"ui.storefront.userDashboard2.controls.salesDetail.BalanceDue\")}</th><th classname='\"w-35' text-center\"="">{t(\"ui.storefront.cart.amount\")}</th></tr></thead><tbody classname='\"scroll-over-300\"'><tr key="{ID}"><td>\r\n                    <label classname='\"fw-normal' form-control-static="" mb-0\"="" text-end="" w-100="">\r\n                      {ID}\r\n                    </label>\r\n                  </td><td>\r\n                    <label\r\n \"break-all\"="" classname='\"fw-normal' form-control-static="" mb-0\"\r\n="" small="" style="{{" w-100="" wordbreak:="" }}="">{CustomKey}\r\n                    \r\n                  </label\r\n></td><td>\r\n                    <label classname='\"font-weight-normal' form-control-static="" mb-0\"="" text-end="" w-100="">\r\n                      {currencyFormatter.format(BalanceDue)}\r\n                    </label>\r\n                  </td><td>\r\n                    <formgroup classname='\"mb-0\"'>\r\n                      <formcontrol\r\n =="" classname='\"text-end\"\r\n' onchange="{e" type='\"number\"\r\n' value="{selectedAmounts[ID.toString()]}\r\n"> {\r\n                          if ((/^[0-9]{1,6}(?:\\.[0-9]{1,2})?$/u).test(e.target.value)\r\n                            &amp;&amp; parseFloat(e.target.value) &lt;= invoice.BalanceDue\r\n                            &amp;&amp; parseFloat(e.target.value) &gt;= 0) {\r\n                            setSelectedAmounts({\r\n                              ...selectedAmounts,\r\n                              [ID.toString()]: parseFloat(e.target.value).toString()\r\n                            });\r\n                          }\r\n                        }}\r\n                        onBlur={() =&gt; {\r\n                          let newValue = selectedAmounts[ID.toString()];\r\n                          if (newValue.includes(\".\")) {\r\n                            const lengthAfterDecimal = selectedAmounts[ID.toString()].split(\".\")[1].length;\r\n                            if (lengthAfterDecimal &lt; 2) {\r\n                              newValue += \"0\";\r\n                            }\r\n                          } else {\r\n                            newValue += \".00\";\r\n                          }\r\n                          setSelectedAmounts({\r\n                            ...selectedAmounts,\r\n                            [ID.toString()]: newValue\r\n                          });\r\n                        }}\r\n                        id={`nudAmountInv_${ID}`}\r\n                        name={`nudAmountInv_${ID}`}\r\n                        step={0.01}\r\n                        min={0}\r\n                        max={BalanceDue}\r\n                        required={false} /&gt;\r\n                    </formcontrol\r\n></formgroup>\r\n                  </td></tr></tbody></table>\r\n        </div> }\r\n        {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n        <span>\r\n          {t(\"ui.storefront.checkout.views.paymentInformation.selectACard\")}\r\n        </span>\r\n        <invoicemodalwalletsection\r\n =="" onchange="{walletItem"> {\r\n            setSelectedWalletItem(walletItem);\r\n            setSelectedWalletItemCVV(\"\");\r\n          }}\r\n          onCVVChange={setSelectedWalletItemCVV}\r\n          CVV={selectedWalletItemCVV}\r\n          initialWalletItem={selectedWalletItem}\r\n        /&gt;\r\n        <span>\r\n          {t(\r\n            \"ui.storefront.userDashboard2.controls.addressBook.PleaseSelectABillingAddress\"\r\n          )}\r\n        </span>\r\n        <invoicemodalbillingcontactsection\r\n =="" addressbook="{addressBook}\r\n" onchange="{contact"> {\r\n            setSelectedBillingContact(contact);\r\n          }}\r\n          initialContact={selectedBillingContact}\r\n        /&gt;\r\n        <div classname='\"bg-light' p-3\"="">\r\n          <div classname='\"d-flex\"'>\r\n            <div :="" ?="" \"w-100\"\r\n="" \"w-50\"="" cefconfig?.featureset.salesinvoices.canpayviauserdashboard.multiple.partial="" classname="{\r\n" }="">\r\n              <p classname='\"mb-1\"'>\r\n                {t(\"ui.storefront.userDashboard.invoices.BalanceDue\")}\r\n              </p>\r\n              <p classname='\"h3' mb-1\"="" mt-0="">{currencyFormatter.format(totalBalanceDue)}</p>\r\n            </div>\r\n          </div>\r\n          <div classname='\"d-flex\"'>\r\n            <div classname='\"w-50\"'>\r\n              <p classname='\"mb-2\"'>{t(\"ui.storefront.purchasing.transactionFee\")}</p>\r\n              {viewState.running ? <p classname='\"h3' mb-1\"="" mt-0="">{t(\"ui.storefront.purchasing.calculating.ellipsis\")}</p>\r\n                : <p classname='\"h3' mb-1\"="" mt-0="">{currencyFormatter.format(surchargeAmount)}</p>\r\n              }\r\n            </div>\r\n          </div>\r\n          <div classname='\"d-flex\"'>\r\n            <div classname='\"w-50\"'>\r\n              <p classname='\"mb-1\"'>Total Fees</p>\r\n              <p classname='\"h3' mb-1\"="" mt-0="">\r\n                {currencyFormatter.format(getTotalFees())}\r\n              </p>\r\n            </div>\r\n            <div classname='\"w-50\"'>\r\n              <p classname='\"mb-1\"'>Total Payment Amount</p>\r\n              <p classname='\"h3' my-0\"="">\r\n                {/* SumTotal || ManualAmount + surchargeAmount */}\r\n                {currencyFormatter.format(totalPaymentAmount + surchargeAmount)}\r\n              </p>\r\n            </div>\r\n          </div>\r\n          {/* TODO: Remarks about useGreater uplift fee result setting when active (default off) */}\r\n          <div>\r\n            {cefConfig?.featureSet?.payments?.methods?.creditCard?.uplifts?.percent &gt; 0\r\n              &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n                <small classname='\"small\"'>\r\n                  {t(\"ui.storefront.purchasing.weMayApplyFeeToCCtransToCoverCosts\")}\r\n                </small>\r\n              </p>\r\n            }\r\n            {cefConfig?.featureSet?.payments?.methods?.creditCard?.uplifts?.amount &gt; 0\r\n              &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n                <b>NOTE:</b>\r\n                A {currencyFormatter.format(cefConfig?.featureSet?.payments?.methods?.creditCard?.uplifts?.amount)}\r\n                {\" \"}processing fee is charged for credit card transactions.\r\n              </p>\r\n            }\r\n          </div>\r\n          {/* TODO: implement alternative ways to pay */}\r\n          {/* {selectedPaymentMethod === ServiceStrings?.checkout.paymentMethods.echeck &amp;&amp; <div>\r\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent &gt; 0 &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n              <small classname='\"small\"'>\r\n                <b>NOTE:</b> A {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent * 100}%\r\n                processing fee is charged for eCheck transactions.\r\n              </small>\r\n            </p>}\r\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.amount &gt; 0 &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n              <small classname='\"small\"'>\r\n                <b>NOTE:</b> A {currencyFormatter.format(cefConfig?.featureSet.payments.methods.eCheck.uplifts.amount)}\r\n                processing fee is charged for eCheck transactions.\r\n              </small>\r\n            </p>}\r\n          </div>} */}\r\n        </div>\r\n      </invoicemodalbillingcontactsection\r\n></invoicemodalwalletsection\r\n></loadingwidget></div>\r\n      \r\n        \r\n          \r\n            \r\n          \r\n        \r\n      <table classname='\"w-100\"'><tbody><tr><td classname='\"text-start' px-0\"="">\r\n              {viewState.running &amp;&amp; <alert 12px\"="" \"6px="" classname='\"md-mb-0' lg-mb-0="" padding:="" style="{{" text-start\"\r\n="" variant='\"info\"\r\n' }}="">\r\n                <p classname='\"mb-0\"'>\r\n                  <i classname='\"fal' fa-question-circle\"="">\r\n                 \r\n                  <span>{t(\"ui.storefront.common.Running.Ellipses\")}</span>\r\n                </i></p><i classname='\"fal' fa-question-circle\"="">\r\n              </i></alert><i classname='\"fal' fa-question-circle\"="">}\r\n              {viewState.hasError &amp;&amp; <alert 12px\"="" \"6px="" classname='\"md-mb-0' lg-mb-0="" padding:="" style="{{" text-start\"\r\n="" variant='\"danger\"\r\n' }}="">\r\n                <p classname='\"mb-0\"'>\r\n                  <i classname='\"fal' fa-question-circle\"="">\r\n                   \r\n                  {viewState.errorMessage ? <span>{viewState.errorMessage}</span> : <span>\r\n                    {t(\"ui.storefront.userDashboard2.modals.paymultipleInvoices.OopsSomethingWentWrongWithYourPayment\")}\r\n                  </span>}\r\n                </i></p><i classname='\"fal' fa-question-circle\"="">\r\n              </i></alert><i classname='\"fal' fa-question-circle\"="">}\r\n            </i></i></td></tr></tbody></table>\r\n    \r\n  );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { Fragment, useEffect, useRef, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { Column } from \"@material-table/core\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { CVGrid } from \"src/_shared/common/CVGrid\";\r\nimport { SalesInvoiceModel, StatusModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { GetCurrentAccountSalesInvoicesDto } from \"src/_api\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { PayMultipleInvoicesModal } from \"src/Dashboard/Invoices/PayMultipleInvoicesModal\";\r\nimport { Modal } from \"src/_shared/modals\";\r\n\r\ninterface IToolbarFilterColumn {\r\n  toolbarFilterType:\r\n    | \"input\"\r\n    | \"autocomplete\"\r\n    | \"attribute\"\r\n    | \"id\"\r\n    | \"select\"\r\n    | \"boolean\"\r\n    | \"minmaxnumber\"\r\n    | \"minmaxdate\";\r\n  toolbarFilterOptions?: Array<any>;\r\n  toolbarFilterTitle: string;\r\n  toolbarFilterPlaceholder?: string;\r\n  toolbarFilterMin?: number;\r\n  toolbarFilterMax?: number;\r\n}\r\n\r\ninterface IObjectKeys {\r\n  [key: string]: any;\r\n}\r\n\r\ninterface IInvoicesFilterData extends IObjectKeys {\r\n  ID: number;\r\n  Total: string;\r\n  \"Invoice Date\": {\r\n    MinDate: string;\r\n    MaxDate: string;\r\n  };\r\n  Status: string;\r\n}\r\n\r\ninterface IInvoicesProps {\r\n  isDashboardMain?: boolean;\r\n}\r\n\r\nexport const Invoices = (props: IInvoicesProps): JSX.Element =&gt; {\r\n  const { isDashboardMain } = props;\r\n  const pageSize = isDashboardMain ? 5 : 8;\r\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\r\n  const initialState = {\r\n    order: 1,\r\n    size: pageSize,\r\n    sortDirection: \"desc\",\r\n    sortField: \"CreatedDate\",\r\n    startIndex: 1\r\n  };\r\n  const [ { startIndex, size, sortDirection, sortField, order }, setFilterState ] = useState(initialState);\r\n  const [ invoices, setInvoices ] = useState<array<salesinvoicemodel>&gt;([]);\r\n  const [ statuses, setStatuses ] = useState<array<statusmodel>&gt;([]);\r\n  const [ totalInvoicesCount, setTotalInvoicesCount ] = useState<number>(0);\r\n  const [ showPayMultipleInvoicesModal, setShowPayMultipleInvoicesModal ] = useState(false);\r\n  const [ showInvoicesPaidModal, setShowInvoicesPaidModal ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const tableRef = useRef(null);\r\n\r\n  useEffect(() =&gt; {\r\n    getInvoiceStatuses();\r\n  }, []);\r\n\r\n  useEffect(() =&gt; {\r\n    getInvoices();\r\n  }, [ startIndex, size, sortDirection, sortField ]);\r\n\r\n  async function getInvoices(data: GetCurrentAccountSalesInvoicesDto = {}) {\r\n    setRunning();\r\n    const sendData: GetCurrentAccountSalesInvoicesDto = {\r\n      Paging: {\r\n        StartIndex: startIndex,\r\n        Size: size\r\n      },\r\n      Sorts: [\r\n        {\r\n          dir: sortDirection,\r\n          field: sortField,\r\n          order\r\n        }\r\n      ],\r\n      ...data\r\n    };\r\n    await cvApi.providers\r\n      .GetCurrentAccountSalesInvoices(sendData)\r\n      .then(result =&gt; {\r\n        const invoicesWithReadableDate = result.data.Results.map(r =&gt; {\r\n          if (!r.CreatedDate) {\r\n            return r;\r\n          }\r\n          const date = new Date(r.CreatedDate);\r\n          return {\r\n            ...r,\r\n            CreatedDate: `${date.toDateString()} ${date.toLocaleTimeString()}`\r\n          };\r\n        });\r\n        setInvoices(invoicesWithReadableDate);\r\n        setTotalInvoicesCount(result.data.TotalCount);\r\n        finishRunning(false);\r\n        // @ts-ignore\r\n        tableRef.current.onQueryChange();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"failed to get current account sales invoices\");\r\n      });\r\n  }\r\n\r\n  function getInvoiceStatuses(): void {\r\n    setRunning();\r\n    cvApi.invoicing\r\n      .GetSalesInvoiceStatuses()\r\n      .then(result =&gt; {\r\n        setStatuses(result.data.Results);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to get invoices statuses\");\r\n      });\r\n  }\r\n\r\n  function ViewDetailsButton(rowData: SalesInvoiceModel): JSX.Element {\r\n    const { ID, SalesGroupID } = rowData;\r\n    return (\r\n      <link\r\n btn-outline-primary\"\r\n="" classname='\"btn' to="{`/dashboard/sales-group/${SalesGroupID}/invoice/${ID}`}">\r\n        {t(\"ui.storefront.common.View\")}\r\n      \r\n    );\r\n  }\r\n\r\n  const columns: Array<column<salesinvoicemodel>&gt; = [\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"ID\",\r\n      title: \"ID\",\r\n      type: \"string\",\r\n      width: \"5%\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CustomKey\",\r\n      title: \"CustomKey\",\r\n      type: \"string\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CreatedDate\",\r\n      title: \"Order Date\",\r\n      type: \"datetime\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      render: rowData =&gt; <span>{rowData.Status.DisplayName ?? rowData.Status.Name ?? rowData.Status.CustomKey}</span>,\r\n      title: \"Status\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"Totals.Total\",\r\n      filterPlaceholder: \"1.99\",\r\n      headerStyle: { textAlign: \"right\" },\r\n      title: \"Total\",\r\n      type: \"currency\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      render: ViewDetailsButton,\r\n      width: \"fit-content\"\r\n    }\r\n  ];\r\n\r\n  const filterColumns: IToolbarFilterColumn[] = [\r\n    {\r\n      toolbarFilterTitle: \"Status\",\r\n      toolbarFilterType: \"select\",\r\n      toolbarFilterOptions: statuses\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"ID\",\r\n      toolbarFilterType: \"id\"\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"Invoice Date\",\r\n      toolbarFilterType: \"minmaxdate\"\r\n    }\r\n  ];\r\n\r\n  const formatFiltersObjectForGetInvoices = (\r\n    filterData: IInvoicesFilterData\r\n  ): IInvoicesFilterData =&gt; {\r\n    const formatted: IInvoicesFilterData = {} as IInvoicesFilterData;\r\n    for (const filterCol of filterColumns) {\r\n      const filterValue = filterData[filterCol.toolbarFilterTitle];\r\n      if (filterValue) {\r\n        switch (filterCol.toolbarFilterTitle) {\r\n          case \"Total\": {\r\n            formatted.Totals = { Total: filterValue };\r\n            break;\r\n          }\r\n          case \"Status\": {\r\n            if (filterCol.toolbarFilterOptions &amp;&amp; filterValue !== \"All\") {\r\n              formatted.StatusID = filterCol.toolbarFilterOptions.find(\r\n                op =&gt; op.CustomKey === filterValue\r\n              ).ID;\r\n              break;\r\n            }\r\n            formatted.StatusID = \"\";\r\n            break;\r\n          }\r\n          case \"ID\": {\r\n            formatted.ID = filterValue;\r\n            break;\r\n          }\r\n          case \"Invoice Date\": {\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MinDate) {\r\n              formatted.MinDate = new Date(filterValue.MinDate).toISOString();\r\n            }\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MaxDate) {\r\n              formatted.MaxDate = new Date(filterValue.MaxDate).toISOString();\r\n            }\r\n            break;\r\n          }\r\n          default: {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return formatted;\r\n  };\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <modal =="" oncancel="{()" show="{showInvoicesPaidModal}\r\n"> setShowInvoicesPaidModal(false)}\r\n        size=\"sm\"&gt;\r\n        <span>{t(\"ui.storefront.userDashboard2.modals.payInvoice.multi.Success.Message\")}</span>\r\n        <hr classname='\"mx-n3\"'/>\r\n        <div classname='\"d-flex' justify-content-end\"="">\r\n          <button\r\n =="" onclick="{()" variant='\"primary\"\r\n'> {\r\n              setShowInvoicesPaidModal(false);\r\n              getInvoices();\r\n            }}&gt;\r\n            {t(\"ui.storefront.common.OK\")}\r\n          \r\n        </button\r\n></div>\r\n      </modal>\r\n      <paymultipleinvoicesmodal =="" oncancel="{()" show="{showPayMultipleInvoicesModal}\r\n"> setShowPayMultipleInvoicesModal(false)}\r\n        onConfirm={() =&gt; {\r\n          setShowPayMultipleInvoicesModal(false);\r\n          setShowInvoicesPaidModal(true);\r\n        }}\r\n      /&gt;\r\n      <row>\r\n        \r\n          <div align-items-center="" classname='\"d-flex' justify-content-between\"="">\r\n            {isDashboardMain\r\n              ? <fragment>\r\n                <h4 classname='\"title\"'>\r\n                  <span>Recent {t(\"ui.storefront.common.Invoice.Plural\")}</span>\r\n                </h4>\r\n              </fragment>\r\n              : <h1 classname='\"title\"'>\r\n                <i classname='\"fal' fa-file-invoice-dollar="" me-2\"="">\r\n                <span>{t(\"ui.storefront.common.Invoice.Plural\")}</span>\r\n              </i></h1><i classname='\"fal' fa-file-invoice-dollar="" me-2\"="">\r\n            }\r\n            <div>\r\n              {cefConfig?.featureSet.salesInvoices.canPayViaUserDashboard.multiple.enabled\r\n                &amp;&amp; <button =="" aria-label='{t(\"ui.storefront.userDashboard2.views.salesinvoices.PayInvoices\")}\r\n' classname='\"rounded\"\r\n' disabled='\"payInvoicesCtrl.disabled\"\r\n' id='\"btnPayInvoices\"\r\n' name='\"btnPayInvoices\"\r\n' onclick="{()" title='{t(\"ui.storefront.userDashboard2.views.salesinvoices.PayInvoices\")}\r\n' variant='\"outline-secondary\"\r\n'> setShowPayMultipleInvoicesModal(true)}&gt;\r\n                  {t(\"ui.storefront.userDashboard2.views.salesinvoices.PayInvoices\")}\r\n                </button>}\r\n            </div>\r\n          </i></div><i classname='\"fal' fa-file-invoice-dollar="" me-2\"="">\r\n          {viewState.hasError\r\n          &amp;&amp; <errorview ??="" error="{viewState.errorMessage" viewstate.errormessages[0]}="">\r\n          }\r\n        \r\n      </errorview></i></row><i classname='\"fal' fa-file-invoice-dollar="" me-2\"="">\r\n      <row>\r\n        \r\n          <cvgrid\r\n -="" 1}\r\n="" :="" =="" ?="" []="" columns="{columns}\r\n" data="{invoices}\r\n" defaultpagesize="{pageSize}\r\n" defaultpagesizeoptions="{pageSizeOptions}\r\n" filtercolumns="{isDashboardMain" filtercolumns}\r\n="" onresetclicked="{()" page="{startIndex" ref="{tableRef}\r\n" totalcount="{totalInvoicesCount}\r\n"> {\r\n              setFilterState(initialState);\r\n              getInvoices();\r\n            }\r\n            }\r\n            onFilterClicked={(data: IInvoicesFilterData) =&gt; getInvoices(formatFiltersObjectForGetInvoices(data))\r\n            }\r\n            onPageChange={(page: number, pageSizeI: number) =&gt; {\r\n              setFilterState(prev =&gt; ({ ...prev, startIndex: page + 1, size: pageSizeI }));\r\n            }}\r\n            onOrderChange={(invoiceBy: number, invoiceDirection: string) =&gt; {\r\n              let sortFieldToApply = \"CreatedDate\";\r\n              let sortDirectionToApply = \"desc\";\r\n              if (invoiceBy &gt;= 0) {\r\n                // @ts-ignore possibly 'undefined'\r\n                sortFieldToApply = columns[invoiceBy].field;\r\n                if (invoiceDirection.length) {\r\n                  sortDirectionToApply = invoiceDirection;\r\n                }\r\n              }\r\n              setFilterState(prev =&gt; ({ ...prev, sortField: sortFieldToApply, sortDirection: sortDirectionToApply }));\r\n            }}\r\n            isLoading={viewState.running}\r\n          /&gt;\r\n          {isDashboardMain\r\n            &amp;&amp; <fragment>\r\n              <p classname='\"text-end\"'>\r\n                <link\r\n btn-link="" btn-link-light="" classname='\"btn' id='\"userDashboard_salesInvoice_viewAll\"' text-decoration-none\"\r\n="" to='\"/dashboard/invoices\"\r\n'>\r\n                  <span classname='\"me-1\"'>View All</span>\r\n                  <i classname='\"fal' fa-angle-double-right\"="">\r\n                \r\n              </i></link\r\n></p><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></fragment><i classname='\"fal' fa-angle-double-right\"="">\r\n          }\r\n        \r\n      </i></cvgrid\r\n></row><i classname='\"fal' fa-angle-double-right\"="">\r\n    \r\n  );\r\n};\r\n","import { Fragment, useEffect, useRef, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { Column } from \"@material-table/core\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { CVGrid } from \"src/_shared/common/CVGrid\";\r\nimport { SalesOrderModel, StatusModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { GetCurrentAccountSalesOrdersDto } from \"src/_api\";\r\n\r\ninterface IToolbarFilterColumn {\r\n  toolbarFilterType:\r\n  | \"input\"\r\n  | \"autocomplete\"\r\n  | \"attribute\"\r\n  | \"id\"\r\n  | \"select\"\r\n  | \"boolean\"\r\n  | \"minmaxnumber\"\r\n  | \"minmaxdate\";\r\n  toolbarFilterOptions?: Array<any>;\r\n  toolbarFilterTitle: string;\r\n  toolbarFilterPlaceholder?: string;\r\n  toolbarFilterMin?: number;\r\n  toolbarFilterMax?: number;\r\n}\r\n\r\ninterface IObjectKeys {\r\n  [key: string]: any;\r\n}\r\n\r\ninterface IOrdersFilterData extends IObjectKeys {\r\n  ID: number;\r\n  Total: string;\r\n  \"Order Date\": {\r\n    MinDate: string;\r\n    MaxDate: string;\r\n  };\r\n  Status: string;\r\n}\r\n\r\ninterface IOrdersProps {\r\n  isDashboardMain?: boolean;\r\n}\r\n\r\nexport const Orders = (props: IOrdersProps): JSX.Element =&gt; {\r\n  const { isDashboardMain } = props;\r\n  const pageSize = isDashboardMain ? 5 : 8;\r\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\r\n\r\n  const initialState = {\r\n    order: 1,\r\n    size: pageSize,\r\n    sortDirection: \"desc\",\r\n    sortField: \"CreatedDate\",\r\n    startIndex: 1\r\n  };\r\n\r\n  const [ { startIndex, size, sortDirection, sortField, order }, setFilterState ] = useState(initialState);\r\n  const [ orders, setOrders ] = useState<salesordermodel[]>([]);\r\n  const [ statuses, setStatuses ] = useState<statusmodel[]>([]);\r\n  const [ totalOrdersCount, setTotalOrdersCount ] = useState(0);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const tableRef = useRef(null);\r\n\r\n  useEffect(() =&gt; {\r\n    getOrders();\r\n  }, [ startIndex, size, sortDirection, sortField ]);\r\n\r\n  async function getOrders(data?: IOrdersFilterData) {\r\n    setRunning();\r\n    let getSalesOrdersDto: GetCurrentAccountSalesOrdersDto = {\r\n      Paging: {\r\n        StartIndex: startIndex,\r\n        Size: size\r\n      },\r\n      Sorts: [\r\n        {\r\n          dir: sortDirection,\r\n          field: sortField,\r\n          order\r\n        }\r\n      ],\r\n      HasSalesGroupAsMaster: false,\r\n      HasSalesGroupAsSub: true\r\n    };\r\n    if (data) {\r\n      getSalesOrdersDto = {\r\n        ...getSalesOrdersDto,\r\n        ...data\r\n      };\r\n    }\r\n    if (!statuses?.length) {\r\n      try {\r\n        const res = await cvApi.ordering.GetSalesOrderStatuses({\r\n          Active: true,\r\n          AsListing: true\r\n        });\r\n        setStatuses(res.data.Results);\r\n      } catch (err) {\r\n        finishRunning(true, err as any);\r\n      }\r\n    }\r\n\r\n    cvApi.ordering\r\n      .GetCurrentAccountSalesOrders(getSalesOrdersDto)\r\n      .then(result =&gt; {\r\n        const ordersWithReadableDate = result.data.Results.map(salesOrder =&gt; {\r\n          if (!salesOrder.CreatedDate) {\r\n            return salesOrder;\r\n          }\r\n          const date = new Date(salesOrder.CreatedDate);\r\n          return {\r\n            ...salesOrder,\r\n            CreatedDate: `${date.toDateString()} ${date.toLocaleTimeString()}`\r\n          };\r\n        });\r\n        setOrders(ordersWithReadableDate);\r\n        setTotalOrdersCount(result.data.TotalCount);\r\n        finishRunning(false);\r\n        if (tableRef?.current?.onQueryChange) {\r\n          tableRef.current.onQueryChange();\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to get current account sales+ orders\");\r\n      });\r\n  }\r\n\r\n  function ViewDetailsButton(rowData: SalesOrderModel): JSX.Element {\r\n    const { SalesGroupAsMasterID, SalesGroupAsSubID, ID, } = rowData;\r\n    return (\r\n      <link\r\n ${id}`}\r\n="" btn-outline-primary\"="" classname='\"btn' order="" salesgroupassubid}="" to="{`/dashboard/sales-group/${SalesGroupAsMasterID" ||="">\r\n        {t(\"ui.storefront.common.View\")}\r\n      \r\n    );\r\n  }\r\n\r\n  const columns: Array<column<salesordermodel>&gt; = [\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"ID\",\r\n      title: \"ID\",\r\n      type: \"string\",\r\n      width: \"5%\",\r\n      id: \"gridHeaderID\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CustomKey\",\r\n      title: \"CustomKey\",\r\n      type: \"string\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CreatedDate\",\r\n      title: \"Order Date\",\r\n      type: \"datetime\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      render: rowData =&gt; <span>{rowData.Status.DisplayName ?? rowData.Status.Name ?? rowData.Status.CustomKey}</span>,\r\n      title: \"Status\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"Totals.Total\",\r\n      filterPlaceholder: \"1.99\",\r\n      headerStyle: { textAlign: \"right\" },\r\n      title: \"Total\",\r\n      type: \"currency\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      render: ViewDetailsButton,\r\n      width: \"fit-content\"\r\n    }\r\n  ];\r\n\r\n  const filterColumns: Array<itoolbarfiltercolumn> = [\r\n    {\r\n      toolbarFilterTitle: \"ID\",\r\n      toolbarFilterType: \"id\"\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"Order Date\",\r\n      toolbarFilterType: \"minmaxdate\"\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"Status\",\r\n      toolbarFilterType: \"select\",\r\n      toolbarFilterOptions: statuses\r\n    }\r\n  ];\r\n\r\n  const formatFiltersObjectForGetOrders = (filterData: IOrdersFilterData): IOrdersFilterData =&gt; {\r\n    const formatted: IOrdersFilterData = {} as IOrdersFilterData;\r\n    for (const filterCol of filterColumns) {\r\n      const filterValue = filterData[filterCol.toolbarFilterTitle];\r\n      if (filterValue) {\r\n        switch (filterCol.toolbarFilterTitle) {\r\n          case \"Total\": {\r\n            formatted.Totals = { Total: filterValue };\r\n            break;\r\n          }\r\n          case \"Status\": {\r\n            if (filterCol.toolbarFilterOptions &amp;&amp; filterValue !== \"All\") {\r\n              formatted.StatusID = filterCol.toolbarFilterOptions.find(\r\n                op =&gt; op.CustomKey === filterValue\r\n              ).ID;\r\n              break;\r\n            }\r\n            formatted.StatusID = \"\";\r\n            break;\r\n          }\r\n          case \"ID\": {\r\n            formatted.ID = filterValue;\r\n            break;\r\n          }\r\n          case \"Order Date\": {\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MinDate) {\r\n              formatted.MinDate = new Date(filterValue.MinDate).toISOString();\r\n            }\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MaxDate) {\r\n              formatted.MaxDate = new Date(filterValue.MaxDate).toISOString();\r\n            }\r\n            break;\r\n          }\r\n          default: {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return formatted;\r\n  };\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <section classname='\"section-orders\"'>\r\n          <div align-items-center="" classname='\"section-title' d-flex="" justify-content-between\"="">\r\n            {isDashboardMain\r\n              ? <h4 classname='\"title\"'>\r\n                  <span>Recent Orders</span>\r\n                </h4>\r\n              : <h1 classname='\"title\"'>\r\n                <i classname='\"fal' fa-receipt="" me-2\"="">\r\n                <span data-sid='\"udOrdersTitleText\"'>Orders</span>\r\n              </i></h1><i classname='\"fal' fa-receipt="" me-2\"="">\r\n            }\r\n            </i></div><i classname='\"fal' fa-receipt="" me-2\"="">\r\n          <cvgrid\r\n -="" 1}\r\n="" :="" =="" ?="" []="" columns="{columns}\r\n" data="{orders}\r\n" defaultpagesize="{pageSize}\r\n" defaultpagesizeoptions="{pageSizeOptions}\r\n" filtercolumns="{isDashboardMain" filtercolumns}\r\n="" onresetclicked="{()" page="{startIndex" ref="{tableRef}\r\n" totalcount="{totalOrdersCount}\r\n"> {\r\n              setFilterState(initialState);\r\n              getOrders();\r\n            }\r\n            }\r\n            onFilterClicked={(data: IOrdersFilterData) =&gt; getOrders(formatFiltersObjectForGetOrders(data))\r\n            }\r\n            onPageChange={(page: number, pageSizeI: number) =&gt; {\r\n              setFilterState(prev =&gt; ({ ...prev, startIndex: page + 1, size: pageSizeI }));\r\n            }}\r\n            onOrderChange={(orderBy: number, orderDirection: string) =&gt; {\r\n              let sortFieldToApply = \"CreatedDate\";\r\n              let sortDirectionToApply = \"desc\";\r\n              if (orderBy &gt;= 0) {\r\n                // @ts-ignore possibly 'undefined'\r\n                sortFieldToApply = columns[orderBy].field;\r\n                if (sortFieldToApply.includes(\"Totals\")) {\r\n                  sortFieldToApply = \"Total\";\r\n                }\r\n                if (orderDirection.length) {\r\n                  sortDirectionToApply = orderDirection;\r\n                }\r\n              }\r\n              setFilterState(prev =&gt; ({ ...prev, sortField: sortFieldToApply, sortDirection: sortDirectionToApply }));\r\n            }}\r\n            isLoading={viewState.running}\r\n          /&gt;\r\n          {isDashboardMain\r\n            &amp;&amp; <fragment>\r\n              <p classname='\"text-end\"'>\r\n                <link\r\n btn-link="" btn-link-light="" classname='\"btn' id='\"userDashboard_salesOrder_viewAll\"' text-decoration-none\"\r\n="" to='\"/dashboard/orders\"\r\n'>\r\n                  <span classname='\"me-1\"'>View All</span>\r\n                  <i classname='\"fal' fa-angle-double-right\"="">\r\n                \r\n              </i></link\r\n></p><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></fragment><i classname='\"fal' fa-angle-double-right\"="">\r\n          }\r\n        </i></cvgrid\r\n></i></section><i classname='\"fal' fa-receipt="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n      \r\n      {viewState.hasError\r\n        &amp;&amp; \r\n          <errorview error="{viewState.errorMessage}">\r\n        \r\n      }\r\n    </errorview></i></i></row><i classname='\"fal' fa-receipt="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n  );\r\n};\r\n","import React, {Fragment, useEffect, useRef, useState} from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { Column } from \"@material-table/core\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { CVGrid } from \"src/_shared/common/CVGrid\";\r\nimport { SalesReturnModel, StatusModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { GetCurrentAccountSalesReturnsDto } from \"src/_api.Providers\";\r\n\r\ninterface IToolbarFilterColumn {\r\n  toolbarFilterType:\r\n  | \"input\"\r\n  | \"autocomplete\"\r\n  | \"attribute\"\r\n  | \"id\"\r\n  | \"select\"\r\n  | \"boolean\"\r\n  | \"minmaxnumber\"\r\n  | \"minmaxdate\";\r\n  toolbarFilterOptions?: Array<any>;\r\n  toolbarFilterTitle: string;\r\n  toolbarFilterPlaceholder?: string;\r\n  toolbarFilterMin?: number;\r\n  toolbarFilterMax?: number;\r\n}\r\n\r\ninterface IObjectKeys {\r\n  [key: string]: any;\r\n}\r\n\r\ninterface IReturnsFilterData extends IObjectKeys {\r\n  ID: number;\r\n  Total: string;\r\n  \"Order Date\": {\r\n    MinDate: string;\r\n    MaxDate: string;\r\n  };\r\n  Status: string;\r\n}\r\n\r\ninterface IReturnsProps {\r\n  isDashboardMain?: boolean;\r\n}\r\n\r\nexport const Returns = (props: IReturnsProps): JSX.Element =&gt; {\r\n  const { isDashboardMain } = props;\r\n  const pageSize = isDashboardMain ? 5 : 8;\r\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\r\n\r\n  const initialState = {\r\n    order: 1,\r\n    size: pageSize,\r\n    sortDirection: \"desc\",\r\n    sortField: \"CreatedDate\",\r\n    startIndex: 1\r\n  };\r\n\r\n  const [ { startIndex, size, sortDirection, sortField, order }, setFilterState ] = useState(initialState);\r\n  const [ returns, setReturns ] = useState<salesreturnmodel[]>([]);\r\n  const [ statuses, setStatuses ] = useState<statusmodel[]>([]);\r\n  const [ totalReturnsCount, setTotalReturnsCount ] = useState(0);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const tableRef = useRef(null);\r\n\r\n  useEffect(() =&gt; {\r\n    getReturns();\r\n  }, [ startIndex, size, sortDirection, sortField ]);\r\n\r\n  async function getReturns(data?: IReturnsFilterData) {\r\n    setRunning();\r\n    let getSalesReturnsDto: GetCurrentAccountSalesReturnsDto = {\r\n      Paging: {\r\n        StartIndex: startIndex,\r\n        Size: size\r\n      },\r\n      Sorts: [\r\n        {\r\n          dir: sortDirection,\r\n          field: sortField,\r\n          order\r\n        }\r\n      ],\r\n      HasSalesGroupAsMaster: true,\r\n      HasSalesGroupAsSub: false\r\n    };\r\n    if (data) {\r\n      getSalesReturnsDto = {\r\n        ...getSalesReturnsDto,\r\n        ...data\r\n      };\r\n    }\r\n    if (!statuses?.length) {\r\n      try {\r\n        const res = await cvApi.returning.GetSalesReturnStatuses({\r\n          Active: true,\r\n          AsListing: true\r\n        });\r\n        setStatuses(res.data.Results);\r\n      } catch (err) {\r\n        finishRunning(true, err as any);\r\n      }\r\n    }\r\n\r\n    cvApi.providers\r\n      .GetCurrentAccountSalesReturns(getSalesReturnsDto)\r\n      .then(result =&gt; {\r\n        const returnsWithReadableDate = result.data.Results.map(salesReturn =&gt; {\r\n          if (!salesReturn.CreatedDate) {\r\n            return salesReturn;\r\n          }\r\n          const date = new Date(salesReturn.CreatedDate);\r\n          return {\r\n            ...salesReturn,\r\n            CreatedDate: `${date.toDateString()} ${date.toLocaleTimeString()}`\r\n          };\r\n        });\r\n        setReturns(returnsWithReadableDate);\r\n        setTotalReturnsCount(result.data.TotalCount);\r\n        finishRunning(false);\r\n        if (tableRef?.current?.onQueryChange) {\r\n          tableRef.current.onQueryChange();\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to get current account sales+ returns\");\r\n      });\r\n  }\r\n\r\n  function ViewDetailsButton(rowData: SalesReturnModel): JSX.Element {\r\n    const {SalesGroupID, ID} = rowData;\r\n    return (\r\n      <link\r\n btn-outline-primary\"="" classname='\"btn' to="{`/dashboard/sales-group/${SalesGroupID}/return/${ID}`}\r\n">\r\n        {t(\"ui.storefront.common.View\")}\r\n      \r\n    );\r\n  }\r\n\r\n  const columns: Array<column<salesreturnmodel>&gt; = [\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"ID\",\r\n      title: \"ID\",\r\n      type: \"string\",\r\n      width: \"5%\",\r\n      id: \"gridHeaderID\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CustomKey\",\r\n      title: \"CustomKey\",\r\n      type: \"string\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CreatedDate\",\r\n      title: \"Order Date\",\r\n      type: \"datetime\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      render: rowData =&gt; <span>{rowData.Status.DisplayName ?? rowData.Status.Name ?? rowData.Status.CustomKey}</span>,\r\n      title: \"Status\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"Totals.Total\",\r\n      filterPlaceholder: \"1.99\",\r\n      headerStyle: { textAlign: \"right\" },\r\n      title: \"Total\",\r\n      type: \"currency\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      render: ViewDetailsButton,\r\n      width: \"fit-content\"\r\n    }\r\n  ];\r\n\r\n  const filterColumns: Array<itoolbarfiltercolumn> = [\r\n    {\r\n      toolbarFilterTitle: \"ID\",\r\n      toolbarFilterType: \"id\"\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"Order Date\",\r\n      toolbarFilterType: \"minmaxdate\"\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"Status\",\r\n      toolbarFilterType: \"select\",\r\n      toolbarFilterOptions: statuses\r\n    }\r\n  ];\r\n\r\n  const formatFiltersObjectForGetReturns = (filterData: IReturnsFilterData): IReturnsFilterData =&gt; {\r\n    const formatted: IReturnsFilterData = {} as IReturnsFilterData;\r\n    for (const filterCol of filterColumns) {\r\n      const filterValue = filterData[filterCol.toolbarFilterTitle];\r\n      if (filterValue) {\r\n        switch (filterCol.toolbarFilterTitle) {\r\n          case \"Total\": {\r\n            formatted.Totals = { Total: filterValue };\r\n            break;\r\n          }\r\n          case \"Status\": {\r\n            if (filterCol.toolbarFilterOptions &amp;&amp; filterValue !== \"All\") {\r\n              formatted.StatusID = filterCol.toolbarFilterOptions.find(\r\n                op =&gt; op.CustomKey === filterValue\r\n              ).ID;\r\n              break;\r\n            }\r\n            formatted.StatusID = \"\";\r\n            break;\r\n          }\r\n          case \"ID\": {\r\n            formatted.ID = filterValue;\r\n            break;\r\n          }\r\n          case \"Order Date\": {\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MinDate) {\r\n              formatted.MinDate = new Date(filterValue.MinDate).toISOString();\r\n            }\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MaxDate) {\r\n              formatted.MaxDate = new Date(filterValue.MaxDate).toISOString();\r\n            }\r\n            break;\r\n          }\r\n          default: {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return formatted;\r\n  };\r\n\r\n  return (\r\n    <row>\r\n      \r\n        <section classname='\"section-orders\"'>\r\n          <div align-items-center="" classname='\"section-title' d-flex="" justify-content-between\"="">\r\n            {isDashboardMain\r\n              ? <fragment>\r\n                <h4 classname='\"title\"'>\r\n                  <i classname='\"fal' fa-receipt="" me-2\"="">\r\n                  <span>Recent Returns</span>\r\n                </i></h4><i classname='\"fal' fa-receipt="" me-2\"="">\r\n                <p classname='\"text-end\"'>\r\n                  <link\r\n btn-link\"\r\n="" classname='\"btn' id='\"userDashboard_salesReturn_viewAll\"' to='\"/dashboard/returns\"\r\n'>\r\n                    <span classname='\"me-1\"'>View All</span>\r\n                    <i classname='\"fal' fa-angle-double-right\"="">\r\n                  \r\n                </i></link\r\n></p><i classname='\"fal' fa-angle-double-right\"="">\r\n              </i></i></fragment><i classname='\"fal' fa-receipt="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n              : <h1 classname='\"title\"'>\r\n                <i classname='\"fal' fa-receipt="" me-2\"="">\r\n                <span data-sid='\"udReturnsTitleText\"'>Returns</span>\r\n              </i></h1><i classname='\"fal' fa-receipt="" me-2\"="">\r\n            }\r\n          </i></i></i></div><i classname='\"fal' fa-receipt="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"=""><i classname='\"fal' fa-receipt="" me-2\"="">\r\n          <cvgrid\r\n -="" 1}\r\n="" :="" =="" ?="" []="" columns="{columns}\r\n" data="{returns}\r\n" defaultpagesize="{pageSize}\r\n" defaultpagesizeoptions="{pageSizeOptions}\r\n" filtercolumns="{isDashboardMain" filtercolumns}\r\n="" onresetclicked="{()" page="{startIndex" ref="{tableRef}\r\n" totalcount="{totalReturnsCount}\r\n"> {\r\n              setFilterState(initialState);\r\n              getReturns();\r\n            }\r\n            }\r\n            onFilterClicked={(data: IReturnsFilterData) =&gt; getReturns(formatFiltersObjectForGetReturns(data))\r\n            }\r\n            onPageChange={(page: number, pageSizeI: number) =&gt; {\r\n              setFilterState(prev =&gt; ({ ...prev, startIndex: page + 1, size: pageSizeI }));\r\n            }}\r\n            onOrderChange={(orderBy: number, orderDirection: string) =&gt; {\r\n              let sortFieldToApply = \"CreatedDate\";\r\n              let sortDirectionToApply = \"desc\";\r\n              if (orderBy &gt;= 0) {\r\n                // @ts-ignore possibly 'undefined'\r\n                sortFieldToApply = columns[orderBy].field;\r\n                if (sortFieldToApply.includes(\"Totals\")) {\r\n                  sortFieldToApply = \"Total\";\r\n                }\r\n                if (orderDirection.length) {\r\n                  sortDirectionToApply = orderDirection;\r\n                }\r\n              }\r\n              setFilterState(prev =&gt; ({ ...prev, sortField: sortFieldToApply, sortDirection: sortDirectionToApply }));\r\n            }}\r\n            isLoading={viewState.running}\r\n          /&gt;\r\n        </cvgrid\r\n></i></i></i></section><i classname='\"fal' fa-receipt="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"=""><i classname='\"fal' fa-receipt="" me-2\"="">\r\n      \r\n      {viewState.hasError\r\n        &amp;&amp; \r\n          <errorview error="{viewState.errorMessage}">\r\n        \r\n      }\r\n    </errorview></i></i></i></row><i classname='\"fal' fa-receipt="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"=""><i classname='\"fal' fa-receipt="" me-2\"="">\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { RemoveFromCartModal } from \"src/Cart/modals\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\n\r\nexport const WishList = (): JSX.Element =&gt; {\r\n  const [ wishListSalesItems, setWishListSalesItems ] = useState&lt;\r\n    SalesItemBaseModel<appliedcartitemdiscountmodel>[]\r\n  &gt;([]);\r\n  const [ wishListProducts, setWishListProducts ] = useState&lt;{ [id: string]: ProductModel }&gt;(null);\r\n\r\n  const wishListCart = useCart(ServiceStrings.carts.types.wishList);\r\n  const [ removeFromWLConfirmationModalInfo, setRemoveFromWLConfirmationModalInfo ] = useState&lt;{\r\n    show: boolean;\r\n    product: ProductModel;\r\n  }&gt;({\r\n    show: false,\r\n    product: null\r\n  });\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!wishListCart) {\r\n      return;\r\n    }\r\n    getWishList();\r\n  }, [ wishListCart, cefConfig, inventoryFactory, pricingFactory ]);\r\n\r\n  async function getWishList() {\r\n    if (!cefConfig || !inventoryFactory || !pricingFactory) {\r\n      return;\r\n    }\r\n    setRunning(\"Fetching wishlist...\");\r\n    try {\r\n      if (!wishListCart.SalesItems) {\r\n        setWishListSalesItems([]);\r\n        setWishListProducts(null);\r\n        finishRunning();\r\n        return;\r\n      }\r\n      const wlSalesItems = wishListCart.SalesItems;\r\n      setWishListSalesItems(wlSalesItems);\r\n      // eslint-disable-next-line init-declarations\r\n      let productsRes;\r\n      if (wlSalesItems?.length) {\r\n        productsRes = await cvApi.products.GetProductsByIDs({\r\n          IDs: wlSalesItems.map(item =&gt; item.ProductID)\r\n        });\r\n      }\r\n      let products = productsRes.data;\r\n      if (products &amp;&amp; cefConfig?.featureSet.inventory.enabled) {\r\n        products = await inventoryFactory.bulkFactoryAssign(products);\r\n      }\r\n      if (products &amp;&amp; cefConfig?.featureSet.pricing.enabled) {\r\n        products = await pricingFactory.bulkFactoryAssign(products);\r\n      }\r\n      const productsMap: { [id: string]: ProductModel } = {};\r\n      products?.forEach(product =&gt; {\r\n        productsMap[product.ID.toString()] = product;\r\n      });\r\n      setWishListProducts(productsMap);\r\n      finishRunning();\r\n    } catch (err: any) {\r\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch wish list\" ]);\r\n    }\r\n  }\r\n\r\n  function clearWishList(): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .ClearCurrentStaticCart({ TypeName: ServiceStrings.carts.types.wishList })\r\n      .then(_red =&gt; {\r\n        setWishListSalesItems([]);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"\");\r\n      });\r\n  }\r\n\r\n  function deleteWishListItem(salesItemId: number, callback?: () =&gt; void): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .RemoveCartItemByID(salesItemId)\r\n      .then(res =&gt; {\r\n        if (res.data) {\r\n          getWishList();\r\n          finishRunning();\r\n        }\r\n        if (callback) {\r\n          callback();\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message);\r\n      });\r\n  }\r\n\r\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void =&gt; {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .UpdateCartItemQuantity({\r\n        CartItemID: cartItemID,\r\n        Quantity: quantity,\r\n        QuantityBackOrdered: 0,\r\n        QuantityPreSold: 0\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          getWishList();\r\n        } else {\r\n          finishRunning(true, null, res.data.Messages);\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  return (\r\n    <row classname='\"position-relative\"'>\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      <removefromcartmodal\r\n =="" oncancel="{()" productname="{removeFromWLConfirmationModalInfo?.product?.Name}\r\n" show="{removeFromWLConfirmationModalInfo?.show}\r\n"> setRemoveFromWLConfirmationModalInfo({ show: false, product: null })}\r\n        onConfirm={() =&gt; {\r\n          deleteWishListItem(removeFromWLConfirmationModalInfo.product.ID, () =&gt; {\r\n            setRemoveFromWLConfirmationModalInfo({\r\n              show: false,\r\n              product: null\r\n            });\r\n          });\r\n        }}\r\n        parentRunning={viewState.running}\r\n        cartTypeText={t(\"ui.storefront.common.WishList\")}\r\n        cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}\r\n      /&gt;\r\n      \r\n        <h1>\r\n          <i classname='\"fal' fa-heart="" me-2\"="">\r\n          <span>{t(\"ui.storefront.common.WishList\")}</span>\r\n        </i></h1><i classname='\"fal' fa-heart="" me-2\"="">\r\n      \r\n      \r\n        <row>\r\n          \r\n            <button\r\n aria-label='{t(\"ui.storefront.userDashboard2.controls.wishList.ClearWishList\")}\r\n' classname='\"mb-3\"\r\n' disabled="{!wishListSalesItems?.length}\r\n" id='\"btnClearWishList\"\r\n' name='\"btnClearWishList\"\r\n' onclick="{clearWishList}" title='{t(\"ui.storefront.userDashboard2.controls.wishList.ClearWishList\")}\r\n' variant='\"secondary\"\r\n'>\r\n              {t(\r\n                \"ui.storefront.userDashboard2.controls.wishList.ClearWishList\"\r\n              )}\r\n            \r\n          \r\n          \r\n            {wishListSalesItems?.length\r\n              ? <carttablewidescreen\r\n carthasitems="{wishListSalesItems?.length" cartproducts="{wishListProducts}\r\n" includeaddtocart="{true}\r\n"> 0}\r\n                cartToUse={wishListCart}\r\n                orderDiscounts={null}\r\n                shippingDiscounts={null}\r\n                onChangeSalesItemQuantity={onChangeSalesItemQuantity}\r\n                onRemoveItemFromCartClicked={\r\n                  (productName: string, salesItemId: number) =&gt; deleteWishListItem(salesItemId)}\r\n                queuedIDs={[]}\r\n                parentRunning={viewState.running}\r\n                excludeBackorderInfo={true}\r\n              /&gt;\r\n              : <span classname='\"h4\"' id='\"WishListNoItemsText\"'>\r\n                {t(\r\n                  \"ui.storefront.userDashboard2.controls.wishList.NoItemsHaveBeenAddedToTheWishList\"\r\n                )}\r\n              </span>\r\n            }\r\n          \r\n        </carttablewidescreen\r\n></button\r\n></row>\r\n      \r\n    </i></removefromcartmodal\r\n></loadingwidget></row><i classname='\"fal' fa-heart="" me-2\"="">\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { createRef, forwardRef, useEffect } from \"react\";\r\nimport MaterialTable, { Column } from \"@material-table/core\";\r\nimport scssVariables from \"src/_meta/css/exposedToJSVariables.module.scss\";\r\n\r\ninterface IRowStyle {\r\n  borderStyle?: \"solid\" | \"dashed\" | \"none\" | \"hidden\";\r\n  fontWeight?: \"bold\" | \"normal\" | \"lighter\";\r\n  textAlign?: \"left\" | \"center\" | \"right\";\r\n}\r\ninterface ITableProps {\r\n  data: Array<any>;\r\n  columns: Column<any>[];\r\n  headerStyle?: IRowStyle;\r\n  setTableRef?(ref: any): void;\r\n  DetailPanelContent?(rowData: any): JSX.Element;\r\n}\r\n\r\nexport const Table = (props: ITableProps): JSX.Element =&gt; {\r\n  const { data, columns, headerStyle, setTableRef, DetailPanelContent } = props;\r\n  const matTableRef: any = createRef();\r\n\r\n  const columnCellStyle = {\r\n    borderWidth: \"1px\",\r\n    borderColor: scssVariables.tableBorderColor,\r\n    borderStyle: \"solid\",\r\n    padding: \"0.5rem 1rem\"\r\n  };\r\n\r\n  const columnsWithCellStyles = columns.map(col =&gt; ({\r\n    ...col,\r\n    ...col.cellStyle\r\n      ? {\r\n        ...col.cellStyle,\r\n        ...columnCellStyle\r\n      }\r\n      : columnCellStyle\r\n  }));\r\n\r\n  const TABLE_ICONS = {\r\n    // eslint-disable-next-line react/display-name\r\n    DetailPanel: forwardRef((_props, _ref) =&gt; null)\r\n  };\r\n\r\n  useEffect(() =&gt; {\r\n    if (setTableRef) {\r\n      setTableRef(matTableRef);\r\n    }\r\n  }, [ matTableRef ]);\r\n\r\n  return (\r\n    <div>\r\n      <materialtable\r\n &&="" (_rowdata,="" ...headerstyle="" 16,="" 1px\",\r\n="" 1rem\",\r\n="" 24="" 8,="" 8,\r\n="" [="" \"0="" \"0.5rem="" \"center\"\r\n="" \"dense\",\r\n="" \"none\"="" \"none\",\r\n="" \"normal\",\r\n="" ],\r\n="" border:="" bordercolor:="" borderstyle:="" borderwidth:="" columns="{columnsWithCellStyles}\r\n" data="{data}\r\n" detailpanelcolumnstyle:="" display:="" draggable:="" editcellstyle:="" emptyrowswhenpaging:="" false,\r\n="" fontweight:="" headerstyle.borderstyle="" headerstyle.fontweight="" headerstyle.textalign="" headerstyle:="" index)="" options="{{\r\n" padding:="" pagesize:="" pagesizeoptions:="" rowstyle:="" scssvariables.tablebordercolor,\r\n="" tableref="{matTableRef}\r\n" textalign:="" {="" {\r\n="" ||="" },\r\n="" }\r\n=""> ({\r\n            backgroundColor: index % 2 === 0 ? scssVariables.light : scssVariables.white,\r\n            border: `1px solid ${scssVariables.tableBorderColor}`\r\n          }),\r\n          showDetailPanelIcon: false,\r\n          thirdSortClick: false,\r\n          toolbar: false,\r\n        }}\r\n        icons={TABLE_ICONS}\r\n        detailPanel={\r\n          DetailPanelContent\r\n            ? (obj: any) =&gt; DetailPanelContent(obj.rowData)\r\n            : undefined\r\n        }\r\n      /&gt;\r\n    </materialtable\r\n></div>\r\n  );\r\n};\r\n","import { Fragment, useEffect, useState } from \"react\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { auto } from \"@popperjs/core\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { AddAllToCartButton } from \"src/Cart/controls\";\r\nimport {\r\n  ProductModel,\r\n  SalesItemBaseModel\r\n} from \"src/_api/cvApi.shared\";\r\nimport { AppliedCartItemDiscountModel, CartModel, CartTypeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\r\nimport promiser from \"src/_shared/Promiser\";\r\n\r\nexport const ShoppingListsDetail = (): JSX.Element =&gt; {\r\n  const [ shoppingList, setShoppingList ] = useState<carttypemodel>(null);\r\n  const [ shoppingListCart, setShoppingListCart ] = useState<cartmodel>(null);\r\n  const [ , setShoppingListItems ] = useState<salesitembasemodel<appliedcartitemdiscountmodel>[]&gt;([]);\r\n  const [ shoppingListProducts, setShoppingListProducts ] = useState&lt;{ [id: string]: ProductModel }&gt;(null);\r\n  const [ shoppingListFetched, setShoppingListFetched ] = useState<boolean>(false);\r\n  const [ isEditingName, setIsEditingName ] = useState<boolean>(false);\r\n  const [ editedName, setEditedName ] = useState<string>(\"\");\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n  const history = useHistory();\r\n  const cefConfig = useCefConfig();\r\n\r\n  // @ts-ignore\r\n  const { typeName } = useParams();\r\n\r\n  useEffect(() =&gt; {\r\n    getShoppingList();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ cefConfig, inventoryFactory, pricingFactory ]);\r\n\r\n  async function getShoppingList() {\r\n    if (!cefConfig || !inventoryFactory || !pricingFactory) {\r\n      return;\r\n    }\r\n    setRunning(\"Fetching shopping list...\");\r\n    try {\r\n      const shoppingListCartResPromiserKey = `GetCurrentStaticCart({ TypeName: ${typeName} })`;\r\n      const shoppingListCartRes = await promiser.resolve(\r\n        shoppingListCartResPromiserKey,\r\n        () =&gt; cvApi.shopping.GetCurrentStaticCart({ TypeName: typeName })\r\n      );\r\n      const shoppingListRes = await cvApi.shopping.GetCartTypeForCurrentUser({ TypeName: typeName });\r\n      const shoppingListSalesItems = shoppingListCartRes?.data?.SalesItems;\r\n      if (!shoppingListSalesItems) {\r\n        setShoppingListFetched(true);\r\n        finishRunning();\r\n        return;\r\n      }\r\n      const productsRes = await cvApi.products.GetProductsByIDs({\r\n        IDs: shoppingListSalesItems.map(item =&gt; item.ProductID)\r\n      });\r\n      let products = productsRes.data;\r\n      if (cefConfig?.featureSet.inventory.enabled) {\r\n        products = await inventoryFactory.bulkFactoryAssign(products);\r\n      }\r\n      if (cefConfig?.featureSet.pricing.enabled) {\r\n        products = await pricingFactory.bulkFactoryAssign(products);\r\n      }\r\n      const productsMap: { [id: string]: ProductModel } = {};\r\n      products.forEach(product =&gt; {\r\n        productsMap[product.ID.toString()] = product;\r\n      });\r\n      setShoppingListCart(shoppingListCartRes.data);\r\n      setShoppingListProducts(productsMap);\r\n      setShoppingListItems(shoppingListSalesItems);\r\n      setShoppingList(shoppingListRes.data.Result);\r\n      setShoppingListFetched(true);\r\n      finishRunning();\r\n    } catch (err: any) {\r\n      setShoppingListFetched(true);\r\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch shopping list items\" ]);\r\n    }\r\n  }\r\n\r\n  function renameShoppingList() {\r\n    setRunning();\r\n    const failMsg = \"Failed to update shopping list name\";\r\n    cvApi.shopping.UpdateCartType({\r\n      ...shoppingList,\r\n      Name: editedName,\r\n      UpdatedDate: new Date()\r\n    }).then(res =&gt; {\r\n      if (!res?.data?.ActionSucceeded) {\r\n        throw new Error(failMsg);\r\n      }\r\n      return cvApi.shopping.GetCartTypeForCurrentUser({ TypeName: editedName });\r\n    })\r\n      .then(res =&gt; {\r\n        if (!res?.data?.ActionSucceeded) {\r\n          throw new Error(failMsg);\r\n        }\r\n        history.replace(`/dashboard/shopping-lists/detail/${editedName}`);\r\n        setShoppingList(res.data.Result);\r\n        setEditedName(\"\");\r\n        setIsEditingName(false);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, null, err?.Messages ?? [ \"Failed to update shopping list name\" ]);\r\n      });\r\n  }\r\n\r\n  /* MouseEventHandler<htmlbuttonelement> */\r\n  function clearShoppingList(): void {\r\n    setRunning();\r\n    setShoppingListItems([]);\r\n    cvApi.shopping\r\n      .ClearCurrentStaticCart({ TypeName: typeName })\r\n      .then(_res =&gt; finishRunning())\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || `Failed to clear the shopping list, ${typeName}`);\r\n      });\r\n  }\r\n\r\n  /* MouseEventHandler<htmlbuttonelement> */\r\n  function deleteShoppingList(): void {\r\n    setRunning();\r\n    setShoppingListItems([]);\r\n    cvApi.shopping\r\n      .DeleteCartTypeForCurrentUser({ TypeName: typeName })\r\n      .then(() =&gt; {\r\n        finishRunning();\r\n        history.push(\"/dashboard/shopping-lists\");\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err.message || `Failed to delete the shopping list, ${typeName}`\r\n        );\r\n      });\r\n  }\r\n\r\n  function removeShoppingListItem(salesItemID: number): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .RemoveCartItemByID(salesItemID)\r\n      .then(res =&gt; {\r\n        if (res.data) {\r\n          getShoppingList();\r\n          finishRunning();\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message);\r\n      });\r\n  }\r\n\r\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void =&gt; {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .UpdateCartItemQuantity({\r\n        CartItemID: cartItemID,\r\n        Quantity: quantity,\r\n        QuantityBackOrdered: 0,\r\n        QuantityPreSold: 0\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          getShoppingList();\r\n        } else {\r\n          finishRunning(true, null, res.data.Messages);\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  if (!shoppingListFetched) {\r\n    return <loadingwidget>;\r\n  }\r\n  return (\r\n    &lt;&gt;\r\n      <row classname='\"justify-content-between\"'>\r\n        \r\n          {isEditingName\r\n            ? <div classname='\"input-group\"'>\r\n              <form.control\r\n =="" onchange="{e" type='\"text\"\r\n' value="{editedName}\r\n"> setEditedName(e.target.value)}\r\n              /&gt;\r\n              <span classname='\"input-group-append' id='\"EditShoppingListNameBtn\"' input-group-btn\"="">\r\n                <button\r\n aria-label='{t(\"ui.storefront.common.Save\")}\r\n' id='\"btnSaveShoppingListNameEdit\"\r\n' name='\"btnSaveShoppingListNameEdit\"\r\n' onclick="{renameShoppingList}" title='{t(\"ui.storefront.common.Save\")}\r\n' variant='\"link\"\r\n'>\r\n                  <i classname='\"fal' fa-save\"="">{\" \"}\r\n                  <span\r\n classname='\"sr-only\"' id='\"EditShoppingListNameSaveBtn\"\r\n'>\r\n                    {t(\"ui.storefront.common.Save\")}\r\n                  </span\r\n></i></button\r\n></span><i classname='\"fal' fa-save\"="">\r\n                {\" \"}\r\n                <button\r\n =="" aria-label='{t(\"ui.storefront.common.Cancel\")}\r\n' id='\"btnCancelShoppingListNameEdit\"\r\n' name='\"btnCancelShoppingListNameEdit\"\r\n' onclick="{()" title='{t(\"ui.storefront.common.Cancel\")}\r\n' variant='\"link\"\r\n'> {\r\n                    setIsEditingName(false);\r\n                    setEditedName(\"\");\r\n                  }}&gt;\r\n                  <i classname='\"fal' fa-undo\"="">{\" \"}\r\n                  <span\r\n classname='\"sr-only\"' id='\"EditShoppingListNameCancelBtn\"\r\n'>\r\n                    {t(\"ui.storefront.common.Cancel\")}\r\n                  \r\n                \r\n              \r\n            </span\r\n></i></button\r\n></i></form.control\r\n></div><i classname='\"fal' fa-save\"=""><i classname='\"fal' fa-undo\"="">\r\n            : <div classname='\"d-flex\"'>\r\n              <h2 classname='\"mb-0\"' id='\"ShoppingListNameText\"'>\r\n                {typeName}\r\n              </h2>\r\n              <button\r\n =="" id='\"btnEditShoppingListName\"\r\n' name='\"btnEditShoppingListName\"\r\n' onclick="{()" variant='\"link\"\r\n'> {\r\n                  setIsEditingName(true);\r\n                  setEditedName(typeName);\r\n                }}\r\n                aria-label={t(\"ui.storefront.common.Edit\")}\r\n                title={t(\"ui.storefront.common.Edit\")}&gt;\r\n                <i classname='\"fal' fa-pencil\"="">{\" \"}\r\n                <span classname='\"sr-only\"' id='\"ShoppingListEditBtn\"'>\r\n                  {t(\"ui.storefront.common.Edit\")}\r\n                </span>\r\n              \r\n              <link btn-secondary="" classname='\"btn' ms-1="" to='\"/dashboard/shopping-lists\"\r\n' type='\"button\"' underline-hover-none\"\r\n=""/>\r\n                {t(\"ui.storefront.userDashboard.shoppingLists.BackToShoppingLists\")}\r\n              \r\n            </i></button\r\n></div><i classname='\"fal' fa-pencil\"="">\r\n          }\r\n        \r\n        \r\n          <addalltocartbutton\r\n excludequotecart="{true}\r\n" label='{t(\"ui.storefront.cart.addAllToCart\")}\r\n' salesitems="{shoppingListCart?.SalesItems}\r\n" useconfirmmodal="{true}\r\n">\r\n          <button =="" classname='\"mx-2\"\r\n' onclick="{()" variant='\"secondary\"\r\n'> clearShoppingList()}&gt;\r\n            {t(\"ui.storefront.common.Clear\")}\r\n          </button>\r\n          <button =="" onclick="{()" variant='\"secondary\"\r\n'> deleteShoppingList()}&gt;\r\n            {t(\"ui.storefront.common.Delete\")}\r\n          </button>\r\n        \r\n      </addalltocartbutton\r\n></i></i></i></row><i classname='\"fal' fa-save\"=""><i classname='\"fal' fa-undo\"=""><i classname='\"fal' fa-pencil\"="">\r\n      <carttablewidescreen\r\n carthasitems="{shoppingListCart?.SalesItems?.length" cartproducts="{shoppingListProducts}\r\n" includeaddtocart="{true}\r\n"> 0}\r\n        cartToUse={shoppingListCart}\r\n        orderDiscounts={null}\r\n        shippingDiscounts={null}\r\n        onChangeSalesItemQuantity={onChangeSalesItemQuantity}\r\n        onRemoveItemFromCartClicked={(productName: string, salesItemId: number) =&gt; removeShoppingListItem(salesItemId)}\r\n        queuedIDs={[]}\r\n        parentRunning={viewState.running}\r\n        excludeBackorderInfo={true}\r\n      /&gt;\r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Link, Route, Switch, useLocation } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { Column } from \"@material-table/core\";\r\nimport { DateTime } from \"luxon\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { Table } from \"src/_shared/common/Table\";\r\nimport { CreateShoppingListModal } from \"src/Dashboard/ShoppingList/CreateShoppingListModal\";\r\nimport { CartModel, CartTypeModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { ShoppingListsDetail } from \"src/Dashboard/ShoppingList/ShoppingListsDetail\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport promiser from \"src/_shared/Promiser\";\r\n\r\nexport const ShoppingLists = (): JSX.Element =&gt; {\r\n  const [ showCreateListModal, setShowCreateListModal ]\r\n    = useState<boolean>(false);\r\n  const [ shoppingLists, setShoppingLists ] = useState<carttypemodel[]>([]);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const location = useLocation();\r\n\r\n  useEffect(() =&gt; {\r\n    getShoppingLists();\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [ location ]);\r\n\r\n  function getShoppingLists(): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .GetCurrentUserCartTypes({ IncludeNotCreated: false })\r\n      .then(res =&gt; {\r\n        setShoppingLists(res.data.Results);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err.message || \"Failed to get current user cart types\"\r\n        );\r\n      });\r\n  }\r\n\r\n  function ViewDetailsButton(rowData: CartTypeModel): JSX.Element {\r\n    return (\r\n      // TODO: don't use string literals for path names, this needs to be in cvServiceStrings or something\r\n      <link\r\n btn-outline-primary="" btn-sm\"\r\n="" classname='\"btn' to="{`/dashboard/shopping-lists/detail/${rowData.Name}`}\r\n" type='\"button\"'>\r\n        {t(\"ui.storefront.common.View\")}\r\n      \r\n    );\r\n  }\r\n\r\n  function ListDate(rowData: CartTypeModel): JSX.Element {\r\n    return (\r\n      <span>{DateTime.fromISO(rowData.CreatedDate?.toString()).toFormat(\"y-LL-dd\")}</span>\r\n    );\r\n  }\r\n\r\n  function ListItemCount(rowData: CartTypeModel): JSX.Element {\r\n    const [ items, setItems ] = useState<cartmodel>();\r\n    const [ loading, setLoading ] = useState<boolean>(true);\r\n    useEffect(() =&gt; {\r\n      const promiserKey = `GetCurrentStaticCart({ TypeName: ${rowData.Name} })`;\r\n      promiser.resolve(\r\n        promiserKey,\r\n        () =&gt; cvApi.shopping.GetCurrentStaticCart({ TypeName: rowData.Name })\r\n      ).then(result =&gt; {\r\n        setLoading(false);\r\n        if (!result.data) {\r\n          return;\r\n        }\r\n        setItems(result.data);\r\n      });\r\n    }, []);\r\n    if (!items &amp;&amp; loading) {\r\n      return <loadingwidget innerclasses='{\"p-0\"}' size='{\"1x\"}'>;\r\n    }\r\n    if (!items) {\r\n      return <span>0</span>;\r\n    }\r\n    return (\r\n      // eslint-disable-next-line no-return-assign, no-param-reassign\r\n      <span>{items.SalesItems.reduce((accu, salesItem) =&gt; accu += salesItem.Quantity, 0)}</span>\r\n    );\r\n  }\r\n\r\n  const columns: Array<column<any>&gt; = [\r\n    {\r\n      title: \"List Name\",\r\n      field: \"Name\",\r\n      cellStyle: {\r\n        width: \"33%\"\r\n      }\r\n    },\r\n    {\r\n      title: \"Last Modified Date\",\r\n      cellStyle: {\r\n        width: \"33%\"\r\n      },\r\n      render: ListDate\r\n    },\r\n    {\r\n      title: \"Item Count\",\r\n      cellStyle: {\r\n        width: \"33%\"\r\n      },\r\n      render: ListItemCount\r\n    },\r\n    {\r\n      render: ViewDetailsButton\r\n    }\r\n  ];\r\n\r\n  return (\r\n    <switch>\r\n      <route exact="" path='\"/dashboard/shopping-lists\"'>\r\n        <createshoppinglistmodal\r\n =="" oncancel="{()" show="{showCreateListModal}\r\n"> setShowCreateListModal(false)}\r\n          onConfirm={() =&gt; {\r\n            getShoppingLists();\r\n            setShowCreateListModal(false);\r\n          }}\r\n        /&gt;\r\n        <row>\r\n          \r\n            <h1>\r\n              <i classname='\"fal' fa-clipboard-list="" me-2\"="">\r\n              <span>Shopping List</span>\r\n            </i></h1><i classname='\"fal' fa-clipboard-list="" me-2\"="">\r\n          \r\n          \r\n            <row>\r\n              \r\n                <button\r\n =="" a="" aria-label='\"Create' classname='\"mb-3\"\r\n' id='\"btnShoppingListCreate\"\r\n' list\"\r\n="" name='\"btnShoppingListCreate\"\r\n' new="" onclick="{()" title='\"Create' variant='\"secondary\"\r\n'> setShowCreateListModal(true)}&gt;\r\n                  {t(\"ui.storefront.userDashboard2.userDashboard.controls.createANewList\")}\r\n                \r\n              \r\n              \r\n                {shoppingLists.length\r\n                  ? \r\n                  : <span classname='\"h4\"' id='\"ShoppingListNoItemsText\"'>\r\n                    {t(\r\n                      \"ui.storefront.userDashboard2.controls.shoppingListDetail.NoItemsHaveBeenAddedToThisShoppingList\"\r\n                    )}\r\n                  </span>\r\n                }\r\n              \r\n            \r\n          \r\n          {viewState.hasError\r\n            &amp;&amp; \r\n              <errorview error="{viewState.errorMessage}">\r\n            \r\n          }\r\n        \r\n      \r\n      <route exact="" path='\"/dashboard/shopping-lists/detail/:typeName\"'>\r\n        <shoppinglistsdetail>\r\n      </shoppinglistsdetail></route>\r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { TextInputFormGroup } from \"src/_shared/forms/formGroups\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { UpdateCurrentAccountDto } from \"src/_api/cvApi.Accounts\";\r\nimport { useCurrentAccount } from \"src/_redux/slices/authSlice\";\r\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\r\n\r\ninterface IAccountProfileEntryData {\r\n  txtAccountName: string;\r\n  taAccountDescription: string;\r\n  txtAccountCustomKey: string;\r\n  txtTaxExemptionNo: string;\r\n  txtTaxEntityUseCode: string;\r\n}\r\n\r\nexport const AccountProfile = (): JSX.Element =&gt; {\r\n  const [ showSavedMessage, setShowSavedMessage ] = useState(false);\r\n  const currentAccount = useCurrentAccount();\r\n  const authFactory = useAuthFactory();\r\n\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    setValue,\r\n    formState\r\n  } = useForm<iaccountprofileentrydata>({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  useEffect(() =&gt; {\r\n    if (currentAccount.ID &gt; 0) {\r\n      setValue(\"txtAccountName\", currentAccount.Name);\r\n      setValue(\"taAccountDescription\", currentAccount.Description);\r\n      setValue(\"txtAccountCustomKey\", currentAccount.CustomKey);\r\n      setValue(\"txtTaxExemptionNo\", currentAccount.TaxExemptionNo);\r\n      setValue(\"txtTaxEntityUseCode\", currentAccount.TaxEntityUseCode);\r\n    }\r\n  }, [ currentAccount ]);\r\n\r\n  const updateCurAccount: SubmitHandler<iaccountprofileentrydata> = (data): void =&gt; {\r\n    const {\r\n      txtAccountName,\r\n      taAccountDescription,\r\n      txtAccountCustomKey,\r\n      txtTaxExemptionNo,\r\n      txtTaxEntityUseCode\r\n    } = data;\r\n    const toSend = {\r\n      ...currentAccount,\r\n      CustomKey: txtAccountCustomKey,\r\n      Description: taAccountDescription,\r\n      Name: txtAccountName,\r\n      TaxEntityUseCode: txtTaxEntityUseCode,\r\n      TaxExemptionNo: txtTaxExemptionNo,\r\n      UpdatedDate: new Date()\r\n    } as UpdateCurrentAccountDto;\r\n    setRunning();\r\n    authFactory.updateCurrentAccount(toSend)\r\n      .then(() =&gt; {\r\n        setShowSavedMessage(true);\r\n        finishRunning(false);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err || \"Failed to update current account\");\r\n      });\r\n  };\r\n\r\n  return (\r\n    <row as="{Form}\r\n" classname='\"position-relative\"\r\n' onsubmit="{handleSubmit(updateCurAccount)}">\r\n      </row></iaccountprofileentrydata></iaccountprofileentrydata></errorview>\r\n        <h1>{t(\"ui.storefront.userDashboard2.userDashboard.AccountProfile\")}</h1>\r\n      \r\n      {viewState.running || currentAccount.Loading ? <loadingwidget overlay="{true}"> : null}\r\n      </loadingwidget>\r\n        <row>\r\n          <textinputformgroup\r\n 128="" characters\"\r\n="" errors="{formState.errors}\r\n" exceed="" formclasses='\"col-12' formidentifier='\"txtFirstName\"\r\n' labelkey='\"ui.storefront.common.FirstName\"\r\n' maxlength="{128}\r\n" maxlengthmessage='\"Account' may="" mb-2\"\r\n="" name="" not="" placeholderkey='\"ui.storefront.common.FirstName\"\r\n' register="{register}\r\n" required="{true}\r\n" requiredmessage='{t(\"ui.storefront.common.validation.ThisFieldIsRequired\")}\r\n'>\r\n          <textinputformgroup\r\n 600="" characters\"\r\n="" description="" errors="{formState.errors}\r\n" exceed="" formclasses='\"col-12' formidentifier='\"taAccountDescription\"\r\n' labelkey='\"ui.storefront.userDashboard2.controls.accountProfile.AccountDescription\"\r\n' maxlength="{600}\r\n" maxlengthmessage='\"Company' may="" mb-2\"\r\n="" not="" placeholderkey='\"ui.storefront.userDashboard2.controls.accountProfile.DescribeYourAccount\"\r\n' register="{register}\r\n" required="{false}\r\n">\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12' formidentifier='\"txtProfilePhone1\"\r\n' isphone="{true}\r\n" labelkey='\"ui.storefront.common.Phone\"\r\n' mb-2\"\r\n="" register="{register}\r\n">\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12\"\r\n' formidentifier='\"txtProfileFax1\"\r\n' isfax="{true}\r\n" labelkey='\"ui.storefront.common.Fax\"\r\n' register="{register}\r\n">\r\n          <textinputformgroup\r\n errors="{formState.errors}\r\n" formclasses='\"col-12\"\r\n' formidentifier='\"txtProfileEmail1\"\r\n' isemail="{true}\r\n" labelkey='\"ui.storefront.common.Email\"\r\n' register="{register}\r\n">\r\n        </textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></textinputformgroup\r\n></row>\r\n      \r\n      \r\n        <row>\r\n          <textinputformgroup\r\n 12="" characters\"\r\n="" errors="{formState.errors}\r\n" exceed="" exemption="" formclasses='\"col-12' formidentifier='\"txtTaxExemptionNo\"\r\n' labelkey='\"ui.storefront.userDashboard2.controls.accountProfile.TaxExemptionNo\"\r\n' maxlength="{12}\r\n" maxlengthmessage='\"Tax' may="" mb-2\"\r\n="" not="" number="" register="{register}\r\n">\r\n          <textinputformgroup\r\n 128="" characters\"\r\n="" code="" entity="" errors="{formState.errors}\r\n" exceed="" formclasses='\"col-12' formidentifier='\"txtTaxEntityUseCode\"\r\n' labelkey='\"ui.storefront.userDashboard2.controls.accountProfile.TaxEntityUseCode\"\r\n' maxlength="{128}\r\n" maxlengthmessage='\"Tax' may="" mb-2\"\r\n="" not="" register="{register}\r\n">\r\n        </textinputformgroup\r\n></textinputformgroup\r\n></row>\r\n      \r\n      <hr/>\r\n      \r\n        <row>\r\n          </row>\r\n            <button !formstate.isvalid}="" disabled="{viewState.running" size='\"lg\"\r\n' type='\"submit\"\r\n' variant='\"primary\"\r\n' ||="">\r\n              {t(\"ui.storefront.common.Save\")}\r\n            </button>\r\n          \r\n          {showSavedMessage\r\n            &amp;&amp; \r\n              <alert classname='\"p-2' mb-3\"="" ms-3="" variant='\"success\"'>\r\n                <i classname='\"fal' fa-check-circle\"="">\r\n                 \r\n                <span>{t(\"ui.storefront.userDashboard2.controls.userProfile.SaveSuccessful\")}</span>\r\n              </i></alert><i classname='\"fal' fa-check-circle\"="">\r\n            \r\n          }\r\n          {viewState.hasError\r\n            &amp;&amp; </i><i classname='\"fal' fa-check-circle\"="">\r\n              <alert classname='\"p-2' mb-3\"="" ms-3="" variant='\"danger\"'>\r\n                <i classname='\"fal' fa-check-circle\"="">\r\n                 \r\n                <span>\r\n                  {t(\"ui.storefront.common.Error\")}: {viewState.errorMessage}\r\n                </span>\r\n              </i></alert><i classname='\"fal' fa-check-circle\"="">\r\n            \r\n          }\r\n        \r\n      \r\n    \r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { CEFActionResponseT, IHttpPromiseCallbackArg } from \"src/_api/cvApi.shared\";\r\nimport { TextAreaFormGroup } from \"src/_shared/forms/formGroups\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { Alert, Button, Card, Form } from \"react-bootstrap\";\r\nimport { IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\ninterface IPrivacyDataActionCardProps {\r\n  headerKey: string;\r\n  headerIcon: IconDefinition;\r\n  bodyKey: string;\r\n  placeholderKey: string;\r\n  formKey: string;\r\n  request: Function;\r\n}\r\n\r\nexport const PrivacyDataActionCard = (props: IPrivacyDataActionCardProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    formState,\r\n    reset\r\n  } = useForm&lt;{ [key: string]: string }&gt;({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const handleConfirm = (data: { [key: string]: string }): void =&gt; {\r\n    const reason = { Message: \"\" };\r\n    reason.Message = data[props.formKey];\r\n    // Props.request can receive a dto object that can have \"reason\", from the text input\r\n    setRunning();\r\n    props.request(reason)\r\n      .then((result: IHttpPromiseCallbackArg<cefactionresponset<any>&gt;) =&gt; {\r\n        finishRunning();\r\n        reset();\r\n      })\r\n      .catch((error: any) =&gt; {\r\n        finishRunning(true, error);\r\n        reset();\r\n      });\r\n  };\r\n\r\n  return (\r\n    &lt;&gt;\r\n      {formState.isSubmitSuccessful\r\n      &amp;&amp; <alert key='\"success\"' variant='\"success\"'>\r\n        {t(\"ui.storefront.userDashboard2.userDashboard.PrivacySettings.SuccessMessage\")}\r\n      </alert>}\r\n      <form autocomplete='\"off\"\r\n' onsubmit="{handleSubmit(handleConfirm)}"></form>\r\n        <card classname='\"privacy-card' shadow\"="">\r\n          <card.header bg-header-footer="" classname='\"text-white' d-flex="" justify-content-between\"="">\r\n            <h4>{t(props.headerKey)}</h4>\r\n            <fontawesomeicon classname='\"very-big\"' icon="{props.headerIcon}">\r\n          </fontawesomeicon></card.header>\r\n          <card.body>\r\n            <p>{t(props.bodyKey)}</p>\r\n            <textareaformgroup\r\n errors="{formState.errors}\r\n" formidentifier="{props.formKey}\r\n" placeholderkey="{props.placeholderKey}\r\n" register="{register}\r\n" required="{false}\r\n">\r\n          </textareaformgroup\r\n></card.body>\r\n          <card.footer>\r\n            <button !formstate.isvalid}="" disabled="{viewState.running" type='\"submit\"\r\n' ||="">\r\n              {t(\"ui.storefront.common.SendRequest\")}\r\n            </button>\r\n          </card.footer>\r\n        </card>\r\n      \r\n    \r\n  );\r\n};\r\n","/* eslint-disable max-len */\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Col, Row } from \"react-bootstrap\";\r\nimport { faFileDownload, faTrash } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { faFile } from \"@fortawesome/free-regular-svg-icons\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { PrivacyDataActionCard } from \"src/Dashboard/Privacy/PrivacyDataActionCard\";\r\n\r\nexport const Privacy = (): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  // TODO: setRunning and finishRunning somewhere in this component, or remove this\r\n  const { viewState } = useViewState();\r\n\r\n  const privacyDownloadKey = \"txtPrivacyDownloadKey\";\r\n  const privacyDownloadHeaderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Download.headerKey\";\r\n  const privacyDownloadBodyKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Download.bodyKey\";\r\n  const privacyDownloadPlaceholderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Download.placeholderKey\";\r\n\r\n  const privacyDeleteKey = \"txtPrivacyDeleteKey\";\r\n  const privacyDeleteHeaderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Delete.headerKey\";\r\n  const privacyDeleteBodyKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Delete.bodyKey\";\r\n  const privacyDeletePlaceholderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Delete.placeholderKey\";\r\n\r\n  const privacyRestrictKey = \"txtPrivacyRestrictKey\";\r\n  const privacyRestrictHeaderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Restrict.headerKey\";\r\n  const privacyRestrictBodyKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Restrict.bodyKey\";\r\n  const privacyRestrictPlaceholderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Restrict.placeholderKey\";\r\n\r\n  return (\r\n    <row classname='\"position-relative\"'>\r\n      </row></cefactionresponset<any></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"="">\r\n        <h1>{t(\"ui.storefront.userDashboard2.userDashboard.PrivacySettings\")}</h1>\r\n      \r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      <hr/>\r\n      </loadingwidget></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"="">\r\n        <p>{t(\"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Text\")}</p>\r\n        <row>\r\n          </row></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"="">\r\n            <privacydataactioncard\r\n bodykey="{privacyDownloadBodyKey}\r\n" formkey="{privacyDownloadKey}\r\n" headericon="{faFileDownload}\r\n" headerkey="{privacyDownloadHeaderKey}\r\n" placeholderkey="{privacyDownloadPlaceholderKey}\r\n" request="{cvApi.contacts.RequestPrivacyData}\r\n">\r\n          \r\n          </privacydataactioncard\r\n></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"="">\r\n            <privacydataactioncard\r\n bodykey="{privacyRestrictBodyKey}\r\n" formkey="{privacyRestrictKey}\r\n" headericon="{faFile}\r\n" headerkey="{privacyRestrictHeaderKey}\r\n" placeholderkey="{privacyRestrictPlaceholderKey}\r\n" request="{cvApi.contacts.RestrictPrivacyData}\r\n">\r\n          \r\n          </privacydataactioncard\r\n></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"="">\r\n            <privacydataactioncard\r\n bodykey="{privacyDeleteBodyKey}\r\n" formkey="{privacyDeleteKey}\r\n" headericon="{faTrash}\r\n" headerkey="{privacyDeleteHeaderKey}\r\n" placeholderkey="{privacyDeletePlaceholderKey}\r\n" request="{cvApi.contacts.RemovePrivacyData}\r\n">\r\n          \r\n        \r\n      \r\n      </privacydataactioncard\r\n></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"="">\r\n        {viewState.hasError &amp;&amp; <alert key='\"danger\"' variant='\"danger\"'>\r\n          <p>{viewState.errorMessage}</p>\r\n          <p>{viewState.errorMessages}</p>\r\n        </alert>}\r\n      \r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\n\r\nexport const InStockAlerts = (): JSX.Element =&gt; {\r\n  const [ inStockAlertSalesItems, setInStockAlertSalesItems ] = useState&lt;\r\n    SalesItemBaseModel<appliedcartitemdiscountmodel>[]\r\n  &gt;([]);\r\n  const [ inStockAlertProducts, setInStockAlertProducts ] = useState&lt;{ [id: string]: ProductModel }&gt;(null);\r\n  const inStockAlertCart = useCart(ServiceStrings.carts.types.notifyMe);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!inStockAlertCart) {\r\n      return;\r\n    }\r\n    getInStockAlerts();\r\n  }, [ inStockAlertCart, cefConfig, inventoryFactory, pricingFactory ]);\r\n\r\n  async function getInStockAlerts() {\r\n    if (!cefConfig || !inventoryFactory || !pricingFactory) {\r\n      return;\r\n    }\r\n    setRunning(\"Fetching notify me list...\");\r\n    try {\r\n      if (!inStockAlertCart?.SalesItems) {\r\n        setInStockAlertSalesItems([]);\r\n        setInStockAlertProducts(null);\r\n        finishRunning();\r\n        return;\r\n      }\r\n      const flSalesItems = inStockAlertCart.SalesItems;\r\n      setInStockAlertSalesItems(flSalesItems);\r\n      // eslint-disable-next-line init-declarations\r\n      let productsRes;\r\n      if (flSalesItems?.length) {\r\n        productsRes = await cvApi.products.GetProductsByIDs({\r\n          IDs: flSalesItems.map(item =&gt; item.ProductID)\r\n        });\r\n      }\r\n      let products = productsRes.data;\r\n      if (cefConfig?.featureSet.inventory.enabled) {\r\n        products = await inventoryFactory.bulkFactoryAssign(products);\r\n      }\r\n      if (cefConfig?.featureSet.pricing.enabled) {\r\n        products = await pricingFactory.bulkFactoryAssign(products);\r\n      }\r\n      const productsMap: { [id: string]: ProductModel } = {};\r\n      products.forEach(product =&gt; {\r\n        productsMap[product.ID.toString()] = product;\r\n      });\r\n      setInStockAlertProducts(productsMap);\r\n      finishRunning();\r\n    } catch (err: any) {\r\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch notify me when in stock list\" ]);\r\n    }\r\n  }\r\n\r\n  function clearInStockAlerts(): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .ClearCurrentStaticCart({ TypeName: ServiceStrings.carts.types.notifyMe })\r\n      .then(_res =&gt; {\r\n        finishRunning();\r\n        setInStockAlertSalesItems([]);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to clear in stock alerts\");\r\n      });\r\n  }\r\n\r\n  function deleteInStockAlertItem(salesItemId: number, callback?: () =&gt; void): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .RemoveCartItemByID(salesItemId)\r\n      .then(res =&gt; {\r\n        if (res.data) {\r\n          getInStockAlerts();\r\n          finishRunning();\r\n        }\r\n        if (callback) {\r\n          callback();\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err.message || \"failed to delete in stock alert item\"\r\n        );\r\n      });\r\n  }\r\n\r\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void =&gt; {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .UpdateCartItemQuantity({\r\n        CartItemID: cartItemID,\r\n        Quantity: quantity,\r\n        QuantityBackOrdered: 0,\r\n        QuantityPreSold: 0\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          getInStockAlerts();\r\n        } else {\r\n          finishRunning(true, null, res.data.Messages);\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  return (\r\n    <row classname='\"position-relative\"'>\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      </loadingwidget></row></appliedcartitemdiscountmodel></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"="">\r\n        <h1>\r\n          <i classname='\"fal' fa-bell="" me-2\"="">\r\n          <span>\r\n            {t(\"ui.storefront.userDashboard2.userDashboard.InStockAlerts\")}\r\n          </span>\r\n        </i></h1><i classname='\"fal' fa-bell="" me-2\"="">\r\n      \r\n      </i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"="">\r\n        <row>\r\n          </row></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"="">\r\n            <button\r\n aria-label='\"Clear' classname='\"mb-3' disabled="{!inStockAlertSalesItems.length}\r\n" id='\"btnClearInStockAlert\"\r\n' list\"\r\n="" me="" name='\"btnClearInStockAlert\"\r\n' notify="" onclick="{clearInStockAlerts}" title='\"Clear' variant='\"light\"\r\n' w-100\"\r\n="">\r\n              {t(\r\n                \"ui.storefront.userDashboard2.controls.notifyMeList.ClearNotifyMeList\"\r\n              )}\r\n            \r\n          \r\n          </button\r\n></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"="">\r\n            {inStockAlertSalesItems.length\r\n              ? <carttablewidescreen\r\n carthasitems="{inStockAlertSalesItems?.length" cartproducts="{inStockAlertProducts}\r\n" includeaddtocart="{true}\r\n"> 0}\r\n                cartToUse={inStockAlertCart}\r\n                orderDiscounts={null}\r\n                shippingDiscounts={null}\r\n                onChangeSalesItemQuantity={onChangeSalesItemQuantity}\r\n                onRemoveItemFromCartClicked={\r\n                  (productName: string, salesItemId: number) =&gt; deleteInStockAlertItem(salesItemId)}\r\n                queuedIDs={[]}\r\n                parentRunning={viewState.running}\r\n                excludeBackorderInfo={true}\r\n              /&gt;\r\n              : <span classname='\"h4\"' id='\"InStockAlertNoItemsText\"'>\r\n                {t(\r\n                  \"ui.storefront.userDashboard2.controls.notifyMeList.NoItemsHaveBeenAddedToTheNotifyMeWhenInStockList\"\r\n                )}\r\n              </span>\r\n            }\r\n          \r\n        \r\n      \r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { RemoveFromCartModal } from \"src/Cart/modals\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\r\nimport { useCart } from \"src/_redux/slices/cartSlice\";\r\n\r\nexport const Favorites = (): JSX.Element =&gt; {\r\n  const [\r\n    favoritesListSalesItems,\r\n    setFavoritesListSalesItems\r\n  ] = useState<salesitembasemodel<appliedcartitemdiscountmodel>[]&gt;([]);\r\n  const favoritesListCart = useCart(ServiceStrings.carts.types.favorites);\r\n\r\n  const [ favoritesListProducts, setFavoritesListProducts ] = useState&lt;{ [id: string]: ProductModel }&gt;(null);\r\n  const [ removeFromFLConfirmationModalInfo, setRemoveFromFLConfirmationModalInfo ] = useState&lt;{\r\n    show: boolean;\r\n    product: ProductModel;\r\n  }&gt;({\r\n    show: false,\r\n    product: null\r\n  });\r\n\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!favoritesListCart) {\r\n      return;\r\n    }\r\n    getFavoritesList();\r\n  }, [ favoritesListCart, cefConfig, inventoryFactory, pricingFactory ]);\r\n\r\n  async function getFavoritesList() {\r\n    if (!cefConfig\r\n      || cefConfig.featureSet.inventory.enabled &amp;&amp; !inventoryFactory\r\n      || cefConfig.featureSet.pricing.enabled &amp;&amp; !pricingFactory) {\r\n      return;\r\n    }\r\n    setRunning(\"Fetching favorites list...\");\r\n    try {\r\n      if (!favoritesListCart.SalesItems) {\r\n        setFavoritesListSalesItems([]);\r\n        setFavoritesListProducts(null);\r\n        finishRunning();\r\n        return;\r\n      }\r\n      const flSalesItems = favoritesListCart.SalesItems;\r\n      setFavoritesListSalesItems(flSalesItems);\r\n      const productsRes = flSalesItems?.length\r\n        ? await cvApi.products.GetProductsByIDs({\r\n            IDs: flSalesItems.map(item =&gt; item.ProductID)\r\n          })\r\n        : null;\r\n      let products = productsRes?.data;\r\n      if (cefConfig?.featureSet.inventory.enabled) {\r\n        products = await inventoryFactory.bulkFactoryAssign(products);\r\n      }\r\n      if (cefConfig?.featureSet.pricing.enabled) {\r\n        products = await pricingFactory.bulkFactoryAssign(products);\r\n      }\r\n      const productsMap: { [id: string]: ProductModel } = {};\r\n      products.forEach(product =&gt; {\r\n        productsMap[product.ID.toString()] = product;\r\n      });\r\n      setFavoritesListProducts(productsMap);\r\n      finishRunning();\r\n    } catch (err: any) {\r\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch favorites list\" ]);\r\n    }\r\n  }\r\n\r\n  function clearFavoritesList(): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .ClearCurrentStaticCart({ TypeName: ServiceStrings.carts.types.favorites })\r\n      .then(_res =&gt; {\r\n        setFavoritesListSalesItems([]);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.message || \"Failed to clear favorites list\");\r\n      });\r\n  }\r\n\r\n  function deleteFavoritesListItem(salesItemId: number, callback?: () =&gt; void): void {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .RemoveCartItemByID(salesItemId)\r\n      .then(res =&gt; {\r\n        if (res.data) {\r\n          getFavoritesList();\r\n          finishRunning();\r\n        }\r\n        if (callback) {\r\n          callback();\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err.message || \"Failed to delete favorites list item\"\r\n        );\r\n      });\r\n  }\r\n\r\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void =&gt; {\r\n    setRunning();\r\n    cvApi.shopping\r\n      .UpdateCartItemQuantity({\r\n        CartItemID: cartItemID,\r\n        Quantity: quantity,\r\n        QuantityBackOrdered: 0,\r\n        QuantityPreSold: 0\r\n      })\r\n      .then(res =&gt; {\r\n        if (res.data.ActionSucceeded) {\r\n          getFavoritesList();\r\n        } else {\r\n          finishRunning(true, null, res.data.Messages);\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  return (\r\n    <row classname='\"position-relative\"'>\r\n      {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n      <removefromcartmodal\r\n =="" oncancel="{()" productname="{removeFromFLConfirmationModalInfo?.product?.Name}\r\n" show="{removeFromFLConfirmationModalInfo?.show}\r\n"> setRemoveFromFLConfirmationModalInfo({ show: false, product: null })}\r\n        onConfirm={() =&gt; {\r\n          deleteFavoritesListItem(removeFromFLConfirmationModalInfo.product.ID, () =&gt; {\r\n            setRemoveFromFLConfirmationModalInfo({\r\n              show: false,\r\n              product: null\r\n            });\r\n          });\r\n        }}\r\n        parentRunning={viewState.running}\r\n        cartTypeText={t(\"ui.storefront.common.FavoritesList\")}\r\n        cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}\r\n      /&gt;\r\n      </removefromcartmodal\r\n></loadingwidget></row></salesitembasemodel<appliedcartitemdiscountmodel></carttablewidescreen\r\n></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"="">\r\n        <h1>\r\n          <i classname='\"fal' fa-star="" me-2\"="">\r\n          <span>{t(\"ui.storefront.common.FavoritesList\")}</span>\r\n        </i></h1><i classname='\"fal' fa-star="" me-2\"="">\r\n      \r\n      </i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"="">\r\n        <row>\r\n          </row></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"="">\r\n            <button\r\n aria-label='{t(\"ui.storefront.userDashboard2.controls.favorites.ClearFavorites\")}\r\n' classname='\"mb-3' disabled="{!favoritesListSalesItems.length}\r\n" id='\"btnClearFavoritesList\"\r\n' name='\"btnClearFavoritesList\"\r\n' onclick="{clearFavoritesList}" title='{t(\"ui.storefront.userDashboard2.controls.favorites.ClearFavorites\")}\r\n' variant='\"light\"\r\n' w-100\"\r\n="">\r\n              {t(\r\n                \"ui.storefront.userDashboard2.controls.favorites.ClearFavorites\"\r\n              )}\r\n            \r\n          \r\n          </button\r\n></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"="">\r\n            {favoritesListSalesItems.length\r\n              ? <carttablewidescreen\r\n carthasitems="{favoritesListSalesItems?.length" cartproducts="{favoritesListProducts}\r\n" includeaddtocart="{true}\r\n"> 0}\r\n                cartToUse={favoritesListCart}\r\n                orderDiscounts={null}\r\n                shippingDiscounts={null}\r\n                onChangeSalesItemQuantity={onChangeSalesItemQuantity}\r\n                onRemoveItemFromCartClicked={\r\n                  (productName: string, salesItemId: number) =&gt; deleteFavoritesListItem(salesItemId)}\r\n                queuedIDs={[]}\r\n                parentRunning={viewState.running}\r\n                excludeBackorderInfo={true}\r\n              /&gt;\r\n              : <span classname='\"h4\"' id='\"FavoritesListNoItemsText\"'>\r\n                {t(\r\n                  \"ui.storefront.userDashboard2.controls.favorites.NoItemsHaveBeenAddedToTheFavorites\"\r\n                )}\r\n              </span>\r\n            }\r\n          \r\n        \r\n      \r\n    \r\n  );\r\n};\r\n","import { Fragment, useEffect, useRef, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { Column } from \"@material-table/core\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { CVGrid } from \"src/_shared/common/CVGrid\";\r\nimport { GetCurrentAccountSalesQuotesDto } from \"src/_api\";\r\nimport { SalesQuoteModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface IToolbarFilterColumn {\r\n  toolbarFilterType:\r\n    | \"input\"\r\n    | \"autocomplete\"\r\n    | \"attribute\"\r\n    | \"id\"\r\n    | \"select\"\r\n    | \"boolean\"\r\n    | \"minmaxnumber\"\r\n    | \"minmaxdate\";\r\n  toolbarFilterOptions?: Array<any>;\r\n  toolbarFilterTitle: string;\r\n  toolbarFilterPlaceholder?: string;\r\n  toolbarFilterMin?: number;\r\n  toolbarFilterMax?: number;\r\n}\r\n\r\ninterface IObjectKeys {\r\n  [key: string]: any;\r\n}\r\n\r\ninterface IQuotesFilterData extends IObjectKeys {\r\n  ID: number;\r\n  Total: string;\r\n  \"Sales Quote Date\": {\r\n    MinDate: string;\r\n    MaxDate: string;\r\n  };\r\n  Status: string;\r\n}\r\n\r\ninterface IQuotesProps {\r\n  isDashboardMain?: boolean;\r\n}\r\n\r\nexport const Quotes = (props: IQuotesProps): JSX.Element =&gt; {\r\n  const { isDashboardMain } = props;\r\n  const pageSize = isDashboardMain ? 5 : 8;\r\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\r\n\r\n  const initialState = {\r\n    order: 1,\r\n    size: pageSize,\r\n    sortDirection: \"desc\",\r\n    sortField: \"CreatedDate\",\r\n    startIndex: 1\r\n  };\r\n\r\n  const [ { startIndex, size, sortDirection, sortField, order }, setFilterState ] = useState(initialState);\r\n  const [ quotes, setQuotes ] = useState([]);\r\n  const [ statuses, setStatuses ] = useState([]);\r\n  const [ totalQuotesCount, setTotalQuotesCount ] = useState(0);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const tableRef = useRef(null);\r\n\r\n  useEffect(() =&gt; {\r\n    getQuoteStatuses();\r\n  }, []);\r\n\r\n  useEffect(() =&gt; {\r\n    getQuotes();\r\n  }, [ startIndex, size, sortDirection, sortField ]);\r\n\r\n  async function getQuotes(data?: IQuotesFilterData) {\r\n    setRunning();\r\n    let getSalesQuotesDto: GetCurrentAccountSalesQuotesDto = {\r\n      Paging: {\r\n        StartIndex: startIndex,\r\n        Size: size\r\n      },\r\n      Sorts: [\r\n        {\r\n          dir: sortDirection,\r\n          field: sortField,\r\n          order\r\n        }\r\n      ],\r\n      HasSalesGroupAsMaster: true,\r\n      HasSalesGroupAsSub: false\r\n    };\r\n    if (data) {\r\n      getSalesQuotesDto = {\r\n        ...getSalesQuotesDto,\r\n        ...data\r\n      };\r\n    }\r\n    await cvApi.providers\r\n      .GetCurrentAccountSalesQuotes(getSalesQuotesDto)\r\n      .then(result =&gt; {\r\n        const quotesWithReadableDate = result.data.Results.map(r =&gt; {\r\n          if (!r.CreatedDate) {\r\n            return r;\r\n          }\r\n          const date = new Date(r.CreatedDate);\r\n          return {\r\n            ...r,\r\n            CreatedDate: `${date.toDateString()} ${date.toLocaleTimeString()}`\r\n          };\r\n        });\r\n        setQuotes(quotesWithReadableDate);\r\n        setTotalQuotesCount(result.data.TotalCount);\r\n        finishRunning(false);\r\n        tableRef.current.onQueryChange();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err.message || \"Failed to get current account sales quotes\"\r\n        );\r\n      });\r\n  }\r\n\r\n  function getQuoteStatuses() {\r\n    setRunning();\r\n    cvApi.quoting\r\n      .GetSalesQuoteStatuses()\r\n      .then(result =&gt; {\r\n        setStatuses(result.data.Results);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(\r\n          true,\r\n          err.message || \"failed to get sales quote statuses\"\r\n        );\r\n      });\r\n  }\r\n\r\n  function ViewDetailsButton(rowData: SalesQuoteModel): JSX.Element {\r\n    const { ID, SalesGroupAsRequestMasterID, SalesGroupAsRequestSubID }\r\n      = rowData;\r\n    return (\r\n      <link\r\n ${id}`}="" ??="" btn-outline-primary\"\r\n="" classname='\"btn' quote="" salesgroupasrequestmasterid="" salesgroupasrequestsubid\r\n="" to="{`/dashboard/sales-group/${\r\n" }="">\r\n        {t(\"ui.storefront.common.View\")}\r\n      \r\n    );\r\n  }\r\n\r\n  const columns: Array<column<salesquotemodel>&gt; = [\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"ID\",\r\n      title: \"ID\",\r\n      type: \"string\",\r\n      width: \"5%\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CustomKey\",\r\n      title: \"CustomKey\",\r\n      type: \"string\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"CreatedDate\",\r\n      title: \"Order Date\",\r\n      type: \"datetime\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\" },\r\n      render: rowData =&gt; <span>{rowData.Status.DisplayName ?? rowData.Status.Name ?? rowData.Status.CustomKey}</span>,\r\n      title: \"Status\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      emptyValue: \"N/A\",\r\n      field: \"Totals.Total\",\r\n      filterPlaceholder: \"1.99\",\r\n      headerStyle: { textAlign: \"right\" },\r\n      title: \"Total\",\r\n      type: \"currency\"\r\n    },\r\n    {\r\n      cellStyle: { paddingTop: \"0.4em\", paddingBottom: \"0.4em\", textAlign: \"right\" },\r\n      render: ViewDetailsButton,\r\n      width: \"fit-content\"\r\n    }\r\n  ];\r\n\r\n  const filterColumns: Array<itoolbarfiltercolumn> = [\r\n    {\r\n      toolbarFilterTitle: \"Status\",\r\n      toolbarFilterType: \"select\",\r\n      toolbarFilterOptions: statuses\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"ID\",\r\n      toolbarFilterType: \"id\"\r\n    },\r\n    {\r\n      toolbarFilterTitle: \"Sales Quote Date\",\r\n      toolbarFilterType: \"minmaxdate\"\r\n    }\r\n  ];\r\n\r\n  const formatFiltersObjectForGetQuotes = (\r\n    filterData: IQuotesFilterData\r\n  ): any =&gt; {\r\n    const formatted: any = {};\r\n    for (const filterCol of filterColumns) {\r\n      const filterValue = filterData[filterCol.toolbarFilterTitle];\r\n      if (filterValue) {\r\n        switch (filterCol.toolbarFilterTitle) {\r\n          case \"Total\": {\r\n            formatted.Totals = { Total: filterValue };\r\n            break;\r\n          }\r\n          case \"Status\": {\r\n            if (filterCol.toolbarFilterOptions &amp;&amp; filterValue !== \"All\") {\r\n              formatted.StatusID = filterCol.toolbarFilterOptions.find(\r\n                op =&gt; op.CustomKey === filterValue\r\n              ).ID;\r\n              break;\r\n            }\r\n            formatted.StatusID = \"\";\r\n            break;\r\n          }\r\n          case \"ID\": {\r\n            formatted.ID = filterValue;\r\n            break;\r\n          }\r\n          case \"Sales Quote Date\": {\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MinDate) {\r\n              formatted.MinDate = new Date(filterValue.MinDate).toISOString();\r\n            }\r\n            if (typeof filterValue !== \"string\" &amp;&amp; filterValue.MaxDate) {\r\n              formatted.MaxDate = new Date(filterValue.MaxDate).toISOString();\r\n            }\r\n            break;\r\n          }\r\n          default: {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return formatted;\r\n  };\r\n\r\n  return (\r\n    <row>\r\n      </row></itoolbarfiltercolumn></column<salesquotemodel></link\r\n></any></carttablewidescreen\r\n></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"="">\r\n        <section classname='\"section-quotes\"'>\r\n          <div align-items-center="" classname='\"section-title' d-flex="" justify-content-between\"="">\r\n            {isDashboardMain\r\n              ? <fragment>\r\n                <h4 classname='\"title' me-2\"="">\r\n                  <span>Recent {t(\"ui.storefront.common.Quote.Plural\")}</span>\r\n                </h4>\r\n              </fragment>\r\n              : <h1 classname='\"title' me-2\"="">\r\n                <i classname='\"fal' fa-quote-right="" me-2\"="">\r\n                <span>{t(\"ui.storefront.common.Quote.Plural\")}</span>\r\n              </i></h1><i classname='\"fal' fa-quote-right="" me-2\"="">\r\n            }\r\n          </i></div><i classname='\"fal' fa-quote-right="" me-2\"="">\r\n          <cvgrid\r\n -="" 1}\r\n="" :="" =="" ?="" []="" columns="{columns}\r\n" data="{quotes}\r\n" defaultpagesize="{pageSize}\r\n" defaultpagesizeoptions="{pageSizeOptions}\r\n" filtercolumns="{isDashboardMain" filtercolumns}\r\n="" onresetclicked="{()" page="{startIndex" ref="{tableRef}\r\n" totalcount="{totalQuotesCount}\r\n"> {\r\n              setFilterState(initialState);\r\n              getQuotes();\r\n            }}\r\n            onFilterClicked={(data: IQuotesFilterData) =&gt; getQuotes(formatFiltersObjectForGetQuotes(data))\r\n            }\r\n            onPageChange={(page: number, pageSizeI: number) =&gt; {\r\n              setFilterState(prev =&gt; ({ ...prev, startIndex: page + 1, size: pageSizeI }));\r\n            }}\r\n            onOrderChange={(invoiceBy: number, invoiceDirection: string) =&gt; {\r\n              let sortFieldToApply = \"CreatedDate\";\r\n              let sortDirectionToApply = \"desc\";\r\n              if (invoiceBy &gt;= 0) {\r\n                // @ts-ignore possibly 'undefined'\r\n                sortFieldToApply = columns[invoiceBy].field;\r\n                if (invoiceDirection.length) {\r\n                  sortDirectionToApply = invoiceDirection;\r\n                }\r\n              }\r\n              setFilterState(prev =&gt; ({ ...prev, sortField: sortFieldToApply, sortDirection: sortDirectionToApply }));\r\n            }}\r\n            isLoading={viewState.running}\r\n          /&gt;\r\n          {isDashboardMain\r\n            &amp;&amp; <fragment>\r\n              <p classname='\"text-end\"'>\r\n                <link\r\n btn-link="" btn-link-light="" classname='\"btn' id='\"userDashboard_salesQuote_viewAll\"' text-decoration-none\"\r\n="" to='\"/dashboard/quotes\"\r\n'>\r\n                  <span classname='\"me-1\"'>View All</span>\r\n                  <i classname='\"fal' fa-angle-double-right\"="">\r\n                \r\n              </i></link\r\n></p><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></fragment><i classname='\"fal' fa-angle-double-right\"="">\r\n          }\r\n        </i></cvgrid\r\n></i></section><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n        {viewState.hasError ? <errorview error="{viewState.errorMessage}"> : null}\r\n      \r\n    \r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport { ContactModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface ISalesGroupContactBlockProps {\r\n  contact: ContactModel;\r\n  headerKey: string;\r\n}\r\n\r\nexport const SalesGroupContactBlock = (props: ISalesGroupContactBlockProps): JSX.Element =&gt; {\r\n  const { contact, headerKey } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <hr border-bottom\"="" classname='\"my-2'/>\r\n      <h4 classname='\"bold\"' id='\"SalesOrderShippingInfoText\"'>\r\n        {t(headerKey)}\r\n      </h4>\r\n      <hr border-bottom\"="" classname='\"my-2'/>\r\n      {contact\r\n        ? <addressblock\r\n address="{contact.Address}\r\n" contact="{contact}\r\n">\r\n        : <div>\r\n          {t(\"ui.storefront.storeDashboard.storeOrderDetail.BillingInformation.MissingText\")}\r\n        </div>\r\n      }\r\n    \r\n  );\r\n};\r\n","import { Table } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { SalesInvoiceModel, SalesOrderModel, SalesQuoteModel } from \"src/_api/cvApi._DtoClasses\";\r\n\r\ninterface ISalesGroupDetailsBlockProps {\r\n  salesObject: SalesOrderModel | SalesQuoteModel | SalesInvoiceModel;\r\n  type: \"order\" | \"quote\" | \"invoice\" | \"return\";\r\n}\r\n\r\nexport const SalesGroupDetailsBlock = (props: ISalesGroupDetailsBlockProps): JSX.Element =&gt; {\r\n  const { salesObject, type } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    &lt;&gt;\r\n      <hr border-bottom\"="" classname='\"my-2'/>\r\n      <h4 classname='\"bold\"' id='\"SalesOrderDetailsText\"'>\r\n        {t(\"ui.storefront.common.Detail.Plural\")}\r\n      </h4>\r\n      <hr border-bottom\"="" classname='\"my-2'/>\r\n      </addressblock\r\n></errorview></i></i></i></i></i></i><table columns="{columns}" data="{shoppingLists}"><colgroup><col xs="{12}"/></colgroup><colgroup><col xs='\"12\"'/></colgroup><colgroup><col xs='\"12\"'/></colgroup><colgroup><col xs='\"12\"'/></colgroup><colgroup><col xs='\"12\"'/></colgroup><colgroup><col xs='\"auto\"'/></colgroup><colgroup><col/></colgroup><colgroup><col/></colgroup><colgroup><col xs='\"12\"'/></colgroup><colgroup><col classname='\"mb-5\"' xs='\"12\"'/></colgroup><colgroup><col classname='\"mb-5\"' lg='\"4\"\r\n' xs='\"12\"\r\n'/></colgroup><colgroup><col classname='\"mb-5\"' lg='\"4\"\r\n' xs='\"12\"\r\n'/></colgroup><colgroup><col classname='\"mb-5\"' lg='\"4\"\r\n' xs='\"12\"\r\n'/></colgroup><colgroup><col xs='\"12\"'/></colgroup><colgroup><col xs="{12}"/></colgroup><colgroup><col xs="{12}"/></colgroup><colgroup><col classname='\"d-flex' justify-content-end\"="" xs="{12}"/></colgroup><colgroup><col xs="{12}"/></colgroup><colgroup><col xs="{12}"/></colgroup><colgroup><col xs="{12}"/></colgroup><colgroup><col classname='\"d-flex\"' xs="{12}"/></colgroup><colgroup><col xs="{12}"/></colgroup><colgroup><col/></colgroup></table><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n        </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          {type === \"order\" ? (\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n              </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n              </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n            </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n          ) : null}\r\n        </i></i></i></i></i></i><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n      </i></i></i></i></i></i><table bsprefix='\"null\"' classname='\"w-100' mb-3\"=""><tbody><tr><td>\r\n              <b id='\"SalesOrderNumberText\"'>#</b>\r\n            </td><td>\r\n              <span id='\"sales-order-salesNumber\"'>\r\n                {salesObject.ID}\r\n              </span>\r\n            </td></tr><tr><td>\r\n              <b id='\"SalesOrderStatusText\"'>\r\n                {t(\"ui.storefront.userDashboard2.controls.salesDetail.Status\")}\r\n              </b>\r\n            </td><td>\r\n              <span id='\"SalesOrderStatusKey\"'>{salesObject.StatusTranslationKey\r\n                ? t(salesObject.StatusTranslationKey)\r\n                : salesObject.StatusName}\r\n              </span>\r\n            </td></tr><tr><td>\r\n              <b id='\"SalesOrderDateText\"'>{t(\"ui.storefront.common.Date\")}</b>\r\n            </td><td>\r\n              <span id='\"sales-order-salesDate\"'>\r\n                {new Date(salesObject.CreatedDate).toDateString()}\r\n              </span>\r\n            </td></tr><tr><td>\r\n                <b id='\"SalesOrderBalanceDueText\"'>\r\n                  {t(\"ui.storefront.userDashboard2.controls.salesDetail.BalanceDue\")}\r\n                </b>\r\n              </td><td>\r\n                <span>{salesObject.BalanceDue ? salesObject.BalanceDue : \"Paid\"}</span>\r\n              </td></tr></tbody></table><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-check-circle\"=""><i classname='\"fal' fa-bell="" me-2\"=""><i classname='\"fal' fa-star="" me-2\"=""><i classname='\"fal' fa-quote-right="" me-2\"=""><i classname='\"fal' fa-angle-double-right\"="">\r\n    \r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { AccountContactModel, SalesInvoiceModel, WalletModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { InvoiceModalBillingContactSection } from \"src/Dashboard/Invoices/InvoiceModalBillingContactSection\";\r\nimport { InvoiceModalWalletSection } from \"src/Dashboard/Invoices/InvoiceModalWalletSection\";\r\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\r\nimport promiser from \"src/_shared/Promiser\";\r\n\r\ninterface IPayInvoiceModalProps {\r\n  invoice: SalesInvoiceModel;\r\n  show: boolean;\r\n  onConfirm: Function;\r\n  onCancel: Function;\r\n  loading?: boolean;\r\n}\r\n\r\nexport const PayInvoiceModal = (props: IPayInvoiceModalProps): JSX.Element =&gt; {\r\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState<walletmodel>(null);\r\n  const [ selectedWalletItemCVV, setSelectedWalletItemCVV ]\r\n    = useState<string>(\"\");\r\n  const [ selectedBillingContact, setSelectedBillingContact ]\r\n    = useState<accountcontactmodel>(null);\r\n  const [ chosenAmount, setChosenAmount ] = useState<string>(\"\");\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n\r\n  const { invoice, show, onConfirm, onCancel } = props;\r\n\r\n  const addressBook = useAddressBook();\r\n\r\n  useEffect(() =&gt; {\r\n    if (invoice &amp;&amp; !chosenAmount) {\r\n      setChosenAmount(invoice.BalanceDue.toString());\r\n    }\r\n  }, [ invoice ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!addressBook || selectedBillingContact) {\r\n      return;\r\n    }\r\n    const defaultBilling = addressBook.find(ac =&gt; ac.IsBilling);\r\n    setSelectedBillingContact(defaultBilling ?? null);\r\n  }, [ addressBook ]);\r\n\r\n  function payInvoice(): void {\r\n    const {\r\n      ID,\r\n      CardHolderName,\r\n      CardType,\r\n      CreditCardNumber,\r\n      ExpirationMonth,\r\n      ExpirationYear\r\n    } = selectedWalletItem;\r\n    setRunning();\r\n    cvApi.providers\r\n      .PaySingleInvoiceByID({\r\n        Billing: selectedBillingContact.Slave,\r\n        InvoiceID: invoice.ID,\r\n        Payment: {\r\n          Active: true,\r\n          // @ts-ignore\r\n          Amount: parseFloat(chosenAmount) + invoice.Totals.Fees,\r\n          CVV: selectedWalletItemCVV,\r\n          CardHolderName,\r\n          CardNumber: CreditCardNumber,\r\n          CardType,\r\n          CreatedDate: new Date(),\r\n          CustomKey: null,\r\n          ExpirationMonth,\r\n          ExpirationYear,\r\n          ID: 0,\r\n          StatusID: invoice.StatusID,\r\n          TypeID: invoice.TypeID,\r\n          WalletID: ID,\r\n          Zip: null\r\n        }\r\n      })\r\n      .then(res =&gt; {\r\n        promiser.flush(\"cvApi.payments.GetSalesInvoicePaymentsForCurrentAccount\");\r\n        finishRunning();\r\n        onConfirm();\r\n      })\r\n      .catch(err =&gt; {\r\n        console.error(err);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n\r\n  const percFee = (invoice.Totals.Fees + invoice.Totals.Total)\r\n    * cefConfig.featureSet.payments.methods.creditCard.uplifts.percent;\r\n  const totalFees = invoice.Totals.Fees\r\n    + cefConfig.featureSet.payments.methods.creditCard.uplifts.amount\r\n    + percFee;\r\n\r\n  return (\r\n    <confirmationmodal\r\n !selectedwalletitem\r\n="" 3\r\n="" <="" confirmdisabled="{\r\n" onconfirm="{payInvoice}\r\n" selectedwalletitemcvv.length="" show="{show}\r\n" title='{t(\"ui.storefront.userDashboard.controls.salesDetail.PayInvoice\")}\r\n' ||=""> 4\r\n        || !chosenAmount.length\r\n        || parseFloat(chosenAmount) &lt;= 0\r\n        || !selectedBillingContact\r\n        || viewState.running\r\n      }\r\n      onCancel={onCancel}\r\n      size={ServiceStrings.modalSizes.lg}&gt;\r\n      <div classname='\"text-body' position-relative\"="">\r\n        {viewState.running ? <loadingwidget overlay="{true}"> : null}\r\n        <span id='\"pimSelectACardText\"'>\r\n          {t(\"ui.storefront.checkout.views.paymentInformation.selectACard\")}\r\n        </span>\r\n        <invoicemodalwalletsection\r\n =="" onchange="{walletItem"> {\r\n            setSelectedWalletItem(walletItem);\r\n            setSelectedWalletItemCVV(\"\");\r\n          }}\r\n          onCVVChange={(cvv: string) =&gt; {\r\n            setSelectedWalletItemCVV(cvv);\r\n          }}\r\n          CVV={selectedWalletItemCVV}\r\n          initialWalletItem={selectedWalletItem}\r\n        /&gt;\r\n        <span id='\"pimSelectABillingAddressText\"'>\r\n          {t(\r\n            \"ui.storefront.userDashboard2.controls.addressBook.PleaseSelectABillingAddress\"\r\n          )}\r\n        </span>\r\n        <invoicemodalbillingcontactsection\r\n =="" addressbook="{addressBook}\r\n" onchange="{contact"> {\r\n            setSelectedBillingContact(contact);\r\n          }}\r\n          initialContact={selectedBillingContact}\r\n        /&gt;\r\n        <div classname='\"bg-light' p-3\"="">\r\n          <div classname='\"d-flex\"'>\r\n            <div classname='\"w-50\"'>\r\n              <p classname='\"mb-1\"' id='\"pimBalanceDueTitle\"'>\r\n                {t(\"ui.storefront.userDashboard.invoices.BalanceDue\")}\r\n              </p>\r\n              <p classname='\"h3' id='\"pimBalanceDueText\"' mb-1\"="" mt-0="">{currencyFormatter.format(invoice.BalanceDue)}</p>\r\n            </div>\r\n            <div classname='\"w-50\"'>\r\n              <p classname='\"mb-1\"' id='\"pimChosenAmountTitle\"'>\r\n                {t(\"ui.storefront.userDashboard.invoices.ChosenAmount\")}\r\n              </p>\r\n              <inputgroup>\r\n                <inputgroup.text>\r\n                  <i classname='\"fal' fa-dollar-sign\"="">\r\n                </i></inputgroup.text><i classname='\"fal' fa-dollar-sign\"="">\r\n                <form.control\r\n =="" classname='\"text-end\"\r\n' id='\"pimChosenAmountText\"\r\n' onchange="{e" type='\"number\"\r\n' value="{chosenAmount}\r\n"> {\r\n                    if (!e.target.value.length) {\r\n                      setChosenAmount(\"0\");\r\n                      return;\r\n                    }\r\n                    if (isNaN(Number(e.target.value))\r\n                      || Number(e.target.value) &gt; invoice.BalanceDue\r\n                      || e.target.value.includes(\"-\")\r\n                      || Number(e.target.value) &lt; 0) {\r\n                      return;\r\n                    }\r\n                    setChosenAmount(e.target.value);\r\n                  }}\r\n                /&gt;\r\n              </form.control\r\n></i></inputgroup><i classname='\"fal' fa-dollar-sign\"="">\r\n            </i></div><i classname='\"fal' fa-dollar-sign\"="">\r\n          </i></div><i classname='\"fal' fa-dollar-sign\"="">\r\n          <div classname='\"d-flex\"'>\r\n            <div classname='\"w-50\"'>\r\n              <p classname='\"mb-1\"' id='\"pimTotalFeesTitle\"'>Total Fees</p>\r\n              <p classname='\"h3' id='\"pimTotalFeesText\"' mb-1\"="" mt-0="">\r\n                {currencyFormatter.format(totalFees)}\r\n              </p>\r\n            </div>\r\n            <div classname='\"w-50\"'>\r\n              <p classname='\"mb-1\"' id='\"pimTotalPaymentAmountTitle\"'>Total Payment Amount</p>\r\n              <p classname='\"h3' id='\"pimTotalPaymentAmountText\"' mb-1\"="" mt-0="">\r\n                {/* @ts-ignore */}\r\n                {currencyFormatter.format(invoice.Totals.Fees + parseFloat(chosenAmount) + totalFees)}\r\n              </p>\r\n            </div>\r\n          </div>\r\n          {/* TODO: Remarks about useGreater uplift fee result setting when active (default off) */}\r\n          <div>\r\n            {cefConfig.featureSet.payments.methods.creditCard.uplifts.percent &gt; 0\r\n              &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n                <small classname='\"small\"'>\r\n                  {t(\"ui.storefront.purchasing.weMayApplyFeeToCCtransToCoverCosts\")}\r\n                </small>\r\n              </p>\r\n            }\r\n            {cefConfig.featureSet.payments.methods.creditCard.uplifts.amount &gt; 0\r\n              &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n                <b>NOTE:</b>\r\n                A {currencyFormatter.format(cefConfig.featureSet.payments.methods.creditCard.uplifts.amount)}\r\n                {\" \"}processing fee is charged for credit card transactions.\r\n              </p>\r\n            }\r\n          </div>\r\n          {/* {selectedPaymentMethod === ServiceStrings?.checkout.paymentMethods.echeck &amp;&amp; <div>\r\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent &gt; 0 &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n              <small classname='\"small\"'>\r\n                <b>NOTE:</b> A {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent * 100}%\r\n                processing fee is charged for eCheck transactions.\r\n              </small>\r\n            </p>}\r\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.amount &gt; 0 &amp;&amp; <p classname='\"mb-0' mt-2\"="">\r\n              <small classname='\"small\"'>\r\n                <b>NOTE:</b>\r\n                A {currencyFormatter.format(cefConfig?.featureSet.payments.methods.eCheck.uplifts.amount)}\r\n                processing fee is charged for eCheck transactions.\r\n              </small>\r\n            </p>}\r\n          </div>} */}\r\n        </i></div><i classname='\"fal' fa-dollar-sign\"="">\r\n      </i></invoicemodalbillingcontactsection\r\n></invoicemodalwalletsection\r\n></loadingwidget></div><i classname='\"fal' fa-dollar-sign\"="">\r\n    \r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, ButtonGroup } from \"react-bootstrap\";\r\nimport { PayInvoiceModal } from \"src/Dashboard/Invoices/PayInvoiceModal\";\r\nimport { SalesInvoiceModel, SalesOrderModel, SalesQuoteModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ProductModel } from \"src/_api/cvApi.shared\";\r\n\r\ninterface IMakeAPaymentProps {\r\n  classes?: string;\r\n  icon?: boolean;\r\n  excludeQuoteCart?: boolean;\r\n  label?: string;\r\n  disabled?: boolean;\r\n  product?: ProductModel;\r\n  quantity?: number;\r\n  balanceIsPastDue: boolean;\r\n  salesObject: SalesOrderModel | SalesInvoiceModel | SalesQuoteModel;\r\n  onPaymentConfirmed?: Function;\r\n}\r\n\r\nexport const MakeAPaymentButton = (props: IMakeAPaymentProps): JSX.Element =&gt; {\r\n  const { classes, disabled, balanceIsPastDue, salesObject, onPaymentConfirmed } = props;\r\n\r\n  const [ showPayInvoiceModal, setShowPayInvoiceModal ] = useState<boolean>(false);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <div classname='\"position-relative\"'>\r\n      <payinvoicemodal\r\n =="" invoice="{salesObject}\r\n" onconfirm="{()" show="{showPayInvoiceModal}\r\n"> {\r\n          setShowPayInvoiceModal(false);\r\n          if (onPaymentConfirmed) {\r\n            onPaymentConfirmed();\r\n          }\r\n        }}\r\n        onCancel={() =&gt; setShowPayInvoiceModal(false)}\r\n      /&gt;\r\n      <buttongroup classname='\"w-100\"'>\r\n        <button\r\n :="" =="" ?="" ??="" \"btn-block="" \"danger\"="" \"warning\"}\r\n="" btn-md="" classname="{classes" disabled="{disabled" false}\r\n="" id='\"btnMakeAPayment\"\r\n' onclick="{()" rounded-start="" text-nowrap\"}\r\n="" type='\"button\"\r\n' variant="{balanceIsPastDue" ||=""> setShowPayInvoiceModal(true)}&gt;\r\n          {t(\"ui.storefront.userDashboard.controls.salesGroupDetail.MakeAPayment\")}\r\n        \r\n      </button\r\n></buttongroup>\r\n    </payinvoicemodal\r\n></div>\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { Table } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { PaymentModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport promiser from \"src/_shared/Promiser\";\r\n\r\ninterface InvoicePaymentsTableProps {\r\n  invoiceID: number;\r\n}\r\nexport const InvoicePaymentsTable = (props: InvoicePaymentsTableProps): JSX.Element =&gt; {\r\n  const [ payments, setPayments ] = useState<paymentmodel[]>([]);\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() =&gt; {\r\n    const promiserKey = \"cvApi.payments.GetSalesInvoicePaymentsForCurrentAccount\";\r\n    setRunning();\r\n    promiser.resolve(promiserKey, () =&gt; cvApi.payments.GetSalesInvoicePaymentsForCurrentAccount({\r\n      Active: true,\r\n      AsListing: true,\r\n      MasterID: props.invoiceID,\r\n      Paging: {\r\n        Size: 9,\r\n        StartIndex: 1\r\n      }\r\n    })).then(result =&gt; {\r\n      if (!result.data?.Results) {\r\n        finishRunning(true, \"Could not find payment results.\");\r\n      }\r\n      setPayments(result.data.Results);\r\n      finishRunning();\r\n    })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }, [ props.invoiceID ]);\r\n  if (viewState.running) {\r\n    return <loadingwidget size='\"1x\"'>;\r\n  }\r\n  if (!payments.length) {\r\n    return null;\r\n  }\r\n  return \r\n    \r\n      \r\n        \r\n        \r\n        \r\n      \r\n    \r\n    \r\n      {payments.map(payment =&gt; {\r\n        return \r\n          \r\n          \r\n          \r\n        ;\r\n      })}\r\n    \r\n  <table><thead><tr><th classname='\"text-nowrap\"'>{t(\"ui.storefront.common.PaymentDate\")}</th><th classname='\"text-nowrap\"'>{t(\"ui.storefront.common.TransactionID\")}</th><th classname='\"text-nowrap\"'>{t(\"ui.storefront.common.Amount\")}</th></tr></thead><tbody><tr key="{`invoicePayment_${props.invoiceID}_${payment.ID}`}"><td classname='\"text-nowrap\"'>{new Date(payment.UpdatedDate ?? payment.CreatedDate).toDateString()}</td><td classname='\"text-nowrap\"'>{payment.TransactionID ?? payment.TransactionNumber}</td><td classname='\"text-nowrap\"'>{payment.Amount}</td></tr></tbody></table>;\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col } from \"react-bootstrap\";\r\nimport { SalesInvoiceModel, SalesOrderModel, SalesQuoteModel, SalesReturnModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { SalesGroupContactBlock } from \"src/_shared/salesGroup/SalesGroupContactBlock\";\r\nimport { SalesGroupDetailsBlock } from \"src/_shared/salesGroup/SalesGroupDetailsBlock\";\r\nimport { MakeAPaymentButton } from \"src/Cart/controls/MakeAPaymentButton\";\r\nimport { InvoicePaymentsTable } from \"src/Dashboard/Invoices/InvoicePaymentsTable\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\n\r\ninterface ISalesGroupDetailsAdditionalDetailsProps {\r\n  type: \"order\" | \"quote\" | \"invoice\" | \"return\";\r\n  salesObject: SalesOrderModel | SalesInvoiceModel | SalesQuoteModel | SalesReturnModel;\r\n  onPaymentConfirmed?: Function;\r\n}\r\n\r\nexport const SalesGroupDetailsAdditionalDetails = (props: ISalesGroupDetailsAdditionalDetailsProps): JSX.Element =&gt; {\r\n  const { type, salesObject, onPaymentConfirmed } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  function today(): string {\r\n    return new Date().toDateString();\r\n  }\r\n\r\n  function hasDueDate(): boolean {\r\n    if ((salesObject.StatusKey !== \"Unpaid\" &amp;&amp; salesObject.BalanceDue &lt;= 0)\r\n      || type === \"return\") {\r\n      return false;\r\n    }\r\n    return \"DueDate\" in salesObject;\r\n  }\r\n\r\n  const balanceIsPastDue = hasDueDate()\r\n    ? Date.parse(salesObject.DueDate) &lt; Date.parse(today())\r\n    : false;\r\n\r\n  return (\r\n    <fragment>\r\n      \r\n        <salesgroupdetailsblock salesobject="{salesObject}" type="{type}">\r\n        {type === \"invoice\"\r\n          ? &lt;&gt;\r\n            <div classname='\"d-flex' flex-column="" mb-3\"="" w-100="">\r\n              <b id='\"SalesOrderBalanceDueText\"'>\r\n                {t(\"ui.storefront.userDashboard2.controls.salesDetail.BalanceDue\")}\r\n              </b>\r\n              <div\r\n ${\r\n="" :="" <="0\r\n" ?="" \"alert-danger\"\r\n="" \"alert-success\"\r\n="" \"alert-warning\"\r\n="" \"paid\"="" alert="" align-items-center="" balanceispastdue\r\n="" classname="{`p-2" d-flex="" id='\"SalesOrderBalanceDueAmount\"\r\n' justify-content-between="" salesobject.balancedue="" salesobject.statuskey="==" ||="" }`}="">\r\n                {salesObject.BalanceDue &amp;&amp; salesObject.BalanceDue &gt; 0\r\n                  ? currencyFormatter.format(salesObject.BalanceDue)\r\n                  : \"Paid\"}\r\n                {salesObject.StatusKey !== \"Paid\" &amp;&amp; salesObject.BalanceDue &gt; 0\r\n                  ? <makeapaymentbutton\r\n balanceispastdue="{balanceIsPastDue}\r\n" onpaymentconfirmed="{onPaymentConfirmed}\r\n" salesobject="{salesObject}\r\n">\r\n                  : null}\r\n              </makeapaymentbutton\r\n></div\r\n></div>\r\n              {balanceIsPastDue &amp;&amp; salesObject.BalanceDue &gt; 0\r\n                ? <div alert-danger\"="" classname='\"alert'>\r\n                  <span>Your payment is passed due.</span>\r\n                </div>\r\n                : null}\r\n            \r\n          \r\n          : null}\r\n      \r\n      \r\n        {salesObject &amp;&amp; salesObject.BillingContact\r\n          &amp;&amp; <salesgroupcontactblock\r\n contact="{salesObject.BillingContact}\r\n" headerkey='\"ui.storefront.userDashboard2.controls.salesDetail.BillingInfo\"\r\n'>\r\n        }\r\n      \r\n      \r\n        {salesObject &amp;&amp; salesObject.ShippingContact\r\n          &amp;&amp; (salesObject.BillingContactID === salesObject.ShippingContactID\r\n            ? &lt;&gt;Same as Billing\r\n            : <salesgroupcontactblock\r\n contact="{salesObject.ShippingContact}\r\n" headerkey='\"ui.storefront.common.ShippingInfo\"\r\n'>)\r\n        }\r\n      \r\n      { type === \"invoice\"\r\n        &amp;&amp; \r\n          <invoicepaymentstable invoiceid="{salesObject.ID}">\r\n        }\r\n    </invoicepaymentstable></salesgroupcontactblock\r\n></salesgroupcontactblock\r\n></salesgroupdetailsblock></fragment>\r\n  );\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { Column } from \"@material-table/core\";\r\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { Table } from \"src/_shared/common/Table\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\r\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets\";\r\nimport { SalesItemQuantityLine } from \"src/_shared/salesGroup/SalesItemQuantityLine\";\r\n\r\ninterface ISalesGroupItemsTableProps {\r\n  salesItems: SalesItemBaseModel<appliedsalesorderitemdiscountmodel>[];\r\n  productsMap: { [id: string]: ProductModel };\r\n}\r\n\r\nconst getFormattedPrice = (val: number): string =&gt; {\r\n  if (!val) {\r\n    return \"TBD\";\r\n  }\r\n  return currencyFormatter.format(val);\r\n}\r\n\r\nconst ColumnRenderPrice = (salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel>) =&gt; {\r\n  const discountTotal = salesItem.Discounts\r\n    ? salesItem.Discounts.reduce((curVal, accu) =&gt; curVal + accu.DiscountTotal, 0)\r\n    : 0;\r\n\r\n  return (\r\n    <fragment>\r\n      <div\r\n ${\r\n="" &&="" cart-price="" classname="{`form-control-static" price="" py-0="" salesitem.unitcoreprice="" salesitem.unitsoldprice="" text-end="" text-muted=""> 0 &amp;&amp; salesItem.UnitCorePrice !== salesItem.UnitSoldPrice\r\n            ? \"strike-through small text-disabled pb-0\"\r\n            : \"\"\r\n        }`}\r\n        id={`ProductLineItemCorePrice_${salesItem?.ID ?? \"\"}`}&gt;\r\n        {getFormattedPrice(salesItem.UnitCorePrice)}\r\n      \r\n      {salesItem.UnitSoldPrice &amp;&amp; salesItem.UnitCorePrice !== salesItem.UnitSoldPrice &amp;&amp; salesItem.UnitSoldPrice &gt; 0\r\n        ? <div\r\n ${\r\n="" &&="" cart-price="" classname="{`form-control-static" discounttotal="" price="" py-0="" text-danger="" text-end=""> 0 ? \"strike-through small text-disabled pb-0\" : \"\"\r\n          }`}\r\n          id={`ProductLineItemSalePrice_${salesItem?.ID ?? \"\"}`}&gt;\r\n          {getFormattedPrice(salesItem.UnitSoldPrice)}\r\n        \r\n        : null}\r\n      {discountTotal &amp;&amp; discountTotal &gt; 0\r\n        ? <div cart-price="" classname='\"form-control-static' price="" py-0\"="" text-end="" text-success="">\r\n          {getFormattedPrice(salesItem.UnitSoldPrice || salesItem.UnitCorePrice)}\r\n        </div>\r\n        : null}\r\n    </div\r\n></div\r\n></fragment>\r\n  );\r\n};\r\n\r\nconst ColumnRenderSubtotal = (\r\n  salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel>\r\n) =&gt; {\r\n  const discountTotal = salesItem.Discounts\r\n    ? salesItem.Discounts.reduce((curVal, accu) =&gt; curVal + accu.DiscountTotal, 0)\r\n    : 0;\r\n  return (\r\n    <fragment>\r\n      <div\r\n !="=" ${\r\n="" &&="" ??="" \"\"}`}\r\n="" classname="{`form-control-static" font-weight-normal="" id="{`ProductLineItemPriceSubtotal_${salesItem.ID" py-0="" salesitem.unitcoreprice="" salesitem.unitsoldprice="" text-end="" text-muted=""> 0\r\n          || discountTotal &gt; 0\r\n            ? \"strike-through small text-disabled pb-0\"\r\n            : null\r\n        }`}&gt;\r\n        {getFormattedPrice(salesItem.UnitCorePrice * salesItem.TotalQuantity)}\r\n      \r\n      {salesItem.UnitCorePrice !== salesItem.UnitSoldPrice &amp;&amp; salesItem.UnitSoldPrice &gt; 0\r\n        ? <div\r\n ${\r\n="" &&="" 0="" :="" <="" ?="" ??="" \"\"\r\n="" \"\"}`}\r\n="" \"strike-through="" classname="{`form-control-static" discounttotal="" font-weight-normal="" id="{`ProductLineItemSalePriceSubtotal_${salesItem.ID" pb-0\"="" py-0="" small="" text-danger="" text-disabled="" text-end="" }`}="">\r\n          {getFormattedPrice(salesItem.ExtendedPrice)}\r\n        \r\n        : null}\r\n      {discountTotal &lt; 0\r\n        ? <div\r\n ??="" \"\"}`}\r\n="" classname='{\"form-control-static' font-weight-normal="" id="{`cartProductSubtotalWithDiscounts_${salesItem.ID" py-0\"}="" text-end="" text-success="">\r\n          {getFormattedPrice(salesItem.ExtendedPrice + discountTotal)}\r\n        \r\n        : null}\r\n    </div\r\n></div\r\n></div\r\n></fragment>\r\n  );\r\n};\r\n\r\nexport const SalesGroupItemsTable = (props: ISalesGroupItemsTableProps): JSX.Element =&gt; {\r\n  const { salesItems, productsMap } = props;\r\n\r\n  const cefConfig = useCefConfig();\r\n\r\n  const ColumnRenderAddToCart = (\r\n    salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel> &amp; { tableData: { index: number }}\r\n  ) =&gt; {\r\n    const itemProductIDAsString = salesItem.ProductID.toString();\r\n    if (!productsMap || !productsMap[itemProductIDAsString]) {\r\n      return null;\r\n    }\r\n    const itemProduct = productsMap[itemProductIDAsString];\r\n\r\n    return <productcardactionbuttonwidget\r\n addtocartbtnclasses='{\"text-nowrap\"}\r\n' forcenoquantityselector="{true}\r\n" product="{itemProduct}\r\n">;\r\n  };\r\n\r\n  const ColumnRenderStatus = (\r\n    salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel> &amp; { tableData: { index: number }}\r\n  ) =&gt; {\r\n    const itemProductIDAsString = salesItem.ProductID.toString();\r\n    if (!productsMap || !productsMap[itemProductIDAsString]) {\r\n      return null;\r\n    }\r\n    const itemProduct = productsMap[itemProductIDAsString];\r\n\r\n    return &lt;&gt;{itemProduct.StatusDisplayName};\r\n  };\r\n\r\n  const ColumnRenderProductName = (\r\n    salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel>\r\n  ): JSX.Element =&gt; {\r\n    if (!cefConfig) {\r\n      return null;\r\n    }\r\n    const itemProductIDAsString = salesItem.ProductID.toString();\r\n    let productSeoUrl = \"\";\r\n    if (productsMap &amp;&amp; productsMap[itemProductIDAsString]) {\r\n      productSeoUrl = productsMap[itemProductIDAsString].SeoUrl;\r\n    }\r\n    return (\r\n      <productcardnamewidget\r\n productname="{salesItem.Name}\r\n" productseourl="{productSeoUrl}\r\n">\r\n    );\r\n  };\r\n\r\n  const ColumnRenderSalesItemSku = (\r\n    salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel>\r\n  ): JSX.Element =&gt; <a\r\n \"productdetail\")}="" href="{corsLink(cefConfig," salesitem.productseourl,="">\r\n    {salesItem.Sku}\r\n  ;\r\n\r\n  const ColumnRenderQuantity = (salesItem: SalesItemBaseModel<appliedsalesorderitemdiscountmodel>) =&gt; {\r\n    if (salesItem.QuantityBackOrdered &lt;= 0) {\r\n      return <div classname='\"text-center\"'>{(salesItem.Quantity ?? 0) + (salesItem.QuantityPreSold ?? 0)}</div>;\r\n    }\r\n    return (\r\n      <div classname='\"text-center\"'>\r\n        <salesitemquantityline salesitem="{salesItem}">\r\n      </salesitemquantityline></div>\r\n    );\r\n  };\r\n\r\n  const columns: Array<column<any>&gt; = [\r\n    {\r\n      title: \"SKU\",\r\n      width: \"fit-content\",\r\n      render: ColumnRenderSalesItemSku\r\n    },\r\n    {\r\n      title: \"Name\",\r\n      width: \"fit-content\",\r\n      render: ColumnRenderProductName,\r\n      cellStyle: {\r\n        width: \"100%\"\r\n      }\r\n    },\r\n    {\r\n      title: \"Price\",\r\n      width: \"fit-content\",\r\n      render: ColumnRenderPrice\r\n    },\r\n    {\r\n      title: \"Quantity\",\r\n      headerStyle: { textAlign: \"center\" },\r\n      width: \"fit-content\",\r\n      render: ColumnRenderQuantity\r\n    },\r\n    {\r\n      title: \"Subtotal\",\r\n      width: \"fit-content\",\r\n      render: ColumnRenderSubtotal\r\n    },\r\n    {\r\n      title: \"Status\",\r\n      width: \"fit-content\",\r\n      render: ColumnRenderStatus\r\n    }\r\n  ];\r\n\r\n  return ;\r\n};\r\n","import React, { useState } from \"react\";\r\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { SetSalesQuoteAsCancelledDto, SetSalesQuoteAsRejectedDto } from \"src/_api\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { Anchor } from \"react-bootstrap\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ninterface propTypes {\r\n  masterQuoteId: number;\r\n  getSalesObject: Function;\r\n  showApprovedModal: boolean;\r\n  showRejectedModal: boolean;\r\n  setShowRejectedModal: React.Dispatch<react.setstateaction<boolean>&gt;;\r\n  showCancelledModal: boolean;\r\n  setShowCancelledModal: React.Dispatch<react.setstateaction<boolean>&gt;;\r\n  setIsQuoteApproved: React.Dispatch<react.setstateaction<boolean>&gt;;\r\n  salesGroupId: string;\r\n  invoiceID: number;\r\n}\r\n\r\nexport const SalesGroupQuoteModals = ({ masterQuoteId,\r\n  getSalesObject,\r\n  showApprovedModal,\r\n  showRejectedModal,\r\n  setShowRejectedModal,\r\n  showCancelledModal,\r\n  setShowCancelledModal,\r\n  setIsQuoteApproved,\r\n  salesGroupId,\r\n  invoiceID }: propTypes): JSX.Element =&gt; {\r\n  const [ rejectionReason, setRejectionReason ] = useState<string>(\"\");\r\n  const [ cancellationReason, setCancellationReason ] = useState<string>(\"\");\r\n\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning } = useViewState();\r\n\r\n  const rejectQuote = () =&gt; {\r\n    setRunning();\r\n    const dto: SetSalesQuoteAsRejectedDto = {\r\n      QuoteID: masterQuoteId,\r\n      Note: rejectionReason\r\n    };\r\n    cvApi.providers\r\n      .SetSalesQuoteAsRejected(dto)\r\n      .then(res =&gt; {\r\n        if (!res?.data?.ActionSucceeded) {\r\n          finishRunning(true, null, res?.data?.Messages ?? [ \"Failed to register or authenticate\" ]);\r\n        }\r\n        getSalesObject(masterQuoteId);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.data?.Message ?? \"Failed to register or authenticate\");\r\n      });\r\n  };\r\n\r\n  const cancelQuote = () =&gt; {\r\n    setRunning();\r\n    const dto: SetSalesQuoteAsCancelledDto = {\r\n      QuoteID: masterQuoteId,\r\n      Note: cancellationReason\r\n    };\r\n    cvApi.providers\r\n      .SetSalesQuoteAsCancelled(dto)\r\n      .then(res =&gt; {\r\n        if (!res?.data?.ActionSucceeded) {\r\n          finishRunning(true, null, res?.data?.Messages ?? [ \"Failed to register or authenticate\" ]);\r\n        }\r\n        getSalesObject(masterQuoteId);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.data?.Message ?? \"Failed to register or authenticate\");\r\n      });\r\n  };\r\n\r\n  const handleRejectionReasonChange = (e: any) =&gt; {\r\n    setRejectionReason(e.target.value);\r\n  };\r\n\r\n  const handleCancellationReasonChange = (e: any) =&gt; {\r\n    setCancellationReason(e.target.value);\r\n  };\r\n\r\n  if (!cefConfig) {\r\n    return null;\r\n  }\r\n\r\n  return &lt;&gt;\r\n    <confirmationmodal\r\n approved\"}\r\n="" onconfirm="{():" show="{showApprovedModal}\r\n" title='{\"Quote' void=""> setIsQuoteApproved(false)}\r\n      onCancel={() =&gt; {\r\n        setIsQuoteApproved(false);\r\n        window.location.reload();\r\n      }}\r\n      // btn label is a link\r\n      confirmBtnLabel={\r\n        <anchor\r\n ${invoiceid}`,\r\n="" ${salesgroupid}="" )}="" \"primary\",\r\n="" \"site\",\r\n="" `${cefconfig.routes.dashboard.root}="" cefconfig,\r\n="" classname='\"text-white\"\r\n' href="{corsLink(\r\n" invoice="" null\r\n="" sales-group="">\r\n          {t(\"ui.storefront.userDashboard.controls.salesDetail.PayInvoice\")}\r\n        \r\n      }\r\n      cancelBtnLabel={t(\"ui.storefront.common.OK\")}\r\n    &gt;\r\n      <section align-items-center\"="" classname='\"modal-body' justify-content-center="">\r\n        <h3 classname='\"modal-title' mb-3\"="" text-center="">Your quote has been approved.</h3>\r\n        <p>Click OK to continue viewing this page or go to the invoice to review and/or make a payment.</p>\r\n      </section>\r\n    \r\n    <confirmationmodal\r\n =="" oncancel="{()" onconfirm="{rejectQuote}\r\n" quote\"}\r\n="" show="{showRejectedModal}\r\n" title='{\"Reject'> setShowRejectedModal(false)}\r\n      confirmBtnLabel={\"Reject Quote\"}\r\n      cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}&gt;\r\n      <section align-items-center\"="" classname='\"modal-body' justify-content-center="">\r\n        <h5 classname='\"modal-title' mb-3\"="">\r\n          Please provide a reason for rejecting this quote for our team to consider during review. (optional)\r\n        </h5>\r\n        <textarea =="" cols="{50}\r\n" id='\"rejectionMessage\"\r\n' name='\"rejectionMessage\"\r\n' onchange="{e" rows="{5}\r\n"> handleRejectionReasonChange(e)} /&gt;\r\n      &lt;/section&gt;\r\n    &lt;/ConfirmationModal&gt;\r\n    &lt;ConfirmationModal\r\n      show={showCancelledModal}\r\n      title={\"Reject Quote\"}\r\n      onConfirm={cancelQuote}\r\n      onCancel={() =&gt; setShowCancelledModal(false)}\r\n      confirmBtnLabel={\"Cancel Quote\"}\r\n      cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}&gt;\r\n      &lt;section className=\"modal-body justify-content-center align-items-center\"&gt;\r\n        &lt;h5 className=\"modal-title mb-3\"&gt;\r\n          Please provide a reason for cancelling this quote for our team to review. (optional)\r\n        &lt;/h5&gt;\r\n        &lt;textarea name=\"cancellationMessage\"\r\n          id=\"cancellationMessage\"\r\n          cols={50}\r\n          rows={5}\r\n          onChange={e =&gt; handleCancellationReasonChange(e)} /&gt;\r\n      &lt;/section&gt;\r\n    &lt;/ConfirmationModal&gt;\r\n  &lt;/&gt;;\r\n};\r\n","/* eslint-disable max-len */\r\n/* eslint-disable capitalized-comments */\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, ButtonGroup, Col, Row } from \"react-bootstrap\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { SalesGroupDetailsAdditionalDetails } from \"src/Dashboard/SalesGroup/SalesGroupDetailsAdditionalDetails\";\r\nimport { TotalsWidget } from \"src/Cart/views/TotalsWidget\";\r\nimport { AddAllToCartButton } from \"src/Cart/controls\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ISalesGroupDetailsProps } from \"src/Dashboard/SalesGroup/_salesGroupTypes\";\r\nimport { SalesGroupItemsTable } from \"src/_shared/salesGroup/SalesGroupItemsTable\";\r\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\r\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { SetSalesQuoteAsApprovedDto } from \"src/_api\";\r\nimport { SalesGroupQuoteModals } from \"src/Dashboard/SalesGroup/SalesGroupQuoteModals\";\r\n\r\nexport const SalesGroupDetails = (props: ISalesGroupDetailsProps): JSX.Element =&gt; {\r\n  const { params, salesGroup, salesObject, onPaymentConfirmed, onSelectedSalesTabChange, getSalesObject, isQuoteApproved, setIsQuoteApproved, invoiceID, setInvoiceID } = props;\r\n  const { type, typeId, salesGroupId } = params;\r\n\r\n  const [ showActionsDropdown, setShowActionsDropdown ] = useState&lt;boolean&gt;(false);\r\n  const [ productsMap, setProductsMap ] = useState&lt;{ [id: string]: ProductModel }&gt;(null);\r\n  const [ isMasterQuote, setIsMasterQuote ] = useState&lt;boolean&gt;(true);\r\n  const [ showApprovedModal, setShowApprovedModal ] = useState&lt;boolean&gt;(false);\r\n  const [ showRejectedModal, setShowRejectedModal ] = useState&lt;boolean&gt;(false);\r\n  const [ showCancelledModal, setShowCancelledModal ] = useState&lt;boolean&gt;(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const pricingFactory = usePricingFactory();\r\n  const inventoryFactory = useInventoryFactory();\r\n\r\n  const masterQuoteId: number = salesGroup.SalesQuoteRequestMasters?.length &gt; 0\r\n    ? salesGroup.SalesQuoteRequestMasters[0].ID\r\n    : null;\r\n\r\n  useEffect(() =&gt; {\r\n    setIsMasterQuote(Number(typeId) === masterQuoteId);\r\n  }, [ typeId ]);\r\n\r\n  useEffect(() =&gt; {\r\n    setShowApprovedModal(isQuoteApproved);\r\n  }, [ isQuoteApproved ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig || !inventoryFactory || !pricingFactory || !salesGroup) {\r\n      return;\r\n    }\r\n\r\n    if (\r\n      type === \"invoice\"\r\n      &amp;&amp; Boolean(salesGroup?.SalesOrderMasters?.length)\r\n      &amp;&amp; Boolean(salesGroup?.SubSalesOrders?.length)\r\n    ) {\r\n      setItemsAndProductsForInvoice();\r\n    } else if (salesObject?.SalesItems?.length) {\r\n      setProductsForSalesObject();\r\n    }\r\n  }, [ cefConfig, inventoryFactory, pricingFactory ]);\r\n\r\n  async function setProductsForSalesObject() {\r\n    setRunning();\r\n    const itemsWithQuantity = salesObject.SalesItems.filter(\r\n      item =&gt; item.Quantity &gt; 0 || item.QuantityBackOrdered &gt; 0 || item.QuantityPreSold &gt; 0\r\n    );\r\n    const productsOfSalesObject = await getProductsForSalesItems(itemsWithQuantity.map(x =&gt; x.ProductID));\r\n    setProductsMap(productsOfSalesObject);\r\n    finishRunning();\r\n  }\r\n\r\n  function setItemsAndProductsForInvoice(): void {\r\n    if (!salesGroup || !salesGroup.SalesOrderMasters || !salesGroup.SubSalesOrders) {\r\n      return;\r\n    }\r\n    setRunning();\r\n    const allOrders = [ ...salesGroup.SalesOrderMasters, ...salesGroup.SubSalesOrders ];\r\n    Promise.all(allOrders.map(order =&gt; cvApi.ordering.GetSecureSalesOrder(order.ID))).then(resArr =&gt; {\r\n      const salesItemsOfOrders: SalesItemBaseModel&lt;AppliedSalesOrderItemDiscountModel&gt;[] = [];\r\n      const productIdsOfOrders: number[] = [];\r\n      resArr.forEach(orderRes =&gt; {\r\n        salesItemsOfOrders.push(...orderRes.data.SalesItems);\r\n      });\r\n      for (let i = 0; i &lt; salesItemsOfOrders.length; i++) {\r\n        const curItem = salesItemsOfOrders[i];\r\n        const totalQuantity\r\n          = curItem.Quantity + (curItem.QuantityBackOrdered || 0) + (curItem.QuantityPreSold || 0);\r\n        if (totalQuantity &lt; 1) {\r\n          continue;\r\n        }\r\n        if (!productIdsOfOrders.includes(curItem.ProductID)) {\r\n          productIdsOfOrders.push(curItem.ProductID);\r\n        }\r\n      }\r\n      return getProductsForSalesItems(productIdsOfOrders);\r\n    })\r\n      .then(salesOrderProducts =&gt; {\r\n        setProductsMap(salesOrderProducts);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  async function getProductsForSalesItems(productIds: number[]) {\r\n    try {\r\n      let products = (await cvApi.products.GetProductsByIDs({ IDs: productIds })).data;\r\n      if (cefConfig?.featureSet.inventory.enabled) {\r\n        products = await inventoryFactory.bulkFactoryAssign(products);\r\n      }\r\n      if (cefConfig?.featureSet.pricing.enabled) {\r\n        products = await pricingFactory.bulkFactoryAssign(products);\r\n      }\r\n      const productsMapI: { [id: string]: ProductModel } = {};\r\n      products.forEach(product =&gt; {\r\n        productsMapI[product.ID.toString()] = product;\r\n      });\r\n      return productsMapI;\r\n    } catch (err) {\r\n      if (cefConfig.debug) {\r\n        console.error(err);\r\n      }\r\n      return null;\r\n    }\r\n  }\r\n\r\n  const approveQuoteAndShowModal = () =&gt; {\r\n    setRunning();\r\n    const dto: SetSalesQuoteAsApprovedDto = {\r\n      QuoteID: masterQuoteId,\r\n    };\r\n    cvApi.providers\r\n      .SetSalesQuoteAsApproved(dto)\r\n      .then(res =&gt; {\r\n        if (!res?.data?.ActionSucceeded) {\r\n          finishRunning(true, null, res?.data?.Messages ?? [ \"Failed to approve quote\" ]);\r\n          return;\r\n        }\r\n        getSalesObject(masterQuoteId);\r\n        setInvoiceID(res.data.Result.InvoiceID);\r\n        setIsQuoteApproved(true);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err.data?.Message ?? \"Failed to approve quote\");\r\n      });\r\n  };\r\n\r\n  if (!salesObject) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    &lt;Fragment&gt;\r\n      &lt;SalesGroupQuoteModals masterQuoteId={masterQuoteId}\r\n        getSalesObject={getSalesObject}\r\n        showApprovedModal={showApprovedModal}\r\n        showRejectedModal={showRejectedModal}\r\n        setShowRejectedModal={setShowRejectedModal}\r\n        showCancelledModal={showCancelledModal}\r\n        setShowCancelledModal={setShowCancelledModal}\r\n        setIsQuoteApproved={setIsQuoteApproved}\r\n        salesGroupId={salesGroupId}\r\n        invoiceID={invoiceID} /&gt;\r\n      &lt;Col&gt;\r\n        &lt;div className=\"sales-group-inner-detail\"&gt;\r\n          &lt;Row className=\"align-items-center mb-3\"&gt;\r\n            &lt;Col className=\"col-pe-12\"&gt;\r\n              &lt;h4 className=\"my-0\"&gt;\r\n                &lt;span id=\"UserDashboardSalesOrderText\"&gt;\r\n                  {t(\"ui.storefront.userDashboard2.userDashboard.Sales\")}{\" \"}\r\n                  {t(type === \"order\"\r\n                    ? \"ui.storefront.common.SalesOrder\"\r\n                    : type === \"invoice\"\r\n                      ? \"ui.storefront.common.SalesInvoice\"\r\n                      : \"ui.storefront.common.SalesQuote\")}\r\n                &lt;/span&gt;\r\n                 \r\n                &lt;span id=\"UserDashboardSalesOrderNumberSymbol\"&gt;{t(\"ui.storefront.common.Number.Symbol\")}&lt;/span&gt;\r\n                &lt;span&gt;\r\n                  {salesObject &amp;&amp; salesObject.ID ? salesObject.ID : \"\"}{\" \"}\r\n                  {type === \"invoice\" &amp;&amp; salesObject &amp;&amp; salesObject.CustomKey\r\n                    ? `[${salesObject.CustomKey}]`\r\n                    : \"\"}\r\n                &lt;/span&gt;\r\n              &lt;/h4&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs=\"auto\" className=\"d-print-none\"&gt;\r\n              {type === \"quote\" &amp;&amp; isMasterQuote\r\n                  &amp;&amp; &lt;&gt;\r\n                    &lt;Button\r\n                      className=\"btn btn-success\"\r\n                      disabled={salesObject.StatusKey !== \"ReadyForApproval\"}\r\n                      style={{ marginRight: \"0.5rem\", color: \"white\" }}\r\n                      onClick={approveQuoteAndShowModal}\r\n                      id=\"btnApproveQuote\"\r\n                      title=\"ApproveQuote\"\r\n                      aria-label=\"ApproveQuote\"&gt;\r\n                      &lt;span&gt;{t(\"ui.storefront.common.Approve\")}&lt;/span&gt;\r\n                    &lt;/Button&gt;\r\n                    &lt;Button\r\n                      className=\"btn btn-warning\"\r\n                      disabled={salesObject.StatusKey !== \"ReadyForApproval\"}\r\n                      style={{ marginRight: \"0.5rem\", color: \"white\" }}\r\n                      onClick={() =&gt; setShowRejectedModal(true)}\r\n                      id=\"btnRejectQuote\"\r\n                      title=\"RejectQuote\"\r\n                      aria-label=\"RejectQuote\"&gt;\r\n                      &lt;span&gt;{t(\"ui.storefront.common.Reject\")}&lt;/span&gt;\r\n                    &lt;/Button&gt;\r\n                    &lt;Button\r\n                      className=\"btn btn-danger\"\r\n                      disabled={[ \"Approved\", \"Completed\", \"Cancelled\", \"ReadyForApproval\" ].includes(salesObject.StatusKey)}\r\n                      style={{ marginRight: \"0.5rem\", color: \"white\" }}\r\n                      onClick={() =&gt; setShowCancelledModal(true)}\r\n                      id=\"btnCancelQuote\"\r\n                      title=\"CancelQuote\"\r\n                      aria-label=\"CancelQuote\"&gt;\r\n                      &lt;span&gt;{t(\"ui.storefront.common.Cancel\")}&lt;/span&gt;\r\n                    &lt;/Button&gt;\r\n                  &lt;/&gt;\r\n              }\r\n              {type === \"quote\" &amp;&amp; !isMasterQuote\r\n                &amp;&amp; &lt;Link to={`/dashboard/sales-group/${salesGroupId}/quote/${masterQuoteId}`}\r\n                  onClick={() =&gt; onSelectedSalesTabChange(masterQuoteId)}\r\n                  className=\"btn btn-secondary\"\r\n                  style={{ marginRight: \"0.5rem\" }}&gt;Go to master order for approvals\r\n                &lt;/Link&gt;\r\n              }\r\n              &lt;Button\r\n                variant=\"outline-secondary\"\r\n                className=\"btn d-none d-md-inline-block\"\r\n                onClick={() =&gt; {\r\n                  // Do Nothing\r\n                }}\r\n                id=\"btnPrint\"\r\n                title=\"Print\"\r\n                aria-label=\"Print\"&gt;\r\n                &lt;i className=\"fal fa-print\" aria-hidden=\"true\" /&gt;\r\n                 \r\n                &lt;span id=\"btnSalesGroupOrdersPrint\"&gt;{t(\"ui.storefront.common.Print\")}&lt;/span&gt;\r\n              &lt;/Button&gt;\r\n              &lt;ButtonGroup className=\"d-inline-block d-md-none dropdown\"&gt;\r\n                &lt;Button\r\n                  variant=\"outline-primary\"\r\n                  className=\"rounded no-caret dropdown-toggle\"\r\n                  onClick={() =&gt; setShowActionsDropdown(!showActionsDropdown)}\r\n                  id=\"btnActions\"&gt;\r\n                  &lt;span&gt;{t(\"ui.storefront.messaging.messaging-folder.Actions\")}&lt;/span&gt;\r\n                  &lt;i className={showActionsDropdown ? \"fal fa-chevron-up ps-2\" : \"fal fa-chevron-down ps-2\"} /&gt;\r\n                &lt;/Button&gt;\r\n                &lt;ul className=\"dropdown-menu dropdown-menu-right cef-dropdown\"&gt;\r\n                  &lt;li role=\"menuitem\"&gt;\r\n                    &lt;Button\r\n                      className=\"btn-link-dropdown-item wit-icon w-100 text-start\"\r\n                      id=\"btnPrintMenuItem\"\r\n                      title=\"Print\"\r\n                      aria-label=\"Print\"&gt;\r\n                      &lt;i className=\"fal fa-print\" aria-hidden=\"true\" /&gt;\r\n                       \r\n                      &lt;span&gt;{t(\"ui.storefront.common.Print\")}&lt;/span&gt;\r\n                    &lt;/Button&gt;\r\n                  &lt;/li&gt;\r\n                &lt;/ul&gt;\r\n              &lt;/ButtonGroup&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row className=\"mb-3\"&gt;\r\n            &lt;SalesGroupDetailsAdditionalDetails\r\n              type={type}\r\n              salesObject={salesObject}\r\n              onPaymentConfirmed={() =&gt; {\r\n                if (onPaymentConfirmed) {\r\n                  onPaymentConfirmed();\r\n                }\r\n              }}\r\n            /&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;SalesGroupItemsTable\r\n                salesItems={salesObject.SalesItems.filter(x =&gt; x.TotalQuantity &gt; 0)}\r\n                productsMap={productsMap}\r\n              /&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row className=\"mb-3\"&gt;\r\n            &lt;Col xs={12}\r\n              sm={6}\r\n              md={4}\r\n              className=\"order-1 order-md-2\"&gt;\r\n              &lt;Row&gt;\r\n                &lt;Col&gt;\r\n                  &lt;TotalsWidget totals={salesObject.Totals} type=\"Cart\" /&gt;\r\n                &lt;/Col&gt;\r\n              &lt;/Row&gt;\r\n              &lt;Row className=\" d-print-none\"&gt;\r\n                &lt;Col&gt;\r\n                  &lt;AddAllToCartButton\r\n                    btnVariant=\"success\"\r\n                    salesItems={salesObject.SalesItems}\r\n                    useConfirmModal={true}\r\n                    classes=\"w-100\"\r\n                  /&gt;\r\n                &lt;/Col&gt;\r\n              &lt;/Row&gt;\r\n            &lt;/Col&gt;\r\n            &lt;div className=\"order-2 order-md-1 col-md-4 col-sm-6 col-12\"&gt;&lt;/div&gt;\r\n            &lt;div className=\"order-2 order-md-1 col-md-4 col-sm-6 col-12\"&gt;&lt;/div&gt;\r\n          &lt;/Row&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Col&gt;\r\n    &lt;/Fragment&gt;\r\n  );\r\n};\r\n","import { Link } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ListGroup } from \"react-bootstrap\";\r\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\r\nimport { CartTotals } from \"src/_api/cvApi._DtoClasses\";\r\nimport { ISalesGroupParams } from \"src/Dashboard/SalesGroup/_salesGroupTypes\";\r\nimport { number } from \"card-validator\";\r\n\r\ninterface ISalesTabProps {\r\n  ID: number;\r\n  index: number;\r\n  classes?: string;\r\n  Totals: CartTotals;\r\n  selectedSalesTab: number;\r\n  onSelectedSalesTabChange: (ID: number) =&gt; void;\r\n  params: ISalesGroupParams;\r\n}\r\n\r\nexport const SalesTab = (props: ISalesTabProps): JSX.Element =&gt; {\r\n  const { ID, classes, Totals, index, selectedSalesTab, onSelectedSalesTabChange, params } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    &lt;ListGroup.Item\r\n      key={ID}\r\n      className={`p-2 border-right border-right-6 border-clear ${classes ? classes : \"\"} ${\r\n        selectedSalesTab === ID\r\n          ? \"active border-primary border-left-0 border-top-0 border-bottom-0 rounded rounded-end bg-light\"\r\n          : \"\"\r\n      }`}&gt;\r\n      &lt;Link\r\n        id={`IndividualSalesGroupOrderMasterLink_${index}`}\r\n        to={`/dashboard/sales-group/${params.salesGroupId}/${params.type}/${ID}`}\r\n        onClick={() =&gt; onSelectedSalesTabChange(ID)}&gt;\r\n        &lt;span data-sid=\"udSalesGroupNumberSymbol\"&gt;\r\n          {t(\"ui.storefront.common.Number.Symbol\")}\r\n        &lt;/span&gt; &lt;span&gt; {ID}\r\n        &lt;/span&gt;\r\n        &lt;span className=\"text-end ps-3\"&gt;\r\n          {currencyFormatter.format(Totals.Total)}\r\n        &lt;/span&gt;\r\n      &lt;/Link&gt;\r\n    &lt;/ListGroup.Item&gt;\r\n  );\r\n};\r\n","import { useTranslation } from \"react-i18next\";\r\nimport { Card, Col, ListGroup } from \"react-bootstrap\";\r\nimport { ISalesGroupSideContentProps } from \"src/Dashboard/SalesGroup/_salesGroupTypes\";\r\nimport {\r\n  SalesInvoiceModel,\r\n  SalesOrderModel,\r\n  SalesQuoteModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { SalesTab } from \"src/Dashboard/SalesGroup/SalesTab\";\r\n\r\nexport const SalesGroupSideContent = (props: ISalesGroupSideContentProps): JSX.Element =&gt; {\r\n  const {\r\n    type,\r\n    salesGroup,\r\n    selectedSalesTab,\r\n    onSelectedSalesTabChange,\r\n    params\r\n  } = props;\r\n\r\n  const { t } = useTranslation();\r\n\r\n  if (!salesGroup || !salesGroup.ID) {\r\n    return null;\r\n  }\r\n\r\n  let icon: string = \"fa-coffee\";\r\n  let translation: string = \"\";\r\n  let masterKey: string = \"\";\r\n  let subKey: string = \"\";\r\n\r\n  let masters: SalesOrderModel[] | SalesInvoiceModel[] | SalesQuoteModel[] = [];\r\n  let subs: SalesOrderModel[] | SalesQuoteModel[] = [];\r\n\r\n  switch (type) {\r\n    case \"order\": {\r\n      icon = \"fa-receipt\";\r\n      translation = \"ui.storefront.common.Order.Plural\";\r\n      masters = salesGroup.SalesOrderMasters;\r\n      subs = salesGroup.SubSalesOrders;\r\n      masterKey = \"ui.storefront.userDashboard2.controls.salesGroupDetail.MasterSalesOrder\";\r\n      subKey = \"ui.storefront.userDashboard.controls.salesGroupDetail.SubOrders\";\r\n      break;\r\n    }\r\n    case \"invoice\": {\r\n      icon = \"fa-file-invoice-dollar\";\r\n      translation = \"ui.storefront.common.Invoice.Plural\";\r\n      masters = salesGroup.SalesInvoices;\r\n      break;\r\n    }\r\n    case \"quote\": {\r\n      icon = \"fa-quote-right\";\r\n      translation = \"ui.storefront.common.Quote.Plural\";\r\n      masters = salesGroup.SalesQuoteRequestMasters;\r\n      subs = salesGroup.SalesQuoteRequestSubs;\r\n      masterKey = \"ui.storefront.submitQuote.confirmation.MasterQuote\";\r\n      subKey = \"ui.storefront.userDashboard.controls.salesGroupDetail.SubQuotes\";\r\n      break;\r\n    }\r\n    default: {\r\n      break;\r\n    }\r\n  }\r\n  return (\r\n    &lt;Col xs=\"auto\" className=\"d-print-none\"&gt;\r\n      &lt;h4 className=\"mt-0 mb-3\"&gt;\r\n        &lt;i className={`fal ${icon} fa-fw`} /&gt;\r\n         \r\n        &lt;span data-sid=\"txtSalesGroupSideContentTitle\"&gt;{t(translation)}&lt;/span&gt;\r\n      &lt;/h4&gt;\r\n      &lt;Card className=\"border-0\"&gt;\r\n        &lt;Card.Body className=\"p-1\"&gt;\r\n          &lt;b\r\n            className=\"card-subtitle text-muted\"\r\n            id=\"IndividualSalesGroupOrderMasterText\"&gt;\r\n            {t(masterKey)}\r\n          &lt;/b&gt;\r\n        &lt;/Card.Body&gt;\r\n        {masters.map(\r\n          (\r\n            master: SalesOrderModel | SalesInvoiceModel | SalesQuoteModel,\r\n            index: number\r\n          ) =&gt; {\r\n            const { ID, Totals } = master;\r\n            return (\r\n              &lt;SalesTab\r\n                key={ID}\r\n                ID={ID}\r\n                classes=\"border-bottom-0\"\r\n                Totals={Totals}\r\n                index={index}\r\n                selectedSalesTab={selectedSalesTab}\r\n                onSelectedSalesTabChange={onSelectedSalesTabChange}\r\n                params={params}\r\n              /&gt;\r\n            );\r\n          }\r\n        )}\r\n        {subs\r\n          &amp;&amp; &lt;&gt;\r\n            &lt;Card.Body className=\"p-1\"&gt;\r\n              &lt;b className=\"card-subtitle text-muted\" id=\"IndividualSalesGroupOrderSubText\"&gt;{t(subKey)}&lt;/b&gt;\r\n            &lt;/Card.Body&gt;\r\n            &lt;ListGroup variant=\"flush\" className=\"pe-2 side-tabs\"&gt;\r\n              {subs.map(\r\n                (sub: SalesOrderModel | SalesQuoteModel, index: number) =&gt; {\r\n                  const { ID, Totals } = sub;\r\n                  return (\r\n                    &lt;SalesTab\r\n                      key={ID}\r\n                      ID={ID}\r\n                      classes=\"border-bottom-0\"\r\n                      Totals={Totals}\r\n                      index={index}\r\n                      selectedSalesTab={selectedSalesTab}\r\n                      onSelectedSalesTabChange={onSelectedSalesTabChange}\r\n                      params={params}\r\n                    /&gt;\r\n                  );\r\n                }\r\n              )}\r\n            &lt;/ListGroup&gt;\r\n          &lt;/&gt;\r\n        }\r\n      &lt;/Card&gt;\r\n    &lt;/Col&gt;\r\n  );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Collapse, Nav, Row } from \"react-bootstrap\";\r\nimport { Link, useRouteMatch } from \"react-router-dom\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport { SalesGroupDetails } from \"src/Dashboard/SalesGroup/SalesGroupDetails\";\r\nimport { SalesGroupSideContent } from \"src/Dashboard/SalesGroup/SalesGroupSideContent\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport {\r\n  SalesGroupModel,\r\n  SalesInvoiceModel,\r\n  SalesOrderModel,\r\n  SalesQuoteModel,\r\n  SalesReturnModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { ISalesGroupParams } from \"src/Dashboard/SalesGroup/_salesGroupTypes\";\r\nimport promiser from \"src/_shared/Promiser\";\r\n\r\nexport const SalesGroup = (): JSX.Element =&gt; {\r\n  const [ salesGroup, setSalesGroup ] = useState&lt;SalesGroupModel&gt;(null);\r\n  const [ salesGroupFetched, setSalesGroupFetched ] = useState&lt;boolean&gt;(false);\r\n  const [ salesObjectFetched, setSalesObjectFetched ] = useState&lt;boolean&gt;(false);\r\n  const [ salesOrder, setSalesOrder ] = useState&lt;SalesOrderModel&gt;(null);\r\n  const [ salesInvoice, setSalesInvoice ] = useState&lt;SalesInvoiceModel&gt;(null);\r\n  const [ salesQuote, setSalesQuote ] = useState&lt;SalesQuoteModel&gt;(null);\r\n  const [ salesReturn, setSalesReturn ] = useState&lt;SalesReturnModel&gt;(null);\r\n  const [ billingCollapseOpen, setBillingCollapseOpen ] = useState(false);\r\n  const [ selectedSalesTab, setSelectedSalesTab ] = useState(0);\r\n  const [ isQuoteApproved, setIsQuoteApproved ] = useState(false);\r\n  const [ invoiceID, setInvoiceID ] = useState&lt;number&gt;();\r\n  const { params } = useRouteMatch&lt;ISalesGroupParams&gt;(\"/dashboard/sales-group/:salesGroupId/:type/:typeId\");\r\n  const { salesGroupId } = params;\r\n  const { type } = params;\r\n  const { typeId } = params;\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  // TODO: const { salesGroupId, type, typeId } = breadCrumbs&lt;ISalesGroupParams&gt;();\r\n\r\n  useEffect(() =&gt; {\r\n    setSalesGroupFetched(false);\r\n    setSalesObjectFetched(false);\r\n    getSalesObject();\r\n    getSalesGroup();\r\n  }, [ type, typeId ]);\r\n\r\n  function getSalesGroup(): void {\r\n    setRunning();\r\n    cvApi.sales\r\n      .GetSecureSalesGroup(Number(salesGroupId))\r\n      .then(res =&gt; {\r\n        setSalesGroup(res.data);\r\n        setSalesGroupFetched(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setSalesGroupFetched(true);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function getSalesOrder(id: number): void {\r\n    setRunning();\r\n    const promiserKey = `GetSecureSalesOrder(${id})`;\r\n    promiser.resolve(promiserKey, () =&gt; cvApi.ordering.GetSecureSalesOrder(id))\r\n      .then(res =&gt; {\r\n        setSalesOrder(res.data);\r\n        setSelectedSalesTab(res.data.ID);\r\n        setSalesObjectFetched(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setSalesObjectFetched(true);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function getSalesQuote(id: number): void {\r\n    setRunning();\r\n    const promiserKey = `GetSecureSalesQuote(${id})`;\r\n    promiser.resolve(promiserKey, () =&gt; cvApi.providers.GetSecureSalesQuote(id))\r\n      .then(res =&gt; {\r\n        setSalesQuote(res.data);\r\n        setSelectedSalesTab(res.data.ID);\r\n        setSalesObjectFetched(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setSalesObjectFetched(true);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function getSalesReturn (id: number, force?: boolean): void {\r\n    setRunning();\r\n    const promiserKey = `GetSecureSalesReturn(${id})`;\r\n    if (force) {\r\n      promiser.flush(promiserKey);\r\n    }\r\n    promiser.resolve(promiserKey, () =&gt; cvApi.providers.GetSecureSalesReturn(id))\r\n      .then(res =&gt; {\r\n        setSalesReturn(res.data);\r\n        setSelectedSalesTab(res.data.ID);\r\n        setSalesObjectFetched(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setSalesObjectFetched(true);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function getSalesInvoice(id: number, force?: boolean): void {\r\n    setRunning();\r\n    const promiserKey = `GetSecureSalesInvoice(${id})`;\r\n    if (force) {\r\n      promiser.flush(promiserKey);\r\n    }\r\n    promiser.resolve(promiserKey, () =&gt; cvApi.providers.GetSecureSalesInvoice(id))\r\n      .then(res =&gt; {\r\n        setSalesInvoice(res.data);\r\n        // TODO: setCachedSalesInvoices needs an array, res is a single\r\n        // SetCachedSalesInvoices(res.data);\r\n        setSelectedSalesTab(res.data.ID);\r\n        setSalesObjectFetched(true);\r\n        finishRunning();\r\n      })\r\n      .catch(err =&gt; {\r\n        setSalesObjectFetched(true);\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  function getSalesObject(id = Number(typeId)): void {\r\n    switch (type) {\r\n      case \"order\": {\r\n        promiser.flush(`GetSecureSalesOrder(${id})`);\r\n        getSalesOrder(id);\r\n        break;\r\n      }\r\n      case \"quote\": {\r\n        promiser.flush(`GetSecureSalesQuote(${id})`);\r\n        getSalesQuote(id);\r\n        break;\r\n      }\r\n      case \"return\": {\r\n        promiser.flush(`GetSecureSalesReturn(${id})`);\r\n        getSalesReturn(id);\r\n        break;\r\n      }\r\n      case \"invoice\": {\r\n        promiser.flush(`GetSecureSalesInvoice(${id})`);\r\n        getSalesInvoice(id);\r\n        break;\r\n      }\r\n      default: {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  function salesObjectInSalesGroup(): boolean {\r\n    if (!salesGroup) {\r\n      return false;\r\n    }\r\n    switch (type) {\r\n      case \"order\": {\r\n        return [\r\n          ...salesGroup.SalesOrderMasters,\r\n          ...salesGroup.SubSalesOrders\r\n        ].filter(order =&gt; order.ID === Number(typeId)).length &gt; 0;\r\n      }\r\n      case \"invoice\": {\r\n        return salesGroup.SalesInvoices\r\n          .filter(invoice =&gt; invoice.ID === Number(typeId)).length &gt; 0;\r\n      }\r\n      case \"return\": {\r\n        return salesGroup.SalesReturns\r\n          .filter(rturn =&gt; {\r\n            return rturn.ID === Number(typeId);\r\n          }).length &gt; 0;\r\n      }\r\n      case \"quote\": {\r\n        return (\r\n          [\r\n            ...salesGroup.SalesQuoteRequestMasters,\r\n            ...salesGroup.SalesQuoteRequestSubs\r\n          ].filter(quote =&gt; quote.ID === Number(typeId)).length &gt; 0\r\n        );\r\n      }\r\n      default: {\r\n        return false;\r\n      }\r\n    }\r\n  }\r\n\r\n  function handleNewTab (tabName: \"order\" | \"invoice\" | \"quote\" | \"return\"): void {\r\n    switch (tabName) {\r\n      case \"order\": {\r\n        getSalesOrder(salesGroup.SubSalesOrders[0].ID);\r\n        setSelectedSalesTab(salesGroup.SubSalesOrders[0].ID);\r\n        break;\r\n      }\r\n      case \"invoice\": {\r\n        getSalesInvoice(salesGroup.SalesInvoices[0].ID);\r\n        setSelectedSalesTab(salesGroup.SalesInvoices[0].ID);\r\n        break;\r\n      }\r\n      case \"return\": {\r\n        getSalesReturn(salesGroup.SalesReturns[0].ID);\r\n        setSelectedSalesTab(salesGroup.SalesReturns[0].ID);\r\n        break;\r\n      }\r\n      default: {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  function onSelectedSalesTabChange(id: number): void {\r\n    getSalesObject(id);\r\n  }\r\n\r\n  const refreshForSalesInvoice = () =&gt; {\r\n    getSalesInvoice(Number(typeId), true);\r\n  };\r\n\r\n  const renderTabMainContent = () =&gt; {\r\n    if (viewState.running) {\r\n      return &lt;LoadingWidget /&gt;;\r\n    }\r\n    if (salesGroup) {\r\n      switch (type) {\r\n        case \"order\": {\r\n          if (!salesOrder) {\r\n            getSalesOrder(parseInt(typeId, 10));\r\n          }\r\n          return (\r\n            &lt;SalesGroupDetails\r\n              params={params}\r\n              salesGroup={salesGroup}\r\n              salesObject={salesOrder}\r\n            /&gt;\r\n          );\r\n        }\r\n        case \"invoice\": {\r\n          if (!salesInvoice) {\r\n            getSalesInvoice(parseInt(typeId, 10));\r\n          }\r\n          return (\r\n            &lt;SalesGroupDetails\r\n              params={params}\r\n              salesGroup={salesGroup}\r\n              salesObject={salesInvoice}\r\n              onPaymentConfirmed={refreshForSalesInvoice}\r\n            /&gt;\r\n          );\r\n        }\r\n        case \"quote\": {\r\n          if (!salesQuote) {\r\n            getSalesQuote(parseInt(typeId, 10));\r\n          }\r\n          return (\r\n            &lt;SalesGroupDetails\r\n              params={params}\r\n              salesGroup={salesGroup}\r\n              salesObject={salesQuote}\r\n              onSelectedSalesTabChange={onSelectedSalesTabChange}\r\n              getSalesObject={getSalesObject}\r\n              isQuoteApproved={isQuoteApproved}\r\n              setIsQuoteApproved={setIsQuoteApproved}\r\n              invoiceID={invoiceID}\r\n              setInvoiceID={setInvoiceID}\r\n            /&gt;\r\n          );\r\n        }\r\n        case \"return\": {\r\n          if (!salesReturn) {\r\n            getSalesReturn(parseInt(typeId, 10));\r\n          }\r\n          return (\r\n            &lt;SalesGroupDetails\r\n              params={params}\r\n              salesGroup={salesGroup}\r\n              salesObject={salesReturn}\r\n              getSalesObject={getSalesObject}\r\n            /&gt;\r\n          );\r\n        }\r\n        default: {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n    return undefined;\r\n  };\r\n\r\n  if (!salesGroup &amp;&amp; viewState.running || !salesGroupFetched || !salesObjectFetched) {\r\n    return &lt;LoadingWidget /&gt;;\r\n  }\r\n\r\n  if (!viewState.running &amp;&amp; (!salesGroup || !salesObjectInSalesGroup())) {\r\n    return (\r\n      &lt;ErrorView error={viewState.errorMessage ?? \"Invalid sales group\"} /&gt;\r\n    );\r\n  }\r\n\r\n  return (\r\n    &lt;Row&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;div className=\"mb-3\"&gt;\r\n          &lt;Row className=\"align-items-center\"&gt;\r\n            &lt;Col&gt;\r\n              &lt;h1 className=\"mt-0\"&gt;\r\n                &lt;i className=\"fal fa-object-group me-2\" /&gt;\r\n                &lt;span id=\"IndividualSalesGroupTest\"&gt;\r\n                  {t(\"ui.storefront.common.SalesGroup\")}\r\n                &lt;/span&gt;\r\n                 \r\n                &lt;span data-sid=\"SalesGroupNumberSymbol\"&gt;{t(\"ui.storefront.common.Number.Symbol\")}&lt;/span&gt;\r\n                &lt;span&gt;{salesGroup &amp;&amp; salesGroup.ID ? salesGroup.ID : \"\"}&lt;/span&gt;\r\n              &lt;/h1&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row&gt;\r\n            {salesGroup &amp;&amp; salesGroup.BillingContact\r\n              &amp;&amp; &lt;Col xs={12} sm={6}&gt;\r\n                &lt;hr className=\"my-2 border-bottom\" /&gt;\r\n                &lt;Button\r\n                  variant=\"none\"\r\n                  onClick={() =&gt; setBillingCollapseOpen(!billingCollapseOpen)}\r\n                  aria-controls=\"billing-address-block-table\"\r\n                  aria-expanded={billingCollapseOpen}\r\n                  style={{ boxShadow: \"none\" }}\r\n                &gt;\r\n                  &lt;h4\r\n                    className=\"bold px-3\"\r\n                    id=\"IndividualSalesGroupBillingInformation\"&gt;\r\n                    {t(\r\n                      \"ui.storefront.storeDashboard.storeOrderDetail.BillingInformation\"\r\n                    )}\r\n                    {billingCollapseOpen === false\r\n                      &amp;&amp; &lt;span className=\"ms-3\" style={{ fontSize: \"1rem\", fontWeight: 400 }}&gt;\r\n                        {salesGroup.BillingContact?.Address?.Street1}&lt;/span&gt;\r\n                    }\r\n                    {billingCollapseOpen ? &lt;i className=\"fal fa-fw fa-angle-up fa-lg\"&gt;&lt;/i&gt;\r\n                      : &lt;i className=\"fal fa-fw fa-angle-down fa-lg\"&gt;&lt;/i&gt;}\r\n                  &lt;/h4&gt;\r\n                &lt;/Button&gt;\r\n                &lt;hr className=\"my-2 border-bottom\" /&gt;\r\n                &lt;Collapse in={billingCollapseOpen}&gt;\r\n                  &lt;div id=\"billing-address-block-table\"&gt;\r\n                    &lt;AddressBlock\r\n                      address={salesGroup.BillingContact.Address}\r\n                      contact={salesGroup.BillingContact}\r\n                    /&gt;\r\n                  &lt;/div&gt;\r\n                &lt;/Collapse&gt;\r\n              &lt;/Col&gt;\r\n            }\r\n            {/* &lt;Col xs={12} sm={6}&gt;\r\n              &lt;hr className=\"my-2 border-bottom\" /&gt;\r\n              &lt;h4 className=\"bold px-3\" id=\"IndividualSalesGroupEvents\"&gt;\r\n                {t(\"ui.storefront.common.Events\")}\r\n              &lt;/h4&gt;\r\n              &lt;hr className=\"my-2 border-bottom\" /&gt;\r\n              &lt;Table\r\n                size=\"sm\"\r\n                striped\r\n                hover\r\n                className={classes.fixedHeightTable}&gt;\r\n                &lt;thead&gt;\r\n                  &lt;tr&gt;\r\n                    &lt;th className=\"border-medium w-35\"&gt;\r\n                      {t(\"ui.storefront.common.Date\")}\r\n                    &lt;/th&gt;\r\n                    &lt;th className=\"border-medium\"&gt;\r\n                      {t(\"ui.storefront.common.Detail.Plural\")}\r\n                    &lt;/th&gt;\r\n                  &lt;/tr&gt;\r\n                &lt;/thead&gt;\r\n                &lt;tbody&gt;\r\n                  &lt;tr&gt;\r\n                    &lt;td colSpan={2} className=\"border-medium\"&gt;\r\n                      {t(\"ui.storefront.common.NoEvents\")}\r\n                    &lt;/td&gt;\r\n                  &lt;/tr&gt;\r\n                &lt;/tbody&gt;\r\n              &lt;/Table&gt;\r\n            &lt;/Col&gt; */}\r\n          &lt;/Row&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12} className=\"d-print-none\"&gt;\r\n              &lt;Nav className=\"nav-tabs mb-3\"&gt;\r\n                &lt;Nav.Item&gt;\r\n                  &lt;Link\r\n                    to={`/dashboard/sales-group/${salesGroupId}/quote/${\r\n                      salesGroup.SalesQuoteRequestSubs?.length\r\n                        ? salesGroup.SalesQuoteRequestSubs[0].ID\r\n                        : \"\"\r\n                    }`}\r\n                    className={`btn nav-link underline-hover-none ${\r\n                      type === \"quote\" ? \"active\" : \"\"\r\n                    } ${\r\n                      salesGroup.SalesQuoteRequestSubs?.length ? \"\" : \"disabled\"\r\n                    }`}&gt;\r\n                    &lt;span&gt;{t(\"ui.storefront.common.Quote.Plural\")}&lt;/span&gt;\r\n                    &lt;span&gt;\r\n                      ({salesGroup.SalesQuoteRequestSubs?.length ?? \"0\"})\r\n                    &lt;/span&gt;\r\n                  &lt;/Link&gt;\r\n                &lt;/Nav.Item&gt;\r\n                &lt;Nav.Item&gt;\r\n                  &lt;Link\r\n                    data-sid=\"udSalesGroupOrdersTab\"\r\n                    to={`/dashboard/sales-group/${salesGroupId}/order/${\r\n                      salesGroup.SubSalesOrders?.length\r\n                        /* @ts-ignore */\r\n                        ? salesGroup.SubSalesOrders[0].ID\r\n                        : \"\"\r\n                    }`}\r\n                    onClick={() =&gt; handleNewTab(\"order\")}\r\n                    className={`btn nav-link underline-hover-none ${\r\n                      type === \"order\" ? \"active\" : \"\"\r\n                    } ${salesGroup.SubSalesOrders?.length ? \"\" : \"disabled\"}`}&gt;\r\n                    &lt;span&gt;{t(\"ui.storefront.common.Order.Plural\")}&lt;/span&gt;\r\n                    &lt;span&gt;({salesGroup.SubSalesOrders?.length ?? \"0\"})&lt;/span&gt;\r\n                  &lt;/Link&gt;\r\n                &lt;/Nav.Item&gt;\r\n                &lt;Nav.Item&gt;\r\n                  &lt;Link\r\n                    data-sid=\"udSalesGroupInvoicesTab\"\r\n                    to={`/dashboard/sales-group/${salesGroupId}/invoice/${\r\n                      salesGroup.SalesInvoices?.length\r\n                        /* @ts-ignore */\r\n                        ? salesGroup.SalesInvoices[0].ID\r\n                        : \"\"\r\n                    }`}\r\n                    onClick={() =&gt; handleNewTab(\"invoice\")}\r\n                    className={`btn nav-link underline-hover-none ${\r\n                      type === \"invoice\" ? \"active\" : \"\"\r\n                    } ${salesGroup.SalesInvoices?.length ? \"\" : \"disabled\"}`}&gt;\r\n                    &lt;span&gt;{t(\"ui.storefront.common.Invoice.Plural\")}&lt;/span&gt;\r\n                    &lt;span&gt;({salesGroup.SalesInvoices?.length ?? \"0\"})&lt;/span&gt;\r\n                  &lt;/Link&gt;\r\n                &lt;/Nav.Item&gt;\r\n                &lt;Nav.Item&gt;\r\n                  &lt;Link\r\n                    data-sid=\"udSalesGroupReturnsTab\"\r\n                    to={`/dashboard/sales-group/${salesGroupId}/return/${salesGroup.SalesReturns?.length\r\n                      /* @ts-ignore */\r\n                      ? salesGroup.SalesReturns[0].ID\r\n                      : \"\"\r\n                      }`}\r\n                    onClick={() =&gt; handleNewTab(\"return\")}\r\n                    className={`btn nav-link underline-hover-none ${type === \"return\" ? \"active\" : \"\"\r\n                      } ${salesGroup.SalesReturns?.length ? \"\" : \"disabled\"}`}&gt;\r\n                    &lt;span&gt;{t(\"ui.storefront.common.Return.Plural\")}&lt;/span&gt;\r\n                    &lt;span&gt;({salesGroup.SalesReturns?.length ?? \"0\"})&lt;/span&gt;\r\n                  &lt;/Link&gt;\r\n                &lt;/Nav.Item&gt;\r\n              &lt;/Nav&gt;\r\n            &lt;/Col&gt;\r\n            {salesGroup &amp;&amp; (salesOrder || salesInvoice || salesQuote || salesReturn)\r\n              ? &lt;SalesGroupSideContent\r\n                type={type}\r\n                salesGroup={salesGroup}\r\n                selectedSalesTab={selectedSalesTab}\r\n                onSelectedSalesTabChange={onSelectedSalesTabChange}\r\n                params={params}\r\n              /&gt;\r\n              : &lt;LoadingWidget /&gt;\r\n            }\r\n            {salesGroup &amp;&amp; (salesOrder || salesInvoice || salesQuote || salesReturn)\r\n              ? renderTabMainContent()\r\n              : &lt;LoadingWidget /&gt;\r\n            }\r\n          &lt;/Row&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Col&gt;\r\n    &lt;/Row&gt;\r\n  );\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { ConnectedComponent } from \"react-redux\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link, Route, Switch, useLocation } from \"react-router-dom\";\r\nimport {\r\n  faCoffee,\r\n  IconDefinition\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { IDashboardSettings } from \"src/_shared/CefConfigTypes\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\n// Dashboard components\r\nimport { AddressBook } from \"./AddressBook/AddressBook\";\r\nimport { MyProfile } from \"./MyProfile/MyProfile\";\r\nimport { Invoices } from \"./Invoices/Invoices\";\r\nimport { Orders } from \"./Orders/Orders\";\r\nimport { Returns } from \"./Returns/Returns\";\r\nimport { WishList } from \"./WishList/WishList\";\r\nimport { ShoppingLists } from \"./ShoppingList/ShoppingLists\";\r\nimport { Wallet } from \"./Wallet/Wallet\";\r\nimport { AccountProfile } from \"./AccountProfile/AccountProfile\";\r\nimport { Privacy } from \"./Privacy/Privacy\";\r\nimport { InStockAlerts } from \"./InStockAlerts/InStockAlerts\";\r\nimport { Favorites } from \"./Favorites/Favorites\";\r\nimport { Quotes } from \"./Quotes/Quotes\";\r\nimport { SalesGroup } from \"./SalesGroup/SalesGroup\";\r\nimport { Col, Nav, Navbar, Row } from \"react-bootstrap\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\n\r\nexport const Dashboard = (): JSX.Element =&gt; {\r\n  // Const [recentOrders, setRecentOrders] = useState([]);\r\n  const [ dashboardLinks, setDashboardLinks ] = useState&lt;Array&lt;IDashboardSettings&gt;&gt;([]);\r\n  const [ activeLink, setActiveLink ] = useState&lt;IDashboardSettings&gt;(null);\r\n  const [ showLoginModal, setShowLoginModal ] = useState(false);\r\n\r\n  const { t } = useTranslation();\r\n  const pathName = useLocation().pathname;\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n\r\n  // Check if user is logged in and pop login modal accordingly.\r\n  useEffect(() =&gt; {\r\n    setTimeout(() =&gt; {\r\n      if (!(currentUser.ID &gt; 0)) {\r\n        setShowLoginModal(true);\r\n      }\r\n    }, 500);\r\n  }, [ currentUser ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (\r\n      cefConfig\r\n      &amp;&amp; cefConfig.dashboard\r\n      &amp;&amp; cefConfig.featureSet.login.enabled\r\n      &amp;&amp; currentUser.ID &gt; 0\r\n    ) {\r\n      populateDashboardLinks();\r\n    }\r\n  }, [ cefConfig, currentUser ]);\r\n\r\n  async function populateDashboardLinks() {\r\n    const enabledLinks: Array&lt;IDashboardSettings&gt; = cefConfig.dashboard\r\n      .filter((x: IDashboardSettings) =&gt; x.enabled)\r\n      .sort(\r\n        (linkOne: IDashboardSettings, linkTwo: IDashboardSettings) =&gt; linkOne.order - linkTwo.order\r\n      );\r\n    const linksToSet: Array&lt;IDashboardSettings&gt; = await getUsableLinks(enabledLinks);\r\n    setDashboardLinks(linksToSet);\r\n    const linksFlattened = linksToSet.reduce((accu, curVal) =&gt; {\r\n      accu.push(curVal);\r\n      if (curVal.children) {\r\n        curVal.children.forEach(child =&gt; accu.push(child));\r\n      }\r\n      return accu;\r\n    }, []);\r\n    for (let i = 0; i &lt; linksFlattened.length; i++) {\r\n      if (linksFlattened[i].href?.toLowerCase() === pathName.toLowerCase()) {\r\n        setActiveLink(linksFlattened[i]);\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  async function getUsableLinks(links: Array&lt;IDashboardSettings&gt;) {\r\n    const linksToSet: Array&lt;IDashboardSettings&gt; = [];\r\n    for (let i = 0; i &lt; links.length; i++) {\r\n      const link = links[i];\r\n      const roleRequired = link.reqAnyRoles &amp;&amp; link.reqAnyRoles.length;\r\n      const permissionRequired = link.reqAnyPerms &amp;&amp; link.reqAnyPerms.length;\r\n      if (!link.enabled) {\r\n        continue;\r\n      }\r\n      if (!roleRequired &amp;&amp; !permissionRequired) {\r\n        linksToSet.push(link);\r\n        continue;\r\n      }\r\n      if (roleRequired) {\r\n        const roleResults = [];\r\n        for (let j = 0; j &lt; link.reqAnyRoles.length; j++) {\r\n          const role = link.reqAnyRoles[j];\r\n          let userHasRole = false;\r\n          try {\r\n            // eslint-disable-next-line no-await-in-loop\r\n            await cvApi.authentication.CurrentUserHasRole({ Name: role });\r\n            userHasRole = true;\r\n          } catch (err) {\r\n            userHasRole = false;\r\n          }\r\n          roleResults.push(userHasRole);\r\n        }\r\n        if (roleResults.includes(true)) {\r\n          linksToSet.push(link);\r\n          continue;\r\n        }\r\n      }\r\n      if (permissionRequired) {\r\n        const permissionResults = [];\r\n        for (let j = 0; j &lt; link.reqAnyPerms.length; j++) {\r\n          const permission = link.reqAnyPerms[i];\r\n          let userHasPermission = false;\r\n          try {\r\n            // eslint-disable-next-line no-await-in-loop\r\n            await cvApi.authentication.CurrentUserHasPermission({ Name: permission });\r\n            userHasPermission = true;\r\n          } catch (err) {\r\n            userHasPermission = false;\r\n          }\r\n          permissionResults.push(userHasPermission);\r\n        }\r\n        if (permissionResults.includes(true)) {\r\n          linksToSet.push(link);\r\n        }\r\n      }\r\n    }\r\n    return linksToSet;\r\n  }\r\n\r\n  let breadCrumbs = pathName.slice(1).split(\"/\");\r\n  if (breadCrumbs.some(crumb =&gt; crumb.toLowerCase() === \"sales-group\")) {\r\n    breadCrumbs = [ \"Dashboard\", \"Group Detail\" ];\r\n  } else if (breadCrumbs.some(crumb =&gt; crumb.toLowerCase() === \"shopping-lists\")) {\r\n    breadCrumbs = [ \"Dashboard\", \"Shopping Lists\" ];\r\n  }\r\n\r\n  const dashboardTabComponents: {\r\n    [name: string]: {\r\n      component: (() =&gt; JSX.Element) | ConnectedComponent&lt;(props: any) =&gt; JSX.Element, [string]&gt;;\r\n      icon?: IconDefinition;\r\n      iconString?: string;\r\n    };\r\n  } = {\r\n    AccountProfile: { component: AccountProfile },\r\n    AccountSettings: { component: (): null =&gt; null, iconString: \"fal fa-user-circle\" },\r\n    AddressBook: { component: AddressBook },\r\n    Favorites: { component: Favorites, iconString: \"fal fa-star\" },\r\n    InStockAlerts: { component: InStockAlerts, iconString: \"fal fa-bell\" },\r\n    Invoices: {\r\n      component: () =&gt; &lt;Invoices isDashboardMain={false} /&gt;,\r\n      iconString: \"fal fa-file-invoice-dollar\"\r\n    },\r\n    MyDashboard: {\r\n      component: () =&gt; &lt;Row&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;h1&gt;{t(\"ui.storefront.common.MyDashboard\")}&lt;/h1&gt;\r\n        &lt;/Col&gt;\r\n        &lt;div className=\"pb-4\"&gt;\r\n          &lt;Orders isDashboardMain={true} /&gt;\r\n        &lt;/div&gt;\r\n        &lt;div className=\"pb-4\"&gt;\r\n          &lt;Invoices isDashboardMain={true} /&gt;\r\n        &lt;/div&gt;\r\n        &lt;div className=\"pb-4\"&gt;\r\n          &lt;Quotes isDashboardMain={true} /&gt;\r\n        &lt;/div&gt;\r\n        &lt;div className=\"pb-4\"&gt;\r\n          &lt;Returns isDashboardMain={true} /&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Row&gt;,\r\n      iconString: \"fal fa-tachometer-alt\"\r\n    },\r\n    MyProfile: { component: MyProfile },\r\n    Orders: {\r\n      component: () =&gt; &lt;Orders isDashboardMain={false} /&gt;,\r\n      iconString: \"fal fa-receipt\"\r\n    },\r\n    Returns: {\r\n      component: () =&gt; &lt;Returns isDashboardMain={false} /&gt;,\r\n      iconString: \"fal fa-receipt\"\r\n    },\r\n    Privacy: { component: Privacy },\r\n    Quotes: {\r\n      component: () =&gt; &lt;Quotes isDashboardMain={false} /&gt;,\r\n      iconString: \"fal fa-quote-right\"\r\n    },\r\n    SalesGroup: { component: SalesGroup, icon: faCoffee },\r\n    ShoppingLists: {\r\n      component: ShoppingLists,\r\n      iconString: \"fal fa-clipboard-list\"\r\n    },\r\n    Wallet: { component: Wallet },\r\n    WishList: { component: WishList, iconString: \"fal fa-heart\" }\r\n  };\r\n\r\n  const renderedDashboardPaths: IDashboardSettings[] = dashboardLinks\r\n    .reduce((accu, e) =&gt; {\r\n      const combined = [ ...accu, e ];\r\n      if (e.children) {\r\n        combined.push(...e.children.filter(Boolean));\r\n      }\r\n      return combined;\r\n    }, [])\r\n    .filter((x: IDashboardSettings) =&gt; x.enabled &amp;&amp; x.href)\r\n    .sort(\r\n      (linkOne: IDashboardSettings, linkTwo: IDashboardSettings) =&gt; linkOne.order - linkTwo.order\r\n    );\r\n\r\n  const getRouterRoutes = () =&gt; {\r\n    const routes = [];\r\n    renderedDashboardPaths.forEach(link =&gt; {\r\n      if (dashboardTabComponents[link.name]?.component) {\r\n        routes.push(\r\n          &lt;Route\r\n            exact={link.href.toLowerCase() === cefConfig.routes.dashboard.root.toLowerCase()}\r\n            key={link.href}\r\n            path={link.href}\r\n            component={dashboardTabComponents[link.name].component}\r\n          /&gt;\r\n        );\r\n      }\r\n    });\r\n    const includeSalesGroupDetail: boolean\r\n      = Boolean(renderedDashboardPaths.find(\r\n        link =&gt; link.name === \"Orders\" || link.name === \"Invoices\" || link.name === \"Quotes\" || link.name === \"Returns\"\r\n      ));\r\n    if (includeSalesGroupDetail) {\r\n      routes.push(\r\n        &lt;Route\r\n          key=\"/dashboard/sales-group/:salesGroupId/:type/:typeId\"\r\n          path=\"/dashboard/sales-group/:salesGroupId/:type/:typeId\"\r\n          component={SalesGroup}\r\n        /&gt;\r\n      );\r\n    }\r\n    return routes;\r\n  };\r\n\r\n  return (\r\n    &lt;main id=\"main\" role=\"main\"&gt;\r\n      &lt;LoginModal\r\n        show={showLoginModal}\r\n        onConfirm={() =&gt; setShowLoginModal(false)}\r\n        onCancel={() =&gt; {\r\n          setShowLoginModal(false);\r\n          document.location.href = \"/\";\r\n        }} /&gt;\r\n      &lt;Row className=\"cef-dashboard-container\"&gt;\r\n        &lt;Col xs={12}\r\n          md={3}\r\n          lg={2}\r\n          className=\"d-print-none cef-dashboard-nav ps-4 pt-5 pe-3 pb-3\"&gt;\r\n          &lt;Navbar bg=\"light\"\r\n            expand=\"md\"\r\n            className=\"pt-lg-0 flex-wrap\"&gt;\r\n            &lt;div className=\"navbar-header py-2 d-flex flex-nowrap justify-content-between w-100 align-items-center px-3\"&gt;\r\n              &lt;h6 className=\"navbar-brand\"&gt;{t(\"ui.storefront.userDashboard.Navigation\")}&lt;/h6&gt;\r\n              &lt;Navbar.Toggle aria-controls=\"cef-dashboard-nav-collapse\" /&gt;\r\n            &lt;/div&gt;\r\n            &lt;Navbar.Collapse id=\"cef-dashboard-nav-collapse\"&gt;\r\n              &lt;Nav className=\"w-100\"&gt;\r\n                &lt;ul className=\"nav flex-column w-100\"&gt;\r\n                  {dashboardLinks.map(link =&gt; &lt;li className=\"nav-item\" key={link.href || link.name}&gt;\r\n                    &lt;Link\r\n                      data-sid={`udSideNavLinkText_${link.name}`}\r\n                      to={\r\n                        link.href\r\n                            || (link?.children?.length\r\n                              ? link.children[0].href\r\n                              : cefConfig.routes.dashboard.root)\r\n                      }\r\n                      className={`nav-link ${\r\n                        activeLink?.href === link.href\r\n                            || link?.children?.some(c =&gt; c.href === activeLink?.href)\r\n                          ? \"active\"\r\n                          : \"\"\r\n                      }`}\r\n                      onClick={() =&gt; {\r\n                        setActiveLink(link.children ? link.children[0] : link);\r\n                      }}&gt;\r\n                      {dashboardTabComponents[link.name]?.icon\r\n                            &amp;&amp; &lt;FontAwesomeIcon\r\n                              icon={dashboardTabComponents[link.name]?.icon}\r\n                              className=\"mb-0 me-1\"\r\n                            /&gt;\r\n                      }\r\n                      {\r\n                        dashboardTabComponents[link.name]?.iconString\r\n                          &amp;&amp; &lt;i className={`${dashboardTabComponents[link.name].iconString} fa-fw mb-0 me-1`}/&gt;\r\n                      }\r\n                      &lt;span className=\"nav-text\"&gt;{t(link.titleKey)}&lt;/span&gt;\r\n                    &lt;/Link&gt;\r\n                    {link.children\r\n                          &amp;&amp; &lt;ul\r\n                            className=\"nav flex-column user-dashboard-sub-nav\"\r\n                            aria-labelledby=\"asideDrop\"&gt;\r\n                            {link.children\r\n                              .filter(child =&gt; child.enabled &amp;&amp; child.href)\r\n                              .map(child =&gt; &lt;li key={child.href || child.name} className=\"nav-item\"&gt;\r\n                                &lt;Link\r\n                                  data-sid={`udSideNavLinkText_${child.name}`}\r\n                                  to={child.href}\r\n                                  className={`nav-link ${\r\n                                    activeLink?.href === child.href ? \"active\" : \"\"\r\n                                  }`}\r\n                                  onClick={() =&gt; setActiveLink(child)}&gt;\r\n                                  &lt;span className=\"text-capitalize\"&gt;{t(child.titleKey)}&lt;/span&gt;\r\n                                &lt;/Link&gt;\r\n                              &lt;/li&gt;)}\r\n                          &lt;/ul&gt;\r\n                    }\r\n                  &lt;/li&gt;)}\r\n                &lt;/ul&gt;\r\n              &lt;/Nav&gt;\r\n            &lt;/Navbar.Collapse&gt;\r\n          &lt;/Navbar&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col md=\"9\"\r\n          lg=\"10\"\r\n          className=\"cef-dashboard-content\"&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;Row className=\"row d-none d-sm-block d-print-none\"&gt;\r\n                &lt;nav className=\"breadcrumbs\"&gt;\r\n                  &lt;ol className=\"breadcrumb bg-transparent my-3\"&gt;\r\n                    &lt;li key=\"Home\" className=\"breadcrumb-item\"&gt;\r\n                      &lt;a\r\n                        data-sid=\"udBreadCrumbHome\"\r\n                        href={corsLink(cefConfig, cefConfig.routes.site.root)}\r\n                        className=\"text-capitalize\"&gt;\r\n                        {t(\"ui.storefront.common.Home\")}\r\n                      &lt;/a&gt;\r\n                    &lt;/li&gt;\r\n                    {breadCrumbs.map((crumb, index): JSX.Element =&gt; &lt;li key={crumb} className=\"breadcrumb-item\"&gt;\r\n                      {index === breadCrumbs.length - 1\r\n                        ? &lt;span data-sid=\"udBreadCrumbTabText\" className=\"text-capitalize\"&gt;{crumb}&lt;/span&gt;\r\n                        : &lt;Link\r\n                          data-sid=\"udBreadCrumbDashboard\"\r\n                          className=\"text-capitalize\"\r\n                          to={index === 0 ? `/${crumb}` : `/dashboard/${crumb}`}&gt;\r\n                          {crumb}\r\n                        &lt;/Link&gt;\r\n                      }\r\n                    &lt;/li&gt;)}\r\n                  &lt;/ol&gt;\r\n                &lt;/nav&gt;\r\n              &lt;/Row&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Switch&gt;{getRouterRoutes()}&lt;/Switch&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n    &lt;/main&gt;\r\n  );\r\n};\r\n","/** @format */\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IRegistrationStepsHeaderProps {\r\n  valid: boolean;\r\n  titleKey: string;\r\n}\r\n\r\nexport const RegistrationStepsHeader = (props: IRegistrationStepsHeaderProps): JSX.Element =&gt; {\r\n  const { valid, titleKey } = props;\r\n  const { t } = useTranslation();\r\n  return (\r\n    &lt;h5&gt;\r\n      &lt;i className={`fal ${valid ? \"fa-check-square text-success\" : \"fa-square text-primary\"}`} /&gt;\r\n       \r\n      &lt;span className={`text-${valid ? \"success\" : \"primary\"}`}&gt;\r\n        &lt;span data-sid=\"txtRegistrationStepHeader\"&gt;{t(titleKey)}&lt;/span&gt;\r\n      &lt;/span&gt;\r\n    &lt;/h5&gt;\r\n  );\r\n};\r\n","import { useEffect } from \"react\";\r\nimport { SubmitHandler, useForm, useWatch } from \"react-hook-form\";\r\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport {\r\n  PasswordInputFormGroup,\r\n  TextInputFormGroup\r\n} from \"src/_shared/forms/formGroups\";\r\nimport { IRegistrationStepBasicInfoData } from \"src/Authentication/Registration/_registrationTypes\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\n\r\ninterface IRegistrationBasicInfoStepProps {\r\n  cefConfig: CEFConfig;\r\n  onCompleteBasicInfoStep: Function;\r\n  continueText: string;\r\n}\r\n\r\nexport const RegistrationBasicInfoStep = (\r\n  props: IRegistrationBasicInfoStepProps\r\n): JSX.Element =&gt; {\r\n  const { onCompleteBasicInfoStep, continueText, cefConfig } = props;\r\n  const userNameIsEmailEnabled: boolean\r\n    = cefConfig.featureSet.registration.usernameIsEmail;\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    setError,\r\n    getValues,\r\n    setValue,\r\n    control,\r\n    formState: { errors }\r\n  } = useForm&lt;IRegistrationStepBasicInfoData&gt;({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const boundUserName = useWatch({\r\n    control,\r\n    name: \"emEmailRegistration\",\r\n    disabled: !userNameIsEmailEnabled,\r\n    exact: true\r\n  });\r\n\r\n  useEffect(() =&gt; {\r\n    if (userNameIsEmailEnabled) {\r\n      setValue(\"emUsername\", boundUserName);\r\n    }\r\n  }, [ boundUserName ]);\r\n\r\n  const onSubmit: SubmitHandler&lt;IRegistrationStepBasicInfoData&gt; = async data =&gt; {\r\n    if (viewState.running) {\r\n      return;\r\n    }\r\n    setRunning();\r\n    const r = await cvApi.authentication.ValidateEmailIsUnique({\r\n      Email: data.emEmailRegistration\r\n    });\r\n    if (!r.data.ActionSucceeded) {\r\n      setError(\"emEmailRegistration\", {\r\n        type: \"uniqueEmail\",\r\n        message: \"Account with that email already exists.\"\r\n      });\r\n      finishRunning();\r\n      return;\r\n    }\r\n    finishRunning();\r\n    onCompleteBasicInfoStep(data);\r\n  };\r\n\r\n  return (\r\n    &lt;Row as={Form}\r\n      onSubmit={handleSubmit(onSubmit)}\r\n      autoComplete=\"off\"\r\n      className=\"position-relative\"&gt;\r\n      {viewState.running\r\n        &amp;&amp; &lt;Col xs={12}&gt;\r\n          &lt;LoadingWidget overlay={true} /&gt;\r\n        &lt;/Col&gt;\r\n      }\r\n      &lt;Col xs={12}&gt;\r\n        &lt;Row&gt;\r\n          &lt;TextInputFormGroup\r\n            register={register}\r\n            errors={errors}\r\n            formClasses=\"col-md-6 form-group\"\r\n            formIdentifier=\"firstNameRegistration\"\r\n            labelText=\"First Name\"\r\n            labelKey=\"ui.storefront.common.FirstName\"\r\n            placeholderText=\"First Name\"\r\n            placeholderKey=\"ui.storefront.common.FirstName\"\r\n            required={true}\r\n            maxLength={128}\r\n            maxLengthMessage=\"First name may not exceed 128 characters\"\r\n          /&gt;\r\n          &lt;TextInputFormGroup\r\n            register={register}\r\n            errors={errors}\r\n            formClasses=\"col-md-6 form-group\"\r\n            formIdentifier=\"lastNameRegistration\"\r\n            labelText=\"Last Name\"\r\n            labelKey=\"ui.storefront.common.LastName\"\r\n            placeholderText=\"Last Name\"\r\n            placeholderKey=\"ui.storefront.common.LastName\"\r\n            required={true}\r\n            maxLength={128}\r\n            maxLengthMessage=\"Last name may not exceed 128 characters\"\r\n          /&gt;\r\n          &lt;TextInputFormGroup\r\n            register={register}\r\n            errors={errors}\r\n            isEmail={true}\r\n            formClasses=\"col-12 form-group\"\r\n            formIdentifier=\"emEmailRegistration\"\r\n            labelText=\"Email\"\r\n            labelKey=\"ui.storefront.common.Email\"\r\n            placeholderText=\"Email\"\r\n            placeholderKey=\"ui.storefront.common.Email\"\r\n            required={true}\r\n            maxLength={128}\r\n            maxLengthMessage=\"Email may not exceed 128 characters\"\r\n            validateObject={{\r\n              isUnique: () =&gt; new Promise&lt;boolean | string&gt;((resolve, reject) =&gt; {\r\n                const curEmailValue = getValues(\"emEmailRegistration\");\r\n                if (!curEmailValue?.length) {\r\n                  resolve(false);\r\n                  return;\r\n                }\r\n                cvApi.authentication\r\n                  .ValidateEmailIsUnique({ Email: getValues(\"emEmailRegistration\") })\r\n                  .then(success =&gt; {\r\n                    if (!success.data?.ActionSucceeded) {\r\n                      const translated: string = t(\"ui.storefront.registration.emailMustBeUnique\");\r\n                      resolve(translated);\r\n                      return;\r\n                    }\r\n                    resolve(success.data?.ActionSucceeded);\r\n                  })\r\n                  .catch(error =&gt; {\r\n                    reject(error);\r\n                  });\r\n              })\r\n            }}\r\n            patternMessage=\"Email is not valid/formatted properly\"\r\n          /&gt;\r\n          &lt;TextInputFormGroup\r\n            register={register}\r\n            errors={errors}\r\n            isPhone={true}\r\n            formClasses=\"col-12 form-group\"\r\n            formIdentifier=\"telPhoneRegistration\"\r\n            labelText=\"Phone\"\r\n            labelKey=\"ui.storefront.common.Phone\"\r\n            placeholderText=\"Phone\"\r\n            placeholderKey=\"ui.storefront.common.Phone\"\r\n            required={true}\r\n            maxLength={40}\r\n            maxLengthMessage=\"Phone numbers may not exceed 40 characters\"\r\n            minLength={10}\r\n            minLengthMessage=\"Phone numbers must include country code and area code.\"\r\n          /&gt;\r\n        &lt;/Row&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;hr /&gt;\r\n        &lt;Row&gt;\r\n          &lt;TextInputFormGroup\r\n            register={register}\r\n            errors={errors}\r\n            formClasses=\"col-md-6 form-group\"\r\n            formIdentifier=\"emUsername\"\r\n            labelText=\"Username\"\r\n            disabled={Boolean(userNameIsEmailEnabled)}\r\n            labelKey=\"ui.storefront.common.Username\"\r\n            placeholderText=\"Username\"\r\n            placeholderKey=\"ui.storefront.common.Username\"\r\n            tooltipKey={\r\n              userNameIsEmailEnabled\r\n                ? \"ui.storefront.user.registration.UsernameIsEmailByDefault\"\r\n                : \"ui.storefront.user.registration.ValidUsernameTips\"}\r\n            required={true}\r\n            maxLength={100}\r\n            minLength={3}\r\n          /&gt;\r\n          &lt;PasswordInputFormGroup\r\n            register={register}\r\n            errors={errors}\r\n            formClasses=\"col-md-6 form-group\"\r\n            formIdentifier=\"pwPasswordRegistration\"\r\n            labelText=\"Password\"\r\n            labelKey=\"ui.storefront.common.Password\"\r\n            placeholderText=\"••••••\"\r\n            tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\r\n            required={true}\r\n          /&gt;\r\n        &lt;/Row&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;br /&gt;\r\n        &lt;hr /&gt;\r\n        &lt;Row&gt;\r\n          &lt;div className=\"col-md-6\"&gt;\r\n            &lt;p&gt;If you have an existing GFS Chemicals Account, please enter your Customer Number.&lt;/p&gt;\r\n          &lt;/div&gt;\r\n          &lt;TextInputFormGroup\r\n            register={register}\r\n            errors={errors}\r\n            formClasses=\"col-md-6 form-group\"\r\n            formIdentifier=\"customerNumberRegistration\"\r\n            labelText=\"Customer Number\"\r\n            placeholderText=\"Customer Number\"\r\n            required={false}\r\n            maxLength={100}\r\n            minLength={1}\r\n            validateObject={{\r\n              isUnique: () =&gt; new Promise&lt;boolean | string&gt;((resolve, reject) =&gt; {\r\n                const currCustNoValue = getValues(\"customerNumberRegistration\");\r\n                if (!currCustNoValue?.length) {\r\n                  resolve(true);\r\n                  return;\r\n                }\r\n                cvApi.authentication\r\n                  .CheckAccountKeyExists(currCustNoValue)\r\n                  .then(r =&gt; {\r\n                    if (!r.data?.Result) {\r\n                      resolve(\"Account could not be found with provided customer number.\");\r\n                      return;\r\n                    }\r\n                    resolve(r.data?.ActionSucceeded);\r\n                  })\r\n                  .catch(err =&gt; {\r\n                    reject(err);\r\n                  });\r\n              })\r\n            }}\r\n          /&gt;\r\n        &lt;/Row&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;Button\r\n          id=\"btnSubmit_registrationStepBasicInfo\"\r\n          as=\"input\"\r\n          variant=\"primary\"\r\n          className=\"my-3\"\r\n          value=\"Continue\"\r\n          type=\"submit\"\r\n          disabled={viewState.running} /&gt;\r\n      &lt;/Col&gt;\r\n    &lt;/Row&gt;\r\n  );\r\n};\r\n","import { useState } from \"react\";\r\nimport { CheckboxFormGroup } from \"src/_shared/forms/formGroups\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row } from \"react-bootstrap\";\r\nimport { NewAddressModal } from \"src/Dashboard/AddressBook/NewAddressModal\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { IRegistrationStepBasicInfoData } from \"src/Authentication/Registration/_registrationTypes\";\r\n\r\ninterface IRegistrationAddressBookStepProps {\r\n  onCompleteAddressBookStep: (\r\n    billingAddress: AccountContactModel,\r\n    shippingAddress: AccountContactModel,\r\n    continueToConfirmation: boolean,\r\n    addressIsAbleToReceiveChemicals: boolean,\r\n  ) =&gt; void;\r\n  continueText: string;\r\n  basicInfoStepData?: IRegistrationStepBasicInfoData;\r\n}\r\n\r\nexport const RegistrationAddressBookStep = (\r\n  props: IRegistrationAddressBookStepProps\r\n): JSX.Element =&gt; {\r\n  const { onCompleteAddressBookStep, continueText, basicInfoStepData } = props;\r\n\r\n  const [ showAddBillingAddressModal, setShowAddBillingAddressModal ]\r\n    = useState(false);\r\n  const [ showAddShippingAddressModal, setShowAddShippingAddressModal ]\r\n    = useState(false);\r\n  const [ userBillingAddressComplete, setUserBillingAddressComplete ]\r\n    = useState&lt;boolean&gt;(false);\r\n  const [ userShippingAddressComplete, setUserShippingAddressComplete ]\r\n    = useState&lt;boolean&gt;(false);\r\n  const [ addressIsAbleToReceiveChemicals, setAddressIsAbleToReceiveChemicals ]\r\n    = useState&lt;boolean&gt;(false);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const getInitialAccountContact = (isBilling?: boolean): AccountContactModel =&gt; {\r\n    let basicInfoFirstName = \"\";\r\n    let basicInfoLastName = \"\";\r\n    let basicInfoEmail = \"\";\r\n    let basicInfoPhone = \"\";\r\n    if (basicInfoStepData) {\r\n      basicInfoFirstName = basicInfoStepData.firstNameRegistration;\r\n      basicInfoLastName = basicInfoStepData.lastNameRegistration;\r\n      basicInfoEmail = basicInfoStepData.emEmailRegistration;\r\n      basicInfoPhone = basicInfoStepData.telPhoneRegistration;\r\n    }\r\n    return {\r\n      Active: true,\r\n      CreatedDate: new Date(),\r\n      CustomKey: isBilling ? \"BILL TO\" : \"SHIP TO\",\r\n      ID: null,\r\n      IsBilling: isBilling,\r\n      IsPrimary: !isBilling,\r\n      MasterID: null,\r\n      Slave: {\r\n        Active: true,\r\n        Address: {\r\n          Active: true,\r\n          City: \"\",\r\n          Company: \"\",\r\n          Country: null,\r\n          CountryCode: null,\r\n          CountryKey: null,\r\n          CountryName: \"\",\r\n          CreatedDate: new Date(),\r\n          CustomKey: isBilling ? \"BILL TO\" : \"SHIP TO\",\r\n          ID: null,\r\n          PostalCode: \"\",\r\n          Region: null,\r\n          RegionCode: \"\",\r\n          RegionID: null,\r\n          RegionKey: \"\",\r\n          RegionName: \"\",\r\n          Street1: \"\",\r\n          Street2: \"\",\r\n          Street3: \"\"\r\n        },\r\n        CreatedDate: new Date(),\r\n        Email1: basicInfoEmail,\r\n        Fax1: \"\",\r\n        FirstName: basicInfoFirstName,\r\n        FullName: `${basicInfoFirstName} ${basicInfoLastName}`,\r\n        ID: null,\r\n        LastName: basicInfoLastName,\r\n        Phone1: basicInfoPhone,\r\n        TypeID: null,\r\n        TypeKey: isBilling ? \"Billing\" : \"Shipping\"\r\n      },\r\n      SlaveID: null,\r\n      TransmittedToERP: false,\r\n      UpdatedDate: null\r\n    };\r\n  };\r\n  const [ userBillingAddress, setUserBillingAddress ]\r\n    = useState&lt;AccountContactModel&gt;(getInitialAccountContact(true));\r\n  const [ userShippingAddress, setUserShippingAddress ]\r\n    = useState&lt;AccountContactModel&gt;(getInitialAccountContact(false));\r\n\r\n  return (\r\n    &lt;Row&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;p&gt;\r\n          Your account will need both a billing and a shipping address assigned\r\n          for payments and shipments.\r\n        &lt;/p&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={6}&gt;\r\n        &lt;span&gt;&lt;b&gt;{t(\"ui.storefront.user.registration.addressBookStep.SoldToBuyer\")}:&lt;/b&gt;&lt;/span&gt;\r\n        &lt;Button\r\n          variant=\"primary\"\r\n          className=\"mt-2 btn-block mb-3 w-100\"\r\n          onClick={() =&gt; setShowAddBillingAddressModal(true)}&gt;\r\n          {userBillingAddressComplete\r\n            ? \"Edit Billing Address\"\r\n            : \"Add a Billing Address\"}\r\n        &lt;/Button&gt;\r\n        &lt;NewAddressModal\r\n          type=\"billing\"\r\n          show={showAddBillingAddressModal}\r\n          onCancel={() =&gt; setShowAddBillingAddressModal(false)}\r\n          onConfirm={data =&gt; {\r\n            setUserBillingAddress({\r\n              ...data,\r\n              IsPrimary: false,\r\n              IsBilling: true,\r\n            });\r\n            setUserBillingAddressComplete(true);\r\n            setShowAddBillingAddressModal(false);\r\n          }}\r\n          accountContact={userBillingAddress}\r\n        /&gt;\r\n        &lt;div className=\"mb-2\"&gt;\r\n          {userBillingAddressComplete\r\n            ? &lt;AddressBlock\r\n              address={userBillingAddress?.Slave?.Address}\r\n              contact={userBillingAddress?.Slave}\r\n            /&gt;\r\n            : null}\r\n        &lt;/div&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={6}&gt;\r\n        &lt;span&gt;&lt;b&gt;{t(\"ui.storefront.user.registration.addressBookStep.ShipToCosignee\")}:&lt;/b&gt;&lt;/span&gt;\r\n        &lt;Button\r\n          variant=\"secondary\"\r\n          className=\"mt-2 btn-block mb-3 w-100\"\r\n          onClick={() =&gt; setShowAddShippingAddressModal(true)}&gt;\r\n          {userShippingAddressComplete\r\n            ? \"Edit Shipping Address\"\r\n            : \"Add a Shipping Address\"}\r\n        &lt;/Button&gt;\r\n        &lt;NewAddressModal\r\n          show={showAddShippingAddressModal}\r\n          type=\"shipping\"\r\n          onCancel={() =&gt; setShowAddShippingAddressModal(false)}\r\n          onConfirm={(data: AccountContactModel) =&gt; {\r\n            setUserShippingAddress({\r\n              ...data,\r\n              IsPrimary: true,\r\n              IsShipping: false,\r\n              Slave: {\r\n                ...data.Slave,\r\n                Address: {\r\n                  ...data.Slave.Address,\r\n                  CustomKey: \"SHIP TO\"\r\n                }\r\n              }\r\n            });\r\n            setUserShippingAddressComplete(true);\r\n            setShowAddShippingAddressModal(false);\r\n          }}\r\n          accountContact={userShippingAddress}\r\n        /&gt;\r\n        {userShippingAddressComplete ? null\r\n          : &lt;Button\r\n          variant=\"secondary\"\r\n          disabled={!userBillingAddressComplete}\r\n          className=\"btn-block mb-3 w-100\"\r\n          id=\"btnRegAddShippingByCopyBilling\"\r\n          name=\"btnRegAddShippingByCopyBilling\"\r\n          onClick={() =&gt; {\r\n            if (userBillingAddressComplete) {\r\n              setUserShippingAddress({\r\n                  ...userBillingAddress,\r\n                  IsBilling: false,\r\n                  IsPrimary: true,\r\n                  Slave: {\r\n                    ...userBillingAddress.Slave,\r\n                    Address: {\r\n                      ...userBillingAddress.Slave.Address,\r\n                      CustomKey: \"SHIP TO\"\r\n                    }\r\n                  }\r\n                });\r\n                setUserShippingAddressComplete(true);\r\n              }\r\n            }}&gt;\r\n            Copy the billing address for shipping\r\n          &lt;/Button&gt;\r\n        }\r\n        &lt;div className=\"mb-2\"&gt;\r\n          {userShippingAddressComplete\r\n            ? &lt;AddressBlock\r\n            address={userShippingAddress?.Slave?.Address}\r\n            contact={userShippingAddress?.Slave}\r\n            /&gt;\r\n            : null}\r\n        &lt;/div&gt;\r\n        &lt;div className=\"mb-2\"&gt;\r\n          &lt;input\r\n            id=\"shippingAddressIsAbleToHandleChemicalsCheckbox\"\r\n            className=\"form-check-input fs-5\"\r\n            type=\"checkbox\"\r\n            checked={addressIsAbleToReceiveChemicals}\r\n            onChange={() =&gt; setAddressIsAbleToReceiveChemicals(prev =&gt; !prev)}\r\n          /&gt;\r\n          &lt;span&gt;\r\n            &lt;b&gt;  {t(\"ui.storefront.user.registration.addressBookStep.ShippingAddressIsAbleToReceiveAndHandleChemicals\")}&lt;/b&gt;\r\n          &lt;/span&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Col&gt;\r\n      &lt;hr/&gt;\r\n      &lt;Col xs={6}&gt;\r\n        &lt;p&gt;&lt;b&gt;{t(\"ui.storefront.user.registration.PleaseCompleteBusinessSetup\")}&lt;/b&gt;&lt;/p&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={6}&gt;\r\n        &lt;Button\r\n          variant=\"primary\"\r\n          className=\"btn-block w-100 mb-3\"\r\n          id=\"btnSubmit_registrationStepAddressBook\"\r\n          name=\"btnSubmit_registrationStepAddressBook\"\r\n          disabled={\r\n            Boolean(!userShippingAddressComplete || !userBillingAddressComplete)\r\n          }\r\n          onClick={() =&gt; {\r\n            if (userShippingAddressComplete &amp;&amp; userBillingAddressComplete) {\r\n              onCompleteAddressBookStep(userBillingAddress, userShippingAddress, false, addressIsAbleToReceiveChemicals);\r\n            }\r\n          }}&gt;\r\n          {t(\"ui.storefront.user.registration.ContinueToBusinessAccountSetup\")}\r\n        &lt;/Button&gt;\r\n      &lt;/Col&gt;\r\n      &lt;hr/&gt;\r\n    &lt;/Row&gt;\r\n  );\r\n};\r\n","import { Button } from \"react-bootstrap\";\r\n\r\ninterface IRegistrationWalletStepProps {\r\n  onCompleteWalletStep: Function;\r\n  continueText: string;\r\n}\r\n\r\nexport const RegistrationWalletStep = (props: IRegistrationWalletStepProps): JSX.Element =&gt; {\r\n  const { onCompleteWalletStep, continueText } = props;\r\n\r\n  // TODO: implement\r\n  return (\r\n    &lt;&gt;\r\n      &lt;h2&gt;RegistrationWalletStep&lt;/h2&gt;\r\n      &lt;Button variant=\"primary\" onClick={() =&gt; onCompleteWalletStep(null)}&gt;\r\n        {continueText}\r\n      &lt;/Button&gt;\r\n    &lt;/&gt;\r\n  );\r\n};\r\n","import { useEffect, useState, useRef, SetStateAction } from \"react\";\r\nimport SignatureCanvas from 'react-signature-canvas';\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row, Form } from \"react-bootstrap\";\r\nimport { SerializableAttributesDictionary } from \"src/_api/cvApi._DtoClasses\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport axios from \"src/axios\";\r\nimport { IUploadResult } from \"src/_api/cvApi.shared\";\r\nimport _ from \"lodash\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { CountryModel, FileEntityType } from \"src/_api/cvApi._DtoClasses\";\r\nimport { FileUploadWidget } from \"src/_shared/common/FileUploadWidget\";\r\n\r\ninterface IRegistrationCustomStepProps {\r\n  onCompleteCustomStep: Function;\r\n  continueText: string;\r\n}\r\n\r\ninterface UploadedFileNameAndPath {\r\n  name: string;\r\n  path: string;\r\n}\r\n\r\nexport const RegistrationCustomStep = (props: IRegistrationCustomStepProps): JSX.Element =&gt; {\r\n  const { onCompleteCustomStep, continueText } = props;\r\n\r\n  // Geographical Data\r\n  const [ countries, setCountries ] = useState&lt;CountryModel[]&gt;([]);\r\n\r\n  // General\r\n  const [ attributes, setAttributes ] = useState&lt;SerializableAttributesDictionary&gt;({});\r\n  const [ validationErrors, setValidationErrors ] = useState&lt;string[]&gt;([]);\r\n  \r\n  // Payment Information\r\n  const [ preferredPaymentMethod, setPreferredPaymentMethod ] = useState&lt;string&gt;(undefined);\r\n  const [ taxExempt_IsChecked, setTaxExempt_IsChecked ] = useState&lt;boolean&gt;(false);\r\n  const [ taxExemptFormFiles, setTaxExemptFormFiles ] = useState&lt;UploadedFileNameAndPath[]&gt;(null);\r\n  \r\n  // General Information\r\n  const [ primaryBusinessActivity, setPrimaryBusinessActivity ] = useState&lt;string&gt;(undefined);\r\n  const [ businessName, setBusinessName ] = useState&lt;string&gt;(undefined);\r\n  const [ website, setWebsite ] = useState&lt;string&gt;(undefined);\r\n  const [ businessStructure, setBusinessStructure ] = useState&lt;string&gt;(undefined);\r\n  const [ businessStructureAlt, setBusinessStructureAlt ] = useState&lt;string&gt;(undefined);\r\n  const [ usFederalIDnoSSnoTaxId, setUsFederalIDnoSSnoTaxId ] = useState&lt;string&gt;(undefined);\r\n  const [ dunsAndBradstreetNo, setDunsAndBradstreetNo] = useState&lt;string&gt;(undefined);\r\n  const [ industrySegment, setIndustrySegment ] = useState&lt;string&gt;(undefined);\r\n  const [ naicsCodes, setNaicsCodes ] = useState&lt;string&gt;(undefined);\r\n  const [ multinationalEnterprise_IsChecked, setMultinationalEnterprise_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  const [ noOfBusinessUnits, setNoOfBusinessUnits ] = useState&lt;number&gt;(1);\r\n  const [ noOfYearsInBusiness, setNoOfYearsInBusiness ] = useState&lt;number&gt;(1);\r\n  const [ branchLocationFiles, setBranchLocationFiles ] = useState&lt;UploadedFileNameAndPath[]&gt;(null);\r\n  \r\n  // Explanation\r\n  const [ explanationOfUse_Laboratory_IsChecked, setExplanationOfUse_Laboratory_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  const [ explanationOfUse_DistributionToCustomers_IsChecked, setExplanationOfUse_DistributionToCustomers_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  const [ explanationOfUse_Manufacturing_IsChecked, setExplanationOfUse_Manufacturing_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  const [ explanationOfUse_Resale_IsChecked, setExplanationOfUse_Resale_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  \r\n  // I Certify...\r\n  const [ certify_ProfessionallyStaffed_IsChecked, setCertify_ProfessionallyStaffed_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  const [ certify_NotResell_IsChecked, setCertify_NotResell_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  \r\n  // I Certify US / Intl...\r\n  const [ certify_UsaDomiciledCo_IsChecked, setCertify_UsaDomiciledCo_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  const [ certify_IntlDomiciledCo_IsChecked, setCertify_IntlDomiciledCo_IsChecked ]\r\n  = useState&lt;boolean&gt;(false);\r\n  const [ intlDomiciledCo_SelectedCountry, setIntlDomiciledCo_SelectedCountry ]\r\n  = useState&lt;string&gt;(undefined);\r\n  \r\n  // I Verify...\r\n  const [ fullLegalName, setFullLegalName ] = useState&lt;string&gt;(undefined);\r\n  const [ title, setTitle ] = useState&lt;string&gt;(undefined);\r\n  const [ uploadedSignature, setUploadedSignature ] = useState&lt;UploadedFileNameAndPath&gt;(null);\r\n  \r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  // Signature Functionality\r\n  const sigCanvas = useRef(null);\r\n  \r\n  const clearSignature = () =&gt; {\r\n    if (sigCanvas.current) {\r\n      sigCanvas.current.clear();\r\n      setUploadedSignature(null);\r\n    }\r\n  };\r\n\r\n  const saveSignature = () =&gt; {\r\n    if (sigCanvas.current) {\r\n      const signature = sigCanvas.current.toDataURL();\r\n      uploadFileAndSetState(signature, setUploadedSignature);\r\n    }\r\n  };\r\n\r\n  function base64ToBlob(base64: string, mimeType: string = \"\"): Blob {\r\n    const byteCharacters = atob(base64);\r\n    const byteNumbers = new Array(byteCharacters.length);\r\n    for (let i = 0; i &lt; byteCharacters.length; i++) {\r\n      byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n    }\r\n    const byteArray = new Uint8Array(byteNumbers);\r\n    return new Blob([byteArray], { type: mimeType });\r\n  }\r\n\r\n  async function uploadFileAndSetState(signatureDataURL: string, setUploadedFileResult: (value: SetStateAction&lt;UploadedFileNameAndPath&gt;) =&gt; void) {\r\n    try {\r\n      setRunning();\r\n      const base64Data = signatureDataURL.split(\",\")[1];\r\n      const blob = base64ToBlob(base64Data, \"image/png\");\r\n      const formData = new FormData();\r\n      formData.append(\"EntityFileType\", String(FileEntityType.ImportUser));\r\n      formData.append(\"file\", blob, \"signature.png\");\r\n      const fileUploadResponse = await axios.post(\r\n        [\"Media\", \"StoredFiles\", \"Upload\", \".json\"].join(\"/\"),\r\n        formData\r\n      );\r\n      if (!fileUploadResponse?.data) {\r\n        finishRunning(true, \"Failed to upload\");\r\n        return;\r\n      }\r\n      const files: Array&lt;IUploadResult&gt; = fileUploadResponse.data.UploadFiles;\r\n      const uploadedFile: UploadedFileNameAndPath = {\r\n        name: files[0].FileName,\r\n        path: files[0].FilePath,\r\n      };\r\n      setUploadedFileResult(uploadedFile);\r\n      finishRunning();\r\n    } catch (err: any) {\r\n      finishRunning(true, err);\r\n    }\r\n  }\r\n\r\n  // Get countries\r\n  async function getGlobalizationData() {\r\n    setRunning();\r\n    try {\r\n      const countryData = await cvApi.geography.GetCountries();\r\n      setCountries(countryData.data.Results);\r\n      finishRunning();\r\n    } catch (err) {\r\n      finishRunning(true, err as any);\r\n    }\r\n  }\r\n\r\n  // Validate fields\r\n  const validateFields = (): [boolean, string[]] =&gt; {\r\n    let valid = true;\r\n    let messages: string[] = [];\r\n    // preferredPaymentMethod\r\n    if (preferredPaymentMethod) {\r\n      attributes[\"BAF_preferredPaymentMethod\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_preferredPaymentMethod\",\r\n        Value: preferredPaymentMethod,\r\n      };\r\n    } else {\r\n      valid = false;\r\n      messages.push(\"Preferred payment method is required.\");\r\n    }\r\n    // taxExempt_IsChecked\r\n    attributes[\"BAF_taxExempt_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_taxExempt_TF\",\r\n      Value: taxExempt_IsChecked.toString(),\r\n    };\r\n    // taxExemptFormFiles\r\n    if (taxExempt_IsChecked &amp;&amp; taxExemptFormFiles?.length &gt; 0) {\r\n      attributes[\"BAF_taxExemptFormFiles\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_taxExemptFormFiles\",\r\n        Value: JSON.stringify(taxExemptFormFiles),\r\n      };\r\n    }\r\n    // businessName\r\n    if (businessName) {\r\n      attributes[\"BAF_businessName\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_businessName\",\r\n        Value: businessName,\r\n      };\r\n    } else {\r\n      valid = false;\r\n      messages.push(\"Business Name is required.\");\r\n    }\r\n    // primaryBusinessActivity\r\n    if (primaryBusinessActivity) {\r\n      attributes[\"BAF_primaryBusinessActivity\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_primaryBusinessActivity\",\r\n        Value: primaryBusinessActivity,\r\n      };\r\n    } else {\r\n      valid = false;\r\n      messages.push(\"Primary Business Activity is required.\");\r\n    }\r\n    // businessStructure || businessStructureAlt\r\n    if (businessStructure || businessStructureAlt) {\r\n      attributes[\"BAF_businessStructure\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_businessStructure\",\r\n        Value: businessStructure ?? businessStructureAlt,\r\n      };\r\n    } else {\r\n      valid = false;\r\n      messages.push(\"Business Structure is required.\");\r\n    }\r\n    // noOfBusinessUnits\r\n    if (noOfBusinessUnits) {\r\n      attributes[\"BAF_noOfBusinessUnits\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_noOfBusinessUnits\",\r\n        Value: noOfBusinessUnits.toString(),\r\n      };\r\n    }\r\n    // noOfYearsInBusiness\r\n    if (noOfYearsInBusiness) {\r\n      attributes[\"BAF_noOfYearsInBusiness\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_noOfYearsInBusiness\",\r\n        Value: noOfYearsInBusiness.toString(),\r\n      };\r\n    }\r\n    // website\r\n    if (website) {\r\n      attributes[\"BAF_website\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_website\",\r\n        Value: website,\r\n      };\r\n    }\r\n    // usFederalIDnoSSnoTaxId\r\n    if (usFederalIDnoSSnoTaxId) {\r\n      attributes[\"BAF_usFederalIDnoSSnoTaxId\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_usFederalIDnoSSnoTaxId\",\r\n        Value: usFederalIDnoSSnoTaxId,\r\n      };\r\n    }\r\n    // dunsAndBradstreetNo\r\n    if (dunsAndBradstreetNo) {\r\n      attributes[\"BAF_dunsAndBradstreetNo\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_dunsAndBradstreetNo\",\r\n        Value: dunsAndBradstreetNo,\r\n      };\r\n    }\r\n    // industrySegment\r\n    if (industrySegment) {\r\n      attributes[\"BAF_industrySegment\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_industrySegment\",\r\n        Value: industrySegment,\r\n      };\r\n    }\r\n    // naicsCodes\r\n    if (naicsCodes) {\r\n      attributes[\"BAF_naicsCodes\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_naicsCodes\",\r\n        Value: naicsCodes,\r\n      };\r\n    }\r\n    // multinationalEnterprise_IsChecked\r\n    attributes[\"BAF_multinationalEnterprise_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_multinationalEnterprise_TF\",\r\n      Value: multinationalEnterprise_IsChecked.toString(),\r\n    };\r\n    // branchLocationFiles\r\n    if (branchLocationFiles?.length &gt; 0) {\r\n      attributes[\"BAF_branchLocationFiles\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_branchLocationFiles\",\r\n        Value: JSON.stringify(branchLocationFiles),\r\n      };\r\n    }\r\n    // explanation section \"a\"\r\n    if (!explanationOfUse_Laboratory_IsChecked\r\n      &amp;&amp; !explanationOfUse_DistributionToCustomers_IsChecked\r\n      &amp;&amp; !explanationOfUse_Manufacturing_IsChecked\r\n      &amp;&amp; !explanationOfUse_Resale_IsChecked) {\r\n      valid = false;\r\n      messages.push(\"Explanation of Your Use of our Products (section 'a') is required.\");\r\n    }\r\n    // explanationOfUse_Laboratory_IsChecked\r\n    attributes[\"BAF_explanationOfUse_Laboratory_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_explanationOfUse_Laboratory_TF\",\r\n      Value: explanationOfUse_Laboratory_IsChecked.toString(),\r\n    };\r\n    // explanationOfUse_DistributionToCustomers_IsChecked\r\n    attributes[\"BAF_explanationOfUse_DistributionToCustomers_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_explanationOfUse_DistributionToCustomers_TF\",\r\n      Value: explanationOfUse_DistributionToCustomers_IsChecked.toString(),\r\n    };\r\n    // explanationOfUse_Manufacturing_IsChecked\r\n    attributes[\"BAF_explanationOfUse_Manufacturing_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_explanationOfUse_Manufacturing_TF\",\r\n      Value: explanationOfUse_Manufacturing_IsChecked.toString(),\r\n    };\r\n    // explanationOfUse_Resale_IsChecked\r\n    attributes[\"BAF_explanationOfUse_Resale_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_explanationOfUse_Resale_TF\",\r\n      Value: explanationOfUse_Resale_IsChecked.toString(),\r\n    };\r\n    // explanation section \"b\"\r\n    if (!certify_ProfessionallyStaffed_IsChecked\r\n      || !certify_NotResell_IsChecked) {\r\n      valid = false;\r\n      messages.push(\"Explanation of Your Use of our Products (section 'b') is required.\");\r\n    }\r\n    // certify_ProfessionallyStaffed_IsChecked\r\n    attributes[\"BAF_certify_ProfessionallyStaffed_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_certify_ProfessionallyStaffed_TF\",\r\n      Value: certify_ProfessionallyStaffed_IsChecked.toString(),\r\n    };\r\n    // certify_NotResell_IsChecked\r\n    attributes[\"BAF_certify_NotResell_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_certify_NotResell_TF\",\r\n      Value: certify_NotResell_IsChecked.toString(),\r\n    };\r\n    // explanation section \"c\"\r\n    if (!certify_UsaDomiciledCo_IsChecked\r\n      &amp;&amp; !certify_IntlDomiciledCo_IsChecked) {\r\n      valid = false;\r\n      messages.push(\"Explanation of Your Use of our Products (section 'c') is required.\");\r\n    }\r\n    // certify_UsaDomiciledCo_IsChecked\r\n    attributes[\"BAF_certify_UsaDomiciledCo_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_certify_UsaDomiciledCo_TF\",\r\n      Value: certify_UsaDomiciledCo_IsChecked.toString(),\r\n    };\r\n    // certify_IntlDomiciledCo_IsChecked\r\n    attributes[\"BAF_certify_IntlDomiciledCo_TF\"] = {\r\n      ID: 0,\r\n      Key: \"BAF_certify_IntlDomiciledCo_TF\",\r\n      Value: certify_IntlDomiciledCo_IsChecked.toString(),\r\n    };\r\n    // intlDomiciledCo_SelectedCountry\r\n    if (certify_IntlDomiciledCo_IsChecked) {\r\n      if (intlDomiciledCo_SelectedCountry) {\r\n        attributes[\"BAF_intlDomiciledCo_SelectedCountry\"] = {\r\n          ID: 0,\r\n          Key: \"BAF_intlDomiciledCo_SelectedCountry\",\r\n          Value: intlDomiciledCo_SelectedCountry,\r\n        };\r\n      } else {\r\n        valid = false;\r\n        messages.push(\"If located internationally, a selected country is required.\");\r\n      }\r\n    }\r\n    // fullLegalName\r\n    if (fullLegalName) {\r\n      attributes[\"BAF_fullLegalName\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_fullLegalName\",\r\n        Value: fullLegalName,\r\n      };\r\n    } else {\r\n      valid = false;\r\n      messages.push(\"Your Full Legal Name is required.\");\r\n    }\r\n    // title\r\n    if (title) {\r\n      attributes[\"BAF_title\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_title\",\r\n        Value: title,\r\n      };\r\n    }\r\n    // fullLegalName\r\n    if (uploadedSignature) {\r\n      attributes[\"BAF_uploadedSignature\"] = {\r\n        ID: 0,\r\n        Key: \"BAF_uploadedSignature\",\r\n        Value: JSON.stringify(uploadedSignature),\r\n      };\r\n    } else {\r\n      valid = false;\r\n      messages.push(\"Your Signature is required.\");\r\n    }\r\n    // Return\r\n    return [valid, messages];\r\n  }\r\n\r\n  useEffect(() =&gt; {\r\n    getGlobalizationData();\r\n    // Check and set if complete\r\n  }, [ attributes ]);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    &lt;Col xs={12}&gt;\r\n      {/** Payment Info */}\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12} className=\"mt-4\"&gt;\r\n          &lt;h3&gt;Payment Information&lt;/h3&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col xs={12} className=\"mt-4\"&gt;\r\n          &lt;label&gt;&lt;b&gt;{t(\"ui.storefront.user.registration.businessStep.PreferredMethodOfPayment\")}*:&lt;/b&gt;&lt;/label&gt;\r\n          &lt;select className=\"form-select mb-2\"\r\n            id=\"preferredPaymentMethodSelect\"\r\n            onChange={(e) =&gt; setPreferredPaymentMethod(e.target.value.toString())}&gt;\r\n            &lt;option value=\"Not Selected\"&gt;\r\n              {t(\"ui.storefront.common.Select\")}...&lt;/option&gt;\r\n            &lt;option value=\"Pay in advance via Wire Transfer\"&gt;\r\n              {t(\"ui.storefront.user.registration.businessStep.paymentMethod.WireTransferAdvance\")}&lt;/option&gt;\r\n            &lt;option value=\"Invoice Net 30 day terms\"&gt;\r\n              {t(\"ui.storefront.user.registration.businessStep.paymentMethod.InvoiceNet30Day\")}**&lt;/option&gt;\r\n            &lt;option value=\"Pay by Credit Card (up to $10,000)\"&gt;\r\n              {t(\"ui.storefront.user.registration.businessStep.paymentMethod.PayByCCupTo10k\")}&lt;/option&gt;\r\n            &lt;option value=\"Letter of Credit (for orders over $25,000 USD only)\"&gt;\r\n              {t(\"ui.storefront.user.registration.businessStep.paymentMethod.LetterOfCreditOver25k\")}&lt;/option&gt;\r\n          &lt;/select&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;input\r\n            id=\"shippingAddressIsAbleToHandleChemicalsCheckbox\"\r\n            className=\"form-check-input fs-5\"\r\n            type=\"checkbox\"\r\n            checked={taxExempt_IsChecked}\r\n            onChange={() =&gt; setTaxExempt_IsChecked(prev =&gt; !prev)}\r\n          /&gt;\r\n          &lt;span&gt;  {t(\"ui.storefront.user.registration.businessStep.TaxExemptInstructions\")}&lt;/span&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col xs={12} hidden={!taxExempt_IsChecked}&gt;\r\n          &lt;FileUploadWidget\r\n            uploadType={FileEntityType.ImportUser}\r\n            uploadCallbackRich={(e: any) =&gt; {\r\n              setTaxExemptFormFiles(e);\r\n            }}\r\n          /&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col xs={12} className=\"mt-4\"&gt;\r\n          &lt;span&gt;&lt;b&gt;**Companies outside US should provide 4 authorized trade/credit references with the Business Account Set-Up Submission. Net 30 Day terms may delay first order. Consider use of credit card payment for concurrent use to expedite initial orders.&lt;/b&gt;&lt;/span&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      {/** General Info */}\r\n      &lt;Row className=\"mt-4\"&gt;\r\n        &lt;Col xs={12} className=\"mt-4\"&gt;\r\n          &lt;h3&gt;General Information&lt;/h3&gt;\r\n        &lt;/Col&gt;\r\n        {/** Business Name */}\r\n        &lt;Col xs={12} className=\"mb-4\"&gt;\r\n          &lt;Form.Control\r\n            type=\"text\"\r\n            value={businessName}\r\n            placeholder=\"Business Name*\"\r\n            onChange={e =&gt; setBusinessName(e.target.value)} /&gt;\r\n        &lt;/Col&gt;\r\n        {/** Main Left Col */}\r\n        &lt;Col xs={6}&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={primaryBusinessActivity}\r\n                placeholder=\"Primary Business Activity*\"\r\n                onChange={e =&gt; setPrimaryBusinessActivity(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-4\"&gt;\r\n              &lt;label&gt;&lt;b&gt;Business Structure*:&lt;/b&gt;&lt;/label&gt;\r\n              &lt;select className=\"form-select mb-2\"\r\n                id=\"businessStructureSelect\"\r\n                onChange={(e) =&gt; setBusinessStructure(e.target.value.toString())}&gt;\r\n                &lt;option value=\"Not Selected\"&gt;\r\n                  {t(\"ui.storefront.common.Select\")}...&lt;/option&gt;\r\n                &lt;option value=\"Private Corporation\"\r\n                  &gt;Private Corporation&lt;/option&gt;\r\n                &lt;option value=\"Public Corporation\"\r\n                  &gt;Public Corporation&lt;/option&gt;\r\n                &lt;option value=\"Consortium\"\r\n                  &gt;Consortium&lt;/option&gt;\r\n                &lt;option value=\"Institution\"\r\n                  &gt;Institution&lt;/option&gt;\r\n                &lt;option value=\"Government\"\r\n                  &gt;Government&lt;/option&gt;\r\n              &lt;/select&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;Form.Control\r\n                  type=\"text\"\r\n                  value={businessStructureAlt}\r\n                  placeholder=\"Other Business Structure\"\r\n                  onChange={e =&gt; setBusinessStructureAlt(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-4\"&gt;\r\n              &lt;label&gt;&lt;b&gt;Number of Business Units:&lt;/b&gt;&lt;/label&gt;\r\n              &lt;Form.Control\r\n                type=\"number\"\r\n                value={noOfBusinessUnits}\r\n                step={1}\r\n                min={1}\r\n                onChange={e =&gt; setNoOfBusinessUnits(+e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-4\"&gt;\r\n              &lt;label&gt;&lt;b&gt;Number of Years in Business:&lt;/b&gt;&lt;/label&gt;\r\n              &lt;Form.Control\r\n                type=\"number\"\r\n                value={noOfYearsInBusiness}\r\n                step={1}\r\n                min={1}\r\n                onChange={e =&gt; setNoOfYearsInBusiness(+e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n        &lt;/Col&gt;\r\n        {/** Main Right Col */}\r\n        &lt;Col xs={6}&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={website}\r\n                placeholder=\"Website\"\r\n                onChange={e =&gt; setWebsite(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-3\"&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={usFederalIDnoSSnoTaxId}\r\n                placeholder=\"US Federal ID Number, SS#, Tax ID\"\r\n                onChange={e =&gt; setUsFederalIDnoSSnoTaxId(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-3\"&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={dunsAndBradstreetNo}\r\n                placeholder=\"Dun &amp; Bradstreet Number\"\r\n                onChange={e =&gt; setDunsAndBradstreetNo(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-3\"&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={industrySegment}\r\n                placeholder=\"Industry Segment\"\r\n                onChange={e =&gt; setIndustrySegment(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-3\"&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={naicsCodes}\r\n                placeholder=\"NAICS Code(s)\"\r\n                onChange={e =&gt; setNaicsCodes(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} className=\"mt-4\"&gt;\r\n              &lt;input\r\n                id=\"multinationalEnterpriseCheckbox\"\r\n                className=\"form-check-input fs-5\"\r\n                type=\"checkbox\"\r\n                checked={multinationalEnterprise_IsChecked}\r\n                onChange={() =&gt; setMultinationalEnterprise_IsChecked(prev =&gt; !prev)}\r\n              /&gt;\r\n              &lt;span&gt;  Are you a multi-national enterprise?&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n        &lt;/Col&gt;\r\n        {/** List of Branches */}\r\n        &lt;Col xs={12} className=\"mt-4\"&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={6}&gt;\r\n              &lt;span&gt;&lt;b&gt;*Please attach a list of any Locations of your Branch offices&lt;/b&gt;&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={6} className=\"form-group\"&gt;\r\n              &lt;FileUploadWidget\r\n                uploadType={FileEntityType.ImportUser}\r\n                uploadCallbackRich={(e: any) =&gt; {\r\n                  setBranchLocationFiles(e);\r\n                }}\r\n              /&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n        &lt;/Col&gt;\r\n        {/** Explanation of Use of Products */}\r\n        &lt;Col xs={12} className=\"mt-4\"&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;span&gt;&lt;b&gt;Explanation of Your Use of our Products: (responses required for all items in a, b &amp; c)*:&lt;/b&gt;&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row className=\"mt-2\"&gt;\r\n            &lt;Col xs={1}&gt;\r\n              &lt;span&gt;a)&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={11}&gt;\r\n              &lt;Row&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                    id=\"explanationOfUse_Laboratory_Checkbox\"\r\n                    className=\"form-check-input fs-5\"\r\n                    type=\"checkbox\"\r\n                    checked={explanationOfUse_Laboratory_IsChecked}\r\n                    onChange={() =&gt; setExplanationOfUse_Laboratory_IsChecked(prev =&gt; !prev)}\r\n                  /&gt;\r\n                  &lt;span&gt;  Laboratory: Analytical/Quality/Research &amp; Development&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                    id=\"explanationOfUse_DistributeToCustomers_Checkbox\"\r\n                    className=\"form-check-input fs-5\"\r\n                    type=\"checkbox\"\r\n                    checked={explanationOfUse_DistributionToCustomers_IsChecked}\r\n                    onChange={() =&gt; setExplanationOfUse_DistributionToCustomers_IsChecked(prev =&gt; !prev)}\r\n                  /&gt;\r\n                  &lt;span&gt;  Used for distribution of GFS Product Brands to my customers&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                      id=\"explanationOfUse_Manufacturing_Checkbox\"\r\n                      className=\"form-check-input fs-5\"\r\n                      type=\"checkbox\"\r\n                      checked={explanationOfUse_Manufacturing_IsChecked}\r\n                      onChange={() =&gt; setExplanationOfUse_Manufacturing_IsChecked(prev =&gt; !prev)}\r\n                    /&gt;\r\n                    &lt;span&gt;  Used in a manufacturing process&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                      id=\"explanationOfUse_Resale_Checkbox\"\r\n                      className=\"form-check-input fs-5\"\r\n                      type=\"checkbox\"\r\n                      checked={explanationOfUse_Resale_IsChecked}\r\n                      onChange={() =&gt; setExplanationOfUse_Resale_IsChecked(prev =&gt; !prev)}\r\n                    /&gt;\r\n                    &lt;span&gt;  Will re-pack and/or re-label GFS product(s) for resale purposes&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n              &lt;/Row&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row className=\"mt-2\"&gt;\r\n            &lt;Col xs={1}&gt;\r\n              &lt;span&gt;b)&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={11}&gt;\r\n              &lt;Row&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                    id=\"certify_ProfessionallyStaffed_Checkbox\"\r\n                    className=\"form-check-input fs-5\"\r\n                    type=\"checkbox\"\r\n                    checked={certify_ProfessionallyStaffed_IsChecked}\r\n                    onChange={() =&gt; setCertify_ProfessionallyStaffed_IsChecked(prev =&gt; !prev)}\r\n                  /&gt;\r\n                  &lt;span&gt;  &lt;i&gt;I certify that we have professionally staffed laboratories and production facilities with legitimate and lawful uses for chemicals.&lt;/i&gt;&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                    id=\"certify_NotResell_Checkbox\"\r\n                    className=\"form-check-input fs-5\"\r\n                    type=\"checkbox\"\r\n                    checked={certify_NotResell_IsChecked}\r\n                    onChange={() =&gt; setCertify_NotResell_IsChecked(prev =&gt; !prev)}\r\n                  /&gt;\r\n                  &lt;span&gt;  &lt;i&gt;I certify that we will not resell items purchased from GFS with the GFS Chemicals product label affixed thereto (no distribution).&lt;/i&gt;&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n              &lt;/Row&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row className=\"mt-2\"&gt;\r\n            &lt;Col xs={1}&gt;\r\n              &lt;span&gt;c)&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={11}&gt;\r\n              &lt;Row&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                    id=\"certify_UsaDomiciledCo_Checkbox\"\r\n                    className=\"form-check-input fs-5\"\r\n                    type=\"checkbox\"\r\n                    checked={certify_UsaDomiciledCo_IsChecked}\r\n                    onChange={() =&gt; setCertify_UsaDomiciledCo_IsChecked(prev =&gt; !prev)}\r\n                  /&gt;\r\n                  &lt;span&gt;  If located in the U.S.: &lt;i&gt;I certify that we are U.S. domiciled* company and will abide by all US Federal laws regarding exports of materials and IP.&lt;/i&gt;&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n                &lt;Col xs={12} className=\"mt-1\"&gt;\r\n                  &lt;input\r\n                    id=\"certify_IntlDomiciledCo_Checkbox\"\r\n                    className=\"form-check-input fs-5\"\r\n                    type=\"checkbox\"\r\n                    checked={certify_IntlDomiciledCo_IsChecked}\r\n                    onChange={() =&gt; setCertify_IntlDomiciledCo_IsChecked(prev =&gt; !prev)}\r\n                  /&gt;\r\n                  &lt;span&gt;  If located internationally: &lt;i&gt;I certify that we are a/an domiciled* company and will abide by all the laws and regulations of this jurisdiction and all UN treaties, trade agreements, embargos and trade restrictions as we may be legally bound to follow.&lt;/i&gt;&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n                &lt;Col xs={12} className=\"mt-2\" hidden={!certify_IntlDomiciledCo_IsChecked}&gt;\r\n                  {countries &amp;&amp; Array.isArray(countries) &amp;&amp; &lt;select className=\"form-select mb-2\"\r\n                    id=\"IntlDomiciledCo_Country_Select\"\r\n                    onChange={(e) =&gt; setIntlDomiciledCo_SelectedCountry(e.target.value.toString())}&gt;\r\n                    &lt;option value=\"Not Selected\"&gt;\r\n                      {t(\"ui.storefront.common.Select\")}...&lt;/option&gt;\r\n                    {countries?.map(x =&gt; {\r\n                      return &lt;option key={x.Name} value={x.Name}&gt;{x.Name}&lt;/option&gt;})}\r\n                  &lt;/select&gt;}\r\n                &lt;/Col&gt;\r\n              &lt;/Row&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12} className=\"mt-2\"&gt;\r\n              &lt;span&gt;&lt;i&gt;&lt;b&gt;*Domicile&lt;/b&gt; - Geographical region or jurisdiction where the principal party (headquarters) is located.&lt;/i&gt;&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      {/** Warranty */}\r\n      &lt;Row className=\"mt-4\"&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;h3&gt;GFS Warranty&lt;/h3&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;p&gt;GFS products are warranted to conform, on the date of shipment, to the GFS specifications in effect at the time of product manufacture. The GFS warranty obligation is limited to either replacement of non-conforming product or the refund of the purchase price. GFS products are not certified for or intended for direct use in food, drug, or cosmetic applications. Any other warranties, express or implied, that assume merchantability or fitness for a particular purpose are disclaimed. Under no circumstances shall GFS Chemicals, Inc. be liable for indirect, secondary, or consequential damages of any nature, including without limitation loss of profits or business interruption.&lt;/p&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col className=\"mt-4\" xs={12}&gt;\r\n          &lt;h3&gt;Limitation on GFS Product Use, Warranties and Liability&lt;/h3&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;p&gt;Unless otherwise specifically certified in writing by the President of GFS Chemicals, Inc. (GFS), GFS products are not intended, approved or authorized for human or animal consumption nor for direct use in any food, drug or cosmetic applications. GFS products are warranted to meet our specifications as set forth in the GFS Lot Analysis or other Company literature specifically relating thereto only.&lt;/p&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col className=\"mt-4\" xs={12}&gt;\r\n          &lt;p className=\"text-center\"&gt;Review our full Warranty and Limitations Statement at&lt;br/&gt;&lt;a href=\"http://www.gfschemicals.com/Terms-and-Conditions\" target=\"_blank\"&gt;gfschemicals.com/Terms-and-Conditions&lt;/a&gt;.&lt;/p&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      {/** Verification */}\r\n      &lt;Row className=\"mt-4\"&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;span&gt;&lt;b&gt;&lt;i&gt;I verify that the information provided by us is true and correct to the best of my knowledge.&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;\r\n        &lt;/Col&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={6}&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={fullLegalName}\r\n                placeholder=\"Your Full Legal Name*\"\r\n                required={true}\r\n                onChange={e =&gt; setFullLegalName(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={6}&gt;\r\n              &lt;Form.Control\r\n                type=\"text\"\r\n                value={title}\r\n                placeholder=\"Title\"\r\n                required={true}\r\n                onChange={e =&gt; setTitle(e.target.value)} /&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      {/** Signature */}\r\n      &lt;Row className=\"mt-4\"&gt;\r\n        &lt;div&gt;\r\n          &lt;label htmlFor=\"signature\"&gt;&lt;b&gt;Signature*:&lt;/b&gt;&lt;/label&gt;\r\n          &lt;SignatureCanvas\r\n            ref={sigCanvas}\r\n            canvasProps={{\r\n              id: 'signature',\r\n              style: {\r\n                width: '100%',\r\n                height: '200px',\r\n                border: '1px solid #000',\r\n                pointerEvents: viewState.running || uploadedSignature ? 'none' : 'auto',\r\n              },\r\n            }}\r\n          /&gt;\r\n        &lt;/div&gt;\r\n        &lt;div\r\n          style={{\r\n            display: 'flex',\r\n            justifyContent: 'space-between',\r\n            alignItems: 'center',\r\n            width: '100%',\r\n          }}\r\n        &gt;\r\n          &lt;Button variant=\"danger\" onClick={clearSignature} disabled={viewState.running}&gt;\r\n            Clear Signature\r\n          &lt;/Button&gt;\r\n          &lt;Button variant=\"success\" onClick={saveSignature} disabled={viewState.running || !!uploadedSignature}&gt;\r\n            Save Signature\r\n          &lt;/Button&gt;\r\n        &lt;/div&gt;\r\n      &lt;/Row&gt;\r\n      {/** Validation Errors */}\r\n      {validationErrors?.length &gt; 0 &amp;&amp; &lt;Row className=\"mt-4\"&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;div className=\"alert alert-danger\"&gt;\r\n            &lt;p&gt;The following fields require attention:&lt;/p&gt;\r\n            &lt;ul&gt;\r\n              {validationErrors.map(x =&gt; {\r\n                return &lt;li key={x}&gt;{x}&lt;/li&gt;\r\n              })}\r\n            &lt;/ul&gt;\r\n          &lt;/div&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;}\r\n      {/** Submit */}\r\n      &lt;Row className=\"my-4\"&gt;\r\n        &lt;Col xs={6}&gt;\r\n          &lt;Button\r\n            variant=\"primary\"\r\n            className=\"btn-block w-100\"\r\n            id=\"btnSubmit_registrationStepBusinessAccountSetup\"\r\n            name=\"btnSubmit_registrationStepBusinessAccountSetup\"\r\n            onClick={() =&gt; {\r\n              const validity = validateFields();\r\n              if (validity[0]) {\r\n                onCompleteCustomStep(attributes);\r\n              } else {\r\n                setValidationErrors(validity[1]);\r\n              }\r\n            }}&gt;\r\n            {t(\"ui.storefront.registration.ContinueToConfirmation\")}\r\n          &lt;/Button&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n    &lt;/Col&gt;\r\n  );\r\n};\r\n","import { Col } from \"react-bootstrap\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { CheckboxFormGroup } from \"src/_shared/forms/formGroups\";\r\n\r\ninterface IRegistrationConfirmationStepProps {\r\n  submitRegistrationForm: Function;\r\n  parentRunning: boolean;\r\n  continueText: string;\r\n}\r\n\r\nexport const RegistrationConfirmationStep = (\r\n  props: IRegistrationConfirmationStepProps\r\n): JSX.Element =&gt; {\r\n  const { submitRegistrationForm, parentRunning, continueText } = props;\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    formState: { errors }\r\n  } = useForm({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\"\r\n  });\r\n\r\n  const onSubmit = (_data: unknown) =&gt; {\r\n    submitRegistrationForm();\r\n  };\r\n\r\n  return (\r\n    &lt;form className=\"row position-relative\" onSubmit={handleSubmit(onSubmit)}&gt;\r\n      {parentRunning ? &lt;LoadingWidget overlay={true} /&gt; : null}\r\n      &lt;Col xs={12}&gt;\r\n        &lt;CheckboxFormGroup\r\n          formIdentifier=\"ckAgreed\"\r\n          register={register}\r\n          errors={errors}\r\n          checkboxOptions={[\r\n            {\r\n              identifier: \"ckAgreedTerms\",\r\n              labelKey: \"ui.storefront.user.registration.IAgreeToTheTermsOfUseForThisWebsite\",\r\n              labelText: \"I agree to the terms of use for this website\",\r\n              required: true,\r\n              requiredMessage: \"You are required to agree to the terms\"\r\n            }\r\n          ]}\r\n        /&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;input\r\n          type=\"submit\"\r\n          className=\"btn btn-primary my-3\"\r\n          title={continueText}\r\n          id=\"btnSubmit_registrationStepConfirmation\"\r\n          name=\"btnSubmit_registrationStepConfirmation\"\r\n        /&gt;\r\n      &lt;/Col&gt;\r\n    &lt;/form&gt;\r\n  );\r\n};\r\n","import { Fragment } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Col, Row } from \"react-bootstrap\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\ninterface IRegistrationCompletedStepProps {\r\n  cefConfig: CEFConfig;\r\n  emailRegisteredWith: string;\r\n}\r\n\r\nexport const RegistrationCompletedStep = (props: IRegistrationCompletedStepProps): JSX.Element =&gt; {\r\n  const { emailRegisteredWith, cefConfig } = props;\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    &lt;Fragment&gt;\r\n      &lt;Row as={Alert}\r\n        variant=\"success\"\r\n        className=\"text-center align-items-center pt-4\"&gt;\r\n        &lt;Col xs={12} className=\"mb-3\"&gt;\r\n          &lt;p className=\"mb-0\"&gt;\r\n            &lt;strong&gt;{t(\"ui.storefront.common.Success.Exclamation\")}&lt;/strong&gt;\r\n             \r\n            &lt;span&gt;{t(\"ui.storefront.user.registration.Success.UsernameMessage\")}&lt;/span&gt;\r\n             \r\n            &lt;strong&gt;{emailRegisteredWith}&lt;/strong&gt;\r\n             \r\n          &lt;/p&gt;\r\n          {cefConfig.authProviderMFAEnabled\r\n            ? &lt;&gt;\r\n              &lt;span&gt;{t(\"ui.storefront.user.registration.mfaMessage\")}&lt;/span&gt;\r\n            &lt;/&gt;\r\n            : &lt;span&gt;{t(\"ui.storefront.user.registration.Success1.Message\")}&lt;/span&gt;}\r\n        &lt;/Col&gt;\r\n        {cefConfig.authProviderMFAEnabled\r\n          ? null\r\n          : &lt;&gt;\r\n            &lt;Col xs={12} className=\"mb-2\"&gt;\r\n              &lt;span className=\"d-block\"&gt;{\"What's next?\"}&lt;/span&gt;\r\n            &lt;/Col&gt;\r\n            {cefConfig.featureSet.payments.wallet.enabled\r\n              ? &lt;&gt;\r\n                &lt;Col md={4} xl={12}&gt;\r\n                  &lt;span&gt;\r\n                    {\"Save time at checkout by creating your\"} \r\n                    &lt;a href=\"/dashboard/wallet\"&gt;{t(\"ui.storefront.userDashboard2.userDashboard.Wallet\")}&lt;/a&gt;\r\n                  &lt;/span&gt;\r\n                &lt;/Col&gt;\r\n                &lt;Col md={4} xl={12}&gt;\r\n                  &lt;span&gt;{\"OR\"}&lt;/span&gt;\r\n                &lt;/Col&gt;\r\n              &lt;/&gt;\r\n              : null}\r\n            &lt;Col md={4} xl={12}&gt;\r\n              &lt;div className=\"d-flex flex-column justify-content-center align-items-center\"&gt;\r\n                &lt;span&gt;{\"Get right to shopping!\"}&lt;/span&gt;\r\n                &lt;a href=\"/catalog\"&gt;{t(\"ui.storefront.cart.continueShopping\")}&lt;/a&gt;\r\n              &lt;/div&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/&gt;}\r\n      &lt;/Row&gt;\r\n    &lt;/Fragment&gt;\r\n  );\r\n};\r\n","import { Anchor, Col } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport const RegistrationHeader = (): JSX.Element =&gt; {\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    &lt;Col xs={12} className=\"text-center\"&gt;\r\n      &lt;h1 className=\"mb-2\"&gt;\r\n        &lt;span data-sid=\"txtRegistrationHeaderTitle\"&gt;{t(\"ui.storefront.user.registration.RegisterWith\")}&lt;/span&gt;{\" \"}\r\n        &lt;span data-sid=\"txtRegistrationHeaderCompany\"&gt;{cefConfig?.companyName}&lt;/span&gt;\r\n      &lt;/h1&gt;\r\n      &lt;p&gt;\r\n        &lt;span data-sid=\"txtRegistrationHeaderPrivacyMessage1\"&gt;{t(\"ui.storefront.user.registration.YourPrivacyIsImportantToUsPleaseReadOur\")}&lt;/span&gt;\r\n         \r\n        &lt;Anchor href={corsLink(cefConfig, cefConfig?.routes.privacy.root)}&gt;\r\n          &lt;span data-sid=\"txtRegistrationHeaderPrivacyMessage2\"&gt;{t(\"ui.storefront.user.registration.PrivacyStatement\")}&lt;/span&gt;\r\n        &lt;/Anchor&gt;\r\n         \r\n        &lt;span data-sid=\"txtRegistrationHeaderPrivacyMessage3\"&gt;\r\n          {t(\r\n            \"ui.storefront.user.registration.RegardingTheFullTermsOfWhyWeCollectThisDataAndHowYourInformationWillBeUsed\"\r\n          )}\r\n        &lt;/span&gt;\r\n      &lt;/p&gt;\r\n    &lt;/Col&gt;\r\n  );\r\n};\r\n","import { Fragment, useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Container, Row } from \"react-bootstrap\";\r\n// TODO: import { useHistory } from \"react-router-dom\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport { RegisterNewUserDto, RegisterNewUserToAccountDto } from \"src/_api/cvApi.Authentication\";\r\nimport { RegistrationStepsHeader } from \"src/Authentication/Registration/steps/_shared/RegistrationStepsHeader\";\r\nimport {\r\n  IRegistrationStep,\r\n  registrationStepFactory\r\n} from \"src/Authentication/Registration/steps/registrationSteps\";\r\nimport { RegistrationBasicInfoStep } from \"src/Authentication/Registration/steps/basicInfo/RegistrationBasicInfoStep\";\r\nimport {\r\n  RegistrationAddressBookStep\r\n} from \"./steps/addressBook/RegistrationAddressBookStep\";\r\nimport { RegistrationWalletStep } from \"src/Authentication/Registration/steps/wallet/RegistrationWalletStep\";\r\nimport { RegistrationCustomStep } from \"src/Authentication/Registration/steps/custom/RegistrationCustomStep\";\r\nimport {\r\n  RegistrationConfirmationStep\r\n} from \"src/Authentication/Registration/steps/confirmation/RegistrationConfirmationStep\";\r\nimport { RegistrationCompletedStep } from \"src/Authentication/Registration/steps/completed/RegistrationCompletedStep\";\r\nimport {\r\n  IRegistrationProps,\r\n  IRegistrationStepBasicInfoData\r\n} from \"src/Authentication/Registration/_registrationTypes\";\r\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\r\nimport { AccountContactModel, ContactModel, SerializableAttributesDictionary, SerializableAttributeObject } from \"src/_api/cvApi._DtoClasses\";\r\nimport { RegistrationHeader } from \"src/Authentication/Registration/RegistrationHeader\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { LoginResponseStatus, useAuthFactory } from \"src/_redux/factories/authFactory\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\n\r\nexport const Registration = (props: IRegistrationProps): JSX.Element =&gt; {\r\n  const [ allSteps, setAllSteps ] = useState&lt;IRegistrationStep[]&gt;(null);\r\n  const [ step, setStep ] = useState(1);\r\n  const [ basicInfoStepData, setStepBasicInfoStepData ]\r\n    = useState&lt;IRegistrationStepBasicInfoData&gt;({\r\n      emEmailRegistration: \"\",\r\n      emUsername: \"\",\r\n      firstNameRegistration: \"\",\r\n      lastNameRegistration: \"\",\r\n      pwPasswordRegistration: \"\",\r\n      telPhoneRegistration: \"\",\r\n      customerNumberRegistration: \"\"\r\n    });\r\n  const [ stepAddressBookBillingData, setStepAddressBookBillingData ]\r\n    = useState&lt;AccountContactModel&gt;(null);\r\n  const [ stepAddressBookShippingData, setStepAddressBookShippingData ]\r\n    = useState&lt;AccountContactModel&gt;(null);\r\n  const [ addressIsAbleToReceiveChemicals, setAddressIsAbleToReceiveChemicals ] \r\n    = useState&lt;boolean&gt;(false);\r\n  const [ , setStepWalletData ] = useState&lt;any&gt;();\r\n  const [ stepCustomData, setStepCustomData ] = useState&lt;any&gt;();\r\n  const [ showLoginModal, setShowLoginModal ] = useState&lt;boolean&gt;();\r\n  const [ mapBillingOrShippingAddress, setMapBillingOrShippingAddress ] = useState&lt;boolean&gt;(true);\r\n\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const { t } = useTranslation();\r\n  // TODO: const history = useHistory();\r\n  const cefConfig = useCefConfig();\r\n  const authFactory = useAuthFactory();\r\n  const currentUser = useCurrentUser();\r\n\r\n  useEffect(() =&gt; {\r\n    if (!allSteps) {\r\n      return;\r\n    }\r\n    if (currentUser.ID &gt; 0 &amp;&amp; step &lt; allSteps.length) {\r\n      setStep(allSteps.length);\r\n    }\r\n  }, [ currentUser, allSteps ]);\r\n\r\n  const proceed = (skipToConfirm: boolean = false): void =&gt; {\r\n    if (skipToConfirm) {\r\n        setStep(allSteps.length - 1);\r\n    } else {\r\n        setStep(s =&gt; s + 1);\r\n    }\r\n  };\r\n\r\n  const onCompleteBasicInfoStep = (\r\n    data: IRegistrationStepBasicInfoData\r\n  ): void =&gt; {\r\n    setStepBasicInfoStepData(data);\r\n    if (data.customerNumberRegistration) {\r\n      proceed(true);\r\n    } else {\r\n      proceed();\r\n    }\r\n  };\r\n\r\n  const onCompleteAddressBookStep = (\r\n    billingAddress: AccountContactModel,\r\n    shippingAddress: AccountContactModel,\r\n    continueToConfirmation: boolean,\r\n    addressIsAbleToReceiveChemicals: boolean,\r\n  ): void =&gt; {\r\n    setStepAddressBookBillingData(billingAddress);\r\n    setStepAddressBookShippingData(shippingAddress);\r\n    setAddressIsAbleToReceiveChemicals(addressIsAbleToReceiveChemicals);\r\n    proceed(continueToConfirmation);\r\n  };\r\n\r\n  const onCompleteWalletStep = (walletData: any): void =&gt; {\r\n    setStepWalletData(walletData);\r\n    proceed();\r\n  };\r\n\r\n  const onCompleteCustomStep = (customData: any): void =&gt; {\r\n    setStepCustomData(customData);\r\n    proceed();\r\n  };\r\n\r\n  const submitRegistrationForm = () =&gt; {\r\n    if (basicInfoStepData.customerNumberRegistration) {\r\n      registerToExistingAcct();\r\n    } else {\r\n      registerNormal();\r\n    }\r\n  };\r\n\r\n  const registerToExistingAcct = () =&gt; {\r\n    setRunning();\r\n    let contact: ContactModel = {\r\n      Active: true,\r\n      AddressID: null,\r\n      AddressKey: null,\r\n      CreatedDate: new Date(),\r\n      CustomKey: basicInfoStepData.emEmailRegistration,\r\n      Email1: basicInfoStepData.emEmailRegistration,\r\n      FirstName: basicInfoStepData.firstNameRegistration,\r\n      ID: null,\r\n      LastName: basicInfoStepData.lastNameRegistration,\r\n      TypeID: 1,\r\n      TypeKey: \"General\"\r\n    };\r\n    const dto: RegisterNewUserToAccountDto = {\r\n      Active: true,\r\n      Contact: contact,\r\n      ContactID: null,\r\n      CreatedDate: new Date(),\r\n      CustomKey: basicInfoStepData.emEmailRegistration,\r\n      Email: basicInfoStepData.emEmailRegistration,\r\n      EmailConfirmed: false,\r\n      ID: null,\r\n      IsApproved: false,\r\n      IsSMSAllowed: false,\r\n      OverridePassword: basicInfoStepData.pwPasswordRegistration,\r\n      PhoneNumberConfirmed: false,\r\n      RequirePasswordChangeOnNextLogin: false,\r\n      Status: null,\r\n      StatusID: null,\r\n      StatusKey: \"Registered\",\r\n      StatusName: null,\r\n      TwoFactorEnabled: false,\r\n      Type: null,\r\n      TypeID: null,\r\n      TypeKey: null,\r\n      TypeName: \"Customer\",\r\n      UseAutoPay: null,\r\n      UserName: basicInfoStepData.emEmailRegistration,\r\n      AccountKey: basicInfoStepData.customerNumberRegistration\r\n    };\r\n    authFactory.registerToAcct(dto)\r\n      .then(() =&gt; authFactory.login({ Username: dto.UserName, Password: dto.OverridePassword }))\r\n      .then(r =&gt; {\r\n        proceed();\r\n        finishRunning();\r\n        if (r.Status === LoginResponseStatus.Challenge) {\r\n          setShowLoginModal(true);\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  const registerNormal = () =&gt; {\r\n    setRunning();\r\n    let contact: ContactModel = {\r\n      Active: true,\r\n      AddressID: null,\r\n      AddressKey: null,\r\n      CreatedDate: new Date(),\r\n      CustomKey: basicInfoStepData.emEmailRegistration,\r\n      Email1: basicInfoStepData.emEmailRegistration,\r\n      FirstName: basicInfoStepData.firstNameRegistration,\r\n      ID: null,\r\n      LastName: basicInfoStepData.lastNameRegistration,\r\n      TypeID: 1,\r\n      TypeKey: \"General\"\r\n    };\r\n    if (mapBillingOrShippingAddress) {\r\n      if (stepAddressBookBillingData?.Slave) {\r\n        contact = { ...contact, ...stepAddressBookBillingData.Slave };\r\n        if (stepAddressBookBillingData.Slave.Address) {\r\n          contact.Address = {\r\n            ...stepAddressBookBillingData.Slave.Address,\r\n            CustomKey: basicInfoStepData.emEmailRegistration\r\n          };\r\n        }\r\n      }\r\n    } else if (stepAddressBookShippingData?.Slave) {\r\n      contact = { ...contact, ...stepAddressBookShippingData.Slave };\r\n      if (stepAddressBookShippingData.Slave.Address) {\r\n        contact.Address = {\r\n          ...stepAddressBookShippingData.Slave.Address,\r\n          CustomKey: basicInfoStepData.emEmailRegistration\r\n        };\r\n      }\r\n    }\r\n    let attributes: SerializableAttributesDictionary = {};\r\n    if (stepCustomData) {\r\n      attributes = stepCustomData;\r\n    }\r\n    const canReceiveChemicals = {\r\n      ID: 0,\r\n      Key: \"BAF_initialShippingIsAbleToReceiveChemicalsByQualifiedPersonnel\",\r\n      Value: addressIsAbleToReceiveChemicals.toString(),\r\n    };\r\n    attributes[\"BAF_initialShippingIsAbleToReceiveChemicalsByQualifiedPersonnel\"] = canReceiveChemicals;\r\n    const dto: RegisterNewUserDto = {\r\n      Active: true,\r\n      AddressBook: [],\r\n      Contact: contact,\r\n      ContactID: null,\r\n      CreatedDate: new Date(),\r\n      CustomKey: basicInfoStepData.emEmailRegistration,\r\n      Email: basicInfoStepData.emEmailRegistration,\r\n      EmailConfirmed: false,\r\n      ID: null,\r\n      InService: null,\r\n      IsApproved: false,\r\n      IsSMSAllowed: false,\r\n      OverridePassword: basicInfoStepData.pwPasswordRegistration,\r\n      PhoneNumberConfirmed: false,\r\n      RequirePasswordChangeOnNextLogin: false,\r\n      SerializableAttributes: attributes,\r\n      Status: null,\r\n      StatusID: null,\r\n      StatusKey: \"Registered\",\r\n      StatusName: null,\r\n      TwoFactorEnabled: false,\r\n      Type: null,\r\n      TypeID: null,\r\n      TypeKey: null,\r\n      TypeName: \"Customer\",\r\n      UseAutoPay: null,\r\n      UserName: basicInfoStepData.emEmailRegistration\r\n    };\r\n    if (stepAddressBookBillingData) {\r\n      dto.AddressBook.push(stepAddressBookBillingData);\r\n    }\r\n    if (stepAddressBookShippingData) {\r\n      dto.AddressBook.push(stepAddressBookShippingData);\r\n    }\r\n    authFactory.register(dto)\r\n      .then(() =&gt; authFactory.login({ Username: dto.UserName, Password: dto.OverridePassword }))\r\n      .then(r =&gt; {\r\n        proceed();\r\n        finishRunning();\r\n        if (r.Status === LoginResponseStatus.Challenge) {\r\n          setShowLoginModal(true);\r\n        }\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig || allSteps) {\r\n      return;\r\n    }\r\n    const stepsToShow = registrationStepFactory(cefConfig);\r\n    const fullSteps = stepsToShow.map((stepI, index) =&gt; {\r\n      const continueText = t(stepsToShow[index + 1]?.continueTextKey ?? \"\");\r\n      return {\r\n        ...stepI,\r\n        continueText\r\n      };\r\n    });\r\n    setMapBillingOrShippingAddress(cefConfig.featureSet.addressBook.mapBillingOrShippingAddress);\r\n    setAllSteps(fullSteps);\r\n  }, [ cefConfig ]);\r\n\r\n  return (\r\n    &lt;Container&gt;\r\n      &lt;Row&gt;\r\n        &lt;RegistrationHeader /&gt;\r\n        {viewState.hasError\r\n          &amp;&amp; &lt;ErrorView error={viewState.errorMessage} /&gt;\r\n        }\r\n        &lt;Col xs={12}&gt;\r\n          {allSteps\r\n            &amp;&amp; allSteps.map((stepData, index) =&gt; {\r\n              const { continueText, titleKey: title } = stepData;\r\n              let component = null;\r\n              switch (stepData.name) {\r\n                case ServiceStrings.registration.steps.basicInfo:\r\n                  component\r\n                    = &lt;RegistrationBasicInfoStep\r\n                      key={stepData.name}\r\n                      cefConfig={cefConfig}\r\n                      continueText={continueText}\r\n                      onCompleteBasicInfoStep={onCompleteBasicInfoStep}\r\n                    /&gt;;\r\n                  break;\r\n                case ServiceStrings.registration.steps.addressBook:\r\n                  component\r\n                    = &lt;RegistrationAddressBookStep\r\n                      key={stepData.name}\r\n                      continueText={continueText}\r\n                      onCompleteAddressBookStep={onCompleteAddressBookStep}\r\n                      basicInfoStepData={basicInfoStepData}\r\n                    /&gt;;\r\n                  break;\r\n                case ServiceStrings.registration.steps.wallet:\r\n                  component\r\n                    = &lt;RegistrationWalletStep\r\n                      key={stepData.name}\r\n                      onCompleteWalletStep={onCompleteWalletStep}\r\n                      continueText={continueText}\r\n                    /&gt;;\r\n                  break;\r\n                case ServiceStrings.registration.steps.custom:\r\n                  component\r\n                    = &lt;RegistrationCustomStep\r\n                      key={stepData.name}\r\n                      onCompleteCustomStep={onCompleteCustomStep}\r\n                      continueText={continueText}\r\n                    /&gt;;\r\n                  break;\r\n                case ServiceStrings.registration.steps.confirmation:\r\n                  component\r\n                    = &lt;RegistrationConfirmationStep\r\n                      key={stepData.name}\r\n                      continueText={continueText}\r\n                      submitRegistrationForm={submitRegistrationForm}\r\n                      parentRunning={viewState.running}\r\n                    /&gt;;\r\n                  break;\r\n                case ServiceStrings.registration.steps.completed:\r\n                  component\r\n                    = &lt;RegistrationCompletedStep\r\n                      cefConfig={cefConfig}\r\n                      key={stepData.name}\r\n                      emailRegisteredWith={\r\n                        basicInfoStepData ? basicInfoStepData.emEmailRegistration : \"\"\r\n                      }\r\n                    /&gt;;\r\n                  break;\r\n                default:\r\n                  console.error(\"Failed to find step for registration in cefConfig\");\r\n                  break;\r\n              }\r\n              return (\r\n                &lt;Fragment key={title}&gt;\r\n                  &lt;Row&gt;\r\n                    &lt;Col xs={12} sm=\"auto\"&gt;\r\n                      &lt;RegistrationStepsHeader\r\n                        valid={step &gt;= index + 2 || currentUser.ID &gt; 0}\r\n                        titleKey={title}\r\n                      /&gt;\r\n                      &lt;hr /&gt;\r\n                    &lt;/Col&gt;\r\n                  &lt;/Row&gt;\r\n                  {step === index + 1 &amp;&amp; component}\r\n                &lt;/Fragment&gt;\r\n              );\r\n            })}\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      &lt;LoginModal\r\n        show={showLoginModal}\r\n        onConfirm={() =&gt; {\r\n          setShowLoginModal(false);\r\n        }}\r\n        onCancel={() =&gt; setShowLoginModal(false)}\r\n      /&gt;\r\n    &lt;/Container&gt;\r\n  );\r\n};\r\n","/**\r\n * @file framework/store/user/registration/steps/registrationSteps.ts\r\n * @author Copyright (c) 2020-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Register for the site: The steps of the wizard\r\n */\r\n\r\nimport { CEFConfig, IRegistrationStepConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\n\r\nexport interface IRegistrationStep extends IRegistrationStepConfig {\r\n  // Properties\r\n  readonly name: string;\r\n  /**\r\n   * The text that would be on the button of the preceding step which would lead\r\n   * to this step\r\n   * @virtual\r\n   * @memberof IRegistrationStep\r\n   */\r\n  readonly continueTextKey: string;\r\n  readonly continueText?: string;\r\n  readonly titleKey: string;\r\n  invalid: boolean;\r\n  complete: boolean;\r\n  readonly order: number;\r\n  readonly index: number;\r\n  readonly templateURL: string;\r\n  component: Element | JSX.Element;\r\n  building: boolean;\r\n  // Functions\r\n  /**\r\n   * By default, no requirements should be checked, and just return a promise with\r\n   * value of true\r\n   * @virtual\r\n   * @returns {Promise&lt;boolean&gt;}\r\n   * @memberof IRegistrationStep\r\n   */\r\n  canEnable(): Promise&lt;boolean&gt;;\r\n  /**\r\n   * By default, no action is taken, and just return a promise with value of true\r\n   * @virtual\r\n   * @returns {Promise&lt;boolean&gt;}\r\n   * @memberof IRegistrationStep\r\n   */\r\n  initialize(): Promise&lt;boolean&gt;;\r\n  /**\r\n   * By default, no requirements should be checked, and just return a promise with\r\n   * value of true\r\n   * @returns {Promise&lt;boolean&gt;}\r\n   * @memberof IRegistrationStep\r\n   */\r\n  validate(): Promise&lt;boolean&gt;;\r\n  submit(): Promise&lt;boolean&gt;;\r\n  // Events\r\n  // &lt;None&gt;\r\n}\r\n\r\nexport abstract class RegistrationStep implements IRegistrationStep {\r\n  // Properties\r\n  building: boolean = true;\r\n\r\n  index: number;\r\n\r\n  show: boolean;\r\n\r\n  showButton: boolean;\r\n\r\n  abstract get name(): string;\r\n\r\n  invalid: boolean = true;\r\n\r\n  complete: boolean = false;\r\n\r\n  get continueTextKey(): string {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.register.sections[this.name].continueTextKey;\r\n  }\r\n\r\n  get titleKey(): string {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.register.sections[this.name].titleKey;\r\n  }\r\n\r\n  get order(): number {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.register.sections[this.name].order;\r\n  }\r\n\r\n  get templateURL(): string {\r\n    if (!this.name) {\r\n      return undefined;\r\n    }\r\n    return this.cefConfig.register.sections[this.name].templateURL;\r\n  }\r\n\r\n  // Functions\r\n\r\n  canEnable(): Promise&lt;boolean&gt; {\r\n    console.debug(\"RegistrationStep.canEnable()\");\r\n    if (!this.name) {\r\n      console.debug(\"RegistrationStep.canEnable() No name yet\");\r\n      return Promise.reject(new Error(\"RegistrationStep.canEnable() does not have a 'name' yet\"));\r\n    }\r\n    // Do Nothing\r\n    return Promise.resolve(this.cefConfig.register.sections[this.name]?.show);\r\n  }\r\n\r\n  initialize(): Promise&lt;boolean&gt; {\r\n    console.debug(\"RegistrationStep.initialize()\");\r\n    this.building = true;\r\n    this.building = false;\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  validate(): Promise&lt;boolean&gt; {\r\n    console.debug(\"RegistrationStep.validate()\");\r\n    // Do Nothing\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  submit(): Promise&lt;boolean&gt; {\r\n    console.debug(\"RegistrationStep.submit()\");\r\n    // Do Nothing\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  protected fullReject(reject: (...args: any[]) =&gt; void | any, toReturn: unknown): void {\r\n    console.debug(\"RegistrationStep.fullReject(reject, toReturn)\");\r\n    reject(toReturn);\r\n    this.building = false;\r\n  }\r\n\r\n  // Constructor\r\n  // eslint-disable-next-line no-empty-function, no-useless-constructor\r\n  constructor(protected readonly cefConfig: CEFConfig, public readonly component: Element | JSX.Element) { }\r\n}\r\n\r\nexport const registrationStepFactory = (cefConfig: CEFConfig): IRegistrationStep[] =&gt; {\r\n  if (!cefConfig) {\r\n    console.warn(\"Missing cefConfig in registrationStepFactory\");\r\n    return [];\r\n  }\r\n  return Object.keys(cefConfig.register.sections)\r\n    .reduce((steps, current) =&gt; {\r\n      const registrationStepConfig = cefConfig.register.sections[current];\r\n      if (cefConfig.debug) {\r\n        console.log(\r\n          \"cefConfig.register.sections\\n\",\r\n          cefConfig.register.sections,\r\n          \"\\n\",\r\n          \"current\\n\",\r\n          current,\r\n          \"\\n\",\r\n          \"ServiceStrings.registration.steps[current]\\n\",\r\n          ServiceStrings.registration.steps[current],\r\n          \"\\n\",\r\n          \"registrationStepConfig\\n\",\r\n          registrationStepConfig\r\n        );\r\n      }\r\n      if (registrationStepConfig &amp;&amp; registrationStepConfig.show) {\r\n        steps.push(registrationStepConfig);\r\n      }\r\n      return steps;\r\n    }, [])\r\n    .sort((a: IRegistrationStep, b: IRegistrationStep): number =&gt; a.order - b.order);\r\n};\r\n","import { Alert } from \"react-bootstrap\";\r\n\r\ninterface IMessageProps {\r\n  error?: boolean;\r\n  message: string;\r\n}\r\n\r\nexport const Message = (props: IMessageProps): JSX.Element =&gt; {\r\n  const { error, message } = props;\r\n\r\n  let alertClass = \"info\";\r\n  let icon = null;\r\n\r\n  if (typeof error === \"boolean\") {\r\n    alertClass = error ? \"danger\" : \"success\";\r\n    icon = error ? \"fa-exclamation-triangle\" : \"fa-check-circle\";\r\n  }\r\n\r\n  return (\r\n    &lt;Alert variant={alertClass} className=\"d-flex align-items-center\"&gt;\r\n      {icon ? &lt;i className={`fal ${icon} fa-2x fa-fw me-2`} /&gt; : null}\r\n      &lt;b className=\"text-break\"&gt;{message}&lt;/b&gt;\r\n    &lt;/Alert&gt;\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Col, Form, InputGroup, ListGroup, Row } from \"react-bootstrap\";\r\nimport { LoginModal } from \"src/Authentication/LoginModal\";\r\nimport { Message } from \"src/_shared/common/Message\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\nexport const ForgotPassword = (): JSX.Element =&gt; {\r\n  const [ email, setEmail ] = useState&lt;string&gt;(\"\");\r\n  const [ wasSent, setWasSent ] = useState&lt;boolean&gt;(false);\r\n  const [ showLoginModal, setShowLoginModal ] = useState&lt;boolean&gt;(false);\r\n  const [ isFormValid, setIsFormValid ] = useState&lt;boolean&gt;(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  const pattern = /[a-zA-Z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/u;\r\n\r\n  useEffect(() =&gt; {\r\n    setIsFormValid(pattern.test(email));\r\n    setWasSent(false);\r\n  }, [ email ]);\r\n\r\n  function submitRequestForPasswordReset(): void {\r\n    setRunning();\r\n    cvApi.authentication\r\n      .ForgotPassword({ Email: email })\r\n      .then(res =&gt; {\r\n        setWasSent(true);\r\n        finishRunning(!res.data.ActionSucceeded, null, res.data.Messages);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  return (\r\n    &lt;Row as={Form} className=\"form-vertical\"&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;h2 id=\"txtForgotPasswordTitle\" className=\"text-center ng-scope\"&gt;{t(\"ui.storefront.user.forgotPassword.RequestAPasswordReset\")}&lt;/h2&gt;\r\n        &lt;p&gt;\r\n          &lt;span data-sid=\"txtPrivacyMessage1\"&gt;{t(\"ui.storefront.user.forgotPassword.YourPrivacyIsImportantToUs.Message\")}&lt;/span&gt;\r\n           \r\n          &lt;span data-sid=\"txtPrivacyMessage2\"&gt;\r\n            {t(\r\n              \"ui.storefront.user.forgotPassword.IsAddedToYourEmailWhitelistApprovedSendersAndCheckYourSpamJunkFolders\"\r\n            )}\r\n          &lt;/span&gt;\r\n        &lt;/p&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;Row&gt;\r\n          {viewState.running\r\n            ? &lt;LoadingWidget /&gt;\r\n            : &lt;Form.Group as={Col}\r\n              xs={12}\r\n              className=\"has-error\"&gt;\r\n              &lt;Form.Label htmlFor=\"txtForgotPasswordEmail\"&gt;\r\n                &lt;span&gt;{t(\"ui.storefront.common.Email\")}&lt;/span&gt;\r\n                           \r\n                &lt;span className=\"text-danger\"&gt;*&lt;/span&gt;\r\n              &lt;/Form.Label&gt;\r\n              &lt;InputGroup&gt;\r\n                &lt;InputGroup.Text className=\"p-0 border-0\"&gt;\r\n                  &lt;span className=\"input-group-text h-100\"&gt;\r\n                    &lt;i className=\"fal fa-at fa-fw\" /&gt;\r\n                  &lt;/span&gt;\r\n                &lt;/InputGroup.Text&gt;\r\n                &lt;Form.Control\r\n                  type=\"email\"\r\n                  id=\"txtForgotPasswordEmail\"\r\n                  name=\"txtForgotPasswordEmail\"\r\n                  placeholder=\"john.smith@email.com\"\r\n                  required\r\n                  isValid={isFormValid}\r\n                  isInvalid={!isFormValid &amp;&amp; email.length &gt; 0}\r\n                  pattern={String(pattern)}\r\n                  value={email}\r\n                  onChange={e =&gt; setEmail(e.target.value)}\r\n                /&gt;\r\n                &lt;Form.Control.Feedback data-sid=\"txtInvalidEmailFormat\" type=\"invalid\"&gt;\r\n                  {t(\"ui.storefront.userDashboard2.controls.accountProfile.InvalidEmailFormat\")}\r\n                &lt;/ Form.Control.Feedback&gt;\r\n              &lt;/InputGroup&gt;\r\n            &lt;/Form.Group&gt;\r\n          }\r\n        &lt;/Row&gt;\r\n        &lt;Row className=\"align-items-center pt-2\"&gt;\r\n          &lt;Col className=\"text-center\"&gt;\r\n            &lt;a href=\"/authentication/registration\"&gt;\r\n              &lt;Button\r\n                id=\"btnForgotPasswordRegister\"\r\n                variant=\"secondary\"\r\n                className=\"w-100\"\r\n                title={t(\"ui.storefront.common.Register\")}\r\n                aria-label={t(\"ui.storefront.common.Register\")}&gt;\r\n                {t(\"ui.storefront.common.Register\")}\r\n              &lt;/Button&gt;\r\n            &lt;/a&gt;\r\n            &lt;LoginModal show={showLoginModal} onCancel={() =&gt; setShowLoginModal(false)} /&gt;\r\n          &lt;/Col&gt;\r\n          &lt;Col xs=\"auto\"&gt;\r\n            &lt;Button\r\n              id=\"btnForgotPasswordRequestPassword\"\r\n              variant=\"primary\"\r\n              disabled={viewState.running || wasSent || !isFormValid}\r\n              onClick={submitRequestForPasswordReset}\r\n              title={t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}\r\n              aria-label={t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}&gt;\r\n              {t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}\r\n            &lt;/Button&gt;\r\n          &lt;/Col&gt;\r\n        &lt;/Row&gt;\r\n        {wasSent &amp;&amp; viewState.hasError\r\n          ? &lt;Row className=\"mt-3\"&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;ListGroup as=\"ul\" className=\"list-unstyled\"&gt;\r\n                {Array.isArray(viewState.errorMessages) &amp;&amp; viewState.errorMessages.length\r\n                  ? viewState.errorMessages.map(msg =&gt; &lt;ListGroup.Item className=\"border-0 p-0\"\r\n                    key={msg as string}&gt;\r\n                    &lt;Message error={true} message={msg as string} /&gt;\r\n                  &lt;/ListGroup.Item&gt;)\r\n                  : &lt;ListGroup.Item className=\"border-0 p-0\"&gt;\r\n                    &lt;Message error={true} message={viewState.errorMessage as string} /&gt;\r\n                  &lt;/ListGroup.Item&gt;\r\n                }\r\n              &lt;/ListGroup&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          : null}\r\n        {wasSent &amp;&amp; !viewState.hasError\r\n          ? &lt;Row className=\"mt-3\"&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;Alert data-sid=\"txtPasswordRequestSuccess\"\r\n                variant=\"success\"\r\n                className=\"d-flex align-items-center\"&gt;\r\n                &lt;i className=\"fal fa-check fa-2x fa-fw\" aria-hidden={true} /&gt;\r\n                &lt;b&gt;{t(\"ui.storefront.user.forgotPassword.CheckYourEmailForAPasswordResetLink\")}&lt;/b&gt;\r\n              &lt;/Alert&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          : null}\r\n      &lt;/Col&gt;\r\n    &lt;/Row&gt;\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Col, Form, InputGroup, ListGroup, Row } from \"react-bootstrap\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { Message } from \"src/_shared/common/Message\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport cvApi from \"src/_api/cvApi\";\r\n\r\nexport const ForgotUsername = (): JSX.Element =&gt; {\r\n  const [ email, setEmail ] = useState&lt;string&gt;(\"\");\r\n  const [ wasSent, setWasSent ] = useState&lt;boolean&gt;(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n\r\n  useEffect(() =&gt; {\r\n    setWasSent(false);\r\n  }, [ email ]);\r\n\r\n  function submitRequestForUsername(): void {\r\n    setRunning();\r\n    cvApi.authentication\r\n      .ForgotUsername({ Email: email })\r\n      .then(res =&gt; {\r\n        setWasSent(true);\r\n        finishRunning(res.data.Messages.length &gt; 0, null, res.data.Messages);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  }\r\n\r\n  return (\r\n    &lt;Row as={Form} className=\"form-vertical\"&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;h2 className=\"text-center ng-scope\"&gt;{t(\"ui.storefront.user.forgotUsername.RequestYourUsername\")}&lt;/h2&gt;\r\n        &lt;p&gt;\r\n          &lt;span&gt;{t(\"ui.storefront.user.forgotPassword.YourPrivacyIsImportantToUs.Message\")}&lt;/span&gt;\r\n           \r\n          &lt;span&gt;\r\n            {t(\r\n              \"ui.storefront.user.forgotPassword.IsAddedToYourEmailWhitelistApprovedSendersAndCheckYourSpamJunkFolders\"\r\n            )}\r\n          &lt;/span&gt;\r\n        &lt;/p&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;Row&gt;\r\n          {viewState.running\r\n            ? &lt;LoadingWidget /&gt;\r\n            : &lt;Form.Group as={Col}\r\n              xs={12}\r\n              className=\"has-error\"&gt;\r\n              &lt;Form.Label htmlFor=\"txtForgotUsernameEmail\"&gt;\r\n                &lt;span&gt;{t(\"ui.storefront.common.Email\")}&lt;/span&gt;\r\n                 \r\n                &lt;span className=\"text-danger\"&gt;*&lt;/span&gt;\r\n              &lt;/Form.Label&gt;\r\n              &lt;InputGroup&gt;\r\n                &lt;InputGroup.Text&gt;\r\n                  &lt;span className=\"input-group-text h-100\"&gt;\r\n                    &lt;i className=\"fal fa-at fa-fw\" /&gt;\r\n                  &lt;/span&gt;\r\n                &lt;/InputGroup.Text&gt;\r\n                &lt;Form.Control\r\n                  type=\"email\"\r\n                  id=\"txtForgotUsernameEmail\"\r\n                  name=\"txtForgotUsernameEmail\"\r\n                  placeholder=\"john.smith@email.com\"\r\n                  required\r\n                  value={email}\r\n                  onChange={e =&gt; setEmail(e.target.value)}\r\n                /&gt;\r\n              &lt;/InputGroup&gt;\r\n            &lt;/Form.Group&gt;\r\n          }\r\n        &lt;/Row&gt;\r\n        &lt;Row className=\"align-items-center\"&gt;\r\n          &lt;Col className=\"text-end\"&gt;\r\n            &lt;a href=\"/authentication/registration\"&gt;\r\n              &lt;span&gt;{t(\"ui.storefront.common.Register\")}&lt;/span&gt;\r\n            &lt;/a&gt;\r\n          &lt;/Col&gt;\r\n          &lt;Col xs=\"auto\"&gt;\r\n            &lt;Button\r\n              variant=\"primary\"\r\n              disabled={viewState.running || wasSent}\r\n              onClick={submitRequestForUsername}\r\n              title={t(\"ui.storefront.user.forgotUsername.RetrieveUsername\")}\r\n              aria-label={t(\"ui.storefront.user.forgotUsername.RetrieveUsername\")}&gt;\r\n              {t(\"ui.storefront.user.forgotUsername.RetrieveUsername\")}\r\n            &lt;/Button&gt;\r\n          &lt;/Col&gt;\r\n        &lt;/Row&gt;\r\n        {wasSent &amp;&amp; viewState.hasError\r\n          ? &lt;Row className=\"mt-3\"&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;ListGroup as=\"ul\" className=\"list-unstyled\"&gt;\r\n                {Array.isArray(viewState.errorMessages) &amp;&amp; viewState.errorMessages.length\r\n                  ? viewState.errorMessages.map(msg =&gt; &lt;ListGroup.Item key={msg as string}&gt;\r\n                    &lt;Message error={true} message={msg as string} /&gt;\r\n                  &lt;/ListGroup.Item&gt;)\r\n                  : &lt;ListGroup.Item&gt;\r\n                    &lt;Message error={true} message={viewState.errorMessage as string} /&gt;\r\n                  &lt;/ListGroup.Item&gt;\r\n                }\r\n              &lt;/ListGroup&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          : null}\r\n        {wasSent &amp;&amp; !viewState.hasError\r\n          ? &lt;Row className=\"mt-3\"&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;Alert variant=\"success\" className=\"d-flex align-items-center\"&gt;\r\n                &lt;i className=\"fal fa-check fa-2x fa-fw\" aria-hidden={true} /&gt;\r\n                &lt;b&gt;{t(\"ui.storefront.user.forgotUsername.CheckYourEmailForYourUsername\")}&lt;/b&gt;\r\n              &lt;/Alert&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          : null}\r\n      &lt;/Col&gt;\r\n    &lt;/Row&gt;\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { Col, Container, Row } from \"react-bootstrap\";\r\n\r\nexport const Privacy = (): JSX.Element =&gt; &lt;Container&gt;\r\n  &lt;Row&gt;\r\n    &lt;Col xs={12} className=\"my-4\"&gt;\r\n      &lt;span&gt;\r\n        &lt;div className=\"text-start\"&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website is committed to protecting your privacy and developing technology\r\n              that gives you the most powerful and safe online experience. This Statement of Privacy applies to the\r\n              Clarity eCommerce Development Website site and governs data collection and usage. By using the Clarity\r\n              eCommerce Development Website site, you consent to the data practices described in this statement.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n            &lt;span className=\"SubHead\"&gt;Collection of your Personal Information&lt;/span&gt;\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website collects personally identifiable information, such as your email\r\n              address, name, home or work address or telephone number. Clarity eCommerce Development Website also\r\n              collects anonymous demographic information, which is not unique to you, such as your ZIP code, age,\r\n              gender, preferences, interests and favorites.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              There is also information about your computer hardware and software that is automatically collected by\r\n              Clarity eCommerce Development Website. This information can include: your IP address, browser type, domain\r\n              names, access times and referring website addresses. This information is used by Clarity eCommerce\r\n              Development Website for the operation of the service, to maintain quality of the service, and to provide\r\n              general statistics regarding use of the Clarity eCommerce Development Website site.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Please keep in mind that if you directly disclose personally identifiable information or personally\r\n              sensitive data through Clarity eCommerce Development Website public message boards, this information may\r\n              be collected and used by others. Note: Clarity eCommerce Development Website does not read any of your\r\n              private online communications.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website encourages you to review the privacy statements of Web sites you\r\n              choose to link to from Clarity eCommerce Development Website so that you can understand how those Web\r\n              sites collect, use and share your information. Clarity eCommerce Development Website is not responsible\r\n              for the privacy statements or other content on Web sites outside of the Clarity eCommerce Development\r\n              Website and Clarity eCommerce Development Website family of Web sites.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n            &lt;span className=\"SubHead\"&gt;Use of your Personal Information&lt;/span&gt;\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website collects and uses your personal information to operate the Clarity\r\n              eCommerce Development Website Web site and deliver the services you have requested. Clarity eCommerce\r\n              Development Website also uses your personally identifiable information to inform you of other products or\r\n              services available from Clarity eCommerce Development Website and its affiliates. Clarity eCommerce\r\n              Development Website may also contact you via surveys to conduct research about your opinion of current\r\n              services or of potential new services that may be offered.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website does not sell, rent or lease its customer lists to third parties.\r\n              Clarity eCommerce Development Website may, from time to time, contact you on behalf of external business\r\n              partners about a particular offering that may be of interest to you. In those cases, your unique\r\n              personally identifiable information (e-mail, name, address, telephone number) is not transferred to the\r\n              third party. In addition, Clarity eCommerce Development Website may share data with trusted partners to\r\n              help us perform statistical analysis, send you email or postal mail, provide customer support, or arrange\r\n              for deliveries. All such third parties are prohibited from using your personal information except to\r\n              provide these services to Clarity eCommerce Development Website, and they are required to maintain the\r\n              confidentiality of your information.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website does not use or disclose sensitive personal information, such as\r\n              race, religion, or political affiliations, without your explicit consent.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website keeps track of the Web sites and pages our customers visit within\r\n              Clarity eCommerce Development Website, in order to determine what Clarity eCommerce Development Website\r\n              services are the most popular. This data is used to deliver customized content and advertising within\r\n              Clarity eCommerce Development Website to customers whose behavior indicates that they are interested in a\r\n              particular subject area.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website Web sites will disclose your personal information, without notice,\r\n              only if required to do so by law or in the good faith belief that such action is necessary to: (a) conform\r\n              to the edicts of the law or comply with legal process served on Clarity eCommerce Development Website or\r\n              the site; (b) protect and defend the rights or property of Clarity eCommerce Development Website; and, (c)\r\n              act under exigent circumstances to protect the personal safety of users of Clarity eCommerce Development\r\n              Website, or the public.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n            &lt;span className=\"SubHead\"&gt;Use of Cookies&lt;/span&gt;\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              The Clarity eCommerce Development Website Web site use "cookies" to help you personalize your\r\n              online experience. A cookie is a text file that is placed on your hard disk by a Web page server. Cookies\r\n              cannot be used to run programs or deliver viruses to your computer. Cookies are uniquely assigned to you,\r\n              and can only be read by a web server in the domain that issued the cookie to you.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              One of the primary purposes of cookies is to provide a convenience feature to save you time. The purpose\r\n              of a cookie is to tell the Web server that you have returned to a specific page. For example, if you\r\n              personalize Clarity eCommerce Development Website pages, or register with Clarity eCommerce Development\r\n              Website site or services, a cookie helps Clarity eCommerce Development Website to recall your specific\r\n              information on subsequent visits. This simplifies the process of recording your personal information, such\r\n              as billing addresses, shipping addresses, and so on. When you return to the same Clarity eCommerce\r\n              Development Website Web site, the information you previously provided can be retrieved, so you can easily\r\n              use the Clarity eCommerce Development Website features that you customized.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              You have the ability to accept or decline cookies. Most Web browsers automatically accept cookies, but you\r\n              can usually modify your browser setting to decline cookies if you prefer. If you choose to decline\r\n              cookies, you may not be able to fully experience the interactive features of the Clarity eCommerce\r\n              Development Website services or Web sites you visit.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n            &lt;span className=\"SubHead\"&gt;Security of your Personal Information&lt;/span&gt;\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website secures your personal information from unauthorized access, use or\r\n              disclosure. Clarity eCommerce Development Website secures the personally identifiable information you\r\n              provide on computer servers in a controlled, secure environment, protected from unauthorized access, use\r\n              or disclosure. When personal information (such as a credit card number) is transmitted to other Web sites,\r\n              it is protected through the use of encryption, such as the Secure Socket Layer (SSL) protocol.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n            &lt;span className=\"SubHead\"&gt;Changes to this Statement&lt;/span&gt;\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website will occasionally update this Statement of Privacy to reflect\r\n              company and customer feedback. Clarity eCommerce Development Website encourages you to periodically review\r\n              this Statement to be informed of how Clarity eCommerce Development Website is protecting your information.\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n            &lt;span className=\"SubHead\"&gt;Contact Information&lt;/span&gt;\r\n          &lt;/p&gt;\r\n          &lt;p&gt;\r\n              Clarity eCommerce Development Website welcomes your comments regarding this Statement of Privacy. If you\r\n              believe that Clarity eCommerce Development Website has not adhered to this Statement, please contact\r\n              Clarity eCommerce Development Website at &lt;a href=\"mailto:dev@claritymis.com\"&gt;dev@claritymis.com&lt;/a&gt;. We\r\n              will use commercially reasonable efforts to promptly determine and remedy the problem.\r\n          &lt;/p&gt;\r\n        &lt;/div&gt;\r\n      &lt;/span&gt;\r\n    &lt;/Col&gt;\r\n  &lt;/Row&gt;\r\n&lt;/Container&gt;;\r\n","import { useState } from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Col, Form, ListGroup, Row } from \"react-bootstrap\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\nimport { PasswordInputFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\r\n\r\ninterface IPasswordResetData {\r\n  emForcedResetEmail: string;\r\n  pwForcedResetPassword: string;\r\n  pwForcedResetNewPassword: string;\r\n}\r\n\r\nexport const ForcedPasswordReset = (): JSX.Element =&gt; {\r\n  const [ wasSent, setWasSent ] = useState&lt;boolean&gt;(false);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n\r\n  const history = useHistory();\r\n  const location = useLocation();\r\n\r\n  const params = new URLSearchParams(location.search);\r\n  const returnUrl = params.get(\"returnUrl\");\r\n\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    formState\r\n  } = useForm&lt;IPasswordResetData&gt;({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\",\r\n    defaultValues: {\r\n      emForcedResetEmail: params.get(\"email\") ?? \"\"\r\n    }\r\n  });\r\n\r\n  const onSubmit: SubmitHandler&lt;IPasswordResetData&gt; = data =&gt; {\r\n    setRunning();\r\n    setWasSent(false);\r\n    cvApi.authentication.ValidatePasswordIsGood({\r\n      Password: data.pwForcedResetNewPassword\r\n    }).then(res =&gt; {\r\n      if (!res?.data?.ActionSucceeded) {\r\n        throw new Error(\"New password does not meet requirements\");\r\n      }\r\n      return cvApi.authentication.ForcedPasswordReset({\r\n        Email: data.emForcedResetEmail,\r\n        OldPassword: data.pwForcedResetPassword,\r\n        NewPassword: data.pwForcedResetNewPassword\r\n      });\r\n    })\r\n      .then(res =&gt; {\r\n        setWasSent(true);\r\n        if (!res.data.ActionSucceeded) {\r\n          throw new Error(null);\r\n        }\r\n        setTimeout(() =&gt; {\r\n          history.push(returnUrl ?? \"/\");\r\n          history.go(0);\r\n        }, 4000);\r\n      })\r\n      .catch(err =&gt; {\r\n        // Error msg handled in JSX\r\n        finishRunning(true, null);\r\n      });\r\n  };\r\n\r\n  return (\r\n    &lt;Row as={Form}\r\n      className=\"form-vertical\"\r\n      onSubmit={handleSubmit(onSubmit)}&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;h2 className=\"text-center\"&gt;\r\n          {t(\"ui.storefront.user.forcedPasswordReset.YouAreRequiredToChangeYourPassword\")}\r\n        &lt;/h2&gt;\r\n      &lt;/Col&gt;\r\n      &lt;TextInputFormGroup\r\n        register={register}\r\n        errors={formState.errors}\r\n        formIdentifier=\"emForcedResetEmail\"\r\n        formClasses=\"mb-3 col-xs-12\"\r\n        labelKey=\"ui.storefront.common.Email\"\r\n        placeholderKey=\"ui.storefront.common.Email\"\r\n        isEmail={true}\r\n        required={true}\r\n        patternMessage=\"Email is not valid/formatted properly\"\r\n        disabled={true}\r\n        inputClasses={formState.errors.emForcedResetEmail ? \"\" : \"is-valid\"}\r\n      /&gt;\r\n      &lt;PasswordInputFormGroup\r\n        register={register}\r\n        errors={formState.errors}\r\n        formIdentifier=\"pwForcedResetPassword\"\r\n        formClasses=\"mb-3 col-xs-12\"\r\n        labelKey=\"ui.storefront.user.forcedPasswordReset.CurrentPassword\"\r\n        required={true}\r\n        placeholderKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourCurrentPassword\"\r\n        tooltipKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourCurrentPassword\"\r\n        hideInvalidTooltip={true}\r\n      /&gt;\r\n      &lt;PasswordInputFormGroup\r\n        register={register}\r\n        errors={formState.errors}\r\n        formIdentifier=\"pwForcedResetNewPassword\"\r\n        formClasses=\"mb-3 col-xs-12\"\r\n        labelKey=\"ui.storefront.user.forgotPasswordReturn.NewPassword\"\r\n        required={true}\r\n        placeholderKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourNewPassword\"\r\n        tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\r\n        forceTooltipWithFocus={true}\r\n        showValidTooltip={true}\r\n        minLength={6}\r\n      /&gt;\r\n      &lt;Col xs={12}&gt;\r\n        &lt;Button\r\n          as=\"input\"\r\n          variant=\"primary\"\r\n          size=\"lg\"\r\n          type=\"submit\"\r\n          className=\"btn-block w-100\"\r\n          disabled={viewState.running || !formState.isValid}\r\n          value={t(\"ui.storefront.user.forcedPasswordReset.ChangePassword\") as string}\r\n        /&gt;\r\n      &lt;/Col&gt;\r\n      &lt;Col xs={12}&gt;\r\n        {wasSent &amp;&amp; viewState.hasError\r\n          ? &lt;Row className=\"mt-3\"&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;ListGroup\r\n                as=\"ul\"\r\n                className=\"list-unstyled\"&gt;\r\n                &lt;ListGroup.Item className=\"border-0 p-0\"&gt;\r\n                  &lt;Alert variant=\"danger\"&gt;\r\n                    &lt;p&gt;\r\n                      &lt;span&gt;{t(\"ui.storefront.user.forcedPasswordReset.Error\")}&lt;/span&gt; \r\n                      &lt;a href={corsLink(cefConfig, cefConfig?.routes.contactUs.root, \"contactUs\")}&gt;\r\n                        {t(\"ui.storefront.user.forcedPasswordReset.ContactUs\")}\r\n                      &lt;/a&gt;\r\n                    &lt;/p&gt;\r\n                  &lt;/Alert&gt;\r\n                &lt;/ListGroup.Item&gt;\r\n              &lt;/ListGroup&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          : null}\r\n        {wasSent &amp;&amp; !viewState.hasError\r\n          ? &lt;Row className=\"mt-3\"&gt;\r\n            &lt;Col xs={12}&gt;\r\n              &lt;Alert\r\n                variant=\"success\"\r\n                className=\"d-flex align-items-center\"&gt;\r\n                &lt;p&gt;\r\n                  &lt;b&gt;\r\n                    {t(\"ui.storefront.user.forcedPasswordReset.Success\")} \r\n                    {t(\"ui.storefront.user.forcedPasswordReset.YourPasswordHasBeenChanged\")}\r\n                  &lt;/b&gt;\r\n                &lt;/p&gt;\r\n              &lt;/Alert&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          : null}\r\n      &lt;/Col&gt;\r\n    &lt;/Row&gt;\r\n  );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport default {\"storeCard\":\"StoreLocatorCard_storeCard__KwnTI\"};","/** @format */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Button, Col, Row, Table } from \"react-bootstrap\";\r\nimport Card from \"react-bootstrap/Card\";\r\nimport axios from \"axios\";\r\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\r\nimport { StoreModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport classes from \"src/StoreLocator/StoreLocatorCard.module.scss\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\n\r\ninterface IStoreCardProps {\r\n  store: StoreModel;\r\n  onStoreClicked: Function;\r\n  selected: boolean;\r\n  useSmallText?: boolean;\r\n}\r\n\r\ntype TOpenClose = {\r\n  open?: number;\r\n  close?: number;\r\n};\r\n\r\ninterface IStoreHoursItem {\r\n  day: string;\r\n  open?: number;\r\n  close?: number;\r\n}\r\n\r\ntype TWeekdays = {\r\n  Monday?: TOpenClose;\r\n  Tuesday?: TOpenClose;\r\n  Wednesday?: TOpenClose;\r\n  Thursday?: TOpenClose;\r\n  Friday?: TOpenClose;\r\n  Saturday?: TOpenClose;\r\n  Sunday?: TOpenClose;\r\n};\r\n\r\ntype TWeekday = keyof TWeekdays;\r\n\r\nconst weekDays: TWeekday[] = [ \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ];\r\n\r\nexport const StoreLocatorCard = (props: IStoreCardProps): JSX.Element =&gt; {\r\n  const { store, onStoreClicked, selected, useSmallText } = props;\r\n  const { Name, ContactFirstName, ContactLastName, Contact } = store;\r\n  const { Address } = Contact;\r\n\r\n  const [ storeHours, setStoreHours ] = useState&lt;IStoreHoursItem[]&gt;([]);\r\n  const [ , setCurrentUserCoords ] = useState(null);\r\n  const [ currentUserFormattedAddress, setCurrentUserFormattedAddress ] = useState&lt;string&gt;(null);\r\n  const cefConfig = useCefConfig();\r\n  const { t } = useTranslation();\r\n\r\n  useEffect(() =&gt; {\r\n    if (store) {\r\n      setStoreHours(buildStoreHoursArray(store));\r\n    }\r\n  }, [ store ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (navigator &amp;&amp; navigator.permissions) {\r\n      navigator.permissions.query({ name: \"geolocation\" }).then(status =&gt; {\r\n        if (status.state !== \"denied\") {\r\n          navigator.geolocation.getCurrentPosition(\r\n            locationData =&gt; {\r\n              setCurrentUserCoords({\r\n                lat: locationData.coords.latitude,\r\n                lng: locationData.coords.longitude\r\n              });\r\n              if (currentUserFormattedAddress !== null) {\r\n                return;\r\n              }\r\n              getAddressFromLatLng(\r\n                {\r\n                  lat: locationData.coords.latitude,\r\n                  lng: locationData.coords.longitude\r\n                },\r\n                cefConfig\r\n              )\r\n                .then((res: any) =&gt; {\r\n                  setCurrentUserFormattedAddress(res.data.results[0].formatted_address);\r\n                })\r\n                .catch(err =&gt; {\r\n                  console.error(err);\r\n                  console.error(\"Unabled to get user's address with coordinates\");\r\n                });\r\n            },\r\n            _err =&gt; {\r\n              console.error(_err);\r\n            }\r\n          );\r\n        }\r\n      });\r\n    }\r\n  }, [ cefConfig ]);\r\n\r\n  const getGetDirectionsLink = (): string =&gt; {\r\n    const root = \"http://maps.google.com/maps\";\r\n    if (currentUserFormattedAddress !== null) {\r\n      return `${root}/dir/${encodeURI(\r\n        `${Address.Street1}, ${Address.City}, ${Address.RegionCode} ${Address.PostalCode}`\r\n      )} /${encodeURI(currentUserFormattedAddress)}`;\r\n    }\r\n    return `${root}/place/${encodeURI(\r\n      `${Address.Street1}, ${Address.City}, ${Address.RegionCode} ${Address.PostalCode}`\r\n    )}`;\r\n  };\r\n\r\n  return (\r\n    &lt;Card\r\n      className={`shadow mb-4 pointer ${selected ? \"border-dark border-1\" : \"\"}`}\r\n      style={{ width: \"100%\" }}\r\n      onClick={() =&gt; onStoreClicked(store.ID)}&gt;\r\n      &lt;div className=\"d-flex\"&gt;\r\n        &lt;Card.Body className={classes.storeCard}&gt;\r\n          &lt;Card.Title className=\"mb-4\"&gt;{Name}&lt;/Card.Title&gt;\r\n          &lt;Card.Subtitle style={{ fontWeight: 400 }}&gt;\r\n            {ContactFirstName} {ContactLastName}\r\n          &lt;/Card.Subtitle&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12} sm={5}&gt;\r\n              &lt;AddressBlock address={Contact.Address} contact={Contact} /&gt;\r\n            &lt;/Col&gt;\r\n            &lt;Col xs={12} sm={7}&gt;\r\n              &lt;Table size=\"sm\"\r\n                borderless\r\n                className={`store-hours ${useSmallText ? \"small\" : \"\"}`}&gt;\r\n                &lt;tbody&gt;\r\n                  {storeHours.length\r\n                    ? getCollapsedDaysWithHours(storeHours).map((dayObj: IStoreHoursItem) =&gt; {\r\n                      const { day, open, close } = dayObj;\r\n                      return (\r\n                        &lt;tr key={dayObj.day}&gt;\r\n                          &lt;td&gt;\r\n                            &lt;b&gt;{day}    &lt;/b&gt;\r\n                          &lt;/td&gt;\r\n                          {open ? null : &lt;td&gt;{t(\"ui.storefront.location.shipTo.shipToDetails.Closed\")}&lt;/td&gt;}\r\n                          {open === null ? null : &lt;td className=\"text-end\"&gt;{militaryToTwelveHour(open)}&lt;/td&gt;}\r\n                          {close === null ? null : &lt;td&gt; - &lt;/td&gt;}\r\n                          {close === null ? null : &lt;td&gt;{militaryToTwelveHour(close)}&lt;/td&gt;}\r\n                        &lt;/tr&gt;\r\n                      );\r\n                    })\r\n                    : null}\r\n                &lt;/tbody&gt;\r\n              &lt;/Table&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n          &lt;Row&gt;\r\n            &lt;Col xs={12} sm={6} /&gt;\r\n            &lt;Col xs={12} sm={6}&gt;\r\n              &lt;Button\r\n                as=\"a\"\r\n                variant=\"primary\"\r\n                className=\"w-100\"\r\n                href={getGetDirectionsLink()}\r\n                target=\"_blank\"\r\n                rel=\"noopener noreferrer\"&gt;\r\n                {t(\"ui.storefront.common.GetDirection.Plural\")}\r\n              &lt;/Button&gt;\r\n            &lt;/Col&gt;\r\n          &lt;/Row&gt;\r\n        &lt;/Card.Body&gt;\r\n      &lt;/div&gt;\r\n    &lt;/Card&gt;\r\n  );\r\n};\r\n\r\nfunction getAddressFromLatLng(coords: { lat: number; lng: number }, cefConfig: CEFConfig) {\r\n  if (!cefConfig || !coords) {\r\n    return new Promise((_resolve, reject) =&gt; {\r\n      reject(new Error(\"CefConfig or coords unavailable\"));\r\n    });\r\n  }\r\n  return axios.get(\r\n    `http://maps.googleapis.com/maps/api/geocode/json?&amp;latlng=${coords.lat\r\n    },${coords.lng}&amp;key=${cefConfig.google.maps.apiKey}`\r\n  );\r\n}\r\n\r\nfunction decimalToMilitary(n: number): number {\r\n  return Math.round(n * 100);\r\n}\r\n\r\nfunction militaryToTwelveHour(n: number): string {\r\n  const suffix = n &gt;= 1200 ? \"pm\" : \"am\";\r\n  const hr = n === 1200 ? n : n % 1200;\r\n  const hoursAsString = hr.toString().padStart(4, \"0\");\r\n  const hours = hoursAsString.substr(0, 2).replace(/0/gu, \"\");\r\n  const minutes = hoursAsString.substr(hoursAsString.length - 2);\r\n  const time = `${hours}:${minutes} ${suffix}`;\r\n  return time;\r\n}\r\n\r\nfunction buildStoreHoursArray(store: StoreModel): Array&lt;IStoreHoursItem&gt; {\r\n  const storeHours = weekDays.reduce((acc: TWeekdays, day) =&gt; {\r\n    const open = store[`OperatingHours${day}Start` as keyof StoreModel];\r\n    const close = store[`OperatingHours${day}End` as keyof StoreModel];\r\n\r\n    const openInMilitary = open === null ? null : decimalToMilitary(open as number);\r\n    const closeInMilitary = close === null ? null : decimalToMilitary(close as number);\r\n    acc[day] = {\r\n      open: openInMilitary,\r\n      close: closeInMilitary\r\n    };\r\n    return acc;\r\n  }, {});\r\n\r\n  const arr: Array&lt;IStoreHoursItem&gt; = [];\r\n  for (const day in storeHours) {\r\n    if (!Object.hasOwn(storeHours, day)) {\r\n      continue;\r\n    }\r\n    arr.push({\r\n      day,\r\n      ...storeHours[day as TWeekday]\r\n    });\r\n  }\r\n  return arr;\r\n}\r\n\r\nfunction getCollapsedDaysWithHours(storeHours: IStoreHoursItem[]): IStoreHoursItem[] {\r\n  return storeHours.reduce((existingArr: IStoreHoursItem[], currentValue: IStoreHoursItem) =&gt; {\r\n    if (!existingArr.length) {\r\n      return [ currentValue ];\r\n    }\r\n    const prevStoreHoursItem = existingArr[existingArr.length - 1];\r\n    // TODO: const previousDay = prevStoreHoursItem.day;\r\n    const previousOpen = prevStoreHoursItem.open;\r\n    const previousClose = prevStoreHoursItem.close;\r\n    // TODO: const currentDay = currentValue.day;\r\n    const currentOpen = currentValue.open;\r\n    const currentClose = currentValue.close;\r\n    if (previousOpen === currentOpen &amp;&amp; previousClose === currentClose) {\r\n      // Collapse\r\n      return [ ...existingArr, currentValue ];\r\n    }\r\n    return [ ...existingArr, currentValue ];\r\n  }, []);\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"markerTooltipCard\":\"StoreLocatorMarkerTip_markerTooltipCard__8m1VA\"};","/** @format */\r\n\r\nimport React from \"react\";\r\nimport { Button, Card } from \"react-bootstrap\";\r\nimport classes from \"src/StoreLocator/StoreLocatorMarkerTip.module.scss\";\r\n\r\ninterface IStoreLocatorMarkerTipProps {\r\n  children: React.ReactNode;\r\n  onXButtonClicked: Function;\r\n}\r\n\r\nexport const StoreLocatorMarkerTip = (props: IStoreLocatorMarkerTipProps): JSX.Element =&gt; {\r\n  const { children, onXButtonClicked } = props;\r\n\r\n  return (\r\n    &lt;Card className={classes.markerTooltipCard}&gt;\r\n      &lt;Card.Header className=\"py-0 pe-1 d-flex justify-content-end bg-white border-0\"&gt;\r\n        &lt;Button className=\"p-0\" onClick={() =&gt; onXButtonClicked()}&gt;\r\n          &lt;i className=\"fal fa-times\" /&gt;\r\n        &lt;/Button&gt;\r\n      &lt;/Card.Header&gt;\r\n      &lt;Card.Body className=\"p-2 position-relative\"&gt;{children}&lt;/Card.Body&gt;\r\n    &lt;/Card&gt;\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faMapMarker } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { StoreLocatorMarkerTip } from \"src/StoreLocator/StoreLocatorMarkerTip\";\r\nimport { useState } from \"react\";\r\n\r\ninterface IStoreLocatorMarkerProps {\r\n  onMarkerClicked: Function;\r\n  storeID: number;\r\n  lat: number;\r\n  lng: number;\r\n  selected: boolean;\r\n  useTooltip?: boolean;\r\n  TooltipComponent?: () =&gt; JSX.Element;\r\n  clearSelectedStore: Function;\r\n}\r\n\r\nexport const StoreLocatorMarker = (props: IStoreLocatorMarkerProps): JSX.Element =&gt; {\r\n  const { onMarkerClicked, storeID, selected, useTooltip, TooltipComponent, clearSelectedStore } = props;\r\n\r\n  const [ showTooltip, setShowTooltip ] = useState&lt;boolean&gt;(false);\r\n\r\n  return (\r\n    &lt;div className=\"position-relative\"&gt;\r\n      {useTooltip &amp;&amp; showTooltip || selected\r\n        ? &lt;StoreLocatorMarkerTip\r\n          onXButtonClicked={() =&gt; {\r\n            setShowTooltip(false);\r\n            clearSelectedStore();\r\n          }}&gt;\r\n          &lt;TooltipComponent /&gt;\r\n        &lt;/StoreLocatorMarkerTip&gt;\r\n        : null}\r\n      &lt;FontAwesomeIcon\r\n        icon={faMapMarker}\r\n        className={`text-danger pointer fa-${selected || showTooltip ? \"3\" : \"2\"}x`}\r\n        style={{ transform: \"translate(-50%, -100%)\" }}\r\n        onClick={() =&gt; onMarkerClicked(storeID)}\r\n        onMouseEnter={() =&gt; setShowTooltip(true)}\r\n        onMouseLeave={() =&gt; setShowTooltip(false)}\r\n      /&gt;\r\n    &lt;/div&gt;\r\n  );\r\n};\r\n","/** @format */\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Col, Form, InputGroup, Row } from \"react-bootstrap\";\r\nimport GoogleMapReact from \"google-map-react\";\r\nimport axios, { AxiosResponse } from \"axios\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { AddressModel, StoreModel } from \"src/_api/cvApi._DtoClasses\";\r\nimport { StoreLocatorCard } from \"src/StoreLocator/StoreLocatorCard\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { StoreLocatorMarker } from \"src/StoreLocator/StoreLocatorMarker\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\nexport type TCoords = {\r\n  lat: number;\r\n  lng: number;\r\n};\r\n\r\nexport const StoreLocator = (): JSX.Element =&gt; {\r\n  const [ zipCode, setZipCode ] = useState&lt;string&gt;(\"\");\r\n  const [ stores, setStores ] = useState&lt;Array&lt;StoreModel&gt;&gt;([]);\r\n  const [ center, setCenter ] = useState&lt;TCoords&gt;({\r\n    lat: 30.3542409,\r\n    lng: -97.7742702\r\n  });\r\n  const [ IDOfselectedStore, setIDOfselectedStore ] = useState&lt;number&gt;(null);\r\n  const [ radius, setRadius ] = useState&lt;number&gt;(5);\r\n  // TODO: const [page, setPage] = useState&lt;number&gt;(1);\r\n  // TODO: const [pageSize, setPageSize] = useState&lt;number&gt;(8);\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n\r\n  async function getAllStores() {\r\n    setRunning();\r\n    try {\r\n      const getStoresResult = (\r\n        await cvApi.stores.GetStores({\r\n          // TODO: GetStores DTO\r\n          // Radius: radius\r\n          // ZipCode: zipCode\r\n        })\r\n      ).data;\r\n      const storesI = getStoresResult.Results;\r\n      const storesToAssign = [];\r\n      for (let i = 0; i &lt; storesI.length; i++) {\r\n        const store = storesI[i];\r\n        const address = store.Contact.Address;\r\n        if (address.Latitude !== null &amp;&amp; address.Longitude !== null) {\r\n          storesToAssign.push(store);\r\n        } else {\r\n          // eslint-disable-next-line no-await-in-loop\r\n          const googleLatLngResult = await getLatLngFromAddress(address, cefConfig);\r\n          const latLngResult: TCoords = googleLatLngResult.data.results[0].geometry.location;\r\n          const { lat, lng } = latLngResult;\r\n          store.Contact.Address.Latitude = lat;\r\n          store.Contact.Address.Longitude = lng;\r\n          storesToAssign.push(store);\r\n        }\r\n      }\r\n      if (zipCode.length &gt;= 5) {\r\n        const centerQuery = await axios.get(\r\n          `http://maps.googleapis.com/maps/api/geocode/json?address=${zipCode}&amp;key=${cefConfig.google.maps.apiKey}`\r\n        );\r\n        const { lat, lng } = centerQuery.data.results[0].geometry.location;\r\n        setCenter({\r\n          lat,\r\n          lng\r\n        });\r\n      }\r\n      setStores(storesToAssign);\r\n      finishRunning();\r\n    } catch (err) {\r\n      finishRunning(true, err as any as Error);\r\n    }\r\n  }\r\n\r\n  useEffect(() =&gt; {\r\n    getAllStores();\r\n  }, []);\r\n\r\n  const TooltipBody = () =&gt; &lt;ul&gt;\r\n    &lt;li&gt;\r\n      &lt;input value=\"Test\" readOnly /&gt;\r\n    &lt;/li&gt;\r\n    &lt;li&gt;Another&lt;/li&gt;\r\n    &lt;li&gt;More&lt;/li&gt;\r\n  &lt;/ul&gt;;\r\n\r\n  if (viewState.running) {\r\n    return (\r\n      &lt;Row className=\"mt-4 mb-5\"&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;div className=\"d-flex flex-column align-items-center\"&gt;\r\n            &lt;h3&gt;{t(\"ui.storefront.common.Loading.Ellipses\")}&lt;/h3&gt;\r\n            &lt;LoadingWidget /&gt;\r\n          &lt;/div&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n    );\r\n  }\r\n\r\n  return (\r\n    &lt;&gt;\r\n      &lt;Row className=\"mt-4 mb-5\"&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;div className=\"d-flex flex-column align-items-center\"&gt;\r\n            &lt;h3&gt;{t(\"ui.storefront.location.customerLocationEntry.findStores\")}&lt;/h3&gt;\r\n            &lt;p&gt;{t(\"ui.storefront.cart.cartShippingEstimator.enterYourZipOrPostalCode\")}&lt;/p&gt;\r\n            &lt;Form.Group&gt;\r\n              &lt;InputGroup&gt;\r\n                &lt;input\r\n                  className=\"p-2 rounded-start border-1\"\r\n                  value={zipCode}\r\n                  onChange={(e: React.ChangeEvent&lt;HTMLInputElement&gt;) =&gt; setZipCode(e.target.value)}\r\n                  onKeyDown={(e: React.KeyboardEvent&lt;HTMLInputElement&gt;) =&gt; {\r\n                    if (e.key === \"Enter\") {\r\n                      e.preventDefault();\r\n                      if (zipCode.length &gt;= 5) {\r\n                        getAllStores();\r\n                      }\r\n                    }\r\n                  }}\r\n                  placeholder={t(\"ui.storefront.cart.cartShippingEstimator.enterYourZipOrPostalCode\")}\r\n                /&gt;\r\n                &lt;select\r\n                  className=\"input-group-append rounded-end\"\r\n                  onChange={e =&gt; setRadius(Number(e.target.value))}\r\n                  value={radius}&gt;\r\n                  {[ 5, 10, 15 ].map(n =&gt; &lt;option key={n.toString()} value={n}&gt;\r\n                    {`${n} mi`}\r\n                  &lt;/option&gt;)}\r\n                &lt;/select&gt;\r\n              &lt;/InputGroup&gt;\r\n            &lt;/Form.Group&gt;\r\n          &lt;/div&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      {stores.length\r\n        ? &lt;Row className=\"mt-4 mb-5\" style={{ height: \"70vh\" }}&gt;\r\n          &lt;Col xs={6} style={{ maxHeight: \"100%\", overflowY: \"auto\" }}&gt;\r\n            {stores.map(store =&gt; &lt;StoreLocatorCard\r\n              key={`storeCard_${store.ID}`}\r\n              store={store}\r\n              onStoreClicked={(id: number) =&gt; {\r\n                setIDOfselectedStore(id);\r\n                setCenter({\r\n                  lat: store.Contact.Address.Latitude,\r\n                  lng: store.Contact.Address.Longitude\r\n                });\r\n              }}\r\n              selected={IDOfselectedStore === store.ID}\r\n            /&gt;)}\r\n          &lt;/Col&gt;\r\n          &lt;Col xs={6}&gt;\r\n            &lt;GoogleMapReact\r\n              bootstrapURLKeys={{\r\n                key: cefConfig.google.maps.apiKey\r\n              }}\r\n              key={`${center.lat}${center.lng}`}\r\n              defaultCenter={center}\r\n              defaultZoom={10}&gt;\r\n              {stores.map(store =&gt; &lt;StoreLocatorMarker\r\n                key={store.ID}\r\n                lat={store.Contact.Address.Latitude}\r\n                lng={store.Contact.Address.Longitude}\r\n                storeID={store.ID}\r\n                onMarkerClicked={(id: number) =&gt; setIDOfselectedStore(id)}\r\n                clearSelectedStore={() =&gt; setIDOfselectedStore(null)}\r\n                selected={IDOfselectedStore === store.ID}\r\n                useTooltip={true}\r\n                TooltipComponent={TooltipBody}\r\n              /&gt;)}\r\n            &lt;/GoogleMapReact&gt;\r\n          &lt;/Col&gt;\r\n        &lt;/Row&gt;\r\n        : &lt;h3 className=\"text-center mb-5\"&gt;No stores found&lt;/h3&gt;\r\n      }\r\n    &lt;/&gt;\r\n  );\r\n};\r\n\r\ninterface IGoogleMapsAddressComponent {\r\n  long_name: string;\r\n  short_name: string;\r\n  types: string[];\r\n}\r\n\r\ninterface IGoogleMapsCoordinatePair {\r\n  lat: number;\r\n  lng: number;\r\n}\r\n\r\ninterface IGoogleMapsBoundedCoordinateBox {\r\n  northeast: IGoogleMapsCoordinatePair;\r\n  southwest: IGoogleMapsCoordinatePair;\r\n}\r\n\r\ninterface IGoogleMapsGeographyResult {\r\n  bounds: IGoogleMapsBoundedCoordinateBox;\r\n  location: IGoogleMapsCoordinatePair;\r\n  location_type: string;\r\n  viewport: IGoogleMapsBoundedCoordinateBox;\r\n}\r\n\r\ninterface IGoogleMapsGeoCodeResult {\r\n  address_components: IGoogleMapsAddressComponent[];\r\n  formatted_address: string;\r\n  geometry: IGoogleMapsGeographyResult;\r\n  place_id: string;\r\n  types: string[];\r\n}\r\n\r\ninterface IGoogleMapsGeoCodeResults {\r\n  results: IGoogleMapsGeoCodeResult[];\r\n}\r\n\r\nfunction getLatLngFromAddress(\r\n    address: AddressModel,\r\n    cefConfig: CEFConfig\r\n): Promise&lt;AxiosResponse&lt;IGoogleMapsGeoCodeResults&gt;&gt; {\r\n  if (!address || !cefConfig) {\r\n    return Promise.reject(new Error(\"Address or CefConfig unavailable; cannot fetch address\"));\r\n  }\r\n  const { Street1, City, Region } = address;\r\n  const addressQueryString = `${Street1}%20${City}%20${Region}`;\r\n  return axios.get&lt;IGoogleMapsGeoCodeResults&gt;(\r\n    `http://maps.googleapis.com/maps/api/geocode/json?address=${addressQueryString\r\n    }&amp;key=${cefConfig.google.maps.apiKey}`\r\n  );\r\n}\r\n","import { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { createBrowserHistory } from \"history\";\r\nimport \"src/_meta/css/clarity.scss\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useCefConfig } from \"./_redux/slices/cefConfigSlice\";\r\nimport { useCurrentUser } from \"./_redux/slices/authSlice\";\r\nimport { Layout } from \"src/Layout\";\r\nimport { Home } from \"src/Home/Home\";\r\nimport { Cart } from \"src/Cart\";\r\nimport { Catalog } from \"src/Catalog/Catalog\";\r\nimport { Checkout } from \"src/Checkout/Checkout\";\r\nimport { ProductDetails } from \"src/Catalog/ProductDetails\";\r\nimport { Dashboard } from \"src/Dashboard/Dashboard\";\r\nimport { Registration } from \"src/Authentication/Registration/Registration\";\r\nimport { ForgotPassword } from \"src/Authentication/ForgotPassword\";\r\nimport { ForgotUsername } from \"src/Authentication/ForgotUsername\";\r\nimport { Privacy } from \"src/Legal/Privacy\";\r\nimport { ForcedPasswordReset } from \"src/Authentication/ForcedPasswordReset\";\r\nimport { Compare } from \"src/Catalog/views/Compare\";\r\nimport { StoreLocator } from \"src/StoreLocator/StoreLocator\";\r\n\r\nexport const history = createBrowserHistory({\r\n  basename: process.env.PUBLIC_URL\r\n});\r\n\r\nconst App = (): JSX.Element =&gt; {\r\n  const currentUser = useCurrentUser();\r\n  const cefConfig: CEFConfig = useCefConfig();\r\n\r\n  const authenticatedRoutes = [\r\n    &lt;Route\r\n      key={cefConfig.routes.dashboard.root}\r\n      path={cefConfig.routes.dashboard.root}\r\n      component={Dashboard}\r\n    /&gt;\r\n  ];\r\n\r\n  const unauthenticatedRoutes = [\r\n    &lt;Route\r\n      key={cefConfig.routes.forgotPassword.root}\r\n      path={cefConfig.routes.forgotPassword.root}&gt;\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12}\r\n          sm={8}\r\n          md={6}\r\n          lg={5}\r\n          className=\"mx-auto my-5\"&gt;\r\n          &lt;ForgotPassword /&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n    &lt;/Route&gt;,\r\n    &lt;Route\r\n      key={cefConfig.routes.forgotUsername.root}\r\n      path={cefConfig.routes.forgotUsername.root}&gt;\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12}\r\n          sm={8}\r\n          md={6}\r\n          lg={5}\r\n          className=\"mx-auto my-5\"&gt;\r\n          &lt;ForgotUsername /&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n    &lt;/Route&gt;,\r\n    &lt;Route\r\n      key={cefConfig.routes.forcedPasswordReset.root}\r\n      path={cefConfig.routes.forcedPasswordReset.root}&gt;\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12}\r\n          sm={8}\r\n          md={6}\r\n          lg={5}\r\n          className=\"mx-auto my-5\"&gt;\r\n          &lt;ForcedPasswordReset /&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n    &lt;/Route&gt;,\r\n    &lt;Route\r\n      key={cefConfig.routes.registration.root}\r\n      path={cefConfig.routes.registration.root}\r\n      component={Registration}\r\n    /&gt;\r\n  ];\r\n\r\n  return (\r\n    &lt;Layout&gt;\r\n      &lt;Switch&gt;\r\n        &lt;Route exact\r\n          path={cefConfig.routes.site.root}\r\n          component={Home} /&gt;\r\n        &lt;Route path={cefConfig.routes.cart.root} component={Cart} /&gt;\r\n        &lt;Route path={cefConfig.routes.catalog.root} component={Catalog} /&gt;\r\n        &lt;Route path=\"/compare\" component={Compare} /&gt;\r\n        {/* @ts-ignore */}\r\n        &lt;Route path={cefConfig.routes.checkout.root} component={Checkout} /&gt;\r\n        &lt;Route path={cefConfig.routes.productDetail.root} component={ProductDetails} /&gt;\r\n        &lt;Route path=\"/privacy-statement\" component={Privacy} /&gt;\r\n        &lt;Route path=\"/store-locator\" component={StoreLocator} /&gt;\r\n        {/* eslint-disable-next-line no-negated-condition */}\r\n        {currentUser.ID &gt; 0\r\n          ? [ ...authenticatedRoutes, unauthenticatedRoutes ]\r\n          : [ ...unauthenticatedRoutes ]}\r\n        &lt;Redirect to=\"/\" /&gt;\r\n      &lt;/Switch&gt;\r\n    &lt;/Layout&gt;\r\n  );\r\n};\r\n\r\nexport default App;\r\n","/** @format */\r\n\r\n// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read http://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n  window.location.hostname === \"localhost\" ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === \"[::1]\" ||\r\n    // 127.0.0.1/8 is considered localhost for IPv4.\r\n    window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\nexport default function register() {\r\n  if (process.env.NODE_ENV === \"production\" &amp;&amp; \"serviceWorker\" in navigator) {\r\n    // The URL constructor is available in all browsers that support SW.\r\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n    if (publicUrl.origin !== window.location.origin) {\r\n      // Our service worker won't work if PUBLIC_URL is on a different origin\r\n      // from what our page is served on. This might happen if a CDN is used to\r\n      // serve assets; see http://github.com/facebookincubator/create-react-app/issues/2374\r\n      return;\r\n    }\r\n\r\n    window.addEventListener(\"load\", () =&gt; {\r\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n      if (isLocalhost) {\r\n        // This is running on localhost. Lets check if a service worker still exists or not.\r\n        checkValidServiceWorker(swUrl);\r\n      } else {\r\n        // Is not local host. Just register service worker\r\n        registerValidSW(swUrl);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n  navigator.serviceWorker\r\n    .register(swUrl)\r\n    .then(registration =&gt; {\r\n      registration.onupdatefound = () =&gt; {\r\n        const installingWorker = registration.installing;\r\n        installingWorker.onstatechange = () =&gt; {\r\n          if (installingWorker.state === \"installed\") {\r\n            if (navigator.serviceWorker.controller) {\r\n              // At this point, the old content will have been purged and\r\n              // the fresh content will have been added to the cache.\r\n              // It's the perfect time to display a \"New content is\r\n              // available; please refresh.\" message in your web app.\r\n              console.log(\"New content is available; please refresh.\");\r\n            } else {\r\n              // At this point, everything has been precached.\r\n              // It's the perfect time to display a\r\n              // \"Content is cached for offline use.\" message.\r\n              console.log(\"Content is cached for offline use.\");\r\n            }\r\n          }\r\n        };\r\n      };\r\n    })\r\n    .catch(error =&gt; {\r\n      console.error(\"Error during service worker registration:\", error);\r\n    });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl) {\r\n  // Check if the service worker can be found. If it can't reload the page.\r\n  fetch(swUrl)\r\n    .then(response =&gt; {\r\n      // Ensure service worker exists, and that we really are getting a JS file.\r\n      if (response.status === 404 || response.headers.get(\"content-type\").indexOf(\"javascript\") === -1) {\r\n        // No service worker found. Probably a different app. Reload the page.\r\n        navigator.serviceWorker.ready.then(registration =&gt; {\r\n          registration.unregister().then(() =&gt; {\r\n            window.location.reload();\r\n          });\r\n        });\r\n      } else {\r\n        // Service worker found. Proceed as normal.\r\n        registerValidSW(swUrl);\r\n      }\r\n    })\r\n    .catch(() =&gt; {\r\n      console.log(\"No internet connection found. App is running in offline mode.\");\r\n    });\r\n}\r\n\r\nexport function unregister() {\r\n  if (\"serviceWorker\" in navigator) {\r\n    navigator.serviceWorker.ready.then(registration =&gt; {\r\n      registration.unregister();\r\n    });\r\n  }\r\n}\r\n","import i18n from \"i18next\";\r\nimport axios from \"axios\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport resourcesToBackend from \"i18next-resources-to-backend\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\n\r\ni18n\r\n  // detect user language\r\n  // learn more: http://github.com/i18next/i18next-browser-languageDetector\r\n  .use(LanguageDetector)\r\n  // pass the i18n instance to react-i18next.\r\n  .use(initReactI18next)\r\n  .use(\r\n    resourcesToBackend(async (language, namespace, callback) =&gt; {\r\n      while (!document.cefConfig) {\r\n        await new Promise(resolve =&gt; setTimeout(resolve, 100));\r\n      }\r\n      const cefConfig = document.cefConfig;\r\n      axios\r\n        .get(\r\n          corsLink(\r\n            cefConfig,\r\n            \"/lib/cef/js/i18n/\" + \"ui.storefront.\" + language + \".json\",\r\n            \"ui\"\r\n          )\r\n        )\r\n        .then((resources) =&gt; {\r\n          callback(null, resources.data);\r\n        })\r\n        .catch((error) =&gt; {\r\n          console.error(\"resourcesToBackEnd:Error\\n\", error);\r\n          callback(error, null);\r\n        });\r\n    })\r\n  )\r\n  // init i18next\r\n  // for all options read: http://www.i18next.com/overview/configuration-options\r\n  .init({\r\n    debug: false,\r\n    fallbackLng: \"en_US\",\r\n    supportedLngs: [\r\n      \"en_US\",\r\n      \"de_DE\",\r\n      \"en_CA\",\r\n      \"en_GB\",\r\n      \"es_ES\",\r\n      \"fr_FR\",\r\n      \"it_IT\",\r\n      \"ja_JP\",\r\n      \"ko_KR\",\r\n      \"pt_PT\",\r\n      \"ru\",\r\n      \"sw\",\r\n      \"tr\",\r\n      \"zh_Hans_CN\",\r\n      \"zh_TW\"\r\n    ],\r\n    interpolation: {\r\n      escapeValue: false // not needed, react escapes by default\r\n    }\r\n  });\r\n\r\nexport default i18n;\r\n","import { configureStore } from \"@reduxjs/toolkit\";\r\n\r\nimport addressBookReducer from \"./slices/addressBookSlice\";\r\nimport authReducer from \"./slices/authSlice\";\r\nimport cartReducer from \"./slices/cartSlice\";\r\nimport cefConfigReducer from \"./slices/cefConfigSlice\";\r\nimport signalRReducer from \"./slices/signalRSlice\";\r\nimport walletSliceReducer from \"./slices/walletSlice\";\r\n\r\nexport const store = configureStore({\r\n  reducer: {\r\n    addressBook: addressBookReducer,\r\n    auth: authReducer,\r\n    carts: cartReducer,\r\n    cefConfig: cefConfigReducer,\r\n    signalR: signalRReducer,\r\n    wallet: walletSliceReducer,\r\n  }\r\n});\r\n\r\nexport type RootState = ReturnType&lt;typeof store.getState&gt;;\r\nexport type WithLoading&lt;T&gt; = T &amp; { Loading?: boolean; };\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport Cookies from \"js-cookie\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\r\nimport {\r\n  EndUserEventRequest,\r\n  EventModel,\r\n  PageViewEventModel,\r\n  PageViewModel,\r\n  VisitModel,\r\n  VisitorModel\r\n} from \"src/_api/cvApi._DtoClasses\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\r\nimport { useLocation } from \"react-router\";\r\nimport { Guid } from \"src/_api/cvApi.shared\";\r\n\r\nexport const TrackingSnippet = (): JSX.Element =&gt; {\r\n  const cefConfig = useCefConfig();\r\n  const location = useLocation();\r\n\r\n  const lastEventRef = useRef(null);\r\n\r\n  const [ cookieData, setCookieData ] = useState&lt;{\r\n    visitorKeyCookie: string;\r\n    visitKeyCookie: string;\r\n    visitorID: string;\r\n    visitID: string;\r\n  }&gt;(null);\r\n\r\n  const upsertVisitorModel = (): VisitorModel =&gt; ({\r\n    Active: true,\r\n    CreatedDate: new Date(),\r\n    CustomKey: Cookies.get(ServiceStrings.tracking.visitorKey),\r\n    ID: 0,\r\n    StatusID: 1,\r\n    TypeID: 1\r\n  } as VisitorModel);\r\n\r\n  const upsertVisitModel = (): VisitModel =&gt; ({\r\n    Active: true,\r\n    CreatedDate: new Date(),\r\n    CustomKey: Cookies.get(ServiceStrings.tracking.visitKey),\r\n    ID: 0,\r\n    StatusID: 1,\r\n    TypeID: 1,\r\n    VisitorID: Number(cookieData?.visitorID) || null\r\n  } as VisitModel);\r\n\r\n  const upsertEventModel = (): EventModel =&gt; ({\r\n    Active: true,\r\n    CreatedDate: new Date(),\r\n    CustomKey: \"Page View\",\r\n    Name: \"Page View\",\r\n    StatusID: 1,\r\n    TypeID: 1,\r\n    VisitID: Number(cookieData?.visitID) || null,\r\n    VisitorID: Number(cookieData?.visitorID) || null\r\n  } as EventModel);\r\n\r\n  const createPageViewModel = (): PageViewModel =&gt; ({\r\n    Active: true,\r\n    CreatedDate: new Date(),\r\n    Name: document.title,\r\n    StatusID: 1,\r\n    TypeID: 1,\r\n    URI: window.location.href,\r\n    VisitorID: Number(cookieData?.visitorID) || null\r\n  } as PageViewModel);\r\n\r\n  const createPageViewEventModel = (): PageViewEventModel =&gt; ({\r\n    Active: true,\r\n    CreatedDate: new Date(),\r\n    EventID: null,\r\n    ID: 0,\r\n    Name: \"Page View Event\",\r\n    PageViewID: null,\r\n    StatusID: 1,\r\n    TypeID: 1\r\n  } as PageViewEventModel);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig?.featureSet.tracking.enabled) {\r\n      return;\r\n    }\r\n    setupCookies();\r\n  }, [ cefConfig ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (cookieData &amp;&amp; window.location.href !== lastEventRef.current) {\r\n      lastEventRef.current = window.location.href;\r\n      createEvent();\r\n    }\r\n  }, [ cookieData, location ]);\r\n\r\n  function setupCookies(): void {\r\n    let visitorKeyCookie = Cookies.get(ServiceStrings.tracking.visitorKey);\r\n    if (!visitorKeyCookie) {\r\n      const newGUID = Guid.newGuid();\r\n      Cookies.set(ServiceStrings.tracking.visitorKey, newGUID, getCookiesOptions(cefConfig));\r\n      visitorKeyCookie = newGUID;\r\n    }\r\n    let visitKeyCookie = Cookies.get(ServiceStrings.tracking.visitKey);\r\n    if (!visitKeyCookie) {\r\n      const newGUID = Guid.newGuid();\r\n      Cookies.set(ServiceStrings.tracking.visitKey, newGUID, getCookiesOptions(cefConfig));\r\n      visitKeyCookie = newGUID;\r\n    }\r\n    const visitorID = Cookies.get(ServiceStrings.tracking.visitorID);\r\n    const visitID = Cookies.get(ServiceStrings.tracking.visitID);\r\n    setCookieData({ visitorKeyCookie, visitKeyCookie, visitorID, visitID });\r\n  }\r\n\r\n  function createEvent(): void {\r\n    // Check for visitor and visit, if exists then reference ID\r\n    const dto = {\r\n      PageView: createPageViewModel(),\r\n      PageViewEvent: createPageViewEventModel()\r\n    } as EndUserEventRequest;\r\n    if (cookieData?.visitorID) {\r\n      dto.VisitorID = Number(cookieData.visitorID);\r\n    } else {\r\n      dto.Visitor = upsertVisitorModel();\r\n    }\r\n    if (cookieData?.visitID) {\r\n      dto.VisitID = Number(cookieData.visitID);\r\n    } else {\r\n      dto.Visit = upsertVisitModel();\r\n    }\r\n    dto.Event = upsertEventModel();\r\n    cvApi.tracking.CreateFullPageViewEvent(dto)\r\n      .then(r =&gt; {\r\n        if (!r?.data?.ActionSucceeded) {\r\n          console.error(\"Failed to store tracking data for page view\");\r\n          return;\r\n        }\r\n        const visitorIDFromRes = r.data.Result.VisitorID;\r\n        Cookies.set(\r\n          ServiceStrings.tracking.visitorID,\r\n          visitorIDFromRes.toString(),\r\n          getCookiesOptions(cefConfig, false)\r\n        );\r\n        const visitIDFromRes = r.data.Result.VisitID;\r\n        Cookies.set(\r\n          ServiceStrings.tracking.visitID,\r\n          visitIDFromRes.toString(),\r\n          getCookiesOptions(cefConfig, false)\r\n        );\r\n      })\r\n      .catch(err =&gt; console.error(err));\r\n  }\r\n\r\n  return &lt;input type=\"hidden\" id=\"trackingSnippet\" /&gt;;\r\n};\r\n\r\nfunction getSubDomain(cefConfig: CEFConfig): string {\r\n  const { host } = window.location;\r\n  let count = 0;\r\n  const matchOfHost = host.match(/\\\\./gu);\r\n  if (matchOfHost) {\r\n    count = matchOfHost.length;\r\n  }\r\n  const rootSegmentCount = (cefConfig?.useSubDomainForCookies\r\n    ? null\r\n    : cefConfig?.usePartialSubDomainForCookiesRootSegmentCount) || 2;\r\n  if (count &lt;= rootSegmentCount - 1) {\r\n    // No subdomain available, like 'claritydev.us'\r\n    return null;\r\n  }\r\n  // At least one subdomain available like 'local.claritydev.us' or 'api.local.claritydev.us'\r\n  const array = host.split(\".\");\r\n  let returnValue = \"\";\r\n  for (let i = 0; i &lt; array.length - rootSegmentCount; i++) {\r\n    if (i &gt; 0) {\r\n      // E.g. 'api.local', put the '.' back in\r\n      returnValue += \".\";\r\n    }\r\n    returnValue += array[i];\r\n  }\r\n  // E.g.- 'local' or 'api.local'\r\n  return returnValue;\r\n}\r\n\r\nfunction getCookiesOptions(cefConfig: CEFConfig, allowExpire: boolean = false): Cookies.CookieAttributes {\r\n  const options: Cookies.CookieAttributes = {\r\n    path: \"/\",\r\n    domain: cefConfig?.useSubDomainForCookies || !getSubDomain(cefConfig)\r\n      ? window.location.host\r\n      : window.location.host.replace(getSubDomain(cefConfig), \"\")\r\n  };\r\n  if (allowExpire) {\r\n    const in120 = new Date();\r\n    in120.setMinutes(in120.getMinutes() + cefConfig.featureSet.tracking.expires);\r\n    options.expires = in120;\r\n  }\r\n  return options;\r\n}\r\n","/** @format */\r\n\r\nimport App from \"src/App\";\r\nimport ReactDOM from \"react-dom\";\r\nimport registerServiceWorker from \"src/registerServiceWorker\";\r\nimport \"bootstrap/dist/js/bootstrap.min.js\";\r\nimport \"src/_meta/js/i18n\";\r\nimport { Suspense } from \"react\";\r\nimport { BrowserRouter, Route } from \"react-router-dom\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport { Provider } from \"react-redux\";\r\nimport { QueryParamProvider } from \"use-query-params\";\r\nimport { store } from \"src/_redux/store\";\r\n\r\nimport { Cart } from \"src/Cart\";\r\nimport { Catalog } from \"src/Catalog/Catalog\";\r\nimport { Categories } from \"src/_shared/Categories\";\r\nimport { CategoriesMenuBar } from \"src/_shared/CategoriesMenuBar\";\r\nimport { CefConfigKeyEnabled } from \"src/_shared/CefConfigKeyEnabled\";\r\nimport { Checkout } from \"src/Checkout/Checkout\";\r\nimport { Compare } from \"src/Catalog/views/Compare\";\r\nimport { CVRoutesManager } from \"src/_shared/higherOrderComponents\";\r\nimport { Dashboard } from \"src/Dashboard/Dashboard\";\r\nimport { ExternalSearchBox } from \"src/Catalog/controls\";\r\nimport { Footer } from \"src/_shared/Footer\";\r\nimport { ForcedPasswordReset } from \"src/Authentication/ForcedPasswordReset\";\r\nimport { ForgotPassword } from \"src/Authentication/ForgotPassword\";\r\nimport { ForgotPasswordReturn } from \"src/Authentication/ForgotPasswordReturn\";\r\nimport { ForgotUsername } from \"src/Authentication/ForgotUsername\";\r\nimport { HeaderMid } from \"src/_shared/HeaderMid\";\r\nimport { Home } from \"src/Home/Home\";\r\nimport { Icon } from \"src/_shared/Icon\";\r\nimport { LanguageSelectorButton } from \"src/_shared/LanguageSelectorButton\";\r\nimport { LoginForm } from \"src/_shared/forms/LoginForm\";\r\nimport { MicroCart } from \"src/Cart/views\";\r\nimport { MiniCart } from \"src/Cart/views/MiniCart\";\r\nimport { MiniMenu } from \"src/_shared/MiniMenu\";\r\nimport { NavMenu } from \"src/Navigation/NavMenu\";\r\nimport { PopularProducts } from \"src/Catalog/controls/PopularProducts\";\r\nimport { ProductDetails } from \"src/Catalog\";\r\nimport { Registration } from \"src/Authentication/Registration/Registration\";\r\nimport { StoreLocator } from \"src/StoreLocator/StoreLocator\";\r\nimport { Translate } from \"src/_shared/Translate\";\r\nimport { TrackingSnippet } from \"src/Tracking/TrackingSnippet\";\r\n\r\nexport const componentMap = {\r\n  Cart: Cart,\r\n  Catalog: Catalog,\r\n  Categories: Categories,\r\n  CategoriesMenuBar: CategoriesMenuBar,\r\n  CefConfigKeyEnabled: CefConfigKeyEnabled,\r\n  Checkout: Checkout,\r\n  Compare: Compare,\r\n  CVRoutesManager: CVRoutesManager,\r\n  Dashboard: Dashboard,\r\n  ExternalSearchBox: ExternalSearchBox,\r\n  Footer: Footer,\r\n  ForcedPasswordReset: ForcedPasswordReset,\r\n  ForgotPassword: ForgotPassword,\r\n  ForgotPasswordReturn: ForgotPasswordReturn,\r\n  ForgotUsername: ForgotUsername,\r\n  HeaderMid: HeaderMid,\r\n  Home: Home,\r\n  Icon: Icon,\r\n  LanguageSelectorButton: LanguageSelectorButton,\r\n  LoginForm: LoginForm,\r\n  MicroCart: MicroCart,\r\n  MiniCart: MiniCart,\r\n  MiniMenu: MiniMenu,\r\n  NavMenu: NavMenu,\r\n  PopularProducts: PopularProducts,\r\n  ProductDetails: ProductDetails,\r\n  Registration: Registration,\r\n  StoreLocator: StoreLocator,\r\n  TrackingSnippet: TrackingSnippet,\r\n  Translate: Translate\r\n};\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nconst registerComponent = (id, component) =&gt; {\r\n  componentMap[id] = component;\r\n};\r\n\r\nconst getComponentById = id =&gt; {\r\n  /*\r\n  When fetching a component, it is important to return null in case of failure,\r\n  because rendering null will not cause a React error as opposed to rendering undefined.\r\n  */\r\n  if (id) {\r\n    return componentMap[id] || null;\r\n  }\r\n  return null;\r\n};\r\n\r\nconst parseJsonProps = JsonProps =&gt; {\r\n  try {\r\n    return JSON.parse(JsonProps);\r\n  } catch (err) {\r\n    return {};\r\n  }\r\n};\r\n\r\nconst getFallback = (props, hideSuspenseDNNComponents, componentId) =&gt; {\r\n  if (props?.hideSuspense || hideSuspenseDNNComponents.includes(componentId)) {\r\n    return \"\";\r\n  }\r\n  if (props?.suspenseMessage) {\r\n    return props.suspenseMessage;\r\n  }\r\n  return &lt;LoadingWidget size=\"3x\" innerClasses=\"p-2\" /&gt;;\r\n};\r\n\r\nconst baseElement = document.getElementsByTagName(\"base\")[0];\r\nconst rootElement = document.getElementById(\"cef-react-root\");\r\nif (rootElement) {\r\n  console.log(`NODE_ENV=${process.env.NODE_ENV}, SPA MODE`);\r\n\r\n  const baseUrl = baseElement.getAttribute(\"href\");\r\n  ReactDOM.render(\r\n    &lt;Provider store={store}&gt;\r\n      &lt;BrowserRouter basename={baseUrl}&gt;\r\n        &lt;QueryParamProvider ReactRouterRoute={Route}&gt;\r\n          &lt;Suspense fallback={\"...Loading\"}&gt;\r\n            &lt;App /&gt;\r\n          &lt;/Suspense&gt;\r\n        &lt;/QueryParamProvider&gt;\r\n      &lt;/BrowserRouter&gt;\r\n    &lt;/Provider&gt;,\r\n    rootElement\r\n  );\r\n\r\n  registerServiceWorker();\r\n} else {\r\n  console.log(`NODE_ENV=${process.env.NODE_ENV}, DNN MODE`);\r\n\r\n  document.addEventListener(\"DOMContentLoaded\", _e =&gt; {\r\n    const roots = Array.from(document.querySelectorAll(\"[data-react-component]\"));\r\n    if (!roots) {\r\n      return;\r\n    }\r\n    const reactPortalAnchor = document.querySelector(\"div.react-portals-anchor\");\r\n    const hideSuspenseDNNComponents = [\"CategoriesMenuBar\"];\r\n    ReactDOM.render(\r\n      &lt;Provider store={store}&gt;\r\n        &lt;BrowserRouter basename=\"/\"&gt;\r\n          &lt;QueryParamProvider ReactRouterRoute={Route}&gt;\r\n            {roots\r\n              .filter(r =&gt; Boolean(getComponentById(r.dataset.reactComponent)))\r\n              .map(root =&gt; {\r\n                const componentId = root.dataset.reactComponent;\r\n                const Component = getComponentById(componentId);\r\n                const componentJsonProps = root.dataset.reactProps;\r\n                const props = parseJsonProps(componentJsonProps);\r\n                return ReactDOM.createPortal(\r\n                  &lt;Suspense fallback={getFallback(props, hideSuspenseDNNComponents, componentId)}&gt;\r\n                    &lt;Component {...props} /&gt;\r\n                  &lt;/Suspense&gt;,\r\n                  root\r\n                );\r\n              })\r\n            }\r\n          &lt;/QueryParamProvider&gt;\r\n        &lt;/BrowserRouter&gt;\r\n      &lt;/Provider&gt;,\r\n      reactPortalAnchor\r\n    );\r\n  });\r\n}\r\n","/** @format */\r\n\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Dropdown } from \"react-bootstrap\";\r\nimport { Categories } from \"src/_shared/Categories\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ntype TCategoriesMenuBarRender = \"mega\" | \"across\" | \"down\";\r\ntype TCategoriesMenuBarRenderInner = \"dropdown\" | \"mega-tabs\" | \"category-grid\";\r\n\r\ninterface ICategoriesMenuBarProps {\r\n  render: TCategoriesMenuBarRender;\r\n  renderInner?: TCategoriesMenuBarRenderInner;\r\n  behavior: Array&lt;string&gt;;\r\n  text?: number;\r\n  limitChildren?: number;\r\n  limitGrandChildren?: number;\r\n}\r\n\r\nexport const CategoriesMenuBar = (props: ICategoriesMenuBarProps): JSX.Element =&gt; {\r\n  const { t } = useTranslation();\r\n  const cefConfig = useCefConfig();\r\n\r\n  if (!cefConfig || !cefConfig.featureSet.categories.enabled) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    &lt;Dropdown className=\"position-static\"&gt;\r\n      &lt;Dropdown.Toggle variant=\"link\"\r\n        as=\"a\"\r\n        id=\"products-dropdown\"\r\n        className=\"nav-link pointer\"\r\n        rel=\"nofollow\"&gt;\r\n        {t(\"ui.storefront.common.Product.Plural\")}\r\n      &lt;/Dropdown.Toggle&gt;\r\n      &lt;Dropdown.Menu className=\"w-100 mega-menu-no-x-translate container\"&gt;\r\n        &lt;Categories /&gt;\r\n      &lt;/Dropdown.Menu&gt;\r\n    &lt;/Dropdown&gt;\r\n  );\r\n};\r\n","import React from \"react\";\r\nimport { componentMap } from \"src\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ninterface ICefConfigKeyEnabledProps {\r\n  cefConfigKey: string;\r\n  childComponent?: string;\r\n  childComponentProps?: any;\r\n}\r\n\r\nexport const CefConfigKeyEnabled = (props: ICefConfigKeyEnabledProps): JSX.Element =&gt; {\r\n  const { cefConfigKey, childComponent, childComponentProps } = props;\r\n  const cefConfig = useCefConfig();\r\n\r\n  function getKeyEnabled(): boolean {\r\n    if (!cefConfig) {\r\n      return false;\r\n    }\r\n    const result = cefConfigKey.split(\".\").reduce((value, index) =&gt; value[index], cefConfig as any);\r\n    return result;\r\n  }\r\n\r\n  const Component: JSX.Element = (componentMap as unknown as { [componentName: string]: JSX.Element })[childComponent];\r\n\r\n  // @ts-ignore\r\n  return &lt;&gt;{getKeyEnabled() &amp;&amp; Component ? &lt;Component {...childComponentProps} /&gt; : null}&lt;/&gt;;\r\n};\r\n","import { useCallback, useEffect, useState } from \"react\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\n\r\ninterface ICVRouteData {\r\n  route: string;\r\n  // E.g. /dashboard covers /dashboard/invoices\r\n  routeBase?: string;\r\n  authenticatedOnly?: boolean;\r\n  unauthenticatedOnly?: boolean;\r\n  // Milliseconds\r\n  delay?: number;\r\n  // Default '/'\r\n  redirectPath?: string;\r\n}\r\n\r\nexport const CVRoutesManager = (): JSX.Element =&gt; {\r\n  const [ guardedRoutes, setGuardedRoutes ] = useState&lt;ICVRouteData[]&gt;(null);\r\n\r\n  const cefConfig = useCefConfig();\r\n  const currentUser = useCurrentUser();\r\n  const location = useLocation();\r\n  const history = useHistory();\r\n\r\n  const buildRoutes = () =&gt; {\r\n    setGuardedRoutes([\r\n      {\r\n        route: cefConfig.routes.dashboard.root,\r\n        routeBase: cefConfig.routes.dashboard.root,\r\n        authenticatedOnly: true\r\n      },\r\n      {\r\n        route: cefConfig.routes.registration.root,\r\n        unauthenticatedOnly: true,\r\n        delay: 7500\r\n      },\r\n      {\r\n        route: cefConfig.routes.forgotPassword.root,\r\n        unauthenticatedOnly: true\r\n      },\r\n      {\r\n        route: cefConfig.routes.forgotUsername.root,\r\n        unauthenticatedOnly: true\r\n      },\r\n      {\r\n        route: cefConfig.routes.forcedPasswordReset.root,\r\n        unauthenticatedOnly: true\r\n      }\r\n    ]);\r\n  };\r\n\r\n  const redirectUser = useCallback((route: ICVRouteData) =&gt; {\r\n    if (!history || !cefConfig) {\r\n      return;\r\n    }\r\n    setTimeout(() =&gt; {\r\n      history.push(route.redirectPath ?? cefConfig.routes.site.root ?? \"/\");\r\n      history.go(0);\r\n    }, route.delay ?? 100);\r\n  }, [ history, cefConfig ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!cefConfig) {\r\n      return;\r\n    }\r\n    buildRoutes();\r\n  }, [ cefConfig ]);\r\n\r\n  useEffect(() =&gt; {\r\n    if (!guardedRoutes || !currentUser || currentUser.Loading) {\r\n      return;\r\n    }\r\n    for (let i = 0; i &lt; guardedRoutes.length; i++) {\r\n      const { route, routeBase, authenticatedOnly, unauthenticatedOnly } = guardedRoutes[i];\r\n      const pathLowerCased = location.pathname.toLowerCase();\r\n      const routeLowerCased = route.toLowerCase();\r\n      let pathStartsWithRouteBase = false;\r\n      if (routeBase) {\r\n        pathStartsWithRouteBase = pathLowerCased.startsWith(routeBase.toLowerCase());\r\n      }\r\n      if (!pathStartsWithRouteBase &amp;&amp; routeLowerCased !== pathLowerCased) {\r\n        continue;\r\n      }\r\n      if (pathStartsWithRouteBase || routeLowerCased === pathLowerCased) {\r\n        if (authenticatedOnly &amp;&amp; currentUser.ID &lt;= 0\r\n          || unauthenticatedOnly &amp;&amp; currentUser.ID &gt; 0) {\r\n          redirectUser(guardedRoutes[i]);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n  }, [ location.pathname, guardedRoutes, currentUser ]);\r\n\r\n  return &lt;input type=\"hidden\" id=\"routeManagerSnippet\" /&gt;;\r\n};\r\n","import { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { faKey } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { PasswordInputFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { corsLink } from \"src/_shared/common/Cors\";\r\n\r\ninterface IForgotPasswordReturnFormData {\r\n  txtEmail: string;\r\n  txtPassword: string;\r\n  txtToken: string\r\n}\r\n\r\nexport const ForgotPasswordReturn = (): JSX.Element =&gt; {\r\n  const location = useLocation();\r\n  const urlParams = new URLSearchParams(location.search);\r\n\r\n  const [ wasSent, setWasSent ] = useState&lt;boolean&gt;(false);\r\n\r\n  const history = useHistory();\r\n\r\n  const { t } = useTranslation();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const cefConfig = useCefConfig();\r\n  const { register, formState, handleSubmit } = useForm&lt;IForgotPasswordReturnFormData&gt;({\r\n    mode: \"onChange\",\r\n    criteriaMode: \"all\",\r\n    defaultValues: {\r\n      txtEmail: urlParams.get(\"email\") ?? \"\",\r\n      txtToken: urlParams.get(\"token\") ?? \"\"\r\n    }\r\n  });\r\n\r\n  const onSubmit: SubmitHandler&lt;IForgotPasswordReturnFormData&gt; = (data): void =&gt; {\r\n    const { txtEmail, txtPassword, txtToken } = data;\r\n    setRunning();\r\n    cvApi.authentication\r\n      .ForgotPasswordReturn({\r\n        Email: txtEmail,\r\n        Password: txtPassword,\r\n        Token: txtToken\r\n      })\r\n      .then(res =&gt; {\r\n        setWasSent(true);\r\n        history.push(\"/Authentication/Sign-In/Login\");\r\n        setTimeout(() =&gt; window.location.reload(), 500);\r\n        finishRunning(!res.data.ActionSucceeded, null, res.data.Messages);\r\n      })\r\n      .catch(err =&gt; {\r\n        finishRunning(true, err);\r\n      });\r\n  };\r\n\r\n  // Console.log(formState.isValid);\r\n\r\n  return (\r\n    &lt;Form className=\"form-vertical\"\r\n      onSubmit={handleSubmit(onSubmit)}\r\n      autoComplete=\"off\"&gt;\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;h2 className=\"text-center ng-scope\"&gt;\r\n            {t(\"ui.storefront.user.forgotPasswordReturn.PasswordResetForm\")}\r\n          &lt;/h2&gt;\r\n          &lt;p&gt;\r\n            {t(\r\n              // eslint-disable-next-line max-len\r\n              \"ui.storefront.user.forgotPasswordReturn.WithAValidTokenWeCanSetANewPasswordOnYourAccountYouWillBeRequired\"\r\n            )}\r\n          &lt;/p&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      &lt;Row className=\"position-relative\"&gt;\r\n        {viewState.running ? &lt;LoadingWidget overlay={true} /&gt; : null}\r\n        &lt;TextInputFormGroup\r\n          register={register}\r\n          errors={formState.errors}\r\n          isEmail={true}\r\n          formClasses=\"col-12 mb-3\"\r\n          formIdentifier=\"txtEmail\"\r\n          labelText=\"Email\"\r\n          labelKey=\"ui.storefront.common.Email\"\r\n          placeholderText=\"Email\"\r\n          placeholderKey=\"ui.storefront.common.Email\"\r\n          required={true}\r\n          disabled={true}\r\n          maxLength={128}\r\n          maxLengthMessage=\"Email may not exceed 128 characters\"\r\n          patternMessage=\"Email is not valid/formatted properly\"\r\n        /&gt;\r\n        &lt;TextInputFormGroup\r\n          register={register}\r\n          errors={formState.errors}\r\n          formClasses=\"col-12 mb-3\"\r\n          formIdentifier=\"txtToken\"\r\n          labelKey={t(\"ui.storefront.user.forgotPasswordReturn.Token\")}\r\n          placeholderKey={t(\"ui.storefront.user.forgotPasswordReturn.Token\")}\r\n          required={true}\r\n          disabled={true}\r\n          // @ts-ignore fontawesome pro icon\r\n          leftIcon={faKey}\r\n        /&gt;\r\n        &lt;PasswordInputFormGroup\r\n          register={register}\r\n          errors={formState.errors}\r\n          formClasses=\"col-12 mb-3\"\r\n          formIdentifier=\"txtPassword\"\r\n          labelKey=\"ui.storefront.user.forgotPasswordReturn.NewPassword\"\r\n          tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\r\n          placeholderText=\"••••••\"\r\n          required={true}\r\n          minLength={7}\r\n        /&gt;\r\n      &lt;/Row&gt;\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12}&gt;\r\n          &lt;Button\r\n            as=\"input\"\r\n            type=\"submit\"\r\n            variant=\"primary\"\r\n            disabled= {wasSent || !formState.isValid}\r\n            size=\"lg\"\r\n            className={\"w-100\"}\r\n            value={t(\"ui.storefront.user.forgotPasswordReturn.SaveNewPassword\") as string}\r\n          /&gt;\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12}&gt;\r\n          {wasSent\r\n            ? &lt;Row className=\"mt-3\"&gt;\r\n              &lt;Col xs={12}&gt;\r\n                &lt;Alert variant=\"success\"&gt;\r\n                  &lt;p&gt;\r\n                    &lt;span&gt;\r\n                      {t(\r\n                        \"ui.storefront.user.forgotPasswordReturn.yourPasswordHasBeenReset.Message\"\r\n                      )}\r\n                    &lt;/span&gt;\r\n                  &lt;/p&gt;\r\n                &lt;/Alert&gt;\r\n              &lt;/Col&gt;\r\n            &lt;/Row&gt;\r\n            : null}\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n      &lt;Row&gt;\r\n        &lt;Col xs={12}&gt;\r\n          {wasSent &amp;&amp; viewState.hasError\r\n            ? &lt;Row className=\"mt-3\"&gt;\r\n              &lt;Col xs={12}&gt;\r\n                &lt;Alert variant=\"danger\"&gt;\r\n                  &lt;p&gt;\r\n                    &lt;span&gt;\r\n                      {t(\r\n                        // eslint-disable-next-line max-len\r\n                        \"ui.storefront.user.forgotPasswordReturn.ThereWasAnIssueApplyingTheNewPasswordPleaseCheckYourInputsAndTry\"\r\n                      )}\r\n                    &lt;/span&gt;\r\n                     \r\n                    &lt;a href={corsLink(cefConfig, cefConfig?.routes.contactUs.root)}&gt;\r\n                      {t(\"ui.storefront.common.ContactUs\")}\r\n                    &lt;/a&gt;\r\n                  &lt;/p&gt;\r\n                &lt;/Alert&gt;\r\n              &lt;/Col&gt;\r\n            &lt;/Row&gt;\r\n            : null}\r\n        &lt;/Col&gt;\r\n      &lt;/Row&gt;\r\n    &lt;/Form&gt;\r\n  );\r\n};\r\n","/** @format */\r\nimport React from \"react\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { LanguageSelectorButton } from \"src/_shared/LanguageSelectorButton\";\r\nimport { MiniMenu } from \"src/_shared/MiniMenu\";\r\nimport { MicroCart } from \"src/Cart/views\";\r\nimport { ExternalSearchBox } from \"src/Catalog/controls\";\r\n\r\nexport const HeaderMid = (): JSX.Element =&gt; {\r\n  const cefConfig = useCefConfig();\r\n\r\n  const LogoImg = \"/Portals/0/clarity-ecommerce-logo.png\";\r\n\r\n  const languagesEnabled = cefConfig?.featureSet?.languages?.enabled;\r\n\r\n  return (\r\n    &lt;&gt;\r\n      &lt;div className=\"col-12 text-center col-md-auto\"&gt;\r\n        &lt;a data-sid=\"linkHeaderLogo\"\r\n          className=\"navbar-brand\"\r\n          href=\"/\"\r\n          title=\"Clarity eCommerce Development Website\"&gt;\r\n          &lt;img\r\n            data-sid=\"imgHeaderLogo\"\r\n            className=\"img-fluid lazyload\"\r\n            alt=\"Clarity eCommerce Development Website\"\r\n            width=\"175\"\r\n            height=\"38\"\r\n            src={LogoImg}\r\n          /&gt;\r\n        &lt;/a&gt;\r\n        {/* &lt;div cef-brand-formatting-header&gt;&lt;/div&gt; */}\r\n      &lt;/div&gt;\r\n      &lt;div className=\"col form-inline\"&gt;\r\n        &lt;ExternalSearchBox /&gt;\r\n      &lt;/div&gt;\r\n      &lt;div\r\n        className=\"col-12 col-xl-auto\"\r\n        style={{\r\n          minHeight: cefConfig &amp;&amp; cefConfig.featureSet.languages.enabled ? 70 : 0\r\n        }}&gt;\r\n        &lt;div className={`row align-items-center ${languagesEnabled ? \"mt-2\" : \"\"}`}&gt;\r\n          &lt;div className=\"col-auto nav-item\" id=\"react-microQuoteCart\"&gt;\r\n            &lt;MicroCart type=\"Quote Cart\" /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=\"col-auto nav-item\" id=\"react-microCart\"&gt;\r\n            &lt;MicroCart type=\"Cart\" /&gt;\r\n          &lt;/div&gt;\r\n          &lt;div className=\"nav-item col-auto ms-auto dropdown\"&gt;\r\n            &lt;MiniMenu /&gt;\r\n          &lt;/div&gt;\r\n        &lt;/div&gt;\r\n        {cefConfig &amp;&amp; cefConfig.featureSet.languages.enabled\r\n          ? &lt;div className=\"row align-items-center mb-2\"&gt;\r\n            {/* &lt;div className=\"nav-item col\"&gt;\r\n              &lt;div cef-affiliate-account-selector&gt;&lt;/div&gt;\r\n            &lt;/div&gt; */}\r\n            &lt;div className=\"col-auto nav-item\"&gt;\r\n              &lt;LanguageSelectorButton /&gt;\r\n            &lt;/div&gt;\r\n          &lt;/div&gt;\r\n          : null}\r\n      &lt;/div&gt;\r\n    &lt;/&gt;\r\n  );\r\n};\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { IconDefinition, IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\n\r\ninterface IIconProps {\r\n  icon: IconDefinition;\r\n  type: \"regular\" | \"solid\" | \"brands\";\r\n  classes?: string;\r\n}\r\n\r\nexport const Icon = (props: IIconProps): JSX.Element =&gt; {\r\n  const { icon, type, classes } = props;\r\n\r\n  function getIcon(): IconDefinition {\r\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n    const newIcon: IconDefinition = require(`@fortawesome/free-${type}-svg-icons`)[\r\n      icon as keyof IconProp\r\n    ];\r\n    if (!newIcon) {\r\n      console.error(`Unknown icon: ${icon} type: ${type}`, \"Look in Icon.tsx\");\r\n      return null;\r\n    }\r\n    return newIcon;\r\n  }\r\n\r\n  return &lt;FontAwesomeIcon icon={getIcon()} className={classes ?? \"\"} /&gt;;\r\n};\r\n","/**\r\n * @file React/src/Catalog/controls/PopularProducts.tsx\r\n * @author Copyright (c) 2023-2024 clarity-ventures.com. All rights reserved.\r\n * @desc Popular Products Component\r\n */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { Carousel } from \"src/_shared/common/Carousel\";\r\nimport cvApi from \"src/_api/cvApi\";\r\nimport { Dictionary, ProductModel } from \"src/_api/cvApi.shared\";\r\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\r\nimport { ProductCard } from \"src/Catalog/views/ProductCard\";\r\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\r\nimport _ from \"lodash\";\r\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\r\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\r\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\r\nimport { Row } from \"react-bootstrap\";\r\n\r\nexport const PopularProducts = (): JSX.Element =&gt; {\r\n  const [ products, setProducts ] = useState&lt;ProductModel[]&gt;();\r\n  const cefConfig = useCefConfig();\r\n  const { setRunning, finishRunning, viewState } = useViewState();\r\n  const inventoryFactory = useInventoryFactory();\r\n  const pricingFactory = usePricingFactory();\r\n  useEffect(() =&gt; {\r\n    const getProductsAsync = async () =&gt; {\r\n      try {\r\n        setRunning();\r\n        const result = await cvApi.products.GetBestSellersProducts({\r\n          Count: 8,\r\n          Days: 999,\r\n        });\r\n        if (cefConfig.featureSet.inventory.enabled) {\r\n          result.data = await inventoryFactory.bulkFactoryAssign(result.data);\r\n        }\r\n        if (cefConfig.featureSet.pricing.enabled) {\r\n          result.data = await pricingFactory.bulkFactoryAssign(result.data);\r\n        }\r\n        setProducts(result.data);\r\n        finishRunning();\r\n      } catch (err) {\r\n        finishRunning(true);\r\n      }\r\n    };\r\n    getProductsAsync();\r\n  }, []);\r\n\r\n  return (\r\n    viewState.running || _.isUndefined(products)\r\n      ? &lt;LoadingWidget /&gt;\r\n      : &lt;Carousel\r\n        items={\r\n          _.chunk(products, 4)\r\n            .map((chunk, index): JSX.Element =&gt; &lt;Row key={`chunk_${_.first(chunk).ID}`}&gt;\r\n              {chunk.map(product =&gt; {\r\n                return &lt;ProductCard\r\n                  product={product}\r\n                  key={product.ID}\r\n                  customClasses=\"col-6 col-xl-3\"\r\n                  index={index}\r\n                /&gt;;\r\n              })}\r\n            &lt;/Row&gt;)}\r\n      /&gt;\r\n  );\r\n};\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i &gt; 0 &amp;&amp; deferred[i - 1][2] &gt; priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i &lt; deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j &lt; chunkIds.length; j++) {\n\t\t\tif ((priority &amp; 1 === 0 || notFulfilled &gt;= priority) &amp;&amp; Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority &lt; notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module &amp;&amp; module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) &amp;&amp; !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' &amp;&amp; Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i &lt; chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) &amp;&amp; installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkclarity_ecommerce_react\"] = self[\"webpackChunkclarity_ecommerce_react\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [216], function() { return __webpack_require__(11882); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","LoginResponseStatus","corsLinkRootInner","urlConfig","host","root","corsLinkRoot","cefConfig","area","areaToUse","routes","hostIsProvidedByLookup","swapReturnUrlToken","path","retVal","indexOf","replace","encodeURI","window","location","pathname","appendQueryStringParams","basePlusPath","noCache","paramsBody","JSON","stringify","Date","getTime","queryString","URLSearchParams","key","hasOwn","property","append","corsLink","whichUrl","path2","base3","pathToUse3","test","RegExp","substring","length","corsImageLink","fileName","kind","imageResizerParamsBody","images","suffix","instance","axios","baseURL","withCredentials","headers","paramsSerializer","params","stringified","i","param","undefined","Array","j","param2","encodeURIComponent","Accounts","CreateAccountContact","routeParams","join","DeleteAccountContactByID","GetAccountAssociationTypes","_","cvApi","GetAccountContactByID","GetAccounts","GetAccountsForCurrentAccount","GetAccountStatuses","GetAccountTypes","GetAllUserIDsForCurrentAccount","GetCurrentAccount","GetUsersForCurrentAccount","MarkAccountContactAsDefaultBilling","MarkAccountContactAsNeitherBillingNorShipping","MarkAccountContactAsPrimaryShipping","UpdateAccountContact","UpdateCurrentAccount","Advertising","GetAdByID","GetAdZones","GetZoneByID","Attributes","CheckGeneralAttributeExistsByDisplayName","CheckGeneralAttributeExistsByKey","CheckGeneralAttributeExistsByName","GetAttributeGroups","GetAttributeTabs","GetAttributeTypes","GetGeneralAttributeByID","GetGeneralAttributePredefinedOptions","GetGeneralAttributes","GetGeneralFilterAttributesForStorefront","Auctions","CheckAuctionExistsByID","CheckAuctionExistsByKey","CheckAuctionExistsByName","CheckLotExistsByID","CheckLotExistsByKey","CheckLotExistsByName","GetAuctionByID","GetAuctions","GetBids","GetHighestBidForLot","GetLotByID","GetLots","PlaceBid","Authentication","ApproveUserRegistration","ChangePassword","CheckAccountKeyExists","CheckForcedPasswordReset","CheckForMFAForUsername","userName","CompleteRegistration","CreateLiteAccountAndSendValidationEmail","CurrentUserHasAnyPermission","CurrentUserHasAnyRole","CurrentUserHasPermission","CurrentUserHasRole","ForcedPasswordReset","ForgotPassword","ForgotPasswordReturn","ForgotUsername","OktaCodeCallback","OpenIDConnectCodeCallback","RegisterNewUser","RegisterNewUserToAccount","RequestMFAForUsername","ValidateEmail","ValidateEmailIsUnique","ValidateInvitation","ValidatePassword","ValidatePasswordIsGood","ValidateUserNameIsGood","Brands","GetBrandCurrencies","GetBrandLanguages","GetBrands","GetBrandSiteDomains","GetCurrentBrand","Categories","CheckCategoryExistsByID","CheckCategoryExistsByKey","CheckCategoryExistsByName","CheckCategoryExistsBySeoUrl","GetCategories","GetCategoriesThreeLevels","GetCategoriesTwoLevelsFast","GetCategoryByID","GetCategoryByKey","GetCategoryBySeoUrl","GetCategoryForMetaData","GetCategoryImageByID","GetCategoryImages","GetCategoryTree","GetCategoryTypes","GetMenuCategoriesThreeLevels","GetPersonalizedCategoriesForCurrentUser","Contacts","CheckUserExistsByKey","CreateUser","CreateUserWithCode","GetContactByID","GetContactTypes","GetCurrentUser","GetCurrentUserName","GetCurrentUserOnlineStatus","GetSelectedOrCurrentUser","GetUserByID","GetUserByKey","GetUserOnlineStatuses","GetUsers","GetUserStatuses","GetUserTypes","ImportUsersFromExcelToCurrentAccount","RemovePrivacyData","data","RequestPrivacyData","RestrictPrivacyData","SetCurrentUserOnlineStatus","UpdateCurrentUser","UpdateSelectedOrCurrentUser","UpsertContact","Currencies","ConvertCurrencyValueAtoB","GetCurrencies","GetCurrencyByKey","Franchises","CheckFranchiseExistsByID","CheckFranchiseExistsByKey","CheckFranchiseExistsByName","GetCurrentFranchiseID","GetFranchiseByID","GetFranchiseCategories","GetFranchises","Geography","CheckCountryExistsByCode","CheckCountryExistsByKey","CheckCountryExistsByName","CheckRegionExistsByCode","CheckRegionExistsByKey","CheckRegionExistsByName","CreateAddressInBook","GetCountries","GetCountryByID","GetCurrentAccountAddressBook","GetCurrentAccountPrimaryShippingAddress","GetCurrentUserAddressBook","GetDistrictByName","GetDistrictByNameAndRegionID","GetDistricts","GetRegionByID","GetRegionByName","GetRegions","RestrictedRegionCheck","ReversePhonePrefixToCityRegionCountry","Globalization","GetLanguageByKey","GetLanguages","Inventory","GetInventoryLocationRegionsByInventoryLocationID","GetInventoryLocations","GetInventoryLocationSections","Invoicing","CheckSalesInvoiceStateExistsByDisplayName","CheckSalesInvoiceStateExistsByKey","CheckSalesInvoiceStateExistsByName","CheckSalesInvoiceStatusExistsByDisplayName","CheckSalesInvoiceStatusExistsByKey","CheckSalesInvoiceStatusExistsByName","CheckSalesInvoiceTypeExistsByDisplayName","CheckSalesInvoiceTypeExistsByKey","CheckSalesInvoiceTypeExistsByName","GetSalesInvoiceByID","GetSalesInvoiceEvents","GetSalesInvoiceStateByID","GetSalesInvoiceStates","GetSalesInvoiceStatusByID","GetSalesInvoiceStatuses","GetSalesInvoiceTypeByID","GetSalesInvoiceTypes","JSConfigs","GetCacheCounter","GetStoreFrontCEFConfig","GetStoreFrontCEFConfigAlt","GetStoreFrontCefConfigReact","ReloadSettings","Manufacturers","CheckManufacturerExistsByID","CheckManufacturerExistsByKey","CheckManufacturerExistsByName","GetManufacturerByID","GetManufacturers","Media","GetStoredFileUrl","GetUploadStoredFileResults","UploadStoredFile","Messaging","CreateConversation","CreateMessage","DeactivateMessageByID","EndConversation","GetConversationHeadersForCurrentUser","GetMessageByID","GetMessagesForActiveConversationsForCurrentUser","GetMessagesForCurrentUser","GetMessagesForEndedConversationsForCurrentUser","GetMessagesFromCurrentUser","GetOtherConversationUsersTypingStatuses","PostMessageToConversation","SetConversationToCopy","SetConversationUserTypingStateForCurrentUser","isTyping","UpdateMessage","Ordering","CheckSalesOrderStateExistsByDisplayName","CheckSalesOrderStateExistsByKey","CheckSalesOrderStateExistsByName","CheckSalesOrderStatusExistsByDisplayName","CheckSalesOrderStatusExistsByKey","CheckSalesOrderStatusExistsByName","CheckSalesOrderTypeExistsByDisplayName","CheckSalesOrderTypeExistsByKey","CheckSalesOrderTypeExistsByName","GetCurrentAccountSalesOrders","GetCurrentStoreSalesOrders","GetCurrentUserSalesOrders","GetSalesOrderByID","GetSalesOrderEvents","GetSalesOrderStateByID","GetSalesOrderStates","GetSalesOrderStatusByID","GetSalesOrderStatuses","GetSalesOrderTypeByID","GetSalesOrderTypes","GetSecureSalesOrder","GetSubscriptionBySalesOrderID","GetSubscriptionHistoryBySubscriptionID","SendSalesOrderConfirmationEmail","Payments","AssignPayoneerAccountUserForCurrentStore","AssignPayoneerAccountUserForCurrentUser","CheckCreditStatusForStorefrontExistsByDisplayName","CheckCreditStatusForStorefrontExistsByKey","CheckCreditStatusForStorefrontExistsByName","CreateAPayoneerAccountForCurrentStore","CreateAPayoneerAccountForCurrentUser","CreateCurrentUserWalletEntry","CreditForCurrentAccount","CreditPaymentsForCurrentAccount","CreditsForCurrentAccount","CreditsForCurrentAccountLite","CurrentUserMarkWalletEntryAsDefault","DeactivateCurrentUserWalletEntry","GetAuthedURLForBuyerToSetUpPaymentAccounts","GetAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder","orderID","GetAuthedURLForStoreOwnerToSetUpPayoutAccountsForCurrentStore","GetAuthedURLToReleaseFundsForEscrowOrder","GetCreditStatusesForStorefront","GetCreditStatusForStorefrontByID","GetCurrentUserSubscriptions","GetCurrentUserWallet","GetCurrentUserWalletEntryByID","GetMembershipLevels","GetMemberships","GetPaymentInstructionsUrlForEscrowOrder","payoneerAccountID","payoneerCustomerID","GetPaymentMethods","GetPaymentsProviderAuthenticationToken","GetPaymentStatuses","GetPaymentTransactionReport","GetPaymentTypes","GetRepeatTypes","GetSalesInvoicePaymentsForCurrentAccount","GetSubscriptionByID","GetSubscriptionStatuses","GetSubscriptionTypes","GetSurchargeForInvoicePayment","GetSurchargeForQuickInvoicePayment","PayoneerOrderEventWebhookReturn","RefillOnDemandSubscription","UpdateCurrentUserWalletEntry","ViewOnDemandSubscriptions","Pricing","CalculatePricesForProduct","productID","quantity","CalculatePricesForProducts","CreatePriceRule","DeletePriceRuleByID","GetPricePoints","GetPriceRuleByID","GetPriceRules","UpdatePriceRule","Products","CheckProductExistsByID","CheckProductExistsByKey","CheckProductExistsByName","CheckProductExistsBySeoUrl","GetAttributesForProductIDs","GetBestSellersProducts","GetPersonalizationProductsForCurrentUser","GetPersonalizedCategoryAndProductFeedForCurrentUser","GetProductAssociationTypes","GetProductByID","GetProductByKey","GetProductDownloadTypes","GetProductImages","GetProductImageTypes","GetProductInventoryLocationSections","GetProductMetadataByURL","GetProductReview","GetProductReviews","GetProducts","GetProductsByCategory","GetProductsByIDs","GetProductsByPreviouslyOrdered","GetProductsForCurrentStore","GetProductStatuses","GetProductTypes","Providers","AnalyzeCurrentCartToTargetCarts","AnalyzeCurrentQuoteCartToTargetQuoteCarts","BulkCalculateInventory","BulkCheckHasAnyAvailableInventory","CalculateInventory","CancelSubscription","CheckHasAnyAvailableInventory","ClearCurrentCartToTargetCartsAnalysis","ClearCurrentQuoteCartToTargetCartsAnalysis","CreateSalesReturnFromStorefront","GetAvailableInventoryCount","GetBulkAvailableInventoryCount","GetCurrentAccountSalesInvoices","GetCurrentAccountSalesInvoicesLite","GetCurrentAccountSalesQuotes","GetCurrentAccountSalesReturns","GetCurrentAccountSampleRequests","GetCurrentAccountUnpaidOrPartiallyPaidSalesInvoicesCount","GetCurrentUserSalesInvoices","GetCurrentUserSalesQuotes","GetCurrentUserSalesReturns","GetCurrentUserSampleRequests","GetDiscountsForInvoice","GetDiscountsForOrder","GetDiscountsForQuote","GetQuickPaySalesInvoice","GetSecureSalesInvoice","GetSecureSalesQuote","GetSecureSalesReturn","GetSecureSampleRequest","IsSalesOrderReadyForReturn","ModifySubscriptionForCurrentUser","PayMultipleInvoicesByAmounts","PaySingleInvoiceByID","ProcessCurrentCartToSingleOrder","ProcessCurrentCartToTargetOrders","ProcessCurrentQuoteCartToSingleQuote","ProcessCurrentQuoteCartToTargetQuotes","QuickPaySingleInvoiceByID","SearchAuctionCatalogWithProvider","SearchCategoryCatalogWithProvider","SearchFranchiseCatalogWithProvider","SearchLotCatalogWithProvider","SearchManufacturerCatalogWithProvider","SearchProductCatalogWithProvider","SearchStoreCatalogWithProvider","SearchVendorCatalogWithProvider","SendInvitation","SendReceiptNotificationWithEmail","SetSalesQuoteAsApproved","SetSalesQuoteAsCancelled","SetSalesQuoteAsPending","SetSalesQuoteAsRejected","SetSalesReturnAsCancelled","SetSalesReturnAsShipped","SubmitRequestForQuoteForGenericProducts","SubmitRequestForQuoteForSingleProduct","SuggestAuctionCatalogWithProvider","SuggestCategoryCatalogWithProvider","SuggestFranchiseCatalogWithProvider","SuggestLotCatalogWithProvider","SuggestManufacturerCatalogWithProvider","SuggestProductCatalogWithProvider","SuggestStoreCatalogWithProvider","SuggestVendorCatalogWithProvider","UpdateSalesReturnFromStorefront","ValidateAddress","Questionnaire","CheckIfQuestionnaireIsAnswered","GetQuestions","SecureCreateAnswers","Quoting","CheckSalesQuoteStateExistsByDisplayName","CheckSalesQuoteStateExistsByKey","CheckSalesQuoteStateExistsByName","CheckSalesQuoteStatusExistsByDisplayName","CheckSalesQuoteStatusExistsByID","CheckSalesQuoteStatusExistsByKey","CheckSalesQuoteStatusExistsByName","CheckSalesQuoteTypeExistsByDisplayName","CheckSalesQuoteTypeExistsByKey","CheckSalesQuoteTypeExistsByName","GetSalesQuoteByID","GetSalesQuoteEvents","GetSalesQuotes","GetSalesQuoteStateByID","GetSalesQuoteStates","GetSalesQuoteStatusByID","GetSalesQuoteStatuses","GetSalesQuoteTypeByID","GetSalesQuoteTypes","Returning","CheckSalesReturnStateExistsByDisplayName","CheckSalesReturnStateExistsByKey","CheckSalesReturnStateExistsByName","CheckSalesReturnStatusExistsByDisplayName","CheckSalesReturnStatusExistsByKey","CheckSalesReturnStatusExistsByName","CheckSalesReturnTypeExistsByDisplayName","CheckSalesReturnTypeExistsByKey","CheckSalesReturnTypeExistsByName","GetSalesReturnByID","GetSalesReturnEvents","GetSalesReturnReasons","GetSalesReturns","GetSalesReturnStateByID","GetSalesReturnStates","GetSalesReturnStatusByID","GetSalesReturnStatuses","GetSalesReturnTypeByID","GetSalesReturnTypes","Reviews","CreateReview","GetReviewTypes","Sales","GetCurrentAccountSalesGroups","GetSalesGroupByID","GetSalesItemTargetTypes","GetSecureSalesGroup","Sampling","GetSampleRequestByID","GetSampleRequestStates","GetSampleRequestStatuses","GetSampleRequestTypes","Scheduling","CancelAppointment","ConfirmAppointment","GetCurrentAccountAppointments","GetSecureAppointment","ReserveAppointment","Shipping","GetPackageTypes","GetShipmentStatuses","GetShipmentTypes","Shopping","AddBufferSkuCartItem","AddCartItem","AddCartItems","AddCompareCartItem","AddStaticCartItem","AddStaticCartLot","ApplyCurrentCartShippingRateQuote","BulkOrder","ClearCurrentCart","ClearCurrentCartShippingRateQuote","ClearCurrentCompareCart","ClearCurrentStaticCart","CreateCartTypeForCurrentUser","CurrentCartAddBufferFee","CurrentCartAddDiscount","CurrentCartClearBillingContact","CurrentCartClearShippingContact","CurrentCartGetShippingContact","CurrentCartRemoveDiscount","CurrentCartSetBillingContact","CurrentCartSetSetSameAsBilling","CurrentCartSetShippingContact","CurrentCartUpdateAttributes","DeleteCartByID","DeleteCartTypeByID","DeleteCartTypeForCurrentUser","GetCartItemByID","GetCartItems","GetCartStates","GetCartStatuses","GetCartTypeByName","GetCartTypeForCurrentUser","GetCartTypes","GetCurrentCart","GetCurrentCartItems","GetCurrentCartShippingRateQuotes","GetCurrentCompareCart","GetCurrentCompareCartItems","GetCurrentStaticCart","GetCurrentStaticCartItems","GetCurrentUserCartTypes","GetFileHeaders","RemoveCartItemByID","RemoveCartItemByProductIDAndType","RemoveCartItemDiscount","RemoveCompareCartItemByProductID","RemoveStaticCartItemByProductIDAndType","ShareCurrentCartItemsByEmail","ShareStaticCartItemsByEmail","UpdateCartItemQuantity","UpdateCartItems","UpdateCartType","Stores","CheckStoreExistsByID","CheckStoreExistsByKey","CheckStoreExistsByName","CheckStoreTypeExistsByDisplayName","CheckStoreTypeExistsByKey","CheckStoreTypeExistsByName","GetCurrentStore","GetSiteDomainByID","GetSiteDomains","GetStoreAdministratorUser","storeID","GetStoreByID","GetStoreBySeoUrl","GetStoreInventoryLocationsMatrix","GetStoreInventoryLocationTypes","GetStoreRegionsByStoreID","GetStores","GetStoreTypeByID","GetStoreTypes","GetStoreUsers","Structure","CreateNote","GetNoteByID","GetNoteTypes","Tracking","CreateFullPageViewEvent","GetRecentlyViewedProducts","Vendors","CheckVendorExistsByID","CheckVendorExistsByKey","CheckVendorExistsByName","GetVendorByID","GetVendors","accounts","advertising","attributes","auctions","authentication","brands","categories","contacts","currencies","franchises","geography","globalization","inventory","invoicing","jsConfigs","manufacturers","media","messaging","ordering","payments","pricing","products","providers","questionnaire","quoting","returning","reviews","sales","sampling","scheduling","shipping","shopping","stores","structure","tracking","vendors","cacheCounter","this","Promiser","promises","results","promiser","cacheResult","Promise","then","r","resultKey","cefConfigSlice","createSlice","name","initialState","value","reducers","setCefConfig","state","action","payload","actions","useCefConfig","useSelector","dispatch","useDispatch","useEffect","fromDoc","document","catch","counter","readOrPopulateAuthenticationCookie","populator","loop","cookieValue","cookie","match","pop","getCookieValue","useAuthFactory","useState","authFactory","setAuthFactory","factory","preAuth","force","ActionSucceeded","loadCurrentUser","authed","setUser","Loading","loadCurrentAccount","setAccount","hasRole","role","Name","readRoleCookie","hasPermission","permission","readPermissionCookie","login","credentials","authProviderMFAEnabled","MFAToken","Username","mfaResult","Status","Challenge","MFAResult","Result","console","error","Password","authProvider","split","provider","authResponse","UserName","Success","reject","Failure","requestMFA","username","usePhone","UsePhone","logout","href","site","err","register","user","Messages","registerToAcct","updateCurrentUser","newUser","updateCurrentAccount","newAccount","authSlice","currentUser","currentAccount","useCurrentUser","auth","currencyFormatter","Intl","NumberFormat","style","currency","camelCaseToHumanReadable","word","charAt","toUpperCase","ServiceStrings","inStorePickup","selectedStoreID","shipOption","shipToHome","shipToStore","cobalt","dnnSSO","identity","openIdConnect","errors","unableToDetectDNNLogin","carts","types","cart","compare","favorites","notifyMe","quote","samples","wishList","targetGroupingPrefix","kinds","session","static","props","hasASelectedRateQuote","checkout","paymentMethods","ach","creditCard","echeck","free","invoice","payPal","payoneer","quoteMe","storeCredit","wireTransfer","steps","billing","completed","confirmation","method","payment","shippingRates","splitShipping","cvgrid","filters","attribute","autocomplete","boolean","input","minmaxdate","minmaxnumber","select","events","account","loaded","updated","refreshRoles","addressBook","added","deleteCancelled","deleteConfirmed","deleted","editCancelled","editSave","reset","resetRegionDropdownNeeded","associator","removed","ready","changed","signIn","signInFailed","signOut","cleared","itemAdded","itemRemoved","itemsAdded","resetTargets","updateShoppingLists","catalog","change","categoryTreeReady","searchComplete","chat","newMessage","nextStep","propertyChanged","changeFinished","grid","built","invoices","paymentMade","lang","lineItems","menus","deactivateChildren","deactivateGroups","hoverToggleOff","modals","close","orders","complete","paging","detailProductLoaded","refreshReviews","selectedVariantChanged","variantInfoLoaded","totalsUpdated","salesQuotes","rateQuoteSelected","revalidateStep","setSelectedRateQuoteID","unready","signalR","sendMaxAutoBidAsync","receiveMaxAutoBid","sendQuickBidAsync","receiveQuickBid","states","statuses","selectionUpdate","nearbyUpdate","users","importedToAccount","wallet","modalSizes","xl","lg","md","sm","redux","actionTypes","setCart","setMessages","setLoading","setCurrentAccount","currentAccountAddressBook","setCurrentAccountAddressBook","logUserIn","logUserOut","quoteCart","setQuoteCart","setSignalRConnection","staticCarts","setCompareList","setFavoritesList","setNotifyMeList","setProductAlertList","setShoppingLists","setWatchList","setWishList","setWallet","registration","basicInfo","custom","approved","actionTitle","actionTitleAlt","confirmTemplate","description","expired","inProcess","processed","rejected","submitted","void","submitQuote","visitID","visitKey","visitorID","visitorKey","InventoryFactory","product","featureSet","enabled","readInventory","genBlankInventoryObj","idToUse","ProductID","ID","loading","IsDiscontinued","IsUnlimitedStock","IsOutOfStock","QuantityPresent","QuantityAllocated","QuantityOnHand","MaximumPurchaseQuantity","MaximumPurchaseQuantityIfPastPurchased","AllowBackOrder","MaximumBackOrderPurchaseQuantity","MaximumBackOrderPurchaseQuantityIfPastPurchased","MaximumBackOrderPurchaseQuantityGlobal","AllowPreSale","PreSellEndDate","QuantityPreSellable","QuantityPreSold","MaximumPrePurchaseQuantity","MaximumPrePurchaseQuantityIfPastPurchased","MaximumPrePurchaseQuantityGlobal","RelevantLocations","dontBuildReadInventoryFunction","warn","toProcess","forEach","push","productIDsToUse","isSalesItem","x","ProductIDs","found","find","Number","TypeName","productInventory","useInventoryFactory","inventoryFactory","setInventoryFactory","useCartFactory","cartFactory","setCartFactory","allCarts","useAllCarts","addItemToCart","type","totalQuantityDesired","SalesItems","Quantity","checkIfQuantityExceedsStock","result","reloadCart","addAllItemsToCart","items","toSend","item","UnitCorePrice","ExtendedPrice","ItemType","Active","CreatedDate","Items","addItemToStaticCart","reloadStaticCart","removeItemFromCart","cartItemID","removeItemFromStaticCart","addToCompare","removeFromCompare","clearCompare","addDiscount","Code","removeDiscount","discount","discountType","DiscountTypeID","removeFn","updateItemQuantity","CartItemID","QuantityBackOrdered","createShoppingList","reloadSessionCart","setCartByType","Validate","resultCopy","bulkFactoryAssign","messages","cartValue","reloadShoppingLists","IncludeNotCreated","Results","checkIfItemIsInStaticCart","Boolean","cartSlice","shoppingLists","useCart","useShoppingLists","list","MicroCart","isQuoteCart","className","ItemQuantity","Totals","format","Total","TotalsWidget","totals","tableClasses","showHeader","hideShipping","hideHandling","hideFees","hideDiscounts","hideTaxes","padAlign","hasMissingPricing","t","useTranslation","Table","size","hover","colSpan","SubTotal","Handling","Fees","discounts","Discounts","taxes","Tax","ImageWithFallback","src","alt","mode","scale","maxheight","maxwidth","imgSrc","setImgSrc","fallBackError","setFallBackError","onError","event","Translate","translateKey","attrs","assignableAttributes","setAssignableAttributes","tempAssignableAttributes","attrName","buildAssignableAttributes","LoadingWidget","overlay","padIn","message","messageKey","classes","innerClasses","additionalClasses","zIndex","background","xs","Spinner","animation","Modal","title","titleID","onCancel","show","modalBodyClasses","onHide","contentClassName","closeButton","closeVariant","children","defaultProps","useViewState","settings","debugMode","errorMessage","errorMessages","hasError","running","success","waitMessage","viewState","setViewState","consoleDebug","debug","setRunning","newValue","prototype","toString","call","msg","finishRunning","errorMsg","errMessagePromise","asCallbackArg","status","statusText","ResponseStatus","Message","parse","asError","debounce500","updateOn","debounce","default","blur","allowInvalid","FormGroupLabel","tooltipText","label","formIdentifier","required","OverlayTrigger","placement","delay","hide","tooltipProps","Tooltip","htmlFor","CardInputFormGroup","setValue","cardInput","onChange","target","valid","cardValidator","isPotentiallyValid","card","cardNumber","cardNumberVerification","cardNumberToUse","replaceAll","gaps","offsets","concat","components","start","end","Math","min","prettyCardNumber","validate","isValid","maxLength","minLength","autoComplete","inputMode","placeholder","CheckboxFormGroup","disabled","tooltipKey","inputClass","formClasses","onBlur","onFocus","onKeyDown","onKeyUp","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOver","onMouseUp","extraOnChange","hideInvalidTooltip","checkboxOptions","touched","setTouched","tooltipIsOpen","setTooltipIsOpen","errorExists","setErrorExists","relevantFields","op","identifier","willBeError","field","option","requiredMessage","labelKey","labelText","checkboxInput","as","filter","errorKey","includes","NumberInputFormGroup","minMessage","max","maxMessage","placeholderText","placeholderKey","isCurrency","isPercent","step","numberInput","valueAsNumber","PasswordInputFormGroup","pattern","patternMessage","inputClasses","minLengthMessage","maxLengthMessage","requireDigitMessage","requireUppercaseMessage","requireLowercaseMessage","requireSpecialMessage","suppressRequirements","showPassword","setShowPassword","reqd","passwordInput","passwordRequireLength","hasLowerCase","passwordRequireLowercase","hasUpperCase","passwordRequireUppercase","hasNumber","passwordRequireDigit","hasSpecial","passwordRequireSpecial","variant","onClick","values","SelectFormGroup","options","leftIcon","rightIcon","selectClass","optionsAsValue","includeNull","nullKey","nullText","hideOptionKey","initialOption","nullOptionDisabled","setNullOptionDisabled","selectedValue","setSelectedValue","nullString","initialValueOption","isNotNull","icon","isArray","opt","TextAreaFormGroup","validateObject","showCharacterCounter","rows","letterCount","setLetterCount","textArea","maxWidth","minHeight","func","wait","context","timeout","args","later","apply","clearTimeout","setTimeout","TextInputFormGroup","dataSid","onKeyPress","onPaste","isEmail","isPhone","isFax","isUsername","textInput","inputAutoComplete","iconString","faRoad","faBriefcase","faCity","renderLeftIcon","LoginForm","showCancel","onLoginSuccess","returnUrl","onClearError","signInLeft","usernameFieldId","passwordFieldId","showMFA","setShowMFA","setHideLogin","emailFirstAndLastFour","setEmailFirstAndLastFour","setMFAToken","hasRunLoginSuccess","setHasRunLoginSuccess","authenticationFactory","history","useHistory","useForm","criteriaMode","formState","getValues","usernameIDResolved","passwordIDResolved","handleCancel","handleSubmit","res","EmailFirstAndLastFour","go","requestMFATokenViaEmail","loginData","keySubmit","Contact","FirstName","Col","LoginModal","onConfirm","loginErrorExists","setLoginErrorExists","Container","fluid","LoginForPricing","showLoginModal","setShowLoginModal","tabIndex","ConfirmationModal","confirmBtnLabel","confirmBtnClasses","confirmBtnVariant","cancelBtnLabel","cancelBtnVariant","cancelBtnClasses","confirmDisabled","confirmBtnSID","cancelBtnSID","onCancelButtonPressed","confirmButton","MiniCartDiscountListItem","text","limit","index","onRemoveDiscountClicked","DiscountIsAutoApplied","toLowerCase","SlaveName","substr","DiscountValueType","DiscountValue","DiscountTotal","CartValidator","shift","setErrorMessages","updating","setUpdating","cartMessages","buildErrorMessages","all","_reject","alertVariant","rarr","messageData","Alert","ProductCardNameWidget","productName","productSeoUrl","Anchor","ProductCardPricingWidget","displayStyle","readPrices","loginForPricing","prices","ProductAssociations","every","p","sort","associatedProduct","prdtPrices","Slave","sale","base","haveMsrp","msrp","haveReduction","reduction","haveBase","isSale","haveSale","amountOff","round","percentOff","smaller","ProductCardSkuWidget","customKey","hideLabels","ProductCardStockWidget","hideStock","countStoreStockOnly","alertClasses","hideStockInternal","loginForInventory","isVariantMaster","TypeKey","CustomKey","inventoryObject","storeQty","startSignalRConnection","connection","assert","HubConnectionState","log","CompareOperator","FileEntityType","LocatorUnits","SearchSort","setupSignalRConnection","connectionHub","HubConnectionBuilder","withUrl","withAutomaticReconnect","withHubProtocol","JsonHubProtocol","configureLogging","LogLevel","build","serverTimeoutInMilliseconds","onclose","onreconnecting","onreconnected","connectionId","signalRSlice","useBiddingFactory","biddingFactory","setBiddingFactory","setConnection","useSignalR","placeBid","lotID","bidAmount","LotID","BidAmount","getQuickBidAmount","getCurrentLotData","current","HighestBid","CurrentBid","StartingPrice","getIncrement","lot","increments","IncrementProfile","IncrementSteps","Auction","Start","increment","Increment","a","b","onLotUpdate","on","newLot","promiserKey","ProductCardLotTimerWidget","setLot","winningUserID","setWinningUserID","UserID","renderer","days","hours","minutes","seconds","faCrown","visibility","opensAt","OpensAt","closesAt","ClosesAt","hasClosedStatus","StatusKey","date","getCountdown","SalesItemQuantityLine","excludeTotal","salesItem","TotalQuantity","MiniCart","showRemoveDiscountConfirmationModal","setShowRemoveDiscountConfirmationModal","discountToRemove","setDiscountToRemove","quantityOfItemsToShow","setQuantityOfItemsToShow","discountCode","setDiscountCode","showDiscountResponseModal","setShowDiscountResponseModal","discountResponseModalMessage","setDiscountResponseModalMessage","setHasMissingPricing","cartToUse","miniCart","addCartDiscount","properMsg","cleanMsgs","m","curMsg","DateTime","toFormat","getAddCartDiscountErrMessage","orderDiscounts","d","shippingDiscounts","getFormattedPriceAndCheckMissingPricing","val","slice","itemIndex","ProductName","UnitSoldPrice","ProductPrimaryImage","totalQuantity","discountTotal","reduce","curVal","accu","seoUrl","ProductSeoUrl","discountIndex","orderDiscount","shippingDiscount","preventDefault","ErrorView","errorText","setCategories","lastHovered","setLastHovered","HasChildren","ParentID","Nav","category","ParentName","Fragment","onTouchEndCapture","Tab","flexBasis","flexGrow","active","Children","child","SerializableAttributes","Value","PrimaryImageFileName","height","width","display","margin","MiniMenu","miniMenuLinks","setMiniMenuLinks","enabledLinks","dashboard","newVal","combined","linkOne","linkTwo","order","getUsableLinks","linksToSet","links","link","roleRequired","reqAnyRoles","permissionRequired","reqAnyPerms","perm","populateMiniMenuLinks","Dropdown","DisplayName","left","align","titleKey","CatalogFilterHeaderButton","expandedFilterName","setExpandedFilterName","onHeaderClicked","useAccordionButton","fontSize","color","fontWeight","CatalogFilter","customBodyComponent","onListItemClicked","onListItemExpandBtnClicked","onCollapseAllClicked","onExpandAllClicked","isChildExpanded","eventKey","maxHeight","overflowY","listItem","formatLabel","count","_e","alignItems","AttributesFilter","allAttributes","productSearchViewModel","onAttributeClicked","expandedAttributes","setExpandedAttributes","toggleExpansion","attr","Key","c","callbackLabel","parentKey","childKey","childListItem","CategoriesFilter","categoriesTree","onCategoryClicked","expandedCategories","setExpandedCategories","DocCount","topLevelCategoryProductCounts","subLevelCategoryProductCounts","CompareFilter","compareCart","compareCartItems","showClearCompareCartModal","setShowClearCompareCartModal","UploadStatus","OutsideClickDetector","ref","onOutSideClicked","wrapperRef","useRef","onOutsideClicked","handleClickOutside","contains","addEventListener","removeEventListener","useDebounceWithCallback","callback","timer","AppliedFilterBlock","titleId","content","CatalogFilters","allCategories","setProductSearchViewModel","multiFilterMode","Form","Query","onClickRemoveParam","paramKey","form","Page","alterSearchViewModelForm","newForm","alterAttribute","changeType","attributeName","formKey","newAttributes","attributeAlreadyIncluded","filterProps","filterParamsExist","Category","RatingRanges","PricingRanges","BrandName","AttributesAny","AttributesAll","range","textAlign","CategoriesTree","some","cat","categoryKey","AddToCartModal","cartTypeName","isForQuoteCart","startsWith","AddAllToCartModal","cartType","alertClass","RemoveFromCartModal","parentRunning","cartTypeText","AddToCartButton","btnClasses","containerClasses","btnVariant","btnSize","btnIcon","dropdownBtnClasses","asIcon","excludeQuoteCart","quoteCartOnly","quoteBtnDisabled","useConfirmModal","useErrorModal","onItemAdded","verticalAlign","dropdownBtnVariant","showAddToCartModal","setShowAddToCartModal","showAddToQuoteCartModal","setShowAddToQuoteCartModal","addToCartModalMessages","setAddToCartModalMessages","onItemAddedCalled","setOnItemAddedCalled","showErrorMessagesModal","setShowErrorMessagesModal","onAddCartItem","typeName","addToQuoteCartModalDisabled","disableAddToCartModals","addToACartModals","faQuoteRight","ButtonGroup","faCartPlus","drop","dropDirection","borderLeft","cssVariables","Button","AddToCartQuantitySelector","initialValue","increaseDisabled","decreaseDisabled","useInput","setQuantity","firstRender","debounceMS","minWidth","canIncreaseFn","ViewDetailsButton","includeQuoteCart","showConfirmationModal","setShowConfirmationModal","confirmationModalMessages","setConfirmationModalMessages","faList","itemResponse","Price","hidePercentOff","sizeClass","muteDiscountText","colClasses","pricesToUse","setPricesToUse","toUse","BasePrice","SalePrice","MsrpPrice","ReductionPrice","trunc","AddAllToCartButton","salesItems","confirmationModalData","setConfirmationModalData","onAddCartItems","confirmMsg","ProductCardBiddingWidget","currentBid","setCurrentBid","setBidAmount","lotUpdateReceived","newQuickBid","disableBidButton","BuyNowAvailable","containerStyle","ProductCardActionButtonWidget","addToCartBtnClasses","addToCartBtnVariant","addToCartContainerClasses","viewDetailsBtnVariant","useOutOfStockInsteadOfViewDetails","outOfStockBtnVariant","outOfStockBtnClasses","small","buttonView","disableModals","initialQuantity","localQuantity","setLocalQuantity","buttonViewInternal","showAddToQuoteCartBtn","useQuoteCart","SeoUrl","productIsOutOfStock","productAllowsBackOrder","productIsVariantMaster","productCantBeAddedToRegularCart","forceNoQuantitySelector","ExternalSearchBox","suggestions","setSuggestions","showSuggestions","setShowSuggestions","query","setQuery","setError","qry","PageSetSize","PageSize","Sort","sorted","Score","reverse","getSuggestionsWithQuery","onSubmit","borderTopLeftRadius","borderBottomLeftRadius","top","onToggle","nextShow","suggestion","LanguageSelectorButton","showSelectLanguageModal","setShowSelectLanguageModal","availableLanguages","setAvailableLanguages","i18n","currentLng","Locale","language","changeLanguage","UnicodeName","NavMenu","to","Footer","rel","faMapMarker","faPhoneSquare","faAt","faFacebook","faTwitter","faLinkedin","faCcPaypal","faCcVisa","faCcMastercard","faCcAmex","faCcDiscover","Layout","Home","PricingFactory","Function","genBlankPricesObj","usePricingFactory","pricingFactory","setPricingFactory","RemoveDiscountButton","btnIdPrefix","labelIdPrefix","idSuffix","hideText","discountI","CartDiscountListItem","getDiscountTotal","total","CartTableWideScreen","cartHasItems","onChangeSalesItemQuantity","onRemoveItemFromCartClicked","queuedIDs","itemAttributeDictionary","canIncrease","$_rawInventory","getFormattedPrice","productUrl","ProductKey","borderless","includeAddToCart","cartProducts","excludeBackorderInfo","preSale","ProductAllowPreSale","backOrder","CartTableMobile","Cart","fetchingSuggestions","setFetchingSuggestions","selectedProduct","setSelectedProduct","quickAddError","setQuickAddError","setQueuedIDs","removeFromCartModalInfo","setRemoveFromCartModalInfo","productAttributes","setProductAttributes","s","onQueryChanged","itemProductIDs","queuedIDsI","salesItemId","productId","bg","FormControl","factoryAssign","onSuggestionClicked","isNaN","AlertInfoNoResults","PCCWOverlayLayout","idPrefix","paddingLeft","PCCWHorizontalLayout","productIsMaster","hideI","PCCWVerticalLayout","nullOptionKey","AddToShoppingListModal","includeSwitchToCreateBtn","onSwitchToCreateButtonClicked","customConfirmMessage","clearCustomConfirmMessage","selectedShoppingListName","setSelectedShoppingListName","itemIsIncludedInList","setItemIsIncludedInList","showConfirmMessage","setShowConfirmMessage","shoppingList","CreateShoppingListModal","listName","setListName","listNameTouched","setListNameTouched","confirmationMessage","setConfirmationMessage","displayMessageOnConfirm","productToAddAfterCreation","AddToInStockAlertsModal","desiredQuantity","nudQIMQuantity","ProductCardControlsWidget","render","hideQuotesList","hideFavoritesList","hideWishList","hideNotifyMe","hideCompare","hideShoppingList","removeConfirmationModalData","setRemoveConfirmationModalData","showGoToCompareViewModal","setShowGoToCompareViewModal","showCreateShoppingListModal","setShowCreateShoppingListModal","showAddToShoppingListModal","setShowAddToShoppingListModal","showAddToInStockModal","setShowAddToInStockModal","addToShoppingListPending","setAddToShoppingListPending","addToShoppinglistCustomConfirmMessage","setAddToShoppingListCustomConfirmMessage","quoteList","favoritesList","isQuote","quotesListTitleKey","wi","isFavorite","favoritesListTitleKey","fi","isWish","wishListTitleKey","isNotifyMeItem","notifyMeTitleKey","ni","isCompare","compareTitleKey","resetRemoveConfirmationModal","toggle","isInList","removeItemFromList","addItemToList","toggleCompareItem","ci","closeModalOnSuccess","addItemToInStockAlerts","newShoppingListName","isFirstList","isSelected","notifyMeWhenInStock","layoutProps","renderContent","ProductCard","customClasses","buttonWidgetOrientation","hideShortDescription","hideSku","ShortDescription","responsive","timeoutHolder","CatalogGridView","onScrollToBottom","useInfinite","canCallScrollFn","setCanCallScrollFn","overflowX","onScroll","currentTarget","scrollHeight","scrollTop","clientHeight","bottom","ceil","CatalogListView","Row","CatalogTableView","striped","CategoryLandingPageView","currentCategory","catsToMap","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","CategoryLandingPageHeader","HeaderContent","CategoryLandingPageSidebar","SidebarContent","CategoryLandingPageFooter","FooterContent","getRowTitles","compareProducts","skipKeys","attrKey","Compare","setCompareProducts","setAttributes","carouselIndex","setCarouselIndex","IDs","getCompareCartItemProductsByIDs","AsListing","HideFromStorefront","IsComparable","loadAttributes","interval","activeIndex","onSelect","selectedIndex","indicators","chunk","CompareTable","widthExists","Width","depthExists","Depth","weightExists","Weight","WidthUnitOfMeasure","DepthUnitOfMeasure","WeightUnitOfMeasure","titleNoPrefix","UofM","formatOptions","faTable","faThLarge","faThList","CatalogFormatSwitch","pageFormat","onFormatBtnClicked","sizeOptions","CatalogSizeSwitch","pageSize","onPageSizeClicked","num","sortOptions","CatalogSortBySwitch","onSortByChanged","FormSelect","str","strNoSpaces","Breadcrumbs","currentQuery","breadcrumbsFromCatTree","setBreadcrumbsFromCatTree","showQueryOnly","breadcrumbsList","getHeritageListForKey","cleanedList","Breadcrumb","listProps","crumb","treeNode","desiredKey","SortingFactory","readSortOrder","sortOrder","SortOrder","RatingFactory","readRatings","$_rawRatings","genBlankRatingsObj","ratings","Count","CustomJsonParam","encode","any","decode","jsonStr","inputI","inputToUse","getEncodedValue","compareProductCatalogSearchForm","previousForm","currentForm","PageFormat","CategoriesAny","CategoriesAll","StoreID","StoreIDsAny","StoreIDsAll","compareCustomJsonAttributes","previous","useProductSearchViewModel","useQueryParams","attributesAll","attributesAny","brandName","StringParam","categoriesAll","ArrayParam","categoriesAny","withDefault","defaultFormat","page","NumberParam","priceRanges","ratingRanges","defaultPageSize","defaultSort","storeId","storeIdsAll","DelimitedNumericArrayParam","storeIdsAny","term","defaultViewModelParams","setParams","searchForm","pricingRanges","BrandIDs","BrandNames","DebugInformation","Documents","ElapsedMilliseconds","FranchiseIDs","HitsMetaDataHitScores","HitsMetaDataMaxScore","HitsMetaDataTotal","IsValid","ManufacturerIDs","ResultIDs","ServerError","StoreIDs","TotalPages","Types","VendorIDs","getDefaultProductSearchViewModel","latestParams","viewModelToParams","CatalogPaginationControls","totalPages","navigateToPage","displayablePages","Pagination","fill","el","CatalogSortFactory","sortBy","hitScores","y","scoreDifference","localeCompare","TotalPurchasedQuantity","xDate","UpdatedDate","yDate","getProductPrice","getProductRating","productsWithSortOrder","getProductSortOrder","productsWithoutSortOrder","sortOrders","useCustomCompareMemo","equalFn","create","equal","Catalog","sortingFactory","setSortingFactory","useSortingFactory","ratingFactory","setRatingFactory","useRatingFactory","catalogSortFactory","setCatalogSortFactory","useCatalogSortFactory","setProducts","catsByKey","setCatsByKey","setCurrentCategory","usingInfiniteScroll","showCatLandingPage","categoryLandingPages","useCustomCompareEffect","LogID","productSearchViewModelI","getProductsByProductIDs","cats","newCatsByKey","kit","getAttributes","currentCat","showCatalog","depth","traverseCategories","findCategoryByKey","showCategoriesForLevelsUpTo","IDsToUse","newProducts","onChangeQueryParam","exact","Description","innerWidth","viewProps","element","renderProductsView","CheckoutStepsHeader","allowEdit","onEditClicked","isActiveStep","textClass","CheckoutStepFactory","getPurchaseSteps","purchase","sections","purchaseStepConfig","getSubmitQuoteSteps","CheckoutMethodStep","onCompleteCheckoutMethodStep","allowGuest","forceNoGuestCheckout","AddressBlock","address","contact","hideCompany","hidePostalCode","hideCountryKey","hideName","hideFirstName","hideLastName","hideStreet1","hideStreet2","hideStreet3","hideCity","hideRegionName","hidePhone1","hidePhone2","hidePhone3","hideFax1","hideEmail1","Company","Street1","Street2","Street3","City","RegionName","PostalCode","CountryKey","FullName","LastName","Phone1","Phone2","Phone3","Fax1","Email1","makeKey","NewAddressForm","accountContact","submitBtnKey","countries","setCountries","regions","setRegions","phoneFieldsAmount","setPhoneFieldsAmount","Address","streetFieldsAmount","setStreetFieldsAmount","typePascalCased","customKeyKey","firstNameKey","lastNameKey","email1Key","companyKey","countryIdKey","phone1Key","phone2Key","phone3Key","street1Key","street2Key","street3Key","fax1Key","cityKey","regionIdKey","zipKey","defaultValues","Country","Region","watch","trigger","countryData","regionData","getGlobalizationData","countryValue","regionValue","countryValues","regionValues","countryHasRegions","CountryName","firstName","lastName","email1","company","countryId","phone1","phone2","phone3","street1","street2","street3","fax1","city","regionId","zip","selectedCountry","selectedRegion","userAddressData","IsBilling","IsPrimary","MasterID","AccountID","CountryCode","RegionCode","RegionID","RegionKey","TypeID","SlaveID","TransmittedToERP","amt","reg","region","NewAddressModal","ContactSwitch","accountContacts","allowAdd","hideAddressBlock","initialContact","onAddressAdded","useAddButton","ddSelectAddressDataSID","btnAddAddressDataSID","selectedContact","setSelectedContact","showNewAddressModel","setShowNewAddressModal","canUpsertAddresses","dashboardCanAddAddresses","currentContactVal","SlaveKey","newAddressData","addressBookSlice","AddressBook","setAddressBook","useAddressBook","addressBookFactory","useAddressBookFactory","loadAddressBook","createNewAddress","updateExistingAddress","validateAddress","deleteAddress","accountContactID","toValidate","CountryID","markAsDefaultBilling","markAsDefaultShipping","CheckoutBillingStep","cartBillingContact","setCartBillingContact","onCompleteCheckoutBillingStep","continueText","updateCartBillingContact","BillingContact","newContact","PurchaseRateQuotesManagerWidget","quotes","onRateSelected","activeQuote","q","Selected","setSortBy","rateSortAsc","setRateSortAsc","estDeliverySortAsc","selectedShippingRate","setSelectedShippingRate","findIndex","quantityOfRatesShown","setQuantityOfRatesShown","aEstDeliveryDate","EstimatedDeliveryDate","bEstDeliveryDate","returnValue","Rate","checked","ShipCarrierMethodName","newQuantity","showLess","CheckoutShippingStep","onCompleteCheckoutShippingStep","sameAsBilling","setSameAsBilling","estimatedShippingCost","setEstimatedShippingCost","cartShippingContact","setCartShippingContact","shippingRateQuotes","setShippingRateQuotes","onChangeWithRatesReset","_res","IsSameAsBilling","ShippingContact","addressData","rateQuote","dto","RateQuoteID","reason","Expedited","SplitShippingTarget","onContactChanged","onQuantityChanged","removeDisabled","addDisabled","onRemoveClicked","onAddClicked","DestinationContact","ac","InternalTrackingID","Guid","random","targetFactory","contactID","model","DestinationContactID","NothingToShip","OriginProductInventoryLocationSectionID","OriginStoreProductID","OriginVendorProductID","SelectedRateQuoteID","newGuid","CheckoutTargets","grouped","setGrouped","parentViewState","parentSetRunning","parentFinishRunning","itemsExist","getAvailableAccountContactsForTarget","thisTarget","targets","selectedContactIDs","ac1","ac2","targetData","groupKey","groupedCopy","relevantGroup","g","relevantItem","Targets","DestinationContactKey","Type","canAllocateQuantity","adjustment","group","outerIndex","ProductNothingToShip","Sku","relevantSalesItem","sItem","setDestinationContactForTarget","blankDestinationContactInfo","onNewAddressEntered","toTarget","fromTarget","relevantGroupIndex","tI","allocateQuantity","toAddQuantity","removeShippingTarget","gp","newTarget","addShippingTarget","CheckoutSplitShippingStep","onCompleteCheckoutSplitShippingStep","haveInitializedSalesItems","setHaveInitializedSalesItems","defaultShippingContact","defaultShippingContactID","validatedSalesItems","acc","validateTargetQuantities","doCallbackIfTargetsExist","newGrouped","keyGetter","Map","collection","get","set","groupBy","destID","ilID","nothingToShip","typeKey","vendorID","groupedList","groupedObj","fromEntries","setTargetGrouping","destinationContact","setTargetDestinations","validGrouped","titlesMatchedToItems","curSalesItem","groupTitle","getSplitShippingGroupTitle","MasterName","getSalesItemsGroupedByTitle","initializeSalesItems","source","storeName","vendorName","cleanTargets","somethingToShip","grp","shippingRatesNeeded","allTargetsHaveADestination","tgt","submitDisabled","onContinueClicked","thisYear","getFullYear","availableExpirationYears","NewWalletForm","submitBtnText","cancelBtnText","btnAlign","hideNickName","submitBtnDisabled","clearErrors","txtCVV","txtCardHolderName","txtWalletCardNumber","txtCardType","txtReferenceName","ddlExpirationMonth","ddlExpirationYear","userWalletData","CardHolderName","CardNickName","CardType","CreditCardCVV","CreditCardNumber","ExpirationMonth","ExpirationYear","year","useWalletFactory","walletState","Wallet","addWalletEntry","entry","w","IsDefault","walletFactory","reloadWallet","deactivateWalletEntry","markEntryAsDefault","walletSlice","useWallet","monthsAbbreviated","NewWalletModal","ddlWalletExpirationMonth","ddlWalletExpirationYear","txtWalletCardHolderName","txtWalletCardNickname","keepDirty","keepErrors","keepIsSubmitted","keepIsValid","keepSubmitCount","keepTouched","formatted","txtWalletCardType","String","month","WalletEntryCard","isDefault","walletItem","getIconByCardType","padStart","setWalletCVV","walletCVV","setDeleteWalletItem","Card","WalletSwitch","onCVVChange","CVV","initialWalletID","hideWalletBlock","selectedWalletItem","setSelectedWalletItem","showNewWalletModal","setShowNewWalletModal","initialDesiredWalletItem","defaultWalletItem","excludeAdd","cvv","usingGuestCheckout","walletData","User","PaymentMethodCreditCardBody","onSelectedWalletChanged","initialDesiredWallet","CardNumber","creditCardType","niceType","onSubmitGuestCreditCard","WalletCVV","WalletID","ProgressBar","percentage","transition","scssVariables","FileUploadWidget","setPercentage","uploadedFiles","setUploadedFiles","inputKey","setInputKey","files","file","formData","FormData","uploadType","fileUploadResponse","UploadFiles","prevUploadedFiles","uploadCallback","FileName","uploadCallbackRich","FilePath","pathPieces","allowMultiple","acceptableFileTypes","PaymentMethodInvoiceBody","uploadedFileNames","setUploadedFileNames","txtPONumber","CustomerPurchaseOrderNumber","StoredFileSalesOrder","newFileNames","PaymentMethodQuoteBody","PaymentMethodFreeBody","PaymentMethodECheckBody","CheckoutPaymentStep","onCompleteCheckoutPaymentStep","existingPaymentData","initialBillingContact","methodIsGuest","selectedPaymentMethod","setSelectedPaymentMethod","methods","setMethods","addressFactory","builtMethods","allowedGuestMethods","defaultBillingContact","methodData","creditCardData","PayByWalletEntry","invoiceFormData","PayByBillMeLater","FileNames","CheckoutConfirmationStep","onCompleteCheckoutConfirmationStep","SplitShippingTotals","targetedCarts","masterCart","totalTargetedCartsShippingRaw","RateQuotes","selectedRateQuote","curCart","rq","newTotal","abs","grandTotal","CheckoutShippingRatesStep","onCompleteCheckoutShippingRatesStep","onTargetedCartsChanged","setTargetedCarts","shippingRatesEstimatorEnabled","rates","estimator","handleRateQuotesDiscounts","rateQuotes","curRateQuote","original","discounted","discountOne","discountTwo","DiscountPriority","targetedCartsCopy","WithCartInfo","CartTypeName","IsPartialPayment","ResetAnalysis","analyzeFn","getTargetedCarts","resArr","pagedResult","TotalCount","ShippingContactID","shippableCarts","response","selected","cartOne","cartTwo","loadTargetedCarts","itemOne","itemTwo","selectedRateQuoteID","prevTargetedCarts","onRateQuoteSelected","CheckoutCompletedStep","masterOrderID","subOrderIDs","quoteIDs","masterID","slaveIDs","subOrderID","methodStepComplete","billingStepComplete","paymentStepComplete","shippingStepComplete","splitShippingStepComplete","shippingRatesStepComplete","confirmationStepComplete","reducer","methodStepData","paymentStepData","paymentStyle","payBy","billingStepData","shippingStepData","shippingRatesStepData","splitShippingStepData","Checkout","setStep","allSteps","setAllSteps","completedMasterOrderID","setCompletedMasterOrderID","completedSubOrderIDs","setCompletedSubOrderIDs","completedQuoteIDs","setCompletedQuoteIDs","checkoutComplete","setCheckoutComplete","gatheredTotals","setGatheredTotals","checkoutStepFactory","setCheckoutStepFactory","useCheckoutStepFactory","useReducer","proceedOrPurchase","shippingRatesStepIndex","stepI","updateTotalsOfAllCarts","SpecialInstructions","CartSessionID","SessionID","WithUserInfo","IsNewAccount","purchaseWithQuoteDto","Succeeded","QuoteIDs","masterQuoteID","subQuoteIDs","ErrorMessages","ErrorMessage","prevStep","paymentData","Billing","PaymentStyle","OrderIDs","confirmAndPurchase","billingContact","getModifiedValue","startingValue","modifier","getTotal","SubtotalFeesModifier","SubtotalFeesModifierMode","SubtotalShippingModifier","SubtotalShippingModifierMode","SubtotalHandlingModifier","SubtotalHandlingModifierMode","SubtotalTaxesModifier","SubtotalTaxesModifierMode","SubtotalDiscountsModifier","SubtotalDiscountsModifierMode","getTotalShippingRaw","cartI","getTotalTaxesRaw","getSalesItemsWithCorrectExtendedPrice","UnitSoldPriceModifier","UnitSoldPriceModifierMode","soldAt","targetedCartsI","cartItemsWithCorrectExtendedPrice","fullSteps","stepsToRemove","continueTextKey","cartInvalid","stepData","component","newTargetedCarts","isEditable","fn","arr","isFirst","MagicImageCarousel2","masterProductImages","setMasterProductImages","mediumImageResizerParamsBody","largeImageResizerParamsBody","thumbnailImageResizerParamsBody","MagicScrollOptions","magicScrollOptions","MagicScroll","stop","MagicZoom","loadImageFromMaster","loadGfsFallbackImg","Images","ProductsAssociatedWith","assocProdIDs","MasterPrimaryImageFileName","primaryImage","OriginalFileFormat","large","OriginalFileName","vertical","orientation","ScrollElement","convertObjectToHtmlDataOptions","image","largeScroll","thumbScroll","Image","onLoad","$","aid","magicZoomOptions","object","RatingSummary","hideCount","starsList","setStarsList","_n","amount","star","starAmount","offset","xmlns","viewBox","reviewID","stopColor","VariantSwatches","listOfVariants","selectedVariantProductId","onVariantSwatchClicked","swatchImages","setSwatchImages","accumulator","currentValue","imgs","variantSwatchImg","img","variantPrimaryImg","swatchImgName","getSwatchImagesForMasterProduct","imgFileName","SlaveSeoUrl","VariantDropdown","selectedVariantSeoUrl","onVariantSelected","SlaveSerializableAttributes","Carousel","showPagination","hideArrows","activeSlideIndex","setActiveSlideIndex","controls","wrap","prevIcon","nextIcon","RelatedProductsList","productSets","setProductSets","getAndSetFullProducts","withPricing","withInventory","debugMsg","productIDs","sets","thisSet","ClothingProductDetailsTemplate","productVariant","pagination","draggable","selectorTrigger","transitionEffect","zoomWidth","reviewsForAverage","average","UnitOfMeasure","productDetails","variantSwatches","updateProductVariant","variantDropdown","quoteCartBtnSeparated","TabContent","Tabs","onSwitch","tabClasses","tabContainerClasses","tabToShow","setTabToShow","filteredChildren","ProductDetailsTabAttribute","allowAttributes","allowElements","IsMarkup","ProductDetailsTabsDefaultTabContent","fullTabSet","ft","fullTab","header","attr1","attr2","RatingEntry","ratingAmount","setRatingAmount","ratingHovered","setRatingHovered","filled","ReviewEntry","setSubmitted","txtProductReviewTitle","txtProductReviewComment","Approved","Comment","SubmittedByUserID","Title","ReviewsMain","productReviewData","setProductReviewData","approvedReviews","ar","review","ProductDetailsTabs","master","setFullTabSet","HideFromProductDetailView","CustomKeysStrict","CustomKeys","httpResponse","containsNoResults","generalAttributes","disclaimerAttr","splice","unshift","keysTabbedAndGrouped","thisTabKey","IsTab","getKeysTabbedAndGrouped","fullTabSetI","entries","keyValArr","tabIdentifier","tabAttributesList","genAttr","fullTab1","fullTab2","isValidHTML","htmlString","DOMParser","parseFromString","querySelector","faqsSerializableAttribute","dangerouslySetInnerHTML","__html","DefaultProductDetailsTemplate","masterProduct","RecentlyViewedProductsList","Paging","Size","StartIndex","MoreFromCategoryList","searchDto","categorySearchString","searchPromiserKey","productPromiserKey","result2","error2","error1","RecentlyViewedProductDetailsTemplate","getPrimaryCategorySearchString","string","productCategory","StaticHeadphonesProductDetailsTemplate","getElementsByTagName","classList","add","VariantsCustomProductDetailsTemplate","open","setOpen","relatedProducts","prev","next","rp","fullscreen","centered","TemplatePicker","Template","ProductDetails","setMasterProduct","setProductVariant","setListOfVariants","reviewData","setReviewData","setSeoUrl","readSeoUrl","useEffectSkipFirst","initializeProduct","newListOfVariants","childProduct","idsToUse","va0","matchingDictionary","va1","va2","sortAndSetVariants","variantsList","variantOne","variantTwo","productDetail","loadReviews","masterProductI","productToSet","getProduct","urlProduct","firstVariantSeoUrl","firstVariant","pushState","MasterSeoUrl","variantSeoUrl","seoUrlI","isMaster","promiserKey1","promiserKey2","productData","pricingEnabled","inventoryEnabled","templateProps","getProductView","AddressBookCard","selectedAccountContact","setSelectedAccountContact","showDropdown","handleEditAddressClicked","showDeleteAddressConfirmationModalID","handleDefaultAddressChanged","setShowDeleteAddressConfirmationModalID","findKey","AddressKey","newAccountContactID","parseInt","hasDefaultBilling","setHasDefaultBilling","hasDefaultShipping","setHasDefaultShipping","showAddAddressModal","setShowAddAddressModal","accountContactToEdit","setAccountContactToEdit","markAccountContactAsDefaultBilling","defaultBilling","defaultShipping","isBilling","canEditAddresses","version","stroke","strokeWidth","fillRule","transform","accountContactToEditCopy","accessors","deepValue","accessor","isLast","editExistingAddress","markAccountContact","MyProfile","setUserName","showSavedMessage","setShowSavedMessage","nameSegments","txtProfileDisplayName","txtProfileEmail1","txtProfileFax1","txtProfileFirstName","txtProfileLastName","txtProfilePasswordCurrent","txtProfilePasswordNew","txtProfilePhone1","NewPassword","CVGridToolbarAttributeFilter","toolbarFilterTitle","uniqueFieldID","attributesState","onRemoveAttributeChange","onAddAttributeChange","controlId","justifyContent","inline","attrIndex","toggleFilterOnAttribute","CVGridToolbarAutoCompleteFilter","onCallFilterClicked","onTextAndSuggestionChange","setText","itemName","CVGridToolbarBooleanFilter","onBooleanChange","CVGridToolbarFilterBtns","onResetClicked","isFilterColumnsAvailable","CVGridToolbarIDFilter","showLabels","onIdChanged","idValue","CVGridToolbarInputFilter","onInputChange","inputValue","CVGridToolbarMinMaxDateFilter","minDateValue","maxDateValue","onMinDateChange","onMaxDateChange","newMinDate","newMaxDate","CVGridToolbarMinMaxNumFilter","toolbarValuesState","onNumChange","toolbarFilterMin","toolbarFilterMax","toolbarFilterPlaceholder","CVGridToolbarSelectFilter","optionValue","onSelectChanged","toolbarFilterOptions","CVGridToolbar","filterColumns","onFilterClicked","hidden","toolbarFilterType","MinDate","MaxDate","setToolbarValuesState","setLastCallData","convertedData","handleConversion","conversion","dataToSend","handleReset","col","indexI","minDate","maxDate","CVGridComponent","columns","totalCount","onPageChange","onOrderChange","isLoading","defaultPageSizeOptions","tableRef","emptyRowsWhenPaging","padding","pageSizeOptions","paginationType","rowStyle","_rowData","backgroundColor","variables","thirdSortClick","toolbar","pageI","orderBy","orderDirection","OverlayLoading","CVGrid","React","InvoiceModalBillingContactSection","showNewAddressForm","setShowNewAddressForm","InvoiceModalWalletSection","initialWalletItem","showNewWalletForm","setShowNewWalletForm","cardData","newWalletItemID","newWalletItem","PayMultipleInvoicesModal","selectedWalletItemCVV","setSelectedWalletItemCVV","selectedBillingContact","setSelectedBillingContact","unpaidInvoices","setUnpaidInvoices","selectedAmounts","setSelectedAmounts","surchargeAmount","setSurchargeAmount","sendData","Sorts","dir","MinBalanceDue","invoicesWithReadableDate","toDateString","toLocaleTimeString","curInvoice","BalanceDue","toFixed","getInvoices","surcharges","BIN","ids","parseFloat","BillingContactID","InvoiceIDs","Set","TotalAmount","getTotalPaymentAmount","getTotalFees","calcSurcharge","inv","sum","totalBalanceDue","totalPaymentAmount","amountsOverZero","Amounts","Payment","Amount","StatusID","Zip","salesInvoices","hasIntegratedKeys","wordBreak","FormGroup","canPayViaUserDashboard","multiple","partial","uplifts","percent","Invoices","isDashboardMain","sortDirection","sortField","startIndex","setFilterState","setInvoices","setStatuses","totalInvoicesCount","setTotalInvoicesCount","showPayMultipleInvoicesModal","setShowPayMultipleInvoicesModal","showInvoicesPaidModal","setShowInvoicesPaidModal","onQueryChange","cellStyle","paddingTop","paddingBottom","emptyValue","rowData","filterPlaceholder","headerStyle","SalesGroupID","filterData","filterCol","filterValue","toISOString","formatFiltersObjectForGetInvoices","pageSizeI","invoiceBy","invoiceDirection","sortFieldToApply","sortDirectionToApply","Orders","setOrders","totalOrdersCount","setTotalOrdersCount","getOrders","getSalesOrdersDto","HasSalesGroupAsMaster","HasSalesGroupAsSub","ordersWithReadableDate","salesOrder","SalesGroupAsMasterID","SalesGroupAsSubID","formatFiltersObjectForGetOrders","Returns","returns","setReturns","totalReturnsCount","setTotalReturnsCount","getReturns","getSalesReturnsDto","returnsWithReadableDate","salesReturn","formatFiltersObjectForGetReturns","WishList","wishListSalesItems","setWishListSalesItems","wishListProducts","setWishListProducts","wishListCart","removeFromWLConfirmationModalInfo","setRemoveFromWLConfirmationModalInfo","getWishList","wlSalesItems","productsRes","productsMap","deleteWishListItem","_red","setTableRef","DetailPanelContent","matTableRef","createRef","columnCellStyle","borderWidth","borderColor","borderStyle","columnsWithCellStyles","TABLE_ICONS","DetailPanel","forwardRef","_props","_ref","detailPanelColumnStyle","editCellStyle","border","showDetailPanelIcon","icons","detailPanel","obj","ShoppingListsDetail","setShoppingList","shoppingListCart","setShoppingListCart","setShoppingListItems","shoppingListProducts","setShoppingListProducts","shoppingListFetched","setShoppingListFetched","isEditingName","setIsEditingName","editedName","setEditedName","useParams","getShoppingList","shoppingListCartResPromiserKey","shoppingListCartRes","shoppingListRes","shoppingListSalesItems","failMsg","auto","salesItemID","ShoppingLists","showCreateListModal","setShowCreateListModal","useLocation","getShoppingLists","setItems","showAddCard","setShowAddCard","deleteWalletItem","AccountProfile","useCurrentAccount","TaxExemptionNo","TaxEntityUseCode","txtAccountName","taAccountDescription","txtAccountCustomKey","txtTaxExemptionNo","txtTaxEntityUseCode","PrivacyDataActionCard","isSubmitSuccessful","request","headerKey","headerIcon","bodyKey","Privacy","faFileDownload","faFile","faTrash","InStockAlerts","inStockAlertSalesItems","setInStockAlertSalesItems","inStockAlertProducts","setInStockAlertProducts","inStockAlertCart","getInStockAlerts","flSalesItems","deleteInStockAlertItem","Favorites","favoritesListSalesItems","setFavoritesListSalesItems","favoritesListCart","favoritesListProducts","setFavoritesListProducts","removeFromFLConfirmationModalInfo","setRemoveFromFLConfirmationModalInfo","getFavoritesList","deleteFavoritesListItem","Quotes","setQuotes","totalQuotesCount","setTotalQuotesCount","getQuotes","getSalesQuotesDto","quotesWithReadableDate","SalesGroupAsRequestMasterID","SalesGroupAsRequestSubID","formatFiltersObjectForGetQuotes","SalesGroupContactBlock","SalesGroupDetailsBlock","salesObject","bsPrefix","StatusTranslationKey","StatusName","PayInvoiceModal","chosenAmount","setChosenAmount","percFee","totalFees","InvoiceID","MakeAPaymentButton","balanceIsPastDue","onPaymentConfirmed","showPayInvoiceModal","setShowPayInvoiceModal","InvoicePaymentsTable","setPayments","invoiceID","TransactionID","TransactionNumber","SalesGroupDetailsAdditionalDetails","DueDate","ColumnRenderPrice","ColumnRenderSubtotal","SalesGroupItemsTable","itemProductIDAsString","itemProduct","StatusDisplayName","SalesGroupQuoteModals","masterQuoteId","getSalesObject","showApprovedModal","showRejectedModal","setShowRejectedModal","showCancelledModal","setShowCancelledModal","setIsQuoteApproved","salesGroupId","rejectionReason","setRejectionReason","cancellationReason","setCancellationReason","reload","QuoteID","Note","cols","handleRejectionReasonChange","handleCancellationReasonChange","SalesGroupDetails","salesGroup","onSelectedSalesTabChange","isQuoteApproved","setInvoiceID","typeId","showActionsDropdown","setShowActionsDropdown","setProductsMap","isMasterQuote","setIsMasterQuote","setShowApprovedModal","SalesQuoteRequestMasters","itemsWithQuantity","getProductsForSalesItems","productsOfSalesObject","productIds","productsMapI","SalesOrderMasters","SubSalesOrders","allOrders","salesItemsOfOrders","productIdsOfOrders","orderRes","curItem","salesOrderProducts","setItemsAndProductsForInvoice","setProductsForSalesObject","marginRight","SalesTab","selectedSalesTab","SalesGroupSideContent","translation","masterKey","subKey","masters","subs","SalesInvoices","SalesQuoteRequestSubs","sub","SalesGroup","setSalesGroup","salesGroupFetched","setSalesGroupFetched","salesObjectFetched","setSalesObjectFetched","setSalesOrder","salesInvoice","setSalesInvoice","salesQuote","setSalesQuote","setSalesReturn","billingCollapseOpen","setBillingCollapseOpen","setSelectedSalesTab","useRouteMatch","getSalesOrder","getSalesQuote","getSalesReturn","getSalesInvoice","handleNewTab","tabName","SalesReturns","refreshForSalesInvoice","rturn","salesObjectInSalesGroup","boxShadow","Collapse","in","renderTabMainContent","Dashboard","dashboardLinks","setDashboardLinks","activeLink","setActiveLink","pathName","linksFlattened","roleResults","userHasRole","permissionResults","userHasPermission","populateDashboardLinks","breadCrumbs","dashboardTabComponents","AccountSettings","MyDashboard","faCoffee","renderedDashboardPaths","Navbar","expand","getRouterRoutes","RegistrationStepsHeader","RegistrationBasicInfoStep","onCompleteBasicInfoStep","userNameIsEmailEnabled","usernameIsEmail","control","boundUserName","useWatch","Email","emEmailRegistration","isUnique","curEmailValue","translated","currCustNoValue","RegistrationAddressBookStep","onCompleteAddressBookStep","basicInfoStepData","showAddBillingAddressModal","setShowAddBillingAddressModal","showAddShippingAddressModal","setShowAddShippingAddressModal","userBillingAddressComplete","setUserBillingAddressComplete","userShippingAddressComplete","setUserShippingAddressComplete","addressIsAbleToReceiveChemicals","setAddressIsAbleToReceiveChemicals","getInitialAccountContact","basicInfoFirstName","basicInfoLastName","basicInfoEmail","basicInfoPhone","firstNameRegistration","lastNameRegistration","telPhoneRegistration","userBillingAddress","setUserBillingAddress","userShippingAddress","setUserShippingAddress","IsShipping","RegistrationWalletStep","onCompleteWalletStep","RegistrationCustomStep","onCompleteCustomStep","validationErrors","setValidationErrors","preferredPaymentMethod","setPreferredPaymentMethod","taxExempt_IsChecked","setTaxExempt_IsChecked","taxExemptFormFiles","setTaxExemptFormFiles","primaryBusinessActivity","setPrimaryBusinessActivity","businessName","setBusinessName","website","setWebsite","businessStructure","setBusinessStructure","businessStructureAlt","setBusinessStructureAlt","usFederalIDnoSSnoTaxId","setUsFederalIDnoSSnoTaxId","dunsAndBradstreetNo","setDunsAndBradstreetNo","industrySegment","setIndustrySegment","naicsCodes","setNaicsCodes","multinationalEnterprise_IsChecked","setMultinationalEnterprise_IsChecked","noOfBusinessUnits","setNoOfBusinessUnits","noOfYearsInBusiness","setNoOfYearsInBusiness","branchLocationFiles","setBranchLocationFiles","explanationOfUse_Laboratory_IsChecked","setExplanationOfUse_Laboratory_IsChecked","explanationOfUse_DistributionToCustomers_IsChecked","setExplanationOfUse_DistributionToCustomers_IsChecked","explanationOfUse_Manufacturing_IsChecked","setExplanationOfUse_Manufacturing_IsChecked","explanationOfUse_Resale_IsChecked","setExplanationOfUse_Resale_IsChecked","certify_ProfessionallyStaffed_IsChecked","setCertify_ProfessionallyStaffed_IsChecked","certify_NotResell_IsChecked","setCertify_NotResell_IsChecked","certify_UsaDomiciledCo_IsChecked","setCertify_UsaDomiciledCo_IsChecked","certify_IntlDomiciledCo_IsChecked","setCertify_IntlDomiciledCo_IsChecked","intlDomiciledCo_SelectedCountry","setIntlDomiciledCo_SelectedCountry","fullLegalName","setFullLegalName","setTitle","uploadedSignature","setUploadedSignature","sigCanvas","base64ToBlob","base64","mimeType","byteCharacters","atob","byteNumbers","charCodeAt","byteArray","Uint8Array","Blob","signatureDataURL","setUploadedFileResult","base64Data","blob","ImportUser","uploadedFile","canvasProps","pointerEvents","clear","uploadFileAndSetState","toDataURL","validity","validateFields","RegistrationConfirmationStep","submitRegistrationForm","_data","RegistrationCompletedStep","emailRegisteredWith","RegistrationHeader","companyName","privacy","Registration","emUsername","pwPasswordRegistration","customerNumberRegistration","setStepBasicInfoStepData","stepAddressBookBillingData","setStepAddressBookBillingData","stepAddressBookShippingData","setStepAddressBookShippingData","setStepWalletData","stepCustomData","setStepCustomData","mapBillingOrShippingAddress","setMapBillingOrShippingAddress","proceed","skipToConfirm","billingAddress","shippingAddress","continueToConfirmation","customData","registerToExistingAcct","registerNormal","AddressID","ContactID","EmailConfirmed","IsApproved","IsSMSAllowed","OverridePassword","PhoneNumberConfirmed","RequirePasswordChangeOnNextLogin","TwoFactorEnabled","UseAutoPay","AccountKey","canReceiveChemicals","InService","stepsToShow","registrationStepConfig","registrationStepFactory","email","setEmail","wasSent","setWasSent","isFormValid","setIsFormValid","isInvalid","search","emForcedResetEmail","pwForcedResetNewPassword","OldPassword","pwForcedResetPassword","forceTooltipWithFocus","showValidTooltip","contactUs","weekDays","StoreLocatorCard","store","onStoreClicked","useSmallText","ContactFirstName","ContactLastName","storeHours","setStoreHours","setCurrentUserCoords","currentUserFormattedAddress","setCurrentUserFormattedAddress","day","openInMilitary","decimalToMilitary","closeInMilitary","buildStoreHoursArray","navigator","permissions","geolocation","getCurrentPosition","locationData","lat","coords","latitude","lng","longitude","_resolve","google","maps","apiKey","getAddressFromLatLng","formatted_address","_err","getCollapsedDaysWithHours","dayObj","militaryToTwelveHour","getGetDirectionsLink","n","hoursAsString","existingArr","prevStoreHoursItem","StoreLocatorMarkerTip","onXButtonClicked","StoreLocatorMarker","onMarkerClicked","useTooltip","TooltipComponent","clearSelectedStore","showTooltip","setShowTooltip","StoreLocator","zipCode","setZipCode","setStores","center","setCenter","IDOfselectedStore","setIDOfselectedStore","radius","setRadius","getAllStores","getStoresResult","storesI","storesToAssign","Latitude","Longitude","getLatLngFromAddress","googleLatLngResult","latLngResult","geometry","centerQuery","TooltipBody","readOnly","bootstrapURLKeys","defaultCenter","defaultZoom","addressQueryString","createBrowserHistory","basename","process","authenticatedRoutes","unauthenticatedRoutes","forgotPassword","forgotUsername","forcedPasswordReset","isLocalhost","hostname","registerValidSW","swUrl","serviceWorker","onupdatefound","installingWorker","installing","onstatechange","controller","LanguageDetector","use","initReactI18next","resourcesToBackend","namespace","resources","init","fallbackLng","supportedLngs","interpolation","escapeValue","configureStore","addressBookReducer","authReducer","cartReducer","cefConfigReducer","signalRReducer","walletSliceReducer","getSubDomain","matchOfHost","rootSegmentCount","useSubDomainForCookies","usePartialSubDomainForCookiesRootSegmentCount","array","getCookiesOptions","allowExpire","domain","in120","setMinutes","getMinutes","expires","componentMap","CategoriesMenuBar","CefConfigKeyEnabled","cefConfigKey","childComponent","childComponentProps","Component","CVRoutesManager","guardedRoutes","setGuardedRoutes","redirectUser","useCallback","route","redirectPath","routeBase","authenticatedOnly","unauthenticatedOnly","pathLowerCased","routeLowerCased","pathStartsWithRouteBase","urlParams","txtEmail","txtToken","txtPassword","Token","faKey","HeaderMid","languagesEnabled","languages","Icon","newIcon","require","getIcon","PopularProducts","getProductsAsync","Days","TrackingSnippet","lastEventRef","cookieData","setCookieData","createPageViewModel","URI","VisitorID","createPageViewEventModel","EventID","PageViewID","visitorKeyCookie","Cookies","newGUID","visitKeyCookie","setupCookies","PageView","PageViewEvent","Visitor","VisitID","Visit","Event","visitorIDFromRes","visitIDFromRes","createEvent","getComponentById","getFallback","hideSuspenseDNNComponents","componentId","hideSuspense","suspenseMessage","baseElement","rootElement","getElementById","baseUrl","getAttribute","ReactDOM","ReactRouterRoute","Route","Suspense","fallback","URL","origin","fetch","unregister","checkValidServiceWorker","registerServiceWorker","roots","from","querySelectorAll","reactPortalAnchor","dataset","reactComponent","JsonProps","parseJsonProps","reactProps","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","deferred","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","getter","__esModule","definition","defineProperty","enumerable","globalThis","prop","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}</textarea></section></confirmationmodal\r\n></anchor\r\n></confirmationmodal\r\n></string></string></react.setstateaction<boolean></react.setstateaction<boolean></react.setstateaction<boolean><table columns="{columns}" data="{salesItems}"></table></column<any></appliedsalesorderitemdiscountmodel></a\r\n></appliedsalesorderitemdiscountmodel></productcardnamewidget\r\n></appliedsalesorderitemdiscountmodel></appliedsalesorderitemdiscountmodel></productcardactionbuttonwidget\r\n></appliedsalesorderitemdiscountmodel></appliedsalesorderitemdiscountmodel></appliedsalesorderitemdiscountmodel></appliedsalesorderitemdiscountmodel></loadingwidget></paymentmodel[]></boolean></i></confirmationmodal\r\n></string></accountcontactmodel></string></walletmodel></i></i></i></i></i></i></button\r\n></row></i></row></createshoppinglistmodal\r\n></route></switch></column<any></loadingwidget></boolean></cartmodel></link\r\n></carttypemodel[]></boolean></carttablewidescreen\r\n></i></i></i></loadingwidget></htmlbuttonelement></htmlbuttonelement></string></boolean></boolean></salesitembasemodel<appliedcartitemdiscountmodel></cartmodel></carttypemodel></any></any></i></appliedcartitemdiscountmodel></i></i></i></itoolbarfiltercolumn></column<salesreturnmodel></link\r\n></statusmodel[]></salesreturnmodel[]></any></i></i></itoolbarfiltercolumn></column<salesordermodel></link\r\n></statusmodel[]></salesordermodel[]></any></i></i></paymultipleinvoicesmodal></column<salesinvoicemodel></link\r\n></boolean></number></array<statusmodel></array<salesinvoicemodel></any></confirmationmodal\r\n></number></salesinvoicemodel[]></accountcontactmodel></string></walletmodel></boolean></boolean></loadingwidget></any></any></any></servicestrings.cvgrid.filters></t></itoolbarvaluesstate></itoolbarvaluesstate></any></form.control\r\n></div\r\n></form.control\r\n></form.control\r\n></i></i></productsuggestresult></htmlinputelement></array<productsuggestresult></i></productsearchviewmodel></string[]></i></imyprofiledataentry></imyprofiledataentry></usermodel></string></i></i></i></i></loadingwidget></accountcontactmodel></boolean></boolean></i></i></accountcontactmodel></accountcontactmodel></productreviewinformationmodel></string></productreviewinformationmodel></productassociationmodel[]></productmodel></productmodel></defaultproductdetailstemplate></variantscustomproductdetailstemplate></recentlyviewedproductdetailstemplate></clothingproductdetailstemplate></staticheadphonesproductdetailstemplate></tabcontent\r\n></tabcontent\r\n></tabcontent\r\n></reviewsmain></tabcontent\r\n></tabs></row></generalattributepagedresults></array<ifulltabsettab></string></productreviewinformationmodel></i></i></loadingwidget></form\r\n></imyprofiledataentry></imyprofiledataentry></boolean></number></boolean></number></number></productassociationmodel></i></bootstrapcarousel\r\n></number></img\r\n></anchor\r\n></anchor\r\n></boolean></void></productimagemodel[]></loadingwidget></appliedcartitemdiscountmodel></appliedcartitemdiscountmodel></appliedcartitemdiscountmodel></carttotals></cartmodel[]></boolean></iquoteids></array<number></number></array<ipurchasestep></number></splitshippingtotals></loadingwidget></ihttpresponset<cefactionerrorresponse></cartmodel[]></input\r\n></loadingwidget></form></loadingwidget></any[]></tpaymentmethod></iinvoiceformdata></iinvoiceformdata></array<string></li></i></iuploadresult></htmlinputelement></string></array<iuploadresult></number></string></div\r\n></div\r\n></react.setstateaction<number></newwalletmodal\r\n></i></i></icreditcardformdata></string></walletmodel[]></void></void></void></walletmodel></iwalletfactory></void></void></void></walletmodel></iwalletentrydata></iwalletentrydata></unknown></salesitemtargetbasemodel></salesitemtargetbasemodel></salesitemtargetbasemodel></array<salesitemtargetbasemodel></salesitemtargetbasemodel></salesitemtargetbasemodel></titem></titem></boolean></tgroup></titem></appliedcartitemdiscountmodel></form\r\n></htmlbuttonelement></inewwalletformdata></inewwalletformdata></reviewmodel></productinventorylocationsectionmodel></iuploadresult></iuploadresult></string></tresult></tresult></string></titemdiscountmodel></salesitemtargetbasemodel></titemdiscountmodel></tsaleseventmodel></tdiscountmodel></salesitembasemodel<titemdiscountmodel></tcontactmodel></ttypemodel></tfilemodel></string></string></tvendorrelatemodel></tvendorrelatemodel></tuserrelatemodel></tuserrelatemodel></tstorerelatemodel></tstorerelatemodel></tother></tother></tproductrelatemodel></tproductrelatemodel></tmanufacturerrelatemodel></tmanufacturerrelatemodel></tfranchiserelatemodel></tfranchiserelatemodel></tcategoryrelatemodel></tcategoryrelatemodel></tbrandrelatemodel></tbrandrelatemodel></taccountrelatemodel></taccountrelatemodel></string></string></string></number></string></string></string></number></string></string></string></number></ttypemodel></tfilemodel></storedfilemodel></tslavemodel></number></number></typemodel></timagemodel></timagemodel></notemodel></string></string></string></number></tmodel></tmodel></number></aggregateratingrange></aggregatepricingrange></number></indexabletypemodel></number></number></number></number></number></number></keyvaluepair<string,></number></tindexmodel></tsearchform></dtoclasscategorymodel></dtoclasscategorymodel></dtoclasscategorymodel></tvalue></tkey,></ihttppromisecallbackarg<t></t></t></t></tresult></tresult></string></i></i></ratequotemodel[]></accountcontactmodel></number></boolean></tpurchaseratequotesmanagerwidgetsortby></void></void></boolean></void></void></accountcontactmodel></void></iaddressbookfactory></void></void></boolean></void></void></accountcontactmodel></void></accountcontactmodel[]></accountcontactmodel></loadingwidget></col\r\n></htmlbuttonelement></number></number></regionmodel[]></countrymodel[]></k></none></boolean></boolean></boolean></boolean></boolean></none></boolean></boolean></boolean></boolean></boolean></boolean></boolean></boolean></boolean></i></errorview></loadingwidget></cataloggridview></cataloglistview></catalogtableview></cataloggridview></loadingwidget></t,></string,></productsearchviewmodel></categorymodel></array<generalattributemodel></record<string,></array<categorymodel></array<productmodel></t></t></t></number></number></productsearchviewmodel></react.setstateaction<productsearchviewmodel></iparamsforsearchcatalogqpcmap></iparamsforsearchcatalogqpcmap></iparamsforsearchcatalogqpcmap></iparamsforsearchcatalogqpcmap></string[]></string[]></any,></old></string,></productmodel[]></productmodel></productmodel[]></productmodel></breadcrumb.item\r\n></breadcrumb.item\r\n></breadcrumb.item\r\n></breadcrumb\r\n></col\r\n></string[]></i></button\r\n></td\r\n></productcardactionbuttonwidget></productcardpricingwidget></productcardstockwidget></interweave\r\n></td\r\n></productcardskuwidget\r\n></productcardnamewidget\r\n></th\r\n></th\r\n></table\r\n></generalattributemodel[]></productmodel[]></interweave></loadingwidget></alertinfonoresults></div\r\n></productmodel></loadingwidget></alertinfonoresults></div\r\n></loadingwidget></alertinfonoresults></productcard\r\n></row\r\n></div\r\n></productmodel></div\r\n></loginmodal\r\n></createshoppinglistmodal\r\n></addtoshoppinglistmodal\r\n></addtoinstockalertsmodal\r\n></confirmationmodal\r\n></confirmationmodal\r\n></pccwhorizontallayout></pccwverticallayout></pccwhorizontallayout></pccwoverlaylayout></string></boolean></boolean></boolean></boolean></boolean></boolean></modal\r\n></iaddtoinstockalertsmodalformdata></iaddtoinstockalertsmodalformdata></errorview></confirmationmodal\r\n></string></boolean></boolean></string></boolean></boolean></string></listgroup.item></button\r\n></buttongroup></i></i></loadingwidget></htmlinputelement></string></dictionary<serializableattributesdictionary></iremovefromcartmodalinfo></string></error></productmodel></boolean></array<productsuggestresult></i></serializableattributesdictionary></appliedcartitemdiscountmodel></appliedcartitemdiscountmodel></serializableattributesdictionary></removediscountbutton\r\n></div\r\n></div\r\n></div\r\n></div\r\n></i></button\r\n></modal\r\n></loadingwidget></confirmationmodal\r\n></string></boolean></boolean></productmodel[]></productmodel></productmodel[]></productmodel></footer\r\n></errorview></select\r\n></loadingwidget></confirmationmodal\r\n></array<languagemodel></boolean></i></errorview></htmlformelement></array<productsuggestresult></errorview></addtocartbutton\r\n></addtocartquantityselector\r\n></div\r\n></addtocartbutton\r\n></button\r\n></addtocartquantityselector\r\n></div\r\n></addtocartbutton\r\n></viewdetailsbutton\r\n></addtocartquantityselector\r\n></div\r\n></productcardbiddingwidget\r\n></errorview></viewdetailsbutton\r\n></calculatedprices></number></i></div\r\n></htmlinputelement></number></bidmodel></lotmodel></i></i></addalltocartmodal\r\n></salesitembasemodel<appliedsalesquoteitemdiscountmodel\r\n></loadingwidget></calculatedprices></addtocartmodal\r\n></i></i></fontawesomeicon></a\r\n></string[]></boolean></i></i></htmlbuttonelement></htmlbuttonelement></htmlinputelement></i></i></addtocartmodal\r\n></addtocartmodal\r\n></boolean></boolean></string[]></boolean></boolean></loadingwidget></confirmationmodal\r\n></confirmationmodal\r\n></confirmationmodal\r\n></comparefilter></brandsfilter\r\n></pricerangesfilter\r\n></attributesfilter\r\n></categoriesfilter\r\n></productratingsfilter\r\n></searchtermfilter\r\n></i></i></i></i></i></i></i></i></col\r\n></array<string></productcatalogsearchform></keyof></react.setstateaction<productsearchviewmodel></salesitembasemodel<appliedcartitemdiscountmodel></listgroup\r\n></t></any></i></catalogfilter\r\n></string[]></catalogfilter\r\n></string[]></i></col\r\n></i></loginmodal\r\n></htmlanchorelement></idashboardsettings></idashboardsettings></idashboardsettings></idashboardsettings></array<idashboardsettings></boolean></errorview></i></i></loadingwidget></string></array<categorymodel></viewstateerrorarg></i></boolean></string></boolean></string></number></appliedcartitemdiscountmodel></boolean></appliedsalesorderitemdiscountmodel></number></lotmodel></lotmodel></number></lotmodel></ibiddingfactory></lotmodel></number></lotmodel></hubconnection></hubconnection></adzonemodel></typemodel></typemodel></visitmodel></eventmodel></vendorcatalogsearchform,vendorindexablemodel></vendorcatalogsearchform,vendorindexablemodel></productmodel></productmodel></vendormodel></vendormodel></shipmentmodel></purchaseordermodel></reviewmodel></typemodel></storevendormodel></vendorproductmodel></vendormanufacturermodel></franchisevendormodel></brandvendormodel></vendoraccountmodel></vendorimagemodel></typemodel></storevendormodel></vendorproductmodel></vendormanufacturermodel></franchisevendormodel></brandvendormodel></vendoraccountmodel></vendorimagemodel></manufacturermodel></manufacturermodel></typemodel></typemodel></accountmodel></accountmodel></typemodel></typemodel></statusmodel></statusmodel></usermodel></usermodel></statusmodel></statusmodel></reviewmodel></typemodel></storeusermodel></franchiseusermodel></brandusermodel></userfilemodel></userimagemodel></typemodel></storeusermodel></franchiseusermodel></brandusermodel></userfilemodel></userimagemodel></typemodel></typemodel></string></typemodel></typemodel></subscriptiontypemodel></subscriptiontypemodel></subscriptiontyperepeattypemodel></statusmodel></statusmodel></subscriptionmodel></subscriptionmodel></subscriptionhistorymodel></subscriptiontypemodel></subscriptiontypemodel></subscriptionhistorymodel></subscriptionhistorymodel></paymentmodel></paymentmodel></vendormodel></vendormodel></storeusermodel></storeusermodel></usermodel></usermodel></typemodel></typemodel></subscriptionmodel></subscriptionmodel></number></storecatalogsearchform,storeindexablemodel></storecatalogsearchform,storeindexablemodel></storeregionmodel></storeregionmodel></regionmodel></regionmodel></productmodel></productmodel></storemodel></storemodel></storesubscriptionmodel></storeregionmodel></storeinventorylocationmodel></storedistrictmodel></storecountrymodel></storecontactmodel></storebadgemodel></reviewmodel></typemodel></storevendormodel></storeusermodel></storeproductmodel></storemanufacturermodel></franchisestoremodel></storecategorymodel></brandstoremodel></storeaccountmodel></storeimagemodel></typemodel></storevendormodel></storeusermodel></storeproductmodel></storemanufacturermodel></franchisestoremodel></storecategorymodel></brandstoremodel></storeaccountmodel></storeimagemodel></manufacturermodel></manufacturermodel></typemodel></typemodel></typemodel></inventorylocationmodel></typemodel></inventorylocationmodel></indexablebadgefilter></typemodel></typemodel></districtmodel></districtmodel></number></countrymodel></countrymodel></contactmodel></contactmodel></categorymodel></categorymodel></number></number></badgemodel></badgemodel></auctionmodel></auctionmodel></accountmodel></accountmodel></sitedomainsocialprovidermodel></socialprovidermodel></socialprovidermodel></sitedomainmodel></sitedomainmodel></sitedomainsocialprovidermodel></franchisesitedomainmodel></brandsitedomainmodel></franchisesitedomainmodel></brandsitedomainmodel></typemodel></typemodel></statusmodel></statusmodel></shipmenteventmodel></typemodel></typemodel></shipcarriermethodmodel></serializableattributeobject></serializableattributeobject></number></number></number></number></number></string></string></number></string></number></number></string></number></number></number></number></number></number></string></string></number></number></array<string></array<string></typemodel></typemodel></statusmodel></statusmodel></statemodel></statemodel></samplerequestmodel></samplerequestmodel></samplerequestfilemodel></typemodel,samplerequestcontactmodel,samplerequesteventmodel,appliedsamplerequestdiscountmodel,appliedsamplerequestitemdiscountmodel,samplerequestfilemodel></samplerequestfilemodel></typemodel,samplerequestcontactmodel,samplerequesteventmodel,appliedsamplerequestdiscountmodel,appliedsamplerequestitemdiscountmodel,samplerequestfilemodel></typemodel></typemodel></contactmodel></contactmodel></typemodel></typemodel></statusmodel></statusmodel></statemodel></statemodel></salesordermodel></salesordermodel></salesreturnreasonmodel></salesreturnreasonmodel></paymentmodel></paymentmodel></salesreturnmodel></salesreturnmodel></salesreturnpaymentmodel></salesreturnsalesordermodel></number></salesreturnfilemodel></typemodel,salesreturncontactmodel,salesreturneventmodel,appliedsalesreturndiscountmodel,appliedsalesreturnitemdiscountmodel,salesreturnfilemodel></salesreturnfilemodel></typemodel,salesreturncontactmodel,salesreturneventmodel,appliedsalesreturndiscountmodel,appliedsalesreturnitemdiscountmodel,salesreturnfilemodel></salesreturneventmodel></salesreturneventmodel></typemodel></typemodel></contactmodel></contactmodel></typemodel></typemodel></statusmodel></statusmodel></statemodel></statemodel></number></salesordermodel></salesordermodel></salesquotemodel></salesquotemodel></salesquotecategorymodel></salesquotesalesordermodel></salesquotefilemodel></typemodel,salesquotecontactmodel,salesquoteeventmodel,appliedsalesquotediscountmodel,appliedsalesquoteitemdiscountmodel,salesquotefilemodel></salesquotefilemodel></typemodel,salesquotecontactmodel,salesquoteeventmodel,appliedsalesquotediscountmodel,appliedsalesquoteitemdiscountmodel,salesquotefilemodel></salesquoteeventmodel></salesquoteeventmodel></typemodel></typemodel></contactmodel></contactmodel></categorymodel></categorymodel></typemodel></typemodel></statusmodel></statusmodel></statemodel></statemodel></salesinvoicemodel></salesinvoicemodel></purchaseordermodel></purchaseordermodel></paymentmodel></paymentmodel></salesordermodel></salesordermodel></salesorderpaymentmodel></salesreturnsalesordermodel></salesquotesalesordermodel></salesordersalesinvoicemodel></salesorderpurchaseordermodel></salesorderfilemodel></typemodel,salesordercontactmodel,salesordereventmodel,appliedsalesorderdiscountmodel,appliedsalesorderitemdiscountmodel,salesorderfilemodel></salesorderfilemodel></typemodel,salesordercontactmodel,salesordereventmodel,appliedsalesorderdiscountmodel,appliedsalesorderitemdiscountmodel,salesorderfilemodel></salesordereventmodel></salesordereventmodel></typemodel></typemodel></contactmodel></contactmodel></typemodel></typemodel></typemodel></typemodel></typemodel></typemodel></statusmodel></statusmodel></statemodel></statemodel></paymentmodel></paymentmodel></salesinvoicemodel></salesinvoicemodel></salesinvoicepaymentmodel></salesordersalesinvoicemodel></salesinvoicefilemodel></typemodel,salesinvoicecontactmodel,salesinvoiceeventmodel,appliedsalesinvoicediscountmodel,appliedsalesinvoiceitemdiscountmodel,salesinvoicefilemodel></salesinvoicefilemodel></typemodel,salesinvoicecontactmodel,salesinvoiceeventmodel,appliedsalesinvoicediscountmodel,appliedsalesinvoiceitemdiscountmodel,salesinvoicefilemodel></salesinvoiceeventmodel></salesinvoiceeventmodel></typemodel></typemodel></contactmodel></contactmodel></salesgroupmodel></salesgroupmodel></salesordermodel></samplerequestmodel></salesreturnmodel></salesquotemodel></salesquotemodel></salesquotemodel></salesquotemodel></salesordermodel></salesinvoicemodel></purchaseordermodel></typemodel></typemodel></number></string></string></string></string></string></string></number></number></ratequotemodel></typemodel></typemodel></typemodel></typemodel></string></responseerror></string></repeattypemodel></repeattypemodel></subscriptiontyperepeattypemodel></regionmodel></regionmodel></regionlanguagemodel></regioncurrencymodel></regionimagemodel></regionimagemodel></languagemodel></languagemodel></typemodel></typemodel></currencymodel></currencymodel></productbycategorymodel></string></questionmodel></questionmodel></questionoptionmodel></typemodel></typemodel></salesorderpurchaseordermodel></number></purchaseorderfilemodel></typemodel,purchaseordercontactmodel,purchaseordereventmodel,appliedpurchaseorderdiscountmodel,appliedpurchaseorderitemdiscountmodel,purchaseorderfilemodel></purchaseorderfilemodel></typemodel,purchaseordercontactmodel,purchaseordereventmodel,appliedpurchaseorderdiscountmodel,appliedpurchaseorderitemdiscountmodel,purchaseorderfilemodel></typemodel></typemodel></contactmodel></contactmodel></typemodel></typemodel></typemodel></typemodel></statusmodel></statusmodel></shipcarriermethodmodel></shipcarriermethodmodel></productcatalogsearchform,productindexablemodel></productcatalogsearchform,productindexablemodel></array<string></number></number></number></number></reviewmodel></productmodel></productmodel></productsubscriptiontypemodel></productshipcarriermethodmodel></productrestrictionmodel></productnotificationmodel></productmembershiplevelmodel></productdownloadmodel></productassociationmodel></reviewmodel></productassociationmodel></typemodel></vendorproductmodel></storeproductmodel></manufacturerproductmodel></franchiseproductmodel></productcategorymodel></brandproductmodel></accountproductmodel></productfilemodel></productimagemodel></typemodel></vendorproductmodel></storeproductmodel></manufacturerproductmodel></franchiseproductmodel></productcategorymodel></brandproductmodel></accountproductmodel></productfilemodel></productimagemodel></subscriptionmodel></membershiplevelmodel></membershiplevelmodel></number></number></productinventorylocationsectionmodel></productinventorylocationsectionmodel></inventorylocationsectionmodel></inventorylocationsectionmodel></indexablevariantattributesfilter></typemodel></typemodel></productimagemodel></productimagemodel></typemodel></typemodel></typemodel></typemodel></typemodel></typemodel></productcategoryselectormodel></categorymodel></categorymodel></productmodel></typemodel></typemodel></typemodel></productmodel></typemodel></productmodel></vendormodel></vendormodel></storemodel></storemodel></typemodel></typemodel></productmodel></productmodel></pricerulemodel></pricerulemodel></priceruleuserrolemodel></priceruleproducttypemodel></pricerulecountrymodel></pricerulecategorymodel></priceruleaccounttypemodel></pricerulevendormodel></pricerulestoremodel></priceruleproductmodel></pricerulemanufacturermodel></pricerulefranchisemodel></pricerulebrandmodel></priceruleaccountmodel></pricerulevendormodel></pricerulestoremodel></priceruleproductmodel></pricerulemanufacturermodel></pricerulefranchisemodel></pricerulebrandmodel></priceruleaccountmodel></manufacturermodel></manufacturermodel></franchisemodel></franchisemodel></countrymodel></countrymodel></categorymodel></categorymodel></brandmodel></brandmodel></typemodel></typemodel></accountmodel></accountmodel></pricepointmodel></pricepointmodel></productmodel></productmodel></phoneprefixlookupmodel></phoneprefixlookupmodel></typemodel></typemodel></statusmodel></statusmodel></paymentmodel></paymentmodel></typemodel></typemodel></paymentmethodmodel></paymentmethodmodel></typemodel></typemodel></eventmodel></eventmodel></typemodel></typemodel></typemodel></typemodel></notetypemodel></notetypemodel></notetypemodel></notetypemodel></usermodel></usermodel></messagemodel></messagemodel></messagerecipientmodel></messageattachmentmodel></menucategorymodel></typemodel></typemodel></membershipmodel></membershipmodel></membershiprepeattypemodel></membershiplevelmodel></membershiplevelmodel></membershiplevelmodel></membershipadzoneaccessbylevelmodel></membershipadzoneaccessbylevelmodel></adzoneaccessmodel></adzoneaccessmodel></membershiplevelmodel></membershiplevelmodel></manufacturercatalogsearchform,manufacturerindexablemodel></manufacturercatalogsearchform,manufacturerindexablemodel></productmodel></productmodel></manufacturermodel></manufacturermodel></reviewmodel></typemodel></vendormanufacturermodel></storemanufacturermodel></manufacturerproductmodel></franchisemanufacturermodel></brandmanufacturermodel></manufacturerimagemodel></typemodel></vendormanufacturermodel></storemanufacturermodel></manufacturerproductmodel></franchisemanufacturermodel></brandmanufacturermodel></manufacturerimagemodel></typemodel></typemodel></lotcatalogsearchform,lotindexablemodel></lotcatalogsearchform,lotindexablemodel></lotmodel></lotmodel></typemodel></typemodel></languagemodel></languagemodel></languageimagemodel></languageimagemodel></typemodel></typemodel></usermodel></usermodel></inventorylocationsectionmodel></inventorylocationsectionmodel></productinventorylocationsectionmodel></inventorylocationregionmodel></inventorylocationregionmodel></regionmodel></regionmodel></inventorylocationmodel></inventorylocationmodel></inventorylocationusermodel></inventorylocationsectionmodel></inventorylocationregionmodel></storeinventorylocationmodel></franchiseinventorylocationmodel></brandinventorylocationmodel></storeinventorylocationmodel></franchiseinventorylocationmodel></brandinventorylocationmodel></indexablevendorfilter></indexablestorefilter></indexablerolefilter></indexablerolefilter></indexableproductfilter></indexablemanufacturerfilter></indexabledistrictfilter></indexablefranchisefilter></indexablecategoryfilter></indexablebrandfilter></indexableattributeobjectfilter></indexableattributeobjectfilter></incrementstepmodel></usermodel></usermodel></typemodel></groupusermodel></groupmodel></typemodel></groupusermodel></groupmodel></generalattributepredefinedoptionmodel></generalattributepredefinedoptionmodel></generalattributemodel></generalattributemodel></attributetypemodel></attributetypemodel></vendormodel></vendormodel></usermodel></usermodel></storemodel></storemodel></sitedomainmodel></sitedomainmodel></franchisecatalogsearchform,franchiseindexablemodel></franchisecatalogsearchform,franchiseindexablemodel></regionmodel></regionmodel></productmodel></productmodel></franchisemodel></franchisemodel></franchisesitedomainmodel></franchiseregionmodel></franchiselanguagemodel></franchiseinventorylocationmodel></franchisedistrictmodel></franchisecurrencymodel></franchisecountrymodel></typemodel></franchisevendormodel></franchiseusermodel></franchisestoremodel></franchiseproductmodel></franchisemanufacturermodel></franchisecategorymodel></brandfranchisemodel></franchiseaccountmodel></franchiseimagemodel></typemodel></franchisevendormodel></franchiseusermodel></franchisestoremodel></franchiseproductmodel></franchisemanufacturermodel></franchisecategorymodel></brandfranchisemodel></franchiseaccountmodel></franchiseimagemodel></manufacturermodel></manufacturermodel></languagemodel></languagemodel></typemodel></inventorylocationmodel></typemodel></inventorylocationmodel></typemodel></typemodel></districtmodel></districtmodel></currencymodel></currencymodel></countrymodel></countrymodel></franchisecategorymodel></franchisecategorymodel></categorymodel></categorymodel></auctionmodel></auctionmodel></accountmodel></accountmodel></typemodel></typemodel></districtmodel></districtmodel></districtlanguagemodel></districtcurrencymodel></districtimagemodel></districtimagemodel></languagemodel></languagemodel></typemodel></typemodel></currencymodel></currencymodel></vendormodel></vendormodel></usermodel></usermodel></storemodel></storemodel></shipcarriermethodmodel></shipcarriermethodmodel></appliedsalesquoteitemdiscountmodel></appliedsalesquotediscountmodel></appliedsalesorderitemdiscountmodel></appliedsalesorderdiscountmodel></appliedsalesinvoiceitemdiscountmodel></appliedsalesinvoicediscountmodel></typemodel></typemodel></productmodel></productmodel></discountuserrolemodel></discountshipcarriermethodmodel></discountproducttypemodel></discountcountrymodel></discountcodemodel></discountcategorymodel></discountaccounttypemodel></discountvendormodel></discountusermodel></discountstoremodel></discountproductmodel></discountmanufacturermodel></discountfranchisemodel></discountbrandmodel></discountaccountmodel></discountvendormodel></discountusermodel></discountstoremodel></discountproductmodel></discountmanufacturermodel></discountfranchisemodel></discountbrandmodel></discountaccountmodel></manufacturermodel></manufacturermodel></franchisemodel></franchisemodel></countrymodel></countrymodel></categorymodel></categorymodel></brandmodel></brandmodel></typemodel></typemodel></accountmodel></accountmodel></currencymodel></currencymodel></currencyimagemodel></currencyimagemodel></typemodel></typemodel></statusmodel></statusmodel></creditmodel></creditmodel></creditmodel></creditmodel></creditpaymentmodel></typemodel></typemodel></countrymodel></countrymodel></countrylanguagemodel></countrycurrencymodel></countryimagemodel></countryimagemodel></languagemodel></languagemodel></typemodel></typemodel></currencymodel></currencymodel></counterlogmodel></typemodel></typemodel></typemodel></typemodel></usermodel></usermodel></conversationmodel></conversationmodel></messagemodel></string></conversationusermodel></conversationusermodel></typemodel></typemodel></typemodel></contactimagemodel></typemodel></contactimagemodel></typemodel></typemodel></string></string></number></number></string></string></string></number></string></typemodel></typemodel></categorycatalogsearchform,categoryindexablemodel></categorycatalogsearchform,categoryindexablemodel></array<string></categorymodel></categorymodel></reviewmodel></typemodel></storecategorymodel></productcategorymodel></franchisecategorymodel></brandcategorymodel></categoryfilemodel></categoryimagemodel></categorymodel></typemodel></storecategorymodel></productcategorymodel></franchisecategorymodel></brandcategorymodel></categoryfilemodel></categoryimagemodel></categorymodel></categoryimagemodel></categoryimagemodel></typemodel></typemodel></carttypemodel></carttypemodel></statusmodel></statusmodel></statemodel></statemodel></cartfilemodel></carttypemodel,cartcontactmodel,carteventmodel,appliedcartdiscountmodel,appliedcartitemdiscountmodel,cartfilemodel></cartfilemodel></carttypemodel,cartcontactmodel,carteventmodel,appliedcartdiscountmodel,appliedcartitemdiscountmodel,cartfilemodel></salesitembasemodel<appliedcartitemdiscountmodel></salesitembasemodel<appliedcartitemdiscountmodel></typemodel></typemodel></contactmodel></contactmodel></campaignadmodel></typemodel></typemodel></admodel></admodel></calendarappointmentmodel></appointmentmodel></appointmentmodel></pricerulemodel></pricerulemodel></productinventorylocationsectionmodel></string></string></vendormodel></vendormodel></usermodel></usermodel></storemodel></storemodel></brandsitedomainmodel></brandsitedomainmodel></sitedomainmodel></sitedomainmodel></productmodel></productmodel></brandmodel></brandmodel></brandsitedomainmodel></brandlanguagemodel></brandinventorylocationmodel></brandcurrencymodel></brandusermodel></brandstoremodel></brandproductmodel></brandfranchisemodel></brandcategorymodel></brandaccountmodel></brandimagemodel></brandusermodel></brandstoremodel></brandproductmodel></brandfranchisemodel></brandcategorymodel></brandaccountmodel></brandimagemodel></manufacturermodel></manufacturermodel></brandlanguagemodel></brandlanguagemodel></languagemodel></languagemodel></typemodel></inventorylocationmodel></typemodel></inventorylocationmodel></typemodel></typemodel></franchisemodel></franchisemodel></brandcurrencymodel></brandcurrencymodel></currencymodel></currencymodel></categorymodel></categorymodel></auctionmodel></auctionmodel></accountmodel></accountmodel></bidmodel></bidmodel></array<string></sort></grouping></string></number></number></typemodel></badgeimagemodel></typemodel></badgeimagemodel></typemodel></typemodel></string></iauthtokens></string></string></string></auctioncatalogsearchform,auctionindexablemodel></auctioncatalogsearchform,auctionindexablemodel></auctionmodel></auctionmodel></typemodel></storeauctionmodel></franchiseauctionmodel></brandauctionmodel></typemodel></storeauctionmodel></franchiseauctionmodel></brandauctionmodel></attributetypemodel></attributetypemodel></generalattributemodel></attributetabmodel></attributetabmodel></attributegroupmodel></attributegroupmodel></calendarappointmentmodel></typemodel></typemodel></number></number></aggregatetree></adzonemodel></adzonemodel></zonemodel></zonemodel></adzonemodel></storemodel></storemodel></campaignadmodel></adzonemodel></typemodel></adstoremodel></adfranchisemodel></adbrandmodel></adaccountmodel></adimagemodel></typemodel></adstoremodel></adfranchisemodel></adbrandmodel></adaccountmodel></adimagemodel></typemodel></typemodel></franchisemodel></franchisemodel></brandmodel></brandmodel></accountmodel></accountmodel></typemodel></typemodel></statusmodel></statusmodel></typemodel></productmodel></typemodel></productmodel></pricepointmodel></pricepointmodel></accountmodel></accountmodel></accountpricepointmodel></accountcontactmodel></accountassociationmodel></typemodel></vendoraccountmodel></usermodel></storeaccountmodel></accountproductmodel></franchiseaccountmodel></brandaccountmodel></accountfilemodel></accountimagemodel></typemodel></vendoraccountmodel></usermodel></storeaccountmodel></accountproductmodel></franchiseaccountmodel></brandaccountmodel></accountfilemodel></accountimagemodel></typemodel></typemodel></contactmodel></contactmodel></typemodel></typemodel></typemodel></accountmodel></typemodel></accountmodel></loadingwidget></alert\r\n></appliedsalesorderitemdiscountmodel></loginmodal\r\n></button\r\n></loadingwidget></boolean></anchor\r\n></void></imessagewithclass></boolean></imessagewithclass[]></i></bootstrapmodal.header\r\n></bootstrapmodal\r\n></button\r\n></loginmodal></modal\r\n></boolean></i></loadingwidget></htmlinputelement></boolean></boolean></boolean></string></string></boolean></boolean></i></formgrouplabel\r\n></form.group\r\n></i></i></i></i></boolean></number></boolean></formgrouplabel\r\n></form.group\r\n></string></boolean></boolean></i></formgrouplabel\r\n></form.group\r\n></boolean></i></i></boolean></i></boolean></boolean></boolean></i></formgrouplabel\r\n></form.group\r\n></i></any></string></string></string></iviewstate></bootstrapmodal.header\r\n></bootstrapmodal\r\n></img\r\n></htmlimageelement,></boolean></string></any></i></i></a\r\n></carttypemodel[]></boolean></cartmodel></void></cartmodel></cartmodel></void></void></cefactionresponse></void></cefactionresponse></void></void></void></void></void></void></cefactionresponset<number[]></cefactionresponset<number></icartfactory></boolean></cartmodel></void></cartmodel></void></void></void></cefactionresponse></void></void></void></void></void></void></cefactionresponset<number[]></cefactionresponset<number></t></appliedcartitemdiscountmodel></appliedcartitemdiscountmodel></appliedcartitemdiscountmodel></t[]></t></appliedcartitemdiscountmodel></appliedcartitemdiscountmodel></t></t></t></t[]></t></t></t></accountmodel></usermodel></withloading<usermodel></withloading<accountmodel></accountmodel></usermodel></cefconfig></t></t></t></vendorpagedresults></vendorpagedresults></api></vendormodel></vendormodel></api></number></number></api></number></number></api></number></number></api></array<productmodel></array<productmodel></api></cefactionresponset<endusereventresponse></cefactionresponset<endusereventresponse></api></notetypepagedresults></notetypepagedresults></api></notemodel></notemodel></api></cefactionresponset<number></cefactionresponset<number></api></storeuserpagedresults></storeuserpagedresults></api></storetypepagedresults></storetypepagedresults></api></typemodel></typemodel></api></storepagedresults></storepagedresults></api></storeregionpagedresults></storeregionpagedresults></api></storeinventorylocationtypepagedresults></storeinventorylocationtypepagedresults></api></cefactionresponset<array<storeinventorylocationsmatrixmodel></cefactionresponset<array<storeinventorylocationsmatrixmodel></api></storemodel></storemodel></api></storemodel></storemodel></api></cefactionresponset<usermodel></cefactionresponset<usermodel></api></sitedomainpagedresults></sitedomainpagedresults></api></sitedomainmodel></sitedomainmodel></api></cefactionresponset<storemodel></cefactionresponset<storemodel></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></cefactionresponset<number></cefactionresponset<number></api></array<salesitembasemodel<appliedcartitemdiscountmodel></array<salesitembasemodel<appliedcartitemdiscountmodel></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></boolean></boolean></api></boolean></boolean></api></bulkorderheadersmodel></bulkorderheadersmodel></api></carttypepagedresults></carttypepagedresults></api></array<salesitembasemodel<appliedcartitemdiscountmodel></array<salesitembasemodel<appliedcartitemdiscountmodel></api></cartmodel></cartmodel></api></array<salesitembasemodel<appliedcartitemdiscountmodel></array<salesitembasemodel<appliedcartitemdiscountmodel></api></cartmodel></cartmodel></api></cefactionresponset<array<ratequotemodel></cefactionresponset<array<ratequotemodel></api></array<salesitembasemodel<appliedcartitemdiscountmodel></array<salesitembasemodel<appliedcartitemdiscountmodel></api></cefactionresponset<cartmodel></cefactionresponset<cartmodel></api></carttypepagedresults></carttypepagedresults></api></cefactionresponset<carttypemodel></cefactionresponset<carttypemodel></api></carttypemodel></carttypemodel></api></cartstatuspagedresults></cartstatuspagedresults></api></cartstatepagedresults></cartstatepagedresults></api></cartitempagedresults></cartitempagedresults></api></salesitembasemodel<appliedcartitemdiscountmodel></salesitembasemodel<appliedcartitemdiscountmodel></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<contactmodel></cefactionresponset<contactmodel></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></boolean></boolean></api></carttypemodel></carttypemodel></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<array<number></cefactionresponset<array<number></api></cefactionresponset<number></cefactionresponset<number></api></boolean></boolean></api></salesitembasemodel<appliedcartitemdiscountmodel></salesitembasemodel<appliedcartitemdiscountmodel></salesitemtargetbasemodel></shipmenttypepagedresults></shipmenttypepagedresults></api></shipmentstatuspagedresults></shipmentstatuspagedresults></api></packagetypepagedresults></packagetypepagedresults></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponset<appointmentmodel></cefactionresponset<appointmentmodel></api></cefactionresponset<array<appointmentmodel></cefactionresponset<array<appointmentmodel></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></samplerequesttypepagedresults></samplerequesttypepagedresults></api></samplerequeststatuspagedresults></samplerequeststatuspagedresults></api></samplerequeststatepagedresults></samplerequeststatepagedresults></api></samplerequestmodel></samplerequestmodel></api></salesgroupmodel></salesgroupmodel></api></salesitemtargettypepagedresults></salesitemtargettypepagedresults></api></salesgroupmodel></salesgroupmodel></api></salesgrouppagedresults></salesgrouppagedresults></api></reviewtypepagedresults></reviewtypepagedresults></api></cefactionresponset<number></cefactionresponset<number></api></salesreturntypepagedresults></salesreturntypepagedresults></api></typemodel></typemodel></api></salesreturnstatuspagedresults></salesreturnstatuspagedresults></api></statusmodel></statusmodel></api></salesreturnstatepagedresults></salesreturnstatepagedresults></api></statemodel></statemodel></api></salesreturnpagedresults></salesreturnpagedresults></api></salesreturnreasonpagedresults></salesreturnreasonpagedresults></api></salesreturneventpagedresults></salesreturneventpagedresults></api></salesreturnmodel></salesreturnmodel></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></salesquotetypepagedresults></salesquotetypepagedresults></api></typemodel></typemodel></api></salesquotestatuspagedresults></salesquotestatuspagedresults></api></statusmodel></statusmodel></api></salesquotestatepagedresults></salesquotestatepagedresults></api></statemodel></statemodel></api></salesquotepagedresults></salesquotepagedresults></api></salesquoteeventpagedresults></salesquoteeventpagedresults></api></salesquotemodel></salesquotemodel></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></cefactionresponse></cefactionresponse></api></questionpagedresults></questionpagedresults></api></cefactionresponset<boolean></cefactionresponset<boolean></api></answermodel></addressvalidationresultmodel></addressvalidationresultmodel></api></cefactionresponset<number></cefactionresponset<number></api></array<vendorsuggestresult></array<vendorsuggestresult></api></array<storesuggestresult></array<storesuggestresult></api></array<productsuggestresult></array<productsuggestresult></api></array<manufacturersuggestresult></array<manufacturersuggestresult></api></array<lotsuggestresult></array<lotsuggestresult></api></array<franchisesuggestresult></array<franchisesuggestresult></api></array<categorysuggestresult></array<categorysuggestresult></api></array<auctionsuggestresult></array<auctionsuggestresult></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<salesquotesalesgroupidentifiers></cefactionresponset<salesquotesalesgroupidentifiers></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></vendorsearchviewmodel></vendorsearchviewmodel></api></storesearchviewmodel></storesearchviewmodel></api></productsearchviewmodel></productsearchviewmodel></api></manufacturersearchviewmodel></manufacturersearchviewmodel></api></lotsearchviewmodel></lotsearchviewmodel></api></franchisesearchviewmodel></franchisesearchviewmodel></api></categorysearchviewmodel></categorysearchviewmodel></api></auctionsearchviewmodel></auctionsearchviewmodel></api></cefactionresponse></cefactionresponse></api></checkoutresult></checkoutresult></api></checkoutresult></checkoutresult></api></checkoutresult></checkoutresult></api></checkoutresult></checkoutresult></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></samplerequestmodel></samplerequestmodel></api></salesreturnmodel></salesreturnmodel></api></salesquotemodel></salesquotemodel></api></salesinvoicemodel></salesinvoicemodel></api></salesinvoicemodel></salesinvoicemodel></api></discountsforquote></discountsforquote></api></discountsfororderresponse></discountsfororderresponse></api></discountsforinvoice></discountsforinvoice></api></samplerequestpagedresults></samplerequestpagedresults></api></salesreturnpagedresults></salesreturnpagedresults></api></salesquotepagedresults></salesquotepagedresults></api></salesinvoicepagedresults></salesinvoicepagedresults></api></number></number></api></samplerequestpagedresults></samplerequestpagedresults></api></salesreturnpagedresults></salesreturnpagedresults></api></salesquotepagedresults></salesquotepagedresults></api></salesinvoicepagedresults></salesinvoicepagedresults></api></salesinvoicepagedresults></salesinvoicepagedresults></api></cefactionresponset<dictionary<number></cefactionresponset<cefalt.store.dictionary<number></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<boolean></cefactionresponset<boolean></api></cefactionresponse></cefactionresponse></api></cefactionresponset<calculatedinventory></cefactionresponset<calculatedinventory></api></cefactionresponset<dictionary<boolean></cefactionresponset<cefalt.store.dictionary<boolean></api></cefactionresponset<dictionary<calculatedinventory></cefactionresponset<cefalt.store.dictionary<calculatedinventory></api></cefactionresponset<array<cartmodel></cefactionresponset<array<cartmodel></api></cefactionresponset<array<cartmodel></cefactionresponset<array<cartmodel></api></number></number></number></number></number></producttypepagedresults></producttypepagedresults></api></productstatuspagedresults></productstatuspagedresults></api></productpagedresults></productpagedresults></api></previouslyorderedproductpagedresults></previouslyorderedproductpagedresults></api></array<productmodel></array<productmodel></api></quickorderformproductsmodel></quickorderformproductsmodel></api></productpagedresults></productpagedresults></api></array<productreviewinformationmodel></array<productreviewinformationmodel></api></productreviewinformationmodel></productreviewinformationmodel></api></serializableattributesdictionary></serializableattributesdictionary></api></productinventorylocationsectionpagedresults></productinventorylocationsectionpagedresults></api></productimagetypepagedresults></productimagetypepagedresults></api></productimagepagedresults></productimagepagedresults></api></productdownloadtypepagedresults></productdownloadtypepagedresults></api></productmodel></productmodel></api></productmodel></productmodel></api></productassociationtypepagedresults></productassociationtypepagedresults></api></array<keyvaluepair<categorymodel,array<productmodel></array<keyvaluepair<categorymodel,array<productmodel></api></array<productmodel></array<productmodel></api></array<productmodel></array<productmodel></api></dictionary<serializableattributesdictionary></cefalt.store.dictionary<serializableattributesdictionary></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></number></number></cefactionresponset<number></cefactionresponset<number></api></pricerulepagedresults></pricerulepagedresults></api></pricerulemodel></pricerulemodel></api></pricepointpagedresults></pricepointpagedresults></api></cefactionresponse></cefactionresponse></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponset<dictionary<calculatedprice></cefactionresponset<cefalt.store.dictionary<calculatedprice></api></cefactionresponset<calculatedprice></cefactionresponset<calculatedprice></api></number></subscriptionpagedresults></subscriptionpagedresults></api></cefactionresponset<walletmodel></cefactionresponset<walletmodel></api></cefactionresponse></cefactionresponse></api></void></void></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponset<number></cefactionresponset<number></api></subscriptiontypepagedresults></subscriptiontypepagedresults></api></subscriptionstatuspagedresults></subscriptionstatuspagedresults></api></subscriptionmodel></subscriptionmodel></api></paymentpagedresults></paymentpagedresults></api></repeattypepagedresults></repeattypepagedresults></api></paymenttypepagedresults></paymenttypepagedresults></api></cefactionresponset<transactionresponse></cefactionresponset<transactionresponse></api></paymentstatuspagedresults></paymentstatuspagedresults></api></cefactionresponset<string></cefactionresponset<string></api></paymentmethodpagedresults></paymentmethodpagedresults></api></cefactionresponset<string></cefactionresponset<string></api></membershippagedresults></membershippagedresults></api></membershiplevelpagedresults></membershiplevelpagedresults></api></cefactionresponset<walletmodel></cefactionresponset<walletmodel></api></cefactionresponset<array<walletmodel></cefactionresponset<array<walletmodel></api></subscriptionpagedresults></subscriptionpagedresults></api></statusmodel></statusmodel></api></creditstatuspagedresults></creditstatuspagedresults></api></cefactionresponset<string></cefactionresponset<string></api></cefactionresponset<string></cefactionresponset<string></api></cefactionresponset<string></cefactionresponset<string></api></cefactionresponset<string></cefactionresponset<string></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></creditpagedresults></creditpagedresults></api></creditpagedresults></creditpagedresults></api></array<creditpaymentmodel></array<creditpaymentmodel></api></creditmodel></creditmodel></api></cefactionresponset<walletmodel></cefactionresponset<walletmodel></api></cefactionresponset<string></cefactionresponset<string></api></cefactionresponset<string></cefactionresponset<string></api></number></number></api></number></number></api></number></number></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></number></number></number></cefactionresponse></cefactionresponse></api></subscriptionhistorypagedresults></subscriptionhistorypagedresults></api></subscriptionmodel></subscriptionmodel></api></salesordermodel></salesordermodel></api></salesordertypepagedresults></salesordertypepagedresults></api></typemodel></typemodel></api></salesorderstatuspagedresults></salesorderstatuspagedresults></api></statusmodel></statusmodel></api></salesorderstatepagedresults></salesorderstatepagedresults></api></statemodel></statemodel></api></salesordereventpagedresults></salesordereventpagedresults></api></salesordermodel></salesordermodel></api></salesorderpagedresults></salesorderpagedresults></api></salesorderpagedresults></salesorderpagedresults></api></salesorderpagedresults></salesorderpagedresults></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<messagemodel></cefactionresponset<messagemodel></api></cefactionresponset<array<usertypingstatus></cefactionresponset<array<usertypingstatus></api></messagepagedresults></messagepagedresults></api></cefactionresponset<dictionary<array<messagemodel></cefactionresponset<cefalt.store.dictionary<array<messagemodel></api></messagepagedresults></messagepagedresults></api></cefactionresponset<dictionary<array<messagemodel></cefactionresponset<cefalt.store.dictionary<array<messagemodel></api></messagemodel></messagemodel></api></conversationpagedresults></conversationpagedresults></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponset<number></cefactionresponset<number></api></iuploadresponse></iuploadresponse></api></iuploadresponse></iuploadresponse></api></string></string></api></manufacturerpagedresults></manufacturerpagedresults></api></manufacturermodel></manufacturermodel></api></number></number></api></number></number></api></number></number></api></void></void></api></any></any></api></string></string></api></void></void></api></number></number></api></salesinvoicetypepagedresults></salesinvoicetypepagedresults></api></typemodel></typemodel></api></salesinvoicestatuspagedresults></salesinvoicestatuspagedresults></api></statusmodel></statusmodel></api></salesinvoicestatepagedresults></salesinvoicestatepagedresults></api></statemodel></statemodel></api></salesinvoiceeventpagedresults></salesinvoiceeventpagedresults></api></salesinvoicemodel></salesinvoicemodel></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></inventorylocationsectionpagedresults></inventorylocationsectionpagedresults></api></inventorylocationpagedresults></inventorylocationpagedresults></api></inventorylocationregionpagedresults></inventorylocationregionpagedresults></api></languagepagedresults></languagepagedresults></api></languagemodel></languagemodel></api></phoneprefixlookuppagedresults></phoneprefixlookuppagedresults></api></cefactionresponse></cefactionresponse></api></regionpagedresults></regionpagedresults></api></regionmodel></regionmodel></api></regionmodel></regionmodel></api></districtpagedresults></districtpagedresults></api></districtmodel></districtmodel></api></districtmodel></districtmodel></api></array<accountcontactmodel></array<accountcontactmodel></api></accountcontactmodel></accountcontactmodel></api></array<accountcontactmodel></array<accountcontactmodel></api></countrymodel></countrymodel></api></countrypagedresults></countrypagedresults></api></accountcontactmodel></accountcontactmodel></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></franchisepagedresults></franchisepagedresults></api></franchisecategorypagedresults></franchisecategorypagedresults></api></franchisemodel></franchisemodel></api></number></number></api></number></number></api></number></number></api></number></number></api></currencymodel></currencymodel></api></currencypagedresults></currencypagedresults></api></number></number></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<array<number></cefactionresponset<array<number></api></usertypepagedresults></usertypepagedresults></api></userstatuspagedresults></userstatuspagedresults></api></userpagedresults></userpagedresults></api></useronlinestatuspagedresults></useronlinestatuspagedresults></api></usermodel></usermodel></api></usermodel></usermodel></api></usermodel></usermodel></api></statusmodel></statusmodel></api></cefactionresponset<dictionary<any></cefactionresponset<cefalt.store.dictionary<any></api></usermodel></usermodel></api></contacttypepagedresults></contacttypepagedresults></api></contactmodel></contactmodel></api></usermodel></usermodel></api></cefactionresponset<number></cefactionresponset<number></api></number></number></api></array<categorymodel></array<categorymodel></api></array<menucategorymodel></array<menucategorymodel></api></categorytypepagedresults></categorytypepagedresults></api></array<productcategoryselectormodel></array<productcategoryselectormodel></api></categoryimagepagedresults></categoryimagepagedresults></api></categoryimagemodel></categoryimagemodel></api></void></void></api></categorymodel></categorymodel></api></categorymodel></categorymodel></api></categorymodel></categorymodel></api></array<categorymodel></array<categorymodel></api></array<categorymodel></array<categorymodel></api></categorypagedresults></categorypagedresults></api></number></number></api></number></number></api></number></number></api></number></number></api></cefactionresponset<brandmodel></cefactionresponset<brandmodel></api></brandsitedomainpagedresults></brandsitedomainpagedresults></api></brandpagedresults></brandpagedresults></api></brandlanguagepagedresults></brandlanguagepagedresults></api></brandcurrencypagedresults></brandcurrencypagedresults></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></void></void></api></void></void></api></cefactionresponse></cefactionresponse></api></cefactionresponset<string></cefactionresponset<string></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></void></void></api></void></void></api></void></void></api></void></void></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponset<mfarequirementsmodel></cefactionresponset<mfarequirementsmodel></api></cefactionresponset<string></cefactionresponset<string></api></cefactionresponset<boolean></cefactionresponset<boolean></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></accountcontactmodel></storecontactmodel></lotmodel></lotmodel></api></lotpagedresults></lotpagedresults></api></lotmodel></lotmodel></api></lotmodel></lotmodel></api></bidpagedresults></bidpagedresults></api></auctionpagedresults></auctionpagedresults></api></auctionmodel></auctionmodel></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></number></number></api></generalattributepagedresults></generalattributepagedresults></api></generalattributepagedresults></generalattributepagedresults></api></generalattributepredefinedoptionpagedresults></generalattributepredefinedoptionpagedresults></api></generalattributemodel></generalattributemodel></api></attributetypepagedresults></attributetypepagedresults></api></attributetabpagedresults></attributetabpagedresults></api></attributegrouppagedresults></attributegrouppagedresults></api></number></number></api></number></number></api></number></number></api></zonemodel></zonemodel></api></adzonepagedresults></adzonepagedresults></api></admodel></admodel></api></accountmodel></accountmodel></api></cefactionresponset<number></cefactionresponset<number></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></cefactionresponse></cefactionresponse></api></userpagedresults></userpagedresults></api></accountmodel></accountmodel></api></array<number></array<number></api></accounttypepagedresults></accounttypepagedresults></api></accountstatuspagedresults></accountstatuspagedresults></api></accountpagedresults></accountpagedresults></api></accountpagedresults></accountpagedresults></api></accountcontactmodel></accountcontactmodel></api></accountassociationtypepagedresults></accountassociationtypepagedresults></api></cefactionresponse></cefactionresponse></api></cefactionresponset<number></cefactionresponset<number></api></accountmodel></usermodel></void></void></void></boolean></authenticateresponse></loginresponse></boolean></boolean></accountmodel></usermodel></boolean></iauthfactory></boolean></boolean></boolean></void></accountmodel></usermodel></boolean></boolean></void></void></boolean></void></loginresponse></accountmodel></usermodel></boolean><style>
.hidden {
display: none;
}
</style>

<a href="http://www.swissabc.net"  class="hidden">Sports-in-Sabah-contact@swissabc.net</a>
<a href="http://www.summercampinglights.net"  class="hidden">ag8亚游</a>
<a href="http://www.866045.com"  class="hidden">澳门皇冠体育</a>
<a href="http://www.cesametal.net"  class="hidden">Asian-gaming-platform-rankings-media@cesametal.net</a>
<a href="http://www.wellnessgrass.net"  class="hidden">Sun-City-official-website-marketing@wellnessgrass.net</a>
<a href="http://mahlbo.jmxjst.com" class="hidden">常熟楼盘网</a>
<a href="http://web-sitemap.315tccs.com" class="hidden">康华眼科网</a>
<a href="http://www.tassahil.net"  class="hidden">Sport-Venetian-sales@tassahil.net</a>
<a href="http://mlyywg.minyu1218.com" class="hidden">论坛</a>
<a href="http://web-sitemap.jecco.net" class="hidden">免费域名注册网</a>
<a href="http://www.tdwang.net"  class="hidden">皇冠体育</a>
<a href="http://www.cesametal.net"  class="hidden">亚洲博彩平台排名</a>
<a href="http://kojcqa.dp-ecology.com" class="hidden">山西信息港</a>
<a href="http://hwzywh.owen01.cc" class="hidden">老古影院</a>
<a href="http://web-sitemap.34bifan.net" class="hidden">魔龙小说网</a>
<a href="http://www.berxwedan.net"  class="hidden">Crown-Sports-hr@berxwedan.net</a>
<a href="http://www.tdwang.net"  class="hidden">皇冠体育博彩</a>
<a href="http://www.seezl.com"  class="hidden">皇冠体育</a>
<a href="http://zhwatw.sz-xz.net" class="hidden">Miu Miu</a>
<a href="http://www.zlmmc8.com"  class="hidden">Crown-Sports-app-marketing@zlmmc8.com</a>

<a href="https://acrmc.com/search/✔️网址:la66.net✔️yabo亚博网站登录-yabo亚博网站登录官方网站" class="hidden">四川在线娱乐频道</a>
<a href="https://stock.adobe.com/search?k=✔️最新网址:la55.net✔️老版大阳城集团网站-老版大阳城集团网站官方网站" class="hidden">宁夏交通网</a>
<a href="https://tw.dictionary.yahoo.com/dictionary?p=✔️网址:la66.net✔️推荐几个靠谱的外围买球网站平台介绍.oaz" class="hidden">东南网宁德频道</a>
<a href="https://stock.adobe.com/search?k=十大赌博靠谱网络平台✔️最新网址:la55.net✔️" class="hidden">益阳医学高等专科学校</a>
<a href="https://m.facebook.com/public/bbin在线赌真钱平台-维基百科✔️最新网址:la55.net✔️bbin在线赌真钱平台-维基百科✔️最新网址:la55.net✔️" class="hidden">黄山旅游网</a>
<a href="https://www.deep6gear.com/catalogsearch/result/?q=jdb电子手机注册app(关于jdb电子手机注册app的简介)✔️最新网址:ad22.net✔️" class="hidden">铁矿网</a>
<a href="https://stock.adobe.com/search/images?k=✔️官方网址:la777.net✔️ku体育官网官网-维基百科✔️官方网址:la777.net✔️ku体育官网官网-维基百科.kan" class="hidden">乔山健康科技有限公司</a>
<a href="https://es-la.facebook.com/public/澳门真人赌场官网-维基百科✔️最新网址:la55.net✔️.ium" class="hidden">陕西广电网络</a>
<a href="https://www.deep6gear.com/catalogsearch/result/?q=✔️网址:ad11.net✔️科普一下澳门博彩在线软件的百科" class="hidden">西格码</a>
<a href="https://stock.adobe.com/search?k=✔️官方网址:la777.net✔️澳门巴黎人娱乐注册.aod" class="hidden">陕西华图</a>

<a href="/html/goaawg-361964.html" class="hidden">新东方教育高清视频网</a>
<a href="/sitemap.xml" class="hidden">站点地图</a>
<a href="/sttcs/hot-news/ampullar.html" class="hidden">海明威</a>
<a href="/CN/jauoka-921087" class="hidden">南京工商局</a>


</body></html>