{"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/_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.Appointments.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.DoseSpot.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.Importer.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.Prescriptions.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/_shared/common/Helpers.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/authFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/authSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/ErrorView.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/ConfirmationModal.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/common/ImageWithFallback.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/Categories.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/FormGroupLabel.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/TextInputFormGroupNew.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/PasswordInputFormGroupNew.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/CheckboxFormGroupNew.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/LoginForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/RegistrationB2C/RegistrationB2CForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Klaviyo/klaviyo_helpers.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/LoginModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/brandSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/brandFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useDashboardLinks.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/MiniMenu.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton.module.scss?8b75","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/BrandsFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/CategoriesFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/ServiceStrings.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useInventoryFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi.shared.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/tracking/googleTagManagerService.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/cartFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/cartSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/CompareFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/PricingRangesFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/_api/cvApi._DtoClasses.ts","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/SearchTermFilter.module.scss?7719","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/SearchTermFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/ProductRatingsFilter.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilterComponents/AppliedFilterBlock.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/CatalogFilters.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/CartMessages.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useStoredFileTypes.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/FileUploadWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/AddToCartModalContext.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/ActionModals/QuestionnaireModalHeader.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/ActionModals/BloodworkModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/ActionModals/CancelPrescriptionModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_redux/factories/geographyFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/geographySlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/CardInputFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/CheckboxFormGroup.module.scss?cac8","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/CheckboxFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/DateInputFormGroup.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/formGroups/ToggleFormGroup.module.scss?1f21","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/GeneralMedicalForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/ActionModals/GeneralQuestionnaireModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/Formatters.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/AnswerContext.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/QuestionOption.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Question.module.scss?c6e8","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/QuestionnaireFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Question.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/QuestionnaireProgressBar.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/QuestionnaireComponent.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useQuestionnaireFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/ActionModals/QuestionnaireModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/modals/ActionModals/UploadIDModal.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/_shared/customHooks/useNoteFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/usePatientFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useStoredFilesFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/usePatientFiles.ts","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddToCartButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddAllToCartButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddToCartQuantitySelector.module.scss?8930","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/AddToCartQuantitySelector.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/ViewDetailsButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/signalR/signalR.js","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/signalRSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/usePricingFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useProductFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useBiddingFactory.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/controls/Price.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardBiddingWidget.module.scss?083b","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/productCardBiddingFunctions.ts","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/Catalog/controls/MagicImageCarousel.module.scss?5935","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/Cart/views/CartValidator.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/controls/RemoveDiscountButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/ProductCardWidgets/ProductCardAttributesWidget.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/Catalog/views/ProductCardWidgets/ProductCardLotTimerWidget.module.scss?96ea","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/LoginForPricing.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/CartTableWideScreen.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/DiscountsList.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/TotalsWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/Cart.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/Compare.module.scss?99f2","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/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/controls/AlertInfoNoResults.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CatalogGridView.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CatalogListView.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/CVGrid/CVGrid.module.scss?4ae9","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useEffectSkipFirst.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/CVGrid/ColumnEditor.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/CVGrid/ToolbarFilterComponents/CVGridToolbarFilterBtns.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/CVGrid/CVGrid.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useDebounce.ts","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/_shared/common/Carousel.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/views/CategoryLandingPageWidgets/SubCategoryCarousel.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?1d63","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/usePrevious.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useEffectDebugger.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useEffectSkipFirstDebugger.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/CatalogBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/Catalog.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/NotesWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useCheckoutFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/Checkout/checkoutFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/Checkout/CheckoutContext.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/MiniCart.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/AddressBlock.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/steps/confirmation/CheckoutConfirmationStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/method/CheckoutMethodStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/checkoutShippingFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/SplitShippingTotals.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/PurchaseRateQuotesManagerWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/CheckoutSplitShippingStep.module.scss?fa5f","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shipping/SplitShippingTarget.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/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/_redux/factories/walletFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_redux/slices/walletSlice.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/NewACHWalletModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/ACHWalletEntryCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/ACHWalletSwitch.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/methods/PaymentMethodACHBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/NewWalletForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/NewWalletModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/WalletEntryCardAlt.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/WalletSwitch.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/methods/PaymentMethodCreditCardBody.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/payment/CheckoutPaymentStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/completed/CheckoutCompletedStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/shippingRates/CheckoutShippingRatesStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/steps/_shared/CheckoutStepsHeader.tsx","webpack://clarity-ecommerce-react/./buildsrc/Checkout/Checkout.tsx","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/Catalog/views/RelatedProductMobileCard.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/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/Catalog/StaticHeadphonesProductDetailsTemplate.module.scss?5d20","webpack://clarity-ecommerce-react/./buildsrc/Catalog/StaticHeadphonesProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/VariantsCustomProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/PacksWithPurchaseOptionsProductDetailsTemplate.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/TemplatePicker.tsx","webpack://clarity-ecommerce-react/./buildsrc/Catalog/ProductDetails.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/AuthGuard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/_shared/DashboardTabHeading.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AddressBook/AddressBookCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useSalesOrderFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AvailableOrders/AvailableOrders.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useAttributesFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useLotFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useCategories.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/imageHelperFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/AuctionFileUploadWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/common/productImageHelperFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/LotForm.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/EditLot/EditLot.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/MyProfile/MyProfilePatient.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/MyProfile/MyProfile.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/ShoppingList/ShoppingListsDetail.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/NewWalletModalAlt.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/WalletEntryCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Wallet/Wallet.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Privacy/PrivacyDataActionCard.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/OrderShippingTracker.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/SalesGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Subscriptions/modals/RemoveFromSubscriptionsModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Subscriptions/Subscriptions.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/EditClaimedOrderButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/usePagedModels.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useSalesOrderStatuses.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ClaimedOrders.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/usePatient.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ClaimedOrderContext.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/patients/PatientDetailsTable.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/patients/ContactPreferenceTable.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ScheduledAppointments/SchedulingModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/patients/ScheduleAConsultation.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ClaimedOrderPatientDetails.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/UnableToContactButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ContactAttemptTracker.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/products/UpdateProductButtonContext.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/products/PossibleProductsTable.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/products/UpdateProductModalContent.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/products/UpdateProductModalHeader.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/products/UpdateProductModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/products/UpdateProductButton.module.scss?3ea1","webpack://clarity-ecommerce-react/./buildsrc/_shared/products/UpdateProductButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/modals/ApproveOrDenySalesOrderModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ClaimedOrderOrderDetails.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/BloodWork/BloodWorkListItem.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/BloodWork/BloodWorkList.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/PatientQuestionnaire.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useCategoryFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/NotesTable.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/forms/formGroups/FormGroupErrors.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/Notes/CreatePatientNoteWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/Notes/PatientNotes.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ClaimedOrderTabs.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useDoseSpotFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/DoseSpotContext.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/OrderPrescriptionButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ClaimedOrderDoseSpot.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Prescriptions/Prescriptions.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/Questionnaires.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/_base/StandardDetailFooterButtonsWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/_base/StandardDetailHeaderWidget.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/_base/DetailBase.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionnaireDetail/QuestionnaireDetailBasicInformationCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/_base/components/BS5SwitchFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionDetail/QuestionDetailBasicInformationCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/_base/components/BS5TextInputFormGroup.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionDetail/QuestionDetailQuestionTypeCardChoiceTable.module.scss?0096","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionDetail/QuestionDetailQuestionTypeCardChoiceTable.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionDetail/QuestionDetailQuestionTypeCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionDetail/QuestionDetailQuestionOptionFollowupCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionDetail/QuestionDetail.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionnaireDetail/QuestionnaireDetailMainBodyCard.module.scss?6fe4","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionnaireDetail/QuestionnairePreviewModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionnaireDetail/QuestionnaireDetailMainBodyCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/Questionnaire/Editor/questionnaireDetail/QuestionnaireDetail.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/PhysicianLicenses/PhysicianLicenses.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Consultations/SchedulingModal.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ScheduledAppointments/ScheduledAppointments.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useConsultationFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/PhysicianLibrary/PhysicianLibrary.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/dashboardTabComponents.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AccountProfile/AccountProfile.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AddressBook/AddressBook.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AuctionsEnded/AuctionsEnded.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useAuctionsEnded.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AuctionsLive/AuctionsLive.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useAuctionsLive.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AuctionsLost/AuctionsLost.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useAuctionsLost.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AuctionsSold/AuctionsSold.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useAuctionsSold.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/AuctionsWon/AuctionsWon.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useAuctionsWon.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/CurrentBids/CurrentBids.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useCurrentBids.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Favorites/Favorites.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/InStockAlerts/InStockAlerts.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ClaimedOrders/ClaimedOrderDetail.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useSalesOrder.ts","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Privacy/Privacy.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ShoppingList/ShoppingLists.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/WishList/WishList.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/WatchList/WatchList.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/ChatButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/Dashboard/Success.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/registrationSteps.ts","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/_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?2ccc","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocatorCard.tsx","webpack://clarity-ecommerce-react/./buildsrc/StoreLocator/StoreLocatorMarkerTip.module.scss?41da","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/_shared/common/CorsLink.tsx","webpack://clarity-ecommerce-react/./buildsrc/Admin/Lots/CreateLot.tsx","webpack://clarity-ecommerce-react/./buildsrc/Admin/Importer/Importer.tsx","webpack://clarity-ecommerce-react/./buildsrc/Authentication/RegistrationB2C/RegistrationB2C.tsx","webpack://clarity-ecommerce-react/./buildsrc/Tracking/TrackingSnippet.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/MiniCartDiscountListItem.tsx","webpack://clarity-ecommerce-react/./buildsrc/Cart/views/MiniCartB2C.tsx","webpack://clarity-ecommerce-react/./buildsrc/CheckoutB2C/useCheckoutB2CFactory.ts","webpack://clarity-ecommerce-react/./buildsrc/_shared/customHooks/useContactTypes.ts","webpack://clarity-ecommerce-react/./buildsrc/CheckoutB2C/steps/shipping/CheckoutB2CShippingStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/CheckoutB2C/steps/payment/CheckoutB2CPaymentStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/CheckoutB2C/steps/completed/CheckoutB2CCompletedStep.tsx","webpack://clarity-ecommerce-react/./buildsrc/CheckoutB2C/checkoutB2CFunctions.ts","webpack://clarity-ecommerce-react/./buildsrc/CheckoutB2C/CheckoutB2C.tsx","webpack://clarity-ecommerce-react/./buildsrc/index.js","webpack://clarity-ecommerce-react/./buildsrc/_shared/AddAuctionLink.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/AffiliateSelectorButton.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/CategoriesMenuBar.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/CefConfigKeyEnabled.tsx","webpack://clarity-ecommerce-react/./buildsrc/_shared/CSREmulationBanner.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/Cart/views/MicroCart.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/create fake namespace object","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\": 60892,\n\t\"./free-regular-svg-icons\": 32916,\n\t\"./free-solid-svg-icons\": 97929\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 = 13774;","/** @format */\n\nimport { CEFConfig, IUrlConfig, IUrlHostConfig } from \"src/_shared/CefConfigTypes\";\n\nexport const corsLinkRootInner = (urlConfig: IUrlConfig): string => {\n  if (!urlConfig.host && !urlConfig.root) {\n    // We don't have a static url or root path to apply\n    return \"\";\n  }\n  if (!urlConfig.host && urlConfig.root) {\n    // We don't have a static url, but we do have a root path to apply\n    return urlConfig.root;\n  }\n  if (urlConfig.host && !urlConfig.root) {\n    // We don't have a root path, but we do have a static url to apply\n    return urlConfig.host;\n  }\n  // We have both a root path and a static url to apply\n  return urlConfig.host + urlConfig.root;\n};\n\nexport const corsLinkRoot = (\n  cefConfig: CEFConfig,\n  area: keyof typeof cefConfig.routes = \"site\",\n  whichUrl: string = \"primary\"\n): string => {\n  const areaToUse = cefConfig.routes[area];\n  if (!areaToUse) {\n    throw Error(`Area '${area}' does not exist on cefConfig.`);\n  }\n  if (!areaToUse.hostIsProvidedByLookup) {\n    // We don't need to inject a host URL\n    return corsLinkRootInner(areaToUse);\n  }\n  /* TODO: ByBrand, SiteDomains\n  // We have to inject a host URL to it\n  let siteDomainToUse: SiteDomainModel;\n  if ((areaToUse.hostIsProvidedByLookup as IUrlHostConfig).type === \"ByBrand\") {\n    if (!$rootScope[\"globalBrandSiteDomain\"]) {\n      // We failed to get data, so just try going to it with a relative path\n      return $filter(\"corsLinkRootInner\")(areaToUse);\n    } else {\n      siteDomainToUse = $rootScope[\"globalBrandSiteDomain\"];\n    }\n  } else {\n    // We failed to get data, so just try going to it with a relative path\n    return corsLinkRootInner(areaToUse);\n  }\n  // We have the site domain data\n  let host: string;\n  switch (whichUrl.toLowerCase()) {\n    case \"alternate-1\": {\n      host = siteDomainToUse.AlternateUrl1;\n      break;\n    } // The ALternate Site\n    case \"alternate-2\": {\n      host = siteDomainToUse.AlternateUrl2;\n      break;\n    } // The CORS site\n    case \"alternate-3\": {\n      host = siteDomainToUse.AlternateUrl3;\n      break;\n    } // Unused\n    case \"primary\":\n    default: {\n      host = siteDomainToUse.Url;\n      break;\n    } // This Shop site\n  }\n  while (/\\/$/.test(host)) {\n    // Make sure we don't end up with 'domain.com//some-path'\n    host = host.substring(0, host.length - 1);\n  }\n  // Go to the new absolute URL\n  const altAreaToUse = JSON.parse(JSON.stringify(areaToUse));\n  const hostNoProtocol = host.replace(\"https://\", \"\").replace(\"http://\", \"\");\n  altAreaToUse.host = host;\n  const result = corsLinkRootInner(altAreaToUse);\n  return result.replace(hostNoProtocol + \"/\" + hostNoProtocol, hostNoProtocol);\n  */\n  return null;\n};\n\n// Specialized marker to inject this path as the Return URL\nconst swapReturnUrlToken = (path: string): string => {\n  if (!path) {\n    return \"\";\n  }\n  let retVal = path;\n  if (retVal.indexOf(\"[ReturnUrl]\") !== -1) {\n    retVal = retVal.replace(/\\[ReturnUrl\\]/u, encodeURI(window.location.pathname));\n  }\n  // Assumes path contained \"[ReturnUrl]\", and was encoded by the above code block\n  if (retVal.indexOf(\"%5BReturnUrl%5D\") !== -1) {\n    retVal = retVal.replace(/%5BReturnUrl%5D/u, encodeURI(window.location.pathname));\n  }\n  if (retVal === \"/\") {\n    return retVal;\n  }\n  // Strip '/' from the end\n  return retVal.replace(/\\/+$/gu, \"\");\n};\n\nconst appendQueryStringParams = (\n  basePlusPath: string,\n  noCache: boolean,\n  paramsBody: { [key: string]: any }\n): string => {\n  if (!paramsBody || JSON.stringify(paramsBody) === \"{}\") {\n    // There's no paramsBody, just return\n    return noCache\n      ? `${basePlusPath}?noCache=${new Date().getTime()}`\n      : basePlusPath;\n  }\n  // Convert paramsBody into query parameters\n  if (noCache) {\n    // Merge in noCache if set\n    // eslint-disable-next-line dot-notation\n    paramsBody[\"noCache\"] = new Date().getTime();\n  }\n  const queryString = new URLSearchParams();\n  for (const key in paramsBody) {\n    if (Object.hasOwn(paramsBody, key)) {\n      const property = paramsBody[key];\n      queryString.append(key, property);\n    }\n  }\n  // Strip '/' from the end then appendQueryString\n  return swapReturnUrlToken(`${basePlusPath.replace(/\\/+$/gu, \"\")}?${queryString}`);\n};\n\nexport const corsLink = (\n  cefConfig: CEFConfig,\n  path: string,\n  area: keyof typeof cefConfig.routes = \"site\",\n  whichUrl: string | null = \"primary\",\n  noCache: boolean = false,\n  paramsBody: { [key: string]: any } = null\n): string => {\n  // Specialized marker to inject this path as the Return URL\n  if (!cefConfig) {\n    return null;\n  }\n  const path2 = swapReturnUrlToken(path);\n  if (path2 && path2.indexOf(\"http\") === 0) {\n    // Absolute path, don't do anything else, just go\n    return noCache ? `${path2}?noCache=${new Date().getTime()}` : path2;\n  }\n  const areaToUse: IUrlConfig = cefConfig.routes[area];\n  if (!areaToUse) {\n    throw Error(`Area '${area}' does not exist on cefConfig.`);\n  }\n  // The new absolute URL\n  const root = corsLinkRoot(\n    cefConfig,\n    area,\n    (areaToUse.hostIsProvidedByLookup as IUrlHostConfig)?.whichUrl || whichUrl\n  );\n  const base3 = root;\n  let pathToUse3 = (path2 && (/^\\//gu).test(path2) ? \"\" : \"/\") + (path2 || \"\");\n  if (areaToUse.root && pathToUse3 && new RegExp(`^${areaToUse.root}`, \"u\").test(pathToUse3)) {\n    pathToUse3 = pathToUse3.substring(areaToUse.root.length);\n  }\n  return swapReturnUrlToken(appendQueryStringParams(base3 + pathToUse3, noCache, paramsBody));\n};\n\nexport const corsImageLink = (\n  cefConfig: CEFConfig,\n  fileName?: string,\n  kind: keyof typeof cefConfig.images = \"products\",\n  imageResizerParamsBody: { [key: string]: any } = null,\n  whichUrl: string = \"primary\"\n): string => {\n  if (!cefConfig) {\n    return \"\";\n  }\n  if (!fileName) {\n    return corsLink(cefConfig, \"/Content/placeholder.jpg\", \"ui\", whichUrl, false, imageResizerParamsBody);\n  }\n  return corsLink(\n    cefConfig,\n    cefConfig.images[kind]\n      + cefConfig.images.suffix\n      + fileName,\n    \"images\",\n    whichUrl,\n    false,\n    imageResizerParamsBody\n  );\n};\n\nexport const getCorsProductLink = (\n  cefConfig: CEFConfig,\n  seoUrl: string,\n  whichUrl: string = \"primary\",\n  noCache: boolean = false,\n  stateParamsBody: { [key: string]: any } = null\n): string => corsLink(\n  cefConfig,\n  (seoUrl.startsWith(\"/\") ? \"\" : \"/\") + seoUrl,\n  \"productDetail\",\n  whichUrl,\n  noCache,\n  stateParamsBody\n);\n\nexport const getCorsStoreLink = (\n  cefConfig: CEFConfig,\n  seoUrl: string,\n  whichUrl: string = \"primary\",\n  noCache: boolean = false,\n  stateParamsBody: { [key: string]: any } = null\n): string => corsLink(\n  cefConfig,\n  (seoUrl.startsWith(\"/\") ? \"\" : \"/\") + seoUrl,\n  \"storeDetail\",\n  whichUrl,\n  noCache,\n  stateParamsBody\n);\n\nexport const getCorsImageLink = (\n  cefConfig: CEFConfig,\n  fileName: string,\n  kind: string = \"products\",\n  imageResizerParamsBody: { [key: string]: any } = null,\n  whichUrl: string = \"primary\"\n): string => {\n  if (!fileName) {\n    return corsLink(\n      cefConfig,\n      // @ts-ignore\n      `${cefConfig.images[kind] + cefConfig.images.suffix\n      }/placeholder.jpg`,\n      \"images\",\n      undefined,\n      undefined,\n      imageResizerParamsBody\n    );\n  }\n  return corsLink(\n    cefConfig,\n    // @ts-ignore\n    cefConfig.images[kind] + cefConfig.images.suffix\n                    + (fileName === \"/\" ? \"\" : ((/^\\//gu).test(fileName) ? \"\" : \"/\") + fileName),\n    \"images\",\n    whichUrl,\n    false,\n    imageResizerParamsBody\n  );\n};\n\nexport const getCorsStoredFilesLink = (\n  cefConfig: CEFConfig,\n  fileName: string,\n  kind: string = \"products\",\n  whichUrl: string = \"primary\"\n): string => corsLink(\n  cefConfig,\n  // @ts-ignore\n  cefConfig.storedFiles[kind] + cefConfig.storedFiles.suffix\n                    + (((/^\\//gu).test(fileName) ? \"\" : \"/\") + fileName),\n  \"storedFiles\",\n  whichUrl,\n  false,\n  null\n);\n\nexport const getCorsImportsLink = (\n  cefConfig: CEFConfig,\n  fileName: string,\n  kind: string = \"products\",\n  whichUrl: string = \"primary\"\n): string => corsLink(\n  cefConfig,\n  // @ts-ignore\n  cefConfig.imports[kind] + cefConfig.imports.suffix\n                    + (((/^\\//gu).test(fileName) ? \"\" : \"/\") + fileName),\n  \"imports\",\n  whichUrl,\n  false,\n  null\n);\n","import axios from \"axios\";\n\nconst instance = axios.create({\n  baseURL: \"/DesktopModules/ClarityEcommerce/API-Storefront\",\n  withCredentials: true,\n  headers: { \"Content-Type\": \"application/json\" },\n  paramsSerializer: axiosParamsSerializer\n});\n\nexport function axiosParamsSerializer(params: { [key: number | string]: any; }): string {\n  const keys = Object.keys(params);\n  let stringified = \"\";\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    const param = params[key];\n    if (param === undefined) {\n      continue;\n    }\n    if (i > 0) {\n      stringified += \"&\";\n    }\n    stringified += key;\n    if (param instanceof Array) {\n      for (let j = 0; j < param.length; j++) {\n        const param2 = param[j];\n        if (param2 instanceof Object) {\n          stringified += `=${encodeObjectParam(param2)}`;\n          continue;\n        }\n        stringified += `=${JSON.stringify(param2)}${j === param.length - 1 ? \"\" : `&${key}`}`;\n      }\n    } else if (param instanceof Object) {\n      stringified += `=${encodeObjectParam(param)}`;\n    } else {\n      stringified += `=${param}`;\n    }\n  }\n  return stringified;\n}\n\nexport function encodeObjectParam(param: Object): string {\n  return encodeURIComponent(JSON.stringify(param))\n    .replace(/%40/gui, \"@\")\n    .replace(/%3A/gui, \":\")\n    .replace(/%24/gu, \"$\")\n    .replace(/%2C/gui, \",\")\n    .replace(/%3B/gui, \";\")\n    // Double-quotes to nothing\n    .replace(/%22/gui, \"\")\n    .replace(/%20/gu, \"+\");\n}\n\nexport default instance;\n","/**\n * @file _api/cvApi.Accounts.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tAccountContactModel,\n\tTypeSearchModel,\n\tAccountAssociationTypePagedResults,\n\tSubscriptionsGridSearchModel,\n\tSubscriptionsGridPagedResults,\n\tAccountSearchModel,\n\tAccountPagedResults,\n\tStatusSearchModel,\n\tAccountStatusPagedResults,\n\tAccountTypePagedResults,\n\tUserSearchModel,\n\tAccountModel,\n\tPrescriptionSearchModel,\n\tPrescriptionPagedResults,\n\tUserPagedResults,\n\tImportResponse,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tCEFActionResponse,\n\tDictionary,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to create a new account contact.\n * @see {@link AccountContactModel}\n * @public\n */\nexport interface CreateAccountContactDto extends AccountContactModel {\n}\n\n/**\n * Use to get a list of account association types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetAccountAssociationTypesDto extends TypeSearchModel {\n}\n\n/**\n * Used to get a list of patient's subscriptions\n * @see {@link SubscriptionsGridSearchModel}\n * @public\n */\nexport interface GetAccountPatientSubscriptionsDto extends SubscriptionsGridSearchModel {\n}\n\n/**\n * Use to get a list of accounts.\n * @see {@link AccountSearchModel}\n * @public\n */\nexport interface GetAccountsDto extends AccountSearchModel {\n}\n\n/**\n * Get Accounts for the current account (as a local administrator)\n * @see {@link AccountSearchModel}\n * @public\n */\nexport interface GetAccountsForCurrentAccountDto extends AccountSearchModel {\n\tReturnFirstResultOnly?: boolean;\n}\n\n/**\n * Use to get a list of account statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetAccountStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of account types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetAccountTypesDto extends TypeSearchModel {\n}\n\n/**\n * Get all User IDs for the current account (as a local administrator)\n * @see {@link UserSearchModel}\n * @public\n */\nexport interface GetAllUserIDsForCurrentAccountDto extends UserSearchModel {\n}\n\n/**\n * Use to get the current patients prescriptions\n * @see {@link PrescriptionSearchModel}\n * @public\n */\nexport interface GetCurrentPatientPrescriptionsDto extends PrescriptionSearchModel {\n}\n\n/**\n * Get Users for the current account (as a local administrator)\n * @see {@link UserSearchModel}\n * @public\n */\nexport interface GetUsersForCurrentAccountDto extends UserSearchModel {\n}\n\n/**\n * Imports account records.\n * @public\n */\nexport interface ImportAccountsDto {\n\tFile?: string;\n\tMap?: Dictionary<Array<string>>;\n}\n\n/**\n * Increment contact attempts made on an order.\n * @public\n */\nexport interface IncrementContactAttemptsMadeDto {\n\tOrderID: number;\n}\n\n/**\n * Use to update an existing account contact.\n * @see {@link AccountContactModel}\n * @public\n */\nexport interface UpdateAccountContactDto extends AccountContactModel {\n}\n\n/**\n * Use to update the account associated to the user currently logged into the system\n * @see {@link AccountModel}\n * @public\n */\nexport interface UpdateCurrentAccountDto extends AccountModel {\n}\n\nexport class Accounts {\n\t/**\n\t * Use to create a new account contact.\n\t * @param {@link cef.store.api.CreateAccountContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateAccountContact\n\t * @path <API Root>/Accounts/AccountContact/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateAccountContact = (routeParams?: CreateAccountContactDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Accounts\", \"AccountContact\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Removes a specific account contact from the system [Hard-Delete].\n\t * @param {@link cef.store.api.DeleteAccountContactByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteAccountContactByID\n\t * @path <API Root>/Accounts/AccountContact/Delete/ID/{ID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeleteAccountContactByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Accounts\", \"AccountContact\", \"Delete\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Use to get a list of account association types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountAssociationTypes\n\t * @path <API Root>/Accounts/AccountAssociationTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountAssociationTypePagedResults>}\n\t * @public\n\t */\n\tGetAccountAssociationTypes = (routeParams?: GetAccountAssociationTypesDto): IHttpPromise<AccountAssociationTypePagedResults> =>\n\t\taxios.get([\"Accounts\", \"AccountAssociationTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific account contact.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountContactByID\n\t * @path <API Root>/Accounts/AccountContact/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountContactModel>}\n\t * @public\n\t */\n\tGetAccountContactByID = (id: number): IHttpPromise<AccountContactModel> =>\n\t\taxios.get([\"Accounts\", \"AccountContact\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Gets the importable keys for Accounts.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountKeys\n\t * @path <API Root>/Accounts/Account/Keys\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<cefalt.store.Dictionary<Array<string>>>}\n\t * @public\n\t */\n\tGetAccountKeys = (): IHttpPromise<Dictionary<Array<string>>> =>\n\t\taxios.get([\"Accounts\", \"Account\", \"Keys\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Used to get a list of patient's subscriptions\n\t * @param {@link cef.store.api.GetAccountPatientSubscriptionsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.GetAccountPatientSubscriptions\n\t * @path <API Root>/Accounts/CurrentAccount/Subscriptions\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SubscriptionsGridPagedResults>}\n\t * @public\n\t */\n\tGetAccountPatientSubscriptions = (routeParams?: GetAccountPatientSubscriptionsDto): IHttpPromise<SubscriptionsGridPagedResults> =>\n\t\taxios.post([\"Accounts\", \"CurrentAccount\", \"Subscriptions\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of accounts.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccounts\n\t * @path <API Root>/Accounts/Accounts\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountPagedResults>}\n\t * @public\n\t */\n\tGetAccounts = (routeParams?: GetAccountsDto): IHttpPromise<AccountPagedResults> =>\n\t\taxios.get([\"Accounts\", \"Accounts\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Get Accounts for the current account (as a local administrator)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountsForCurrentAccount\n\t * @path <API Root>/Accounts/AccountsForCurrentAccount\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountPagedResults>}\n\t * @public\n\t */\n\tGetAccountsForCurrentAccount = (routeParams?: GetAccountsForCurrentAccountDto): IHttpPromise<AccountPagedResults> =>\n\t\taxios.get([\"Accounts\", \"AccountsForCurrentAccount\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of account statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountStatuses\n\t * @path <API Root>/Accounts/AccountStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountStatusPagedResults>}\n\t * @public\n\t */\n\tGetAccountStatuses = (routeParams?: GetAccountStatusesDto): IHttpPromise<AccountStatusPagedResults> =>\n\t\taxios.get([\"Accounts\", \"AccountStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of account types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAccountTypes\n\t * @path <API Root>/Accounts/AccountTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountTypePagedResults>}\n\t * @public\n\t */\n\tGetAccountTypes = (routeParams?: GetAccountTypesDto): IHttpPromise<AccountTypePagedResults> =>\n\t\taxios.get([\"Accounts\", \"AccountTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Get all User IDs for the current account (as a local administrator)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAllUserIDsForCurrentAccount\n\t * @path <API Root>/Accounts/AllUserIDsForCurrentAccount\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<number>>}\n\t * @public\n\t */\n\tGetAllUserIDsForCurrentAccount = (routeParams?: GetAllUserIDsForCurrentAccountDto): IHttpPromise<Array<number>> =>\n\t\taxios.get([\"Accounts\", \"AllUserIDsForCurrentAccount\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Get account for the current user logged in\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccount\n\t * @path <API Root>/Accounts/CurrentAccount\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountModel>}\n\t * @public\n\t */\n\tGetCurrentAccount = (): IHttpPromise<AccountModel> =>\n\t\taxios.get([\"Accounts\", \"CurrentAccount\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get the current patients prescriptions\n\t * @param {@link cef.store.api.GetCurrentPatientPrescriptionsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.GetCurrentPatientPrescriptions\n\t * @path <API Root>/Accounts/CurrentAccount/Prescriptions\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<PrescriptionPagedResults>}\n\t * @public\n\t */\n\tGetCurrentPatientPrescriptions = (routeParams?: GetCurrentPatientPrescriptionsDto): IHttpPromise<PrescriptionPagedResults> =>\n\t\taxios.post([\"Accounts\", \"CurrentAccount\", \"Prescriptions\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Get Users for the current account (as a local administrator)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUsersForCurrentAccount\n\t * @path <API Root>/Accounts/UsersForCurrentAccount\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserPagedResults>}\n\t * @public\n\t */\n\tGetUsersForCurrentAccount = (routeParams?: GetUsersForCurrentAccountDto): IHttpPromise<UserPagedResults> =>\n\t\taxios.get([\"Accounts\", \"UsersForCurrentAccount\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Imports account records.\n\t * @param {@link cef.store.api.ImportAccountsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ImportAccounts\n\t * @path <API Root>/Accounts/Account/Import\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<ImportResponse>}\n\t * @public\n\t */\n\tImportAccounts = (routeParams?: ImportAccountsDto): IHttpPromise<ImportResponse> =>\n\t\taxios.post([\"Accounts\", \"Account\", \"Import\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Increment contact attempts made on an order.\n\t * @param {@link cef.store.api.IncrementContactAttemptsMadeDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.IncrementContactAttemptsMade\n\t * @path <API Root>/Accounts/Account/IncrementContactAttemptsMade\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tIncrementContactAttemptsMade = (routeParams: IncrementContactAttemptsMadeDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Accounts\", \"Account\", \"IncrementContactAttemptsMade\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @param {@link cef.store.api.MarkAccountContactAsDefaultBillingDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.MarkAccountContactAsDefaultBilling\n\t * @path <API Root>/Accounts/AccountContact/MarkAsDefaultBilling/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tMarkAccountContactAsDefaultBilling = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Accounts\", \"AccountContact\", \"MarkAsDefaultBilling\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * @param {@link cef.store.api.MarkAccountContactAsNeitherBillingNorShippingDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.MarkAccountContactAsNeitherBillingNorShipping\n\t * @path <API Root>/Accounts/AccountContact/MarkAsNotBillingOrShipping/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tMarkAccountContactAsNeitherBillingNorShipping = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Accounts\", \"AccountContact\", \"MarkAsNotBillingOrShipping\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * @param {@link cef.store.api.MarkAccountContactAsPrimaryShippingDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.MarkAccountContactAsPrimaryShipping\n\t * @path <API Root>/Accounts/AccountContact/MarkAsPrimaryShipping/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tMarkAccountContactAsPrimaryShipping = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Accounts\", \"AccountContact\", \"MarkAsPrimaryShipping\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Use to update an existing account contact.\n\t * @param {@link cef.store.api.UpdateAccountContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateAccountContact\n\t * @path <API Root>/Accounts/AccountContact/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateAccountContact = (routeParams?: UpdateAccountContactDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Accounts\", \"AccountContact\", \"Update\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update the account associated to the user currently logged into the system\n\t * @param {@link cef.store.api.UpdateCurrentAccountDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCurrentAccount\n\t * @path <API Root>/Accounts/CurrentAccount\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<AccountModel>}\n\t * @public\n\t */\n\tUpdateCurrentAccount = (routeParams?: UpdateCurrentAccountDto): IHttpPromise<AccountModel> =>\n\t\taxios.put([\"Accounts\", \"CurrentAccount\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Advertising.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tAdModel,\n\tAdZoneSearchModel,\n\tAdZonePagedResults,\n\tZoneModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to get a list of ad zones.\n * @see {@link AdZoneSearchModel}\n * @public\n */\nexport interface GetAdZonesDto extends AdZoneSearchModel {\n}\n\nexport class Advertising {\n\t/**\n\t * Use to get a specific ad.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAdByID\n\t * @path <API Root>/Advertising/Ad/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AdModel>}\n\t * @public\n\t */\n\tGetAdByID = (id: number): IHttpPromise<AdModel> =>\n\t\taxios.get([\"Advertising\", \"Ad\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of ad zones.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAdZones\n\t * @path <API Root>/Advertising/AdZones\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AdZonePagedResults>}\n\t * @public\n\t */\n\tGetAdZones = (routeParams?: GetAdZonesDto): IHttpPromise<AdZonePagedResults> =>\n\t\taxios.get([\"Advertising\", \"AdZones\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific zone.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetZoneByID\n\t * @path <API Root>/Advertising/Zone/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ZoneModel>}\n\t * @public\n\t */\n\tGetZoneByID = (id: number): IHttpPromise<ZoneModel> =>\n\t\taxios.get([\"Advertising\", \"Zone\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n}\n","/**\n * @file _api/cvApi.Appointments.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tAppointmentSearchModel,\n\tAppointmentPagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Used to get a list of appointments for the storefront.\n * @see {@link AppointmentSearchModel}\n * @public\n */\nexport interface ListAppointmentsByAccountIDAndTypeDto extends AppointmentSearchModel {\n}\n\n/**\n * Used to reschedule an appointment.\n * @public\n */\nexport interface RescheduleAppointmentDto {\n\tAppointmentID: number;\n\tStartTime: Date;\n\tEndTime: Date;\n}\n\n/**\n * Used to schedule a google meeting and update the appointment record with the details.\n * @public\n */\nexport interface ScheduleAppointmentWithGoogleDto {\n\tSalesOrderID: number;\n\tPatientAccountID: number;\n\tStartTime: Date;\n\tEndTime: Date;\n}\n\nexport class Appointments {\n\t/**\n\t * Used to get a list of appointments for the storefront.\n\t * @generatedByCSharpType Clarity.Clients.MANGO.ListAppointmentsByAccountIDAndType\n\t * @path <API Root>/Appointments/Appointment/ListAppointmentsForStorefront\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AppointmentPagedResults>}\n\t * @public\n\t */\n\tListAppointmentsByAccountIDAndType = (routeParams?: ListAppointmentsByAccountIDAndTypeDto): IHttpPromise<AppointmentPagedResults> =>\n\t\taxios.get([\"Appointments\", \"Appointment\", \"ListAppointmentsForStorefront\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Used to reschedule an appointment.\n\t * @param {@link cef.store.api.RescheduleAppointmentDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.RescheduleAppointment\n\t * @path <API Root>/Appointments/Appointment/RescheduleAppointment\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRescheduleAppointment = (routeParams: RescheduleAppointmentDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Appointments\", \"Appointment\", \"RescheduleAppointment\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Used to schedule a google meeting and update the appointment record with the details.\n\t * @param {@link cef.store.api.ScheduleAppointmentWithGoogleDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.ScheduleAppointmentWithGoogle\n\t * @path <API Root>/Appointments/Appointment/ScheduleAppointmentWithGoogle\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tScheduleAppointmentWithGoogle = (routeParams: ScheduleAppointmentWithGoogleDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Appointments\", \"Appointment\", \"ScheduleAppointmentWithGoogle\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Attributes.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsDisplayNameBase,\n\tImplementsNameBase,\n\tAttributeGroupSearchModel,\n\tAttributeGroupPagedResults,\n\tAttributeTabSearchModel,\n\tAttributeTabPagedResults,\n\tAttributeTypeSearchModel,\n\tAttributeTypePagedResults,\n\tGeneralAttributeModel,\n\tGeneralAttributePredefinedOptionSearchModel,\n\tGeneralAttributePredefinedOptionPagedResults,\n\tGeneralAttributeSearchModel,\n\tGeneralAttributePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckGeneralAttributeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckGeneralAttributeExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of attribute groups.\n * @see {@link AttributeGroupSearchModel}\n * @public\n */\nexport interface GetAttributeGroupsDto extends AttributeGroupSearchModel {\n}\n\n/**\n * Use to get a list of attribute tabs.\n * @see {@link AttributeTabSearchModel}\n * @public\n */\nexport interface GetAttributeTabsDto extends AttributeTabSearchModel {\n}\n\n/**\n * Use to get a list of attribute types.\n * @see {@link AttributeTypeSearchModel}\n * @public\n */\nexport interface GetAttributeTypesDto extends AttributeTypeSearchModel {\n}\n\n/**\n * Use to get a list of general attribute predefined options.\n * @see {@link GeneralAttributePredefinedOptionSearchModel}\n * @public\n */\nexport interface GetGeneralAttributePredefinedOptionsDto extends GeneralAttributePredefinedOptionSearchModel {\n}\n\n/**\n * Use to get a list of general attributes.\n * @see {@link GeneralAttributeSearchModel}\n * @public\n */\nexport interface GetGeneralAttributesDto extends GeneralAttributeSearchModel {\n}\n\nexport class Attributes {\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckGeneralAttributeExistsByDisplayName\n\t * @path <API Root>/Attributes/GeneralAttribute/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckGeneralAttributeExistsByDisplayName = (routeParams?: CheckGeneralAttributeExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckGeneralAttributeExistsByKey\n\t * @path <API Root>/Attributes/GeneralAttribute/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckGeneralAttributeExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckGeneralAttributeExistsByName\n\t * @path <API Root>/Attributes/GeneralAttribute/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckGeneralAttributeExistsByName = (routeParams?: CheckGeneralAttributeExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of attribute groups.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAttributeGroups\n\t * @path <API Root>/Attributes/AttributeGroups\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AttributeGroupPagedResults>}\n\t * @public\n\t */\n\tGetAttributeGroups = (routeParams?: GetAttributeGroupsDto): IHttpPromise<AttributeGroupPagedResults> =>\n\t\taxios.get([\"Attributes\", \"AttributeGroups\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of attribute tabs.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAttributeTabs\n\t * @path <API Root>/Attributes/AttributeTabs\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AttributeTabPagedResults>}\n\t * @public\n\t */\n\tGetAttributeTabs = (routeParams?: GetAttributeTabsDto): IHttpPromise<AttributeTabPagedResults> =>\n\t\taxios.get([\"Attributes\", \"AttributeTabs\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of attribute types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAttributeTypes\n\t * @path <API Root>/Attributes/AttributeTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AttributeTypePagedResults>}\n\t * @public\n\t */\n\tGetAttributeTypes = (routeParams?: GetAttributeTypesDto): IHttpPromise<AttributeTypePagedResults> =>\n\t\taxios.get([\"Attributes\", \"AttributeTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific general attribute.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetGeneralAttributeByID\n\t * @path <API Root>/Attributes/GeneralAttribute/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<GeneralAttributeModel>}\n\t * @public\n\t */\n\tGetGeneralAttributeByID = (id: number): IHttpPromise<GeneralAttributeModel> =>\n\t\taxios.get([\"Attributes\", \"GeneralAttribute\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of general attribute predefined options.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetGeneralAttributePredefinedOptions\n\t * @path <API Root>/Attributes/GeneralAttributePredefinedOptions\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<GeneralAttributePredefinedOptionPagedResults>}\n\t * @public\n\t */\n\tGetGeneralAttributePredefinedOptions = (routeParams?: GetGeneralAttributePredefinedOptionsDto): IHttpPromise<GeneralAttributePredefinedOptionPagedResults> =>\n\t\taxios.get([\"Attributes\", \"GeneralAttributePredefinedOptions\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of general attributes.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetGeneralAttributes\n\t * @path <API Root>/Attributes/GeneralAttributes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<GeneralAttributePagedResults>}\n\t * @public\n\t */\n\tGetGeneralAttributes = (routeParams?: GetGeneralAttributesDto): IHttpPromise<GeneralAttributePagedResults> =>\n\t\taxios.get([\"Attributes\", \"GeneralAttributes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Auctions.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tLotModel,\n\tCreateLotAsSellerResponse,\n\tAuctionModel,\n\tAuctionSearchModel,\n\tAuctionPagedResults,\n\tBidSearchModel,\n\tBidPagedResults,\n\tLotSearchModel,\n\tLotPagedResults,\n\tLotCategories,\n\tStatusSearchModel,\n\tLotStatusPagedResults,\n\tTypeSearchModel,\n\tLotTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckAuctionExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckLotExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @see {@link LotModel}\n * @public\n */\nexport interface CreateLotAsSellerDto extends LotModel {\n}\n\n/**\n * Use to get a list of auctions.\n * @see {@link AuctionSearchModel}\n * @public\n */\nexport interface GetAuctionsDto extends AuctionSearchModel {\n}\n\n/**\n * Use to get a list of bids.\n * @see {@link BidSearchModel}\n * @public\n */\nexport interface GetBidsDto extends BidSearchModel {\n}\n\n/**\n * Use to get the buyer's lost bids.\n * @see {@link LotSearchModel}\n * @public\n */\nexport interface GetBuyerLostTableDataDto extends LotSearchModel {\n}\n\n/**\n * Use to get the buyer's won bids.\n * @see {@link LotSearchModel}\n * @public\n */\nexport interface GetBuyerWonTableDataDto extends LotSearchModel {\n}\n\n/**\n * Use to get the buyer's current bids.\n * @see {@link LotSearchModel}\n * @public\n */\nexport interface GetCurrentBuyerBidsAndLotInfoDto extends LotSearchModel {\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface GetLotCategoriesDto {\n\tLotIDs?: Array<number>;\n}\n\n/**\n * Use to get a list of lots.\n * @see {@link LotSearchModel}\n * @public\n */\nexport interface GetLotsDto extends LotSearchModel {\n}\n\n/**\n * Use to get a list of lot statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetLotStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of lot types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetLotTypesDto extends TypeSearchModel {\n}\n\n/**\n * Display all auctions that a seller has listed.\n * @see {@link LotSearchModel}\n * @public\n */\nexport interface GetSellerAuctionsLiveTableDataDto extends LotSearchModel {\n}\n\n/**\n * Display all auctions that a seller has sold.\n * @see {@link LotSearchModel}\n * @public\n */\nexport interface GetSellerAuctionsSoldTableDataDto extends LotSearchModel {\n}\n\n/**\n * Display all auctions that a seller has posted but did not have a winning bid.\n * @see {@link LotSearchModel}\n * @public\n */\nexport interface GetSellerNoWinTableDataDto extends LotSearchModel {\n}\n\n/**\n * Places a bid for the lot, at the requested price.\n * @public\n */\nexport interface PlaceBidDto {\n\tLotID: number;\n\tBidAmount?: number;\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @see {@link LotModel}\n * @public\n */\nexport interface UpdateLotAsSellerDto extends LotModel {\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface UpdateProductPricingAsSellerDto {\n\tProductID?: number;\n\tPriceBase?: number;\n}\n\nexport class Auctions {\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckAuctionExistsByID\n\t * @path <API Root>/Auctions/Auction/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckAuctionExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Auctions\", \"Auction\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckAuctionExistsByKey\n\t * @path <API Root>/Auctions/Auction/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckAuctionExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Auctions\", \"Auction\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckAuctionExistsByName\n\t * @path <API Root>/Auctions/Auction/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckAuctionExistsByName = (routeParams?: CheckAuctionExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Auctions\", \"Auction\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckLotExistsByID\n\t * @path <API Root>/Auctions/Lot/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckLotExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Auctions\", \"Lot\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckLotExistsByKey\n\t * @path <API Root>/Auctions/Lot/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckLotExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Auctions\", \"Lot\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckLotExistsByName\n\t * @path <API Root>/Auctions/Lot/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckLotExistsByName = (routeParams?: CheckLotExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Auctions\", \"Lot\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * @param {@link cef.store.api.CreateLotAsSellerDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateLotAsSeller\n\t * @path <API Root>/Auctions/Lot/CreateLotAsSeller\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<CreateLotAsSellerResponse>>}\n\t * @public\n\t */\n\tCreateLotAsSeller = (routeParams?: CreateLotAsSellerDto): IHttpPromise<CEFActionResponseT<CreateLotAsSellerResponse>> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"CreateLotAsSeller\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific auction.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAuctionByID\n\t * @path <API Root>/Auctions/Auction/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AuctionModel>}\n\t * @public\n\t */\n\tGetAuctionByID = (id: number): IHttpPromise<AuctionModel> =>\n\t\taxios.get([\"Auctions\", \"Auction\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of auctions.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAuctions\n\t * @path <API Root>/Auctions/Auctions\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AuctionPagedResults>}\n\t * @public\n\t */\n\tGetAuctions = (routeParams?: GetAuctionsDto): IHttpPromise<AuctionPagedResults> =>\n\t\taxios.get([\"Auctions\", \"Auctions\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of bids.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBids\n\t * @path <API Root>/Auctions/Bids\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<BidPagedResults>}\n\t * @public\n\t */\n\tGetBids = (routeParams?: GetBidsDto): IHttpPromise<BidPagedResults> =>\n\t\taxios.get([\"Auctions\", \"Bids\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the buyer's lost bids.\n\t * @param {@link cef.store.api.GetBuyerLostTableDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBuyerLostTableData\n\t * @path <API Root>/Auctions/Lot/BuyerLostAuctionGrid\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotPagedResults>}\n\t * @public\n\t */\n\tGetBuyerLostTableData = (routeParams?: GetBuyerLostTableDataDto): IHttpPromise<LotPagedResults> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"BuyerLostAuctionGrid\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get the buyer's won bids.\n\t * @param {@link cef.store.api.GetBuyerWonTableDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBuyerWonTableData\n\t * @path <API Root>/Auctions/Lot/BuyerWonAuctionGrid\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotPagedResults>}\n\t * @public\n\t */\n\tGetBuyerWonTableData = (routeParams?: GetBuyerWonTableDataDto): IHttpPromise<LotPagedResults> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"BuyerWonAuctionGrid\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get the buyer's current bids.\n\t * @param {@link cef.store.api.GetCurrentBuyerBidsAndLotInfoDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentBuyerBidsAndLotInfo\n\t * @path <API Root>/Auctions/Lot/CurrentBidsAndLotInfo\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotPagedResults>}\n\t * @public\n\t */\n\tGetCurrentBuyerBidsAndLotInfo = (routeParams?: GetCurrentBuyerBidsAndLotInfoDto): IHttpPromise<LotPagedResults> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"CurrentBidsAndLotInfo\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Retrieves data about the given lot, including the highest bid\n\t * @param {@link cef.store.api.GetHighestBidForLotDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetHighestBidForLot\n\t * @path <API Root>/Auctions/Lot/LotData/{ID}\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotModel>}\n\t * @public\n\t */\n\tGetHighestBidForLot = (id: number): IHttpPromise<LotModel> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"LotData\", id].join(\"/\"));\n\n\t/**\n\t * Use to get a specific lot.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLotByID\n\t * @path <API Root>/Auctions/Lot/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<LotModel>}\n\t * @public\n\t */\n\tGetLotByID = (id: number): IHttpPromise<LotModel> =>\n\t\taxios.get([\"Auctions\", \"Lot\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLotCategories\n\t * @path <API Root>/Auctions/Lot/LotCategories\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<LotCategories>>>}\n\t * @public\n\t */\n\tGetLotCategories = (routeParams?: GetLotCategoriesDto): IHttpPromise<CEFActionResponseT<Array<LotCategories>>> =>\n\t\taxios.get([\"Auctions\", \"Lot\", \"LotCategories\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of lots.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLots\n\t * @path <API Root>/Auctions/Lots\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<LotPagedResults>}\n\t * @public\n\t */\n\tGetLots = (routeParams?: GetLotsDto): IHttpPromise<LotPagedResults> =>\n\t\taxios.get([\"Auctions\", \"Lots\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of lot statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLotStatuses\n\t * @path <API Root>/Auctions/LotStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<LotStatusPagedResults>}\n\t * @public\n\t */\n\tGetLotStatuses = (routeParams?: GetLotStatusesDto): IHttpPromise<LotStatusPagedResults> =>\n\t\taxios.get([\"Auctions\", \"LotStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of lot types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLotTypes\n\t * @path <API Root>/Auctions/LotTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<LotTypePagedResults>}\n\t * @public\n\t */\n\tGetLotTypes = (routeParams?: GetLotTypesDto): IHttpPromise<LotTypePagedResults> =>\n\t\taxios.get([\"Auctions\", \"LotTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Display all auctions that a seller has listed.\n\t * @param {@link cef.store.api.GetSellerAuctionsLiveTableDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSellerAuctionsLiveTableData\n\t * @path <API Root>/Auctions/Lot/SellerAuctionLiveGrid\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotPagedResults>}\n\t * @public\n\t */\n\tGetSellerAuctionsLiveTableData = (routeParams?: GetSellerAuctionsLiveTableDataDto): IHttpPromise<LotPagedResults> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"SellerAuctionLiveGrid\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Display all auctions that a seller has sold.\n\t * @param {@link cef.store.api.GetSellerAuctionsSoldTableDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSellerAuctionsSoldTableData\n\t * @path <API Root>/Auctions/Lot/SellerAuctionsSold\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotPagedResults>}\n\t * @public\n\t */\n\tGetSellerAuctionsSoldTableData = (routeParams?: GetSellerAuctionsSoldTableDataDto): IHttpPromise<LotPagedResults> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"SellerAuctionsSold\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Display all auctions that a seller has posted but did not have a winning bid.\n\t * @param {@link cef.store.api.GetSellerNoWinTableDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSellerNoWinTableData\n\t * @path <API Root>/Auctions/Lot/SellerNoWinGrid\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotPagedResults>}\n\t * @public\n\t */\n\tGetSellerNoWinTableData = (routeParams?: GetSellerNoWinTableDataDto): IHttpPromise<LotPagedResults> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"SellerNoWinGrid\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Places a bid for the lot, at the requested price.\n\t * @param {@link cef.store.api.PlaceBidDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.PlaceBid\n\t * @path <API Root>/Auctions/Lot/PlaceBid\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<LotModel>}\n\t * @public\n\t */\n\tPlaceBid = (routeParams: PlaceBidDto): IHttpPromise<LotModel> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"PlaceBid\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @param {@link cef.store.api.UpdateLotAsSellerDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateLotAsSeller\n\t * @path <API Root>/Auctions/Lot/UpdateLotAsSeller\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tUpdateLotAsSeller = (routeParams?: UpdateLotAsSellerDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"UpdateLotAsSeller\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @param {@link cef.store.api.UpdateProductPricingAsSellerDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateProductPricingAsSeller\n\t * @path <API Root>/Auctions/Lot/UpdateProductPricingAsSeller\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tUpdateProductPricingAsSeller = (routeParams?: UpdateProductPricingAsSellerDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Auctions\", \"Lot\", \"UpdateProductPricingAsSeller\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Authentication.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tMFARequirementsModel,\n\tAddressModel,\n\tStoreContactModel,\n\tUserModel,\n\tAccountContactModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponse,\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Membership Registration Process step 5: Administrator approves the user\n * @public\n */\nexport interface ApproveUserRegistrationDto {\n\t/** The encrypted token to use for validation */\n\tToken: string;\n\t/** CEF User ID */\n\tID: number;\n}\n\n/**\n * When provided with the valid existing password, changes the password for a user to a new value.\n * @public\n */\nexport interface ChangePasswordDto {\n\t/** UserName */\n\tUserName: string;\n\t/** Current Password */\n\tPassword: string;\n\t/** New Password */\n\tNewPassword: string;\n}\n\n/**\n * Check if the user is required to reset their password.\n * @public\n */\nexport interface CheckForcedPasswordResetDto {\n\t/** UserName */\n\tUserName: string;\n\t/** Password */\n\tPassword: string;\n}\n\n/**\n * Membership Registration Process step 4: Validate Email and complete Registration\n * @public\n */\nexport interface CompleteRegistrationDto {\n\t/** First Name of the User */\n\tFirstName: string;\n\t/** Last Name of the User */\n\tLastName: string;\n\t/** Email to send the invitation to */\n\tEmail: string;\n\t/** UserName */\n\tUserName: string;\n\t/** Password */\n\tPassword: string;\n\t/** Reset Token */\n\tResetToken: string;\n\t/** Phone */\n\tPhone: string;\n\t/** CompanyName */\n\tCompanyName: string;\n\t/** RoleName */\n\tRoleName?: string;\n\t/** Address */\n\tAddress: AddressModel;\n\t/** TypeName */\n\tTypeName?: string;\n\t/** Website */\n\tWebsite?: string;\n\t/** ProfileType */\n\tProfileType?: string;\n\t/** StoreContacts */\n\tStoreContacts?: Array<StoreContactModel>;\n}\n\n/**\n * Membership Registration Process step 3: Send Email confirmation Email (User gets an email with validation token)\n * @public\n */\nexport interface CreateLiteAccountAndSendValidationEmailDto {\n\t/** First Name of the User */\n\tFirstName: string;\n\t/** Last Name of the User */\n\tLastName: string;\n\t/** The UserName */\n\tUserName?: string;\n\t/** Email to send the invitation to */\n\tEmail: string;\n\t/** Seller Type */\n\tSellerType: string;\n\t/** The Membership Level */\n\tMembership: string;\n\t/** The encrypted token to use for validation */\n\tToken: string;\n\t/** The Membership Type */\n\tMembershipType: string;\n\t/** The RootURL is used to override the settings generated RootURL */\n\tRootURL: string;\n}\n\n/**\n * Check if the currently logged in user has any Permissions by Regular Expression\n * @public\n */\nexport interface CurrentUserHasAnyPermissionDto {\n\t/** The Regular Expression of the Permissions to match against */\n\tRegex: string;\n}\n\n/**\n * Check if the currently logged in user has any Roles by Regular Expression\n * @public\n */\nexport interface CurrentUserHasAnyRoleDto {\n\t/** The Regular Expression of the Roles to match against */\n\tRegex: string;\n}\n\n/**\n * Check if the currently logged in user has a specific Permission by name\n * @public\n */\nexport interface CurrentUserHasPermissionDto {\n\t/** The Name of the Permission to check */\n\tName: string;\n}\n\n/**\n * Check if the currently logged in user has a specific role by name.\n * @public\n */\nexport interface CurrentUserHasRoleDto {\n\t/** The Name of the Role to check */\n\tName: string;\n}\n\n/**\n * When the user is required to reset their password, this endpoint handles it.\n * @public\n */\nexport interface ForcedPasswordResetDto {\n\t/** Email */\n\tEmail: string;\n\t/** Old Password */\n\tOldPassword: string;\n\t/** New Password */\n\tNewPassword: string;\n}\n\n/**\n * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\n * @public\n */\nexport interface ForgotPasswordDto {\n\t/** Email */\n\tEmail: string;\n}\n\n/**\n * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\n * @public\n */\nexport interface ForgotPasswordReturnDto {\n\t/** Email */\n\tEmail: string;\n\t/** Token */\n\tToken: string;\n\t/** Password */\n\tPassword: string;\n}\n\n/**\n * Sends an email to the user if the provided email matches an existing user with the Username in it.\n * @public\n */\nexport interface ForgotUsernameDto {\n\t/** Email */\n\tEmail: string;\n}\n\n/**\n * Consumes the code response from Open ID Connect\n * @public\n */\nexport interface OktaCodeCallbackDto {\n\tid_token?: string; // Name format overridden\n\taccess_token?: string; // Name format overridden\n\tcode?: string; // Name format overridden\n\texpires_in: number; // Name format overridden\n\tresource?: string; // Name format overridden\n\trefresh_token?: string; // Name format overridden\n\trefresh_token_expires_in: number; // Name format overridden\n\tscope?: string; // Name format overridden\n\terror?: string; // Name format overridden\n\terrorDescription?: string; // Name format overridden\n}\n\n/**\n * Consumes the code response from Open ID Connect\n * @public\n */\nexport interface OpenIDConnectCodeCallbackDto {\n\tid_token?: string; // Name format overridden\n\taccess_token?: string; // Name format overridden\n\tcode?: string; // Name format overridden\n\texpires_in: number; // Name format overridden\n\tresource?: string; // Name format overridden\n\trefresh_token?: string; // Name format overridden\n\trefresh_token_expires_in: number; // Name format overridden\n\tscope?: string; // Name format overridden\n\terror?: string; // Name format overridden\n\terrorDescription?: string; // Name format overridden\n}\n\n/**\n * Registers a new user via the standard process\n * @see {@link UserModel}\n * @public\n */\nexport interface RegisterNewUserDto extends UserModel {\n\tAddressBook?: Array<AccountContactModel>;\n\tInService: boolean;\n}\n\n/**\n * Request a multi-factor authentication token for a specific user.\n * @public\n */\nexport interface RequestMFAForUsernameDto {\n\t/** If true, send over SMS instead of email. */\n\tUsePhone: boolean;\n}\n\n/**\n * Pass in user credentials to log into the site.\n * @public\n */\nexport interface ValidateEmailDto {\n\t/** Email to send the invitation to */\n\tEmail: string;\n\t/** The encrypted token to use for validation */\n\tToken: string;\n}\n\n/**\n * Validate Email Is Unique\n * @public\n */\nexport interface ValidateEmailIsUniqueDto {\n\tEmail: string;\n}\n\n/**\n * Membership Registration Process step 2: Validate Invitation (User clicked the link in the email with an invite token)\n * @public\n */\nexport interface ValidateInvitationDto {\n\t/** Email to send the invitation to */\n\tEmail: string;\n\t/** The encrypted token to use for validation */\n\tToken: string;\n}\n\n/**\n * Validates that the password provided for a username is the correct one.\n * @public\n */\nexport interface ValidatePasswordDto {\n\tUserName: string;\n\tPassword: string;\n}\n\n/**\n * Pass in user credentials to log into the site.\n * @public\n */\nexport interface ValidatePasswordIsGoodDto {\n\tPassword: string;\n}\n\n/**\n * Pass in user credentials to log into the site.\n * @public\n */\nexport interface ValidateUserNameIsGoodDto {\n\tUserName: string;\n}\n\nexport class Authentication {\n\t/**\n\t * Membership Registration Process step 5: Administrator approves the user\n\t * @param {@link cef.store.api.ApproveUserRegistrationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ApproveUserRegistration\n\t * @path <API Root>/Authentication/ApproveUser\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tApproveUserRegistration = (routeParams: ApproveUserRegistrationDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Authentication\", \"ApproveUser\"].join(\"/\"), routeParams);\n\n\t/**\n\t * When provided with the valid existing password, changes the password for a user to a new value.\n\t * @param {@link cef.store.api.ChangePasswordDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ChangePassword\n\t * @path <API Root>/Authentication/ChangePassword\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tChangePassword = (routeParams: ChangePasswordDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ChangePassword\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Check if the user is required to reset their password.\n\t * @param {@link cef.store.api.CheckForcedPasswordResetDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckForcedPasswordReset\n\t * @path <API Root>/Authentication/CheckForcedPasswordReset\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tCheckForcedPasswordReset = (routeParams: CheckForcedPasswordResetDto): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.post([\"Authentication\", \"CheckForcedPasswordReset\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Check if multi-factor authentication is enabled for a specific user.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckForMFAForUsername\n\t * @path <API Root>/Authentication/CheckForMFA/{UserName*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<MFARequirementsModel>>}\n\t * @public\n\t */\n\tCheckForMFAForUsername = (userName: string): IHttpPromise<CEFActionResponseT<MFARequirementsModel>> =>\n\t\taxios.get([\"Authentication\", \"CheckForMFA\", encodeURIComponent(userName)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Membership Registration Process step 4: Validate Email and complete Registration\n\t * @param {@link cef.store.api.CompleteRegistrationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CompleteRegistration\n\t * @path <API Root>/Authentication/CompleteRegistration\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCompleteRegistration = (routeParams: CompleteRegistrationDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Authentication\", \"CompleteRegistration\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Membership Registration Process step 3: Send Email confirmation Email (User gets an email with validation token)\n\t * @param {@link cef.store.api.CreateLiteAccountAndSendValidationEmailDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateLiteAccountAndSendValidationEmail\n\t * @path <API Root>/Authentication/CreateLiteAccountAndSendValidationEmail\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCreateLiteAccountAndSendValidationEmail = (routeParams: CreateLiteAccountAndSendValidationEmailDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"CreateLiteAccountAndSendValidationEmail\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Check if the currently logged in user has any Permissions by Regular Expression\n\t * @param {@link cef.store.api.CurrentUserHasAnyPermissionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasAnyPermission\n\t * @path <API Root>/Authentication/CurrentUser/HasAnyPermission\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tCurrentUserHasAnyPermission = (routeParams: CurrentUserHasAnyPermissionDto): IHttpPromise<void> =>\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasAnyPermission\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Check if the currently logged in user has any Roles by Regular Expression\n\t * @param {@link cef.store.api.CurrentUserHasAnyRoleDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasAnyRole\n\t * @path <API Root>/Authentication/CurrentUser/HasAnyRole\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tCurrentUserHasAnyRole = (routeParams: CurrentUserHasAnyRoleDto): IHttpPromise<void> =>\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasAnyRole\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Check if the currently logged in user has a specific Permission by name\n\t * @param {@link cef.store.api.CurrentUserHasPermissionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasPermission\n\t * @path <API Root>/Authentication/CurrentUser/HasPermission\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tCurrentUserHasPermission = (routeParams: CurrentUserHasPermissionDto): IHttpPromise<void> =>\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasPermission\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Check if the currently logged in user has a specific role by name.\n\t * @param {@link cef.store.api.CurrentUserHasRoleDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserHasRole\n\t * @path <API Root>/Authentication/CurrentUser/HasRole\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tCurrentUserHasRole = (routeParams: CurrentUserHasRoleDto): IHttpPromise<void> =>\n\t\taxios.post([\"Authentication\", \"CurrentUser\", \"HasRole\"].join(\"/\"), routeParams);\n\n\t/**\n\t * When the user is required to reset their password, this endpoint handles it.\n\t * @param {@link cef.store.api.ForcedPasswordResetDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForcedPasswordReset\n\t * @path <API Root>/Authentication/ForcedPasswordReset\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tForcedPasswordReset = (routeParams: ForcedPasswordResetDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ForcedPasswordReset\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\n\t * @param {@link cef.store.api.ForgotPasswordDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForgotPassword\n\t * @path <API Root>/Authentication/ForgotPassword\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tForgotPassword = (routeParams: ForgotPasswordDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ForgotPassword\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Sends an email to the user if the provided email matches an existing user with a Password Reset Token in it.\n\t * @param {@link cef.store.api.ForgotPasswordReturnDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForgotPasswordReturn\n\t * @path <API Root>/Authentication/ForgotPassword/Return\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tForgotPasswordReturn = (routeParams: ForgotPasswordReturnDto): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.post([\"Authentication\", \"ForgotPassword\", \"Return\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Sends an email to the user if the provided email matches an existing user with the Username in it.\n\t * @param {@link cef.store.api.ForgotUsernameDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ForgotUsername\n\t * @path <API Root>/Authentication/ForgotUsername\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tForgotUsername = (routeParams: ForgotUsernameDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ForgotUsername\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Consumes the code response from Open ID Connect\n\t * @param {@link cef.store.api.OktaCodeCallbackDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType ServiceStack.Auth.OktaCodeCallback\n\t * @path <API Root>/Authentication/OktaCodeCallback\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tOktaCodeCallback = (routeParams: OktaCodeCallbackDto): IHttpPromise<void> =>\n\t\taxios.post([\"Authentication\", \"OktaCodeCallback\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Consumes the code response from Open ID Connect\n\t * @param {@link cef.store.api.OpenIDConnectCodeCallbackDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType ServiceStack.Auth.OpenIDConnectCodeCallback\n\t * @path <API Root>/Authentication/OpenIDConnectCodeCallback\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tOpenIDConnectCodeCallback = (routeParams: OpenIDConnectCodeCallbackDto): IHttpPromise<void> =>\n\t\taxios.post([\"Authentication\", \"OpenIDConnectCodeCallback\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Registers a new user via the standard process\n\t * @param {@link cef.store.api.RegisterNewUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RegisterNewUser\n\t * @path <API Root>/Authentication/RegisterNewUser\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRegisterNewUser = (routeParams: RegisterNewUserDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"RegisterNewUser\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Request a multi-factor authentication token for a specific user.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RequestMFAForUsername\n\t * @path <API Root>/Authentication/RequestMFA/{UserName*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRequestMFAForUsername = (userName: string, routeParams: RequestMFAForUsernameDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.get([\"Authentication\", \"RequestMFA\", encodeURIComponent(userName)].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Pass in user credentials to log into the site.\n\t * @param {@link cef.store.api.ValidateEmailDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateEmail\n\t * @path <API Root>/Authentication/ValidateEmail\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tValidateEmail = (routeParams: ValidateEmailDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ValidateEmail\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Validate Email Is Unique\n\t * @param {@link cef.store.api.ValidateEmailIsUniqueDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateEmailIsUnique\n\t * @path <API Root>/Authentication/ValidateEmailIsUnique\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tValidateEmailIsUnique = (routeParams: ValidateEmailIsUniqueDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ValidateEmailIsUnique\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Membership Registration Process step 2: Validate Invitation (User clicked the link in the email with an invite token)\n\t * @param {@link cef.store.api.ValidateInvitationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateInvitation\n\t * @path <API Root>/Authentication/ValidateInvitation\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tValidateInvitation = (routeParams: ValidateInvitationDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ValidateInvitation\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Validates that the password provided for a username is the correct one.\n\t * @param {@link cef.store.api.ValidatePasswordDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidatePassword\n\t * @path <API Root>/Authentication/ValidatePassword\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tValidatePassword = (routeParams: ValidatePasswordDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ValidatePassword\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Pass in user credentials to log into the site.\n\t * @param {@link cef.store.api.ValidatePasswordIsGoodDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidatePasswordIsGood\n\t * @path <API Root>/Authentication/ValidatePasswordIsGood\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tValidatePasswordIsGood = (routeParams: ValidatePasswordIsGoodDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ValidatePasswordIsGood\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Pass in user credentials to log into the site.\n\t * @param {@link cef.store.api.ValidateUserNameIsGoodDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ValidateUserNameIsGood\n\t * @path <API Root>/Authentication/ValidateUserNameIsGood\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tValidateUserNameIsGood = (routeParams: ValidateUserNameIsGoodDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Authentication\", \"ValidateUserNameIsGood\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Brands.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tBrandCurrencySearchModel,\n\tBrandCurrencyPagedResults,\n\tBrandLanguageSearchModel,\n\tBrandLanguagePagedResults,\n\tBrandSearchModel,\n\tBrandPagedResults,\n\tBrandSiteDomainSearchModel,\n\tBrandSiteDomainPagedResults,\n\tBrandModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to get a list of brand currencies.\n * @see {@link BrandCurrencySearchModel}\n * @public\n */\nexport interface GetBrandCurrenciesDto extends BrandCurrencySearchModel {\n}\n\n/**\n * Use to get a list of brand languages.\n * @see {@link BrandLanguageSearchModel}\n * @public\n */\nexport interface GetBrandLanguagesDto extends BrandLanguageSearchModel {\n}\n\n/**\n * Use to get a list of brands.\n * @see {@link BrandSearchModel}\n * @public\n */\nexport interface GetBrandsDto extends BrandSearchModel {\n}\n\n/**\n * Use to get a list of brand site domains.\n * @see {@link BrandSiteDomainSearchModel}\n * @public\n */\nexport interface GetBrandSiteDomainsDto extends BrandSiteDomainSearchModel {\n}\n\nexport class Brands {\n\t/**\n\t * Use to get a list of brand currencies.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrandCurrencies\n\t * @path <API Root>/Brands/BrandCurrencies\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<BrandCurrencyPagedResults>}\n\t * @public\n\t */\n\tGetBrandCurrencies = (routeParams?: GetBrandCurrenciesDto): IHttpPromise<BrandCurrencyPagedResults> =>\n\t\taxios.get([\"Brands\", \"BrandCurrencies\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of brand languages.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrandLanguages\n\t * @path <API Root>/Brands/BrandLanguages\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<BrandLanguagePagedResults>}\n\t * @public\n\t */\n\tGetBrandLanguages = (routeParams?: GetBrandLanguagesDto): IHttpPromise<BrandLanguagePagedResults> =>\n\t\taxios.get([\"Brands\", \"BrandLanguages\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of brands.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrands\n\t * @path <API Root>/Brands/Brands\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<BrandPagedResults>}\n\t * @public\n\t */\n\tGetBrands = (routeParams?: GetBrandsDto): IHttpPromise<BrandPagedResults> =>\n\t\taxios.get([\"Brands\", \"Brands\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of brand site domains.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBrandSiteDomains\n\t * @path <API Root>/Brands/BrandSiteDomains\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<BrandSiteDomainPagedResults>}\n\t * @public\n\t */\n\tGetBrandSiteDomains = (routeParams?: GetBrandSiteDomainsDto): IHttpPromise<BrandSiteDomainPagedResults> =>\n\t\taxios.get([\"Brands\", \"BrandSiteDomains\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the current brand based on url, sub-domain or sub-folder\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentBrand\n\t * @path <API Root>/Brands/Brand/Current\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<BrandModel>>}\n\t * @public\n\t */\n\tGetCurrentBrand = (): IHttpPromise<CEFActionResponseT<BrandModel>> =>\n\t\taxios.get([\"Brands\", \"Brand\", \"Current\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n}\n","/**\n * @file _api/cvApi.Categories.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tImplementsSeoUrlBase,\n\tCategorySearchModel,\n\tCategoryPagedResults,\n\tCategoryModel,\n\tImplementsKeyOnQueryBase,\n\tCategoryImageModel,\n\tCategoryImageSearchModel,\n\tCategoryImagePagedResults,\n\tProductCategorySelectorModel,\n\tTypeSearchModel,\n\tCategoryTypePagedResults,\n\tMenuCategoryModel,\n  ImplementsIDBase,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckCategoryExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this SEO URL exists and return the id if it does (null if it does not).\n * @see {@link ImplementsSeoUrlBase}\n * @public\n */\nexport interface CheckCategoryExistsBySeoUrlDto extends ImplementsSeoUrlBase {\n}\n\n/**\n * Used to check for region restrictions for the current user's state of residence.\n * @public\n */\nexport interface CheckForCategoryRegionRestrictionsForCurrenUserStateOfResidenceDto {\n\tProductID: number;\n}\n\n/**\n * Use to get a list of categories.\n * @see {@link CategorySearchModel}\n * @public\n */\nexport interface GetCategoriesDto extends CategorySearchModel {\n}\n\n/**\n * Use to get three levels of categories\n * @see {@link CategorySearchModel}\n * @public\n */\nexport interface GetCategoriesThreeLevelsDto extends CategorySearchModel {\n}\n\n/**\n * Use to get a specific category.\n * @public\n */\nexport interface GetCategoryByIDDto extends ImplementsIDBase {\n\t/** When true, don't map out the Product Categories (use when this would result in a lot of unnecessary data) */\n\tExcludeProductCategories?: boolean;\n}\n\n/**\n * Use to get a specific category by the key.\n * @see {@link ImplementsKeyOnQueryBase}\n * @public\n */\nexport interface GetCategoryByKeyDto extends ImplementsKeyOnQueryBase {\n\t/** When true, don't map out the Product Categories (use when this would result in a lot of unnecessary data) */\n\tExcludeProductCategories?: boolean;\n}\n\n/**\n * Use to get a specific category by the SEO URL.\n * @see {@link ImplementsSeoUrlBase}\n * @public\n */\nexport interface GetCategoryBySeoUrlDto extends ImplementsSeoUrlBase {\n\t/** When true, don't map out the Product Categories (use when this would result in a lot of unnecessary data) */\n\tExcludeProductCategories?: boolean;\n}\n\n/**\n * Get Category by SEO URL for just the SEO Metadata\n * @public\n */\nexport interface GetCategoryForMetaDataDto {\n\t/** The SEO URL of the Category to locate */\n\tSeoUrl: string;\n}\n\n/**\n * Use to get a list of category images.\n * @see {@link CategoryImageSearchModel}\n * @public\n */\nexport interface GetCategoryImagesDto extends CategoryImageSearchModel {\n}\n\n/**\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.\n * @see {@link CategorySearchModel}\n * @public\n */\nexport interface GetCategoryTreeDto extends CategorySearchModel {\n}\n\n/**\n * Use to get a list of category types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetCategoryTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get three levels of categories\n * @see {@link CategorySearchModel}\n * @public\n */\nexport interface GetMenuCategoriesThreeLevelsDto extends CategorySearchModel {\n}\n\nexport class Categories {\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsByID\n\t * @path <API Root>/Categories/Category/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCategoryExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsByKey\n\t * @path <API Root>/Categories/Category/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCategoryExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsByName\n\t * @path <API Root>/Categories/Category/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCategoryExistsByName = (routeParams?: CheckCategoryExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this SEO URL exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCategoryExistsBySeoUrl\n\t * @path <API Root>/Categories/Category/Exists/SeoUrl\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCategoryExistsBySeoUrl = (routeParams?: CheckCategoryExistsBySeoUrlDto): IHttpPromise<number> =>\n\t\taxios.get([\"Categories\", \"Category\", \"Exists\", \"SeoUrl\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Used to check for region restrictions for the current user's state of residence.\n\t * @param {@link cef.store.api.CheckForCategoryRegionRestrictionsForCurrenUserStateOfResidenceDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.CheckForCategoryRegionRestrictionsForCurrenUserStateOfResidence\n\t * @path <API Root>/Categories/RegionRestriction/CheckCurrentUserStateOfResidence\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCheckForCategoryRegionRestrictionsForCurrenUserStateOfResidence = (routeParams: CheckForCategoryRegionRestrictionsForCurrenUserStateOfResidenceDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Categories\", \"RegionRestriction\", \"CheckCurrentUserStateOfResidence\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of categories.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategories\n\t * @path <API Root>/Categories/Categories\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategoryPagedResults>}\n\t * @public\n\t */\n\tGetCategories = (routeParams?: GetCategoriesDto): IHttpPromise<CategoryPagedResults> =>\n\t\taxios.get([\"Categories\", \"Categories\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get three levels of categories\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoriesThreeLevels\n\t * @path <API Root>/Categories/Levels/Three\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<CategoryModel>>}\n\t * @public\n\t */\n\tGetCategoriesThreeLevels = (routeParams?: GetCategoriesThreeLevelsDto): IHttpPromise<Array<CategoryModel>> =>\n\t\taxios.get([\"Categories\", \"Levels\", \"Three\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific category.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryByID\n\t * @path <API Root>/Categories/Category/ID\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategoryModel>}\n\t * @public\n\t */\n\tGetCategoryByID = (routeParams?: GetCategoryByIDDto): IHttpPromise<CategoryModel> =>\n\t\taxios.get([\"Categories\", \"Category\", \"ID\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific category by the key.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryByKey\n\t * @path <API Root>/Categories/Category/Key\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategoryModel>}\n\t * @public\n\t */\n\tGetCategoryByKey = (routeParams?: GetCategoryByKeyDto): IHttpPromise<CategoryModel> =>\n\t\taxios.get([\"Categories\", \"Category\", \"Key\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific category by the SEO URL.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryBySeoUrl\n\t * @path <API Root>/Categories/Category/SeoUrl\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategoryModel>}\n\t * @public\n\t */\n\tGetCategoryBySeoUrl = (routeParams?: GetCategoryBySeoUrlDto): IHttpPromise<CategoryModel> =>\n\t\taxios.get([\"Categories\", \"Category\", \"SeoUrl\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Get Category by SEO URL for just the SEO Metadata\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryForMetaData\n\t * @path <API Root>/Categories/Category/Metadata\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tGetCategoryForMetaData = (routeParams: GetCategoryForMetaDataDto): IHttpPromise<void> =>\n\t\taxios.get([\"Categories\", \"Category\", \"Metadata\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific category image.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryImageByID\n\t * @path <API Root>/Categories/CategoryImage/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategoryImageModel>}\n\t * @public\n\t */\n\tGetCategoryImageByID = (id: number): IHttpPromise<CategoryImageModel> =>\n\t\taxios.get([\"Categories\", \"CategoryImage\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of category images.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryImages\n\t * @path <API Root>/Categories/CategoryImages\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategoryImagePagedResults>}\n\t * @public\n\t */\n\tGetCategoryImages = (routeParams?: GetCategoryImagesDto): IHttpPromise<CategoryImagePagedResults> =>\n\t\taxios.get([\"Categories\", \"CategoryImages\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\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.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryTree\n\t * @path <API Root>/Categories/Tree\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<ProductCategorySelectorModel>>}\n\t * @public\n\t */\n\tGetCategoryTree = (routeParams?: GetCategoryTreeDto): IHttpPromise<Array<ProductCategorySelectorModel>> =>\n\t\taxios.get([\"Categories\", \"Tree\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of category types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCategoryTypes\n\t * @path <API Root>/Categories/CategoryTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategoryTypePagedResults>}\n\t * @public\n\t */\n\tGetCategoryTypes = (routeParams?: GetCategoryTypesDto): IHttpPromise<CategoryTypePagedResults> =>\n\t\taxios.get([\"Categories\", \"CategoryTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get three levels of categories\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMenuCategoriesThreeLevels\n\t * @path <API Root>/Categories/MenuLevels/Three\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<MenuCategoryModel>>}\n\t * @public\n\t */\n\tGetMenuCategoriesThreeLevels = (routeParams?: GetMenuCategoriesThreeLevelsDto): IHttpPromise<Array<MenuCategoryModel>> =>\n\t\taxios.get([\"Categories\", \"MenuLevels\", \"Three\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPersonalizedCategoriesForCurrentUser\n\t * @path <API Root>/Categories/Personalization/ForCurrentUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<CategoryModel>>}\n\t * @public\n\t */\n\tGetPersonalizedCategoriesForCurrentUser = (): IHttpPromise<Array<CategoryModel>> =>\n\t\taxios.get([\"Categories\", \"Personalization\", \"ForCurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n}\n","/**\n * @file _api/cvApi.Contacts.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tUserModel,\n\tContactModel,\n\tTypeSearchModel,\n\tContactTypePagedResults,\n\tStatusModel,\n\tAccountSearchModel,\n\tAccountModel,\n\tUserImageModel,\n\tStatusSearchModel,\n\tUserOnlineStatusPagedResults,\n\tUserSearchModel,\n\tUserPagedResults,\n\tUserStatusPagedResults,\n\tUserTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tCEFActionResponse,\n\tDictionary,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to create a new user.\n * @see {@link UserModel}\n * @public\n */\nexport interface CreateUserDto extends UserModel {\n\t/** Password */\n\tPassword?: string;\n\t/** Should the system create a user on the CMS side */\n\tCreateCMSUser?: boolean;\n\t/** Should the system create a CEF User */\n\tCreateCEFUser?: boolean;\n}\n\n/**\n * Use to create user with invite code\n * @see {@link UserModel}\n * @public\n */\nexport interface CreateUserWithCodeDto extends UserModel {\n\t/** InvitationCode */\n\tInvitationCode: string;\n}\n\n/**\n * Use to begin emulating a user.\n * @public\n */\nexport interface EmulateUserDto {\n\t/** EmulateUserID */\n\tEmulateUserID: number;\n\t/** EmulateAccountID */\n\tEmulateAccountID: number;\n}\n\n/**\n * Use to get a list of contact types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetContactTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get current user emulation info.\n * @see {@link AccountSearchModel}\n * @public\n */\nexport interface GetEmulatableAccountsForCurrentCSRDto extends AccountSearchModel {\n}\n\n/**\n * Use to get current user emulation info.\n * @public\n */\nexport interface GetEmulatableUsersForCurrentCSRDto {\n\t/** EmulateUserAccountID */\n\tEmulateUserAccountID: number;\n}\n\n/**\n * Use to get a list of user online statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetUserOnlineStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of users.\n * @see {@link UserSearchModel}\n * @public\n */\nexport interface GetUsersDto extends UserSearchModel {\n}\n\n/**\n * Use to get a list of user statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetUserStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of user types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetUserTypesDto extends TypeSearchModel {\n}\n\n/**\n * Removes privacy data from the user's privacy attribute\n * @public\n */\nexport interface RemovePrivacyDataDto {\n\tMessage: string;\n}\n\n/**\n * Requests privacy data from the user's privacy attribute\n * @public\n */\nexport interface RequestPrivacyDataDto {\n\tMessage: string;\n}\n\n/**\n * Restricts user's privacy data from being sold\n * @public\n */\nexport interface RestrictPrivacyDataDto {\n\tMessage: string;\n}\n\n/**\n * Use to set the current user's online status.\n * @public\n */\nexport interface SetCurrentUserOnlineStatusDto {\n\tOnlineStatus: string;\n}\n\n/**\n * Use to update the current user's details\n * @see {@link UserModel}\n * @public\n */\nexport interface UpdateCurrentUserDto extends UserModel {\n}\n\n/**\n * Use to update the selected or current user's details\n * @see {@link UserModel}\n * @public\n */\nexport interface UpdateSelectedOrCurrentUserDto extends UserModel {\n}\n\n/**\n * Use to create a new or update an existing contact (as needed).\n * @see {@link ContactModel}\n * @public\n */\nexport interface UpsertContactDto extends ContactModel {\n}\n\nexport class Contacts {\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckUserExistsByKey\n\t * @path <API Root>/Contacts/User/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckUserExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Contacts\", \"User\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to create a new user.\n\t * @param {@link cef.store.api.CreateUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateUser\n\t * @path <API Root>/Contacts/User/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateUser = (routeParams?: CreateUserDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Contacts\", \"User\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to create user with invite code\n\t * @param {@link cef.store.api.CreateUserWithCodeDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateUserWithCode\n\t * @path <API Root>/Contacts/User/CreateWithCode\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<UserModel>}\n\t * @public\n\t */\n\tCreateUserWithCode = (routeParams: CreateUserWithCodeDto): IHttpPromise<UserModel> =>\n\t\taxios.post([\"Contacts\", \"User\", \"CreateWithCode\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to begin emulating a user.\n\t * @param {@link cef.store.api.EmulateUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.EmulateUser\n\t * @path <API Root>/Contacts/User/EmulateUser\n\t * @verb POST\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tEmulateUser = (routeParams: EmulateUserDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Contacts\", \"User\", \"EmulateUser\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific contact.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetContactByID\n\t * @path <API Root>/Contacts/Contact/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ContactModel>}\n\t * @public\n\t */\n\tGetContactByID = (id: number): IHttpPromise<ContactModel> =>\n\t\taxios.get([\"Contacts\", \"Contact\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of contact types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetContactTypes\n\t * @path <API Root>/Contacts/ContactTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ContactTypePagedResults>}\n\t * @public\n\t */\n\tGetContactTypes = (routeParams?: GetContactTypesDto): IHttpPromise<ContactTypePagedResults> =>\n\t\taxios.get([\"Contacts\", \"ContactTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the current user's details\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUser\n\t * @path <API Root>/Contacts/CurrentUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserModel>}\n\t * @public\n\t */\n\tGetCurrentUser = (): IHttpPromise<UserModel> =>\n\t\taxios.get([\"Contacts\", \"CurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get the current user's UserName. Note: this only returns the UserName in the UserModel, no additional data\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserName\n\t * @path <API Root>/Contacts/CurrentUser/UserName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<cefalt.store.Dictionary<any>>>}\n\t * @public\n\t */\n\tGetCurrentUserName = (): IHttpPromise<CEFActionResponseT<Dictionary<any>>> =>\n\t\taxios.get([\"Contacts\", \"CurrentUser\", \"UserName\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get the current user's online status.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserOnlineStatus\n\t * @path <API Root>/Contacts/CurrentUser/GetOnlineStatus\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StatusModel>}\n\t * @public\n\t */\n\tGetCurrentUserOnlineStatus = (): IHttpPromise<StatusModel> =>\n\t\taxios.get([\"Contacts\", \"CurrentUser\", \"GetOnlineStatus\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get current user emulation info.\n\t * @param {@link cef.store.api.GetEmulatableAccountsForCurrentCSRDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetEmulatableAccountsForCurrentCSR\n\t * @path <API Root>/Contacts/User/GetEmulatableAccountsForCurrentCSR\n\t * @verb POST\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<Array<AccountModel>>}\n\t * @public\n\t */\n\tGetEmulatableAccountsForCurrentCSR = (routeParams?: GetEmulatableAccountsForCurrentCSRDto): IHttpPromise<Array<AccountModel>> =>\n\t\taxios.post([\"Contacts\", \"User\", \"GetEmulatableAccountsForCurrentCSR\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get current user emulation info.\n\t * @param {@link cef.store.api.GetEmulatableUsersForCurrentCSRDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetEmulatableUsersForCurrentCSR\n\t * @path <API Root>/Contacts/User/GetEmulatableUsersForCurrentCSR\n\t * @verb POST\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<Array<UserModel>>}\n\t * @public\n\t */\n\tGetEmulatableUsersForCurrentCSR = (routeParams: GetEmulatableUsersForCurrentCSRDto): IHttpPromise<Array<UserModel>> =>\n\t\taxios.post([\"Contacts\", \"User\", \"GetEmulatableUsersForCurrentCSR\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPrimaryImageForUserID\n\t * @path <API Root>/Contacts/User/PrimaryImage/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserImageModel>}\n\t * @public\n\t */\n\tGetPrimaryImageForUserID = (id: number): IHttpPromise<UserImageModel> =>\n\t\taxios.get([\"Contacts\", \"User\", \"PrimaryImage\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get the selected or current user's details\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSelectedOrCurrentUser\n\t * @path <API Root>/Contacts/SelectedUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserModel>}\n\t * @public\n\t */\n\tGetSelectedOrCurrentUser = (): IHttpPromise<UserModel> =>\n\t\taxios.get([\"Contacts\", \"SelectedUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific user.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserByID\n\t * @path <API Root>/Contacts/User/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserModel>}\n\t * @public\n\t */\n\tGetUserByID = (id: number): IHttpPromise<UserModel> =>\n\t\taxios.get([\"Contacts\", \"User\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific user by the key.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserByKey\n\t * @path <API Root>/Contacts/User/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserModel>}\n\t * @public\n\t */\n\tGetUserByKey = (key: string): IHttpPromise<UserModel> =>\n\t\taxios.get([\"Contacts\", \"User\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of user online statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserOnlineStatuses\n\t * @path <API Root>/Contacts/UserOnlineStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserOnlineStatusPagedResults>}\n\t * @public\n\t */\n\tGetUserOnlineStatuses = (routeParams?: GetUserOnlineStatusesDto): IHttpPromise<UserOnlineStatusPagedResults> =>\n\t\taxios.get([\"Contacts\", \"UserOnlineStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of users.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUsers\n\t * @path <API Root>/Contacts/Users\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserPagedResults>}\n\t * @public\n\t */\n\tGetUsers = (routeParams?: GetUsersDto): IHttpPromise<UserPagedResults> =>\n\t\taxios.get([\"Contacts\", \"Users\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of user statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserStatuses\n\t * @path <API Root>/Contacts/UserStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserStatusPagedResults>}\n\t * @public\n\t */\n\tGetUserStatuses = (routeParams?: GetUserStatusesDto): IHttpPromise<UserStatusPagedResults> =>\n\t\taxios.get([\"Contacts\", \"UserStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of user types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUserTypes\n\t * @path <API Root>/Contacts/UserTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<UserTypePagedResults>}\n\t * @public\n\t */\n\tGetUserTypes = (routeParams?: GetUserTypesDto): IHttpPromise<UserTypePagedResults> =>\n\t\taxios.get([\"Contacts\", \"UserTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Removes privacy data from the user's privacy attribute\n\t * @param {@link cef.store.api.RemovePrivacyDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemovePrivacyData\n\t * @path <API Root>/Contacts/Users/RemovePrivacyData\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRemovePrivacyData = (routeParams: RemovePrivacyDataDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Contacts\", \"Users\", \"RemovePrivacyData\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Requests privacy data from the user's privacy attribute\n\t * @param {@link cef.store.api.RequestPrivacyDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RequestPrivacyData\n\t * @path <API Root>/Contacts/Users/RequestPrivacyData\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRequestPrivacyData = (routeParams: RequestPrivacyDataDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Contacts\", \"Users\", \"RequestPrivacyData\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Restricts user's privacy data from being sold\n\t * @param {@link cef.store.api.RestrictPrivacyDataDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RestrictPrivacyData\n\t * @path <API Root>/Contacts/Users/RestrictPrivacyData\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRestrictPrivacyData = (routeParams: RestrictPrivacyDataDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Contacts\", \"Users\", \"RestrictPrivacyData\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to set the current user's online status.\n\t * @param {@link cef.store.api.SetCurrentUserOnlineStatusDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SetCurrentUserOnlineStatus\n\t * @path <API Root>/Contacts/CurrentUser/SetOnlineStatus\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetCurrentUserOnlineStatus = (routeParams: SetCurrentUserOnlineStatusDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Contacts\", \"CurrentUser\", \"SetOnlineStatus\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to stop emulating a user.\n\t * @param {@link cef.store.api.StopEmulationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.StopEmulation\n\t * @path <API Root>/Contacts/User/StopEmulation\n\t * @verb POST\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tStopEmulation = (): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Contacts\", \"User\", \"StopEmulation\"].join(\"/\"));\n\n\t/**\n\t * Use to update the current user's details\n\t * @param {@link cef.store.api.UpdateCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCurrentUser\n\t * @path <API Root>/Contacts/CurrentUser/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tUpdateCurrentUser = (routeParams?: UpdateCurrentUserDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.put([\"Contacts\", \"CurrentUser\", \"Update\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update the selected or current user's details\n\t * @param {@link cef.store.api.UpdateSelectedOrCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateSelectedOrCurrentUser\n\t * @path <API Root>/Contacts/SelectedUser/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tUpdateSelectedOrCurrentUser = (routeParams?: UpdateSelectedOrCurrentUserDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.put([\"Contacts\", \"SelectedUser\", \"Update\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to create a new or update an existing contact (as needed).\n\t * @param {@link cef.store.api.UpsertContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpsertContact\n\t * @path <API Root>/Contacts/Contact/Upsert\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpsertContact = (routeParams?: UpsertContactDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Contacts\", \"Contact\", \"Upsert\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Currencies.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tCurrencySearchModel,\n\tCurrencyPagedResults,\n\tCurrencyModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Convert a decimal value from one currency to another\n * @public\n */\nexport interface ConvertCurrencyValueAtoBDto {\n\t/** The decimal value to convert */\n\tValue: number;\n\t/** The key of the starting currency (convert from) */\n\tKeyA: string;\n\t/** The key of the currency to convert to */\n\tKeyB: string;\n}\n\n/**\n * Use to get a list of currencies.\n * @see {@link CurrencySearchModel}\n * @public\n */\nexport interface GetCurrenciesDto extends CurrencySearchModel {\n}\n\nexport class Currencies {\n\t/**\n\t * Convert a decimal value from one currency to another\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ConvertCurrencyValueAtoB\n\t * @path <API Root>/Currencies/Convert\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tConvertCurrencyValueAtoB = (routeParams: ConvertCurrencyValueAtoBDto): IHttpPromise<number> =>\n\t\taxios.get([\"Currencies\", \"Convert\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of currencies.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrencies\n\t * @path <API Root>/Currencies/Currencies\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CurrencyPagedResults>}\n\t * @public\n\t */\n\tGetCurrencies = (routeParams?: GetCurrenciesDto): IHttpPromise<CurrencyPagedResults> =>\n\t\taxios.get([\"Currencies\", \"Currencies\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific currency by the key.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrencyByKey\n\t * @path <API Root>/Currencies/Currency/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CurrencyModel>}\n\t * @public\n\t */\n\tGetCurrencyByKey = (key: string): IHttpPromise<CurrencyModel> =>\n\t\taxios.get([\"Currencies\", \"Currency\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n}\n","/**\n * @file _api/cvApi.DoseSpot.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tDoseSpotCreatePatientResponseDto,\n\tWebhookRequestModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Create a patient in DoseSpot.\n * @public\n */\nexport interface CreateDoseSpotPatientDto {\n\tUserID: number;\n}\n\n/**\n * Used for events and updates regarding DoseSpot patients, prescribers, prescriptions, clinics, etc.\n * @see {@link WebhookRequestModel}\n * @public\n */\nexport interface DoseSpotWebhookDto extends WebhookRequestModel {\n}\n\n/**\n * Securely configures a DoseSpot iframe url\n * @public\n */\nexport interface GetDoseSpotIFrameUrlDto {\n\tPatientID: number;\n\tDoseSpotPatientID: number;\n}\n\nexport class DoseSpot {\n\t/**\n\t * Create a patient in DoseSpot.\n\t * @param {@link cef.store.api.CreateDoseSpotPatientDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Prescriptions.DoseSpot.CreateDoseSpotPatient\n\t * @path <API Root>/DoseSpot/Patients/CreatePatient\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<DoseSpotCreatePatientResponseDto>>}\n\t * @public\n\t */\n\tCreateDoseSpotPatient = (routeParams: CreateDoseSpotPatientDto): IHttpPromise<CEFActionResponseT<DoseSpotCreatePatientResponseDto>> =>\n\t\taxios.post([\"DoseSpot\", \"Patients\", \"CreatePatient\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Used for events and updates regarding DoseSpot patients, prescribers, prescriptions, clinics, etc.\n\t * @param {@link cef.store.api.DoseSpotWebhookDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Prescriptions.DoseSpot.DoseSpotWebhook\n\t * @path <API Root>/DoseSpot/PushNotifications\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDoseSpotWebhook = (routeParams?: DoseSpotWebhookDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"DoseSpot\", \"PushNotifications\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Securely configures a DoseSpot iframe url\n\t * @param {@link cef.store.api.GetDoseSpotIFrameUrlDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Prescriptions.DoseSpot.GetDoseSpotIFrameUrl\n\t * @path <API Root>/DoseSpot/IFrame\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<string>}\n\t * @public\n\t */\n\tGetDoseSpotIFrameUrl = (routeParams: GetDoseSpotIFrameUrlDto): IHttpPromise<string> =>\n\t\taxios.post([\"DoseSpot\", \"IFrame\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Franchises.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tFranchiseModel,\n\tFranchiseCategorySearchModel,\n\tFranchiseCategoryPagedResults,\n\tFranchiseSearchModel,\n\tFranchisePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckFranchiseExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Returns the current franchise ID for the specified user identifier.\n * @public\n */\nexport interface GetCurrentFranchiseIDDto {\n\t/** User ID */\n\tUserID: number;\n}\n\n/**\n * Use to get a list of franchise categories.\n * @see {@link FranchiseCategorySearchModel}\n * @public\n */\nexport interface GetFranchiseCategoriesDto extends FranchiseCategorySearchModel {\n}\n\n/**\n * Use to get a list of franchises.\n * @see {@link FranchiseSearchModel}\n * @public\n */\nexport interface GetFranchisesDto extends FranchiseSearchModel {\n}\n\nexport class Franchises {\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckFranchiseExistsByID\n\t * @path <API Root>/Franchises/Franchise/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckFranchiseExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Franchises\", \"Franchise\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckFranchiseExistsByKey\n\t * @path <API Root>/Franchises/Franchise/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckFranchiseExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Franchises\", \"Franchise\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckFranchiseExistsByName\n\t * @path <API Root>/Franchises/Franchise/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckFranchiseExistsByName = (routeParams?: CheckFranchiseExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Franchises\", \"Franchise\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Returns the current franchise ID for the specified user identifier.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentFranchiseID\n\t * @path <API Root>/Franchises/CurrentFranchise\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tGetCurrentFranchiseID = (routeParams: GetCurrentFranchiseIDDto): IHttpPromise<number> =>\n\t\taxios.get([\"Franchises\", \"CurrentFranchise\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific franchise.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetFranchiseByID\n\t * @path <API Root>/Franchises/Franchise/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<FranchiseModel>}\n\t * @public\n\t */\n\tGetFranchiseByID = (id: number): IHttpPromise<FranchiseModel> =>\n\t\taxios.get([\"Franchises\", \"Franchise\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of franchise categories.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetFranchiseCategories\n\t * @path <API Root>/Franchises/FranchiseCategories\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<FranchiseCategoryPagedResults>}\n\t * @public\n\t */\n\tGetFranchiseCategories = (routeParams?: GetFranchiseCategoriesDto): IHttpPromise<FranchiseCategoryPagedResults> =>\n\t\taxios.get([\"Franchises\", \"FranchiseCategories\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of franchises.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetFranchises\n\t * @path <API Root>/Franchises/Franchises\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<FranchisePagedResults>}\n\t * @public\n\t */\n\tGetFranchises = (routeParams?: GetFranchisesDto): IHttpPromise<FranchisePagedResults> =>\n\t\taxios.get([\"Franchises\", \"Franchises\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Geography.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tAccountContactModel,\n\tCountrySearchModel,\n\tCountryPagedResults,\n\tCountryModel,\n\tDistrictModel,\n\tDistrictSearchModel,\n\tDistrictPagedResults,\n\tRegionModel,\n\tRegionSearchModel,\n\tRegionPagedResults,\n\tPhonePrefixLookupPagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Code exists and return the id if it does (null if it does not)\n * @public\n */\nexport interface CheckCountryExistsByCodeDto {\n\t/** The Country Code to look up */\n\tCode: string;\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckCountryExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Code exists and return the id if it does (null if it does not)\n * @public\n */\nexport interface CheckRegionExistsByCodeDto {\n\tCode: string;\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckRegionExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to add an address in the address book\n * @see {@link AccountContactModel}\n * @public\n */\nexport interface CreateAddressInBookDto extends AccountContactModel {\n}\n\n/**\n * Use to get a list of countries.\n * @see {@link CountrySearchModel}\n * @public\n */\nexport interface GetCountriesDto extends CountrySearchModel {\n}\n\n/**\n * Use to get the address book for the current Account\n * @public\n */\nexport interface GetCurrentAccountAddressBookDto {\n\tAccountID?: number;\n}\n\n/**\n * Use to get the address book for the current Account\n * @public\n */\nexport interface GetCurrentAccountPrimaryShippingAddressDto {\n\tAccountID?: number;\n}\n\n/**\n * Use to get the address book for the current Account\n * @public\n */\nexport interface GetCurrentUserAddressBookDto {\n\tAccountID?: number;\n}\n\n/**\n * Use to get a specific district by the name.\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface GetDistrictByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Gets the district by the district name and region id\n * @public\n */\nexport interface GetDistrictByNameAndRegionIDDto {\n\tRegionID: number;\n\tName: string;\n}\n\n/**\n * Use to get a list of districts.\n * @see {@link DistrictSearchModel}\n * @public\n */\nexport interface GetDistrictsDto extends DistrictSearchModel {\n}\n\n/**\n * Use to get a specific region by the name.\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface GetRegionByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of regions.\n * @see {@link RegionSearchModel}\n * @public\n */\nexport interface GetRegionsDto extends RegionSearchModel {\n}\n\n/**\n * Validates if the region is in a restricted region.\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface RestrictedRegionCheckDto extends ImplementsNameBase {\n\tCountryID: number;\n\tCode: string;\n\tRegionID: number;\n}\n\n/**\n * Use to get geographical data from the phone number\n * @public\n */\nexport interface ReversePhonePrefixToCityRegionCountryDto {\n\t/** The prefix, will be limited to 5 characters ignoring any symbols or spaces. */\n\tPrefix: string;\n}\n\nexport class Geography {\n\t/**\n\t * Check if this Code exists and return the id if it does (null if it does not)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCountryExistsByCode\n\t * @path <API Root>/Geography/Country/Exists/Code\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCountryExistsByCode = (routeParams: CheckCountryExistsByCodeDto): IHttpPromise<number> =>\n\t\taxios.get([\"Geography\", \"Country\", \"Exists\", \"Code\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCountryExistsByKey\n\t * @path <API Root>/Geography/Country/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCountryExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Geography\", \"Country\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCountryExistsByName\n\t * @path <API Root>/Geography/Country/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCountryExistsByName = (routeParams?: CheckCountryExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Geography\", \"Country\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Code exists and return the id if it does (null if it does not)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckRegionExistsByCode\n\t * @path <API Root>/Geography/Region/Exists/Code\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckRegionExistsByCode = (routeParams: CheckRegionExistsByCodeDto): IHttpPromise<number> =>\n\t\taxios.get([\"Geography\", \"Region\", \"Exists\", \"Code\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckRegionExistsByKey\n\t * @path <API Root>/Geography/Region/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckRegionExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Geography\", \"Region\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckRegionExistsByName\n\t * @path <API Root>/Geography/Region/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckRegionExistsByName = (routeParams?: CheckRegionExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Geography\", \"Region\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to add an address in the address book\n\t * @param {@link cef.store.api.CreateAddressInBookDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateAddressInBook\n\t * @path <API Root>/Geography/AddressBook/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<AccountContactModel>}\n\t * @public\n\t */\n\tCreateAddressInBook = (routeParams?: CreateAddressInBookDto): IHttpPromise<AccountContactModel> =>\n\t\taxios.post([\"Geography\", \"AddressBook\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of countries.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCountries\n\t * @path <API Root>/Geography/Countries\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CountryPagedResults>}\n\t * @public\n\t */\n\tGetCountries = (routeParams?: GetCountriesDto): IHttpPromise<CountryPagedResults> =>\n\t\taxios.get([\"Geography\", \"Countries\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific country.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCountryByID\n\t * @path <API Root>/Geography/Country/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CountryModel>}\n\t * @public\n\t */\n\tGetCountryByID = (id: number): IHttpPromise<CountryModel> =>\n\t\taxios.get([\"Geography\", \"Country\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get the address book for the current Account\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountAddressBook\n\t * @path <API Root>/Geography/AddressBook/CurrentAccount\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<AccountContactModel>>}\n\t * @public\n\t */\n\tGetCurrentAccountAddressBook = (routeParams?: GetCurrentAccountAddressBookDto): IHttpPromise<Array<AccountContactModel>> =>\n\t\taxios.get([\"Geography\", \"AddressBook\", \"CurrentAccount\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the address book for the current Account\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountPrimaryShippingAddress\n\t * @path <API Root>/Geography/AddressBook/CurrentAccount/PrimaryShipping\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AccountContactModel>}\n\t * @public\n\t */\n\tGetCurrentAccountPrimaryShippingAddress = (routeParams?: GetCurrentAccountPrimaryShippingAddressDto): IHttpPromise<AccountContactModel> =>\n\t\taxios.get([\"Geography\", \"AddressBook\", \"CurrentAccount\", \"PrimaryShipping\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the address book for the current Account\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserAddressBook\n\t * @path <API Root>/Geography/AddressBook/CurrentUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<AccountContactModel>>}\n\t * @public\n\t */\n\tGetCurrentUserAddressBook = (routeParams?: GetCurrentUserAddressBookDto): IHttpPromise<Array<AccountContactModel>> =>\n\t\taxios.get([\"Geography\", \"AddressBook\", \"CurrentUser\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific district by the name.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDistrictByName\n\t * @path <API Root>/Geography/District/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<DistrictModel>}\n\t * @public\n\t */\n\tGetDistrictByName = (routeParams?: GetDistrictByNameDto): IHttpPromise<DistrictModel> =>\n\t\taxios.get([\"Geography\", \"District\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Gets the district by the district name and region id\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDistrictByNameAndRegionID\n\t * @path <API Root>/Geography/District/GetDistrictByNameAndRegionID\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<DistrictModel>}\n\t * @public\n\t */\n\tGetDistrictByNameAndRegionID = (routeParams: GetDistrictByNameAndRegionIDDto): IHttpPromise<DistrictModel> =>\n\t\taxios.get([\"Geography\", \"District\", \"GetDistrictByNameAndRegionID\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of districts.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDistricts\n\t * @path <API Root>/Geography/Districts\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<DistrictPagedResults>}\n\t * @public\n\t */\n\tGetDistricts = (routeParams?: GetDistrictsDto): IHttpPromise<DistrictPagedResults> =>\n\t\taxios.get([\"Geography\", \"Districts\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific region.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRegionByID\n\t * @path <API Root>/Geography/Region/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<RegionModel>}\n\t * @public\n\t */\n\tGetRegionByID = (id: number): IHttpPromise<RegionModel> =>\n\t\taxios.get([\"Geography\", \"Region\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific region by the name.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRegionByName\n\t * @path <API Root>/Geography/Region/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<RegionModel>}\n\t * @public\n\t */\n\tGetRegionByName = (routeParams?: GetRegionByNameDto): IHttpPromise<RegionModel> =>\n\t\taxios.get([\"Geography\", \"Region\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of regions.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRegions\n\t * @path <API Root>/Geography/Regions\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<RegionPagedResults>}\n\t * @public\n\t */\n\tGetRegions = (routeParams?: GetRegionsDto): IHttpPromise<RegionPagedResults> =>\n\t\taxios.get([\"Geography\", \"Regions\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Validates if the region is in a restricted region.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RestrictedRegionCheck\n\t * @path <API Root>/Geography/Region/RestrictedRegionCheck\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRestrictedRegionCheck = (routeParams: RestrictedRegionCheckDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.get([\"Geography\", \"Region\", \"RestrictedRegionCheck\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get geographical data from the phone number\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReversePhonePrefixToCityRegionCountry\n\t * @path <API Root>/Geography/PhonePrefixLookups/ReversePhonePrefixToCityRegionCountry\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PhonePrefixLookupPagedResults>}\n\t * @public\n\t */\n\tReversePhonePrefixToCityRegionCountry = (routeParams: ReversePhonePrefixToCityRegionCountryDto): IHttpPromise<PhonePrefixLookupPagedResults> =>\n\t\taxios.get([\"Geography\", \"PhonePrefixLookups\", \"ReversePhonePrefixToCityRegionCountry\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Globalization.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tLanguageModel,\n\tLanguageSearchModel,\n\tLanguagePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to get a list of languages.\n * @see {@link LanguageSearchModel}\n * @public\n */\nexport interface GetLanguagesDto extends LanguageSearchModel {\n}\n\nexport class Globalization {\n\t/**\n\t * Use to get a specific language by the key.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLanguageByKey\n\t * @path <API Root>/Globalization/Language/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<LanguageModel>}\n\t * @public\n\t */\n\tGetLanguageByKey = (key: string): IHttpPromise<LanguageModel> =>\n\t\taxios.get([\"Globalization\", \"Language\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of languages.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetLanguages\n\t * @path <API Root>/Globalization/Languages\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<LanguagePagedResults>}\n\t * @public\n\t */\n\tGetLanguages = (routeParams?: GetLanguagesDto): IHttpPromise<LanguagePagedResults> =>\n\t\taxios.get([\"Globalization\", \"Languages\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Importer.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImportSheet,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Parses a document and returns info about the columns and rows.\n * @public\n */\nexport interface ParseDocumentDto {\n\tFile?: string;\n\tSkipReadingData: boolean;\n}\n\nexport class Importer {\n\t/**\n\t * Parses a document and returns info about the columns and rows.\n\t * @param {@link cef.store.api.ParseDocumentDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ParseDocument\n\t * @path <API Root>/Importer/ParseDocument\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<ImportSheet>}\n\t * @public\n\t */\n\tParseDocument = (routeParams: ParseDocumentDto): IHttpPromise<ImportSheet> =>\n\t\taxios.post([\"Importer\", \"ParseDocument\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Inventory.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tInventoryLocationRegionSearchModel,\n\tInventoryLocationRegionPagedResults,\n\tInventoryLocationSearchModel,\n\tInventoryLocationPagedResults,\n\tInventoryLocationSectionSearchModel,\n\tInventoryLocationSectionPagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Get InventoryLocationRegions by InventoryLocation ID\n * @see {@link InventoryLocationRegionSearchModel}\n * @public\n */\nexport interface GetInventoryLocationRegionsByInventoryLocationIDDto extends InventoryLocationRegionSearchModel {\n}\n\n/**\n * Use to get a list of inventory locations.\n * @see {@link InventoryLocationSearchModel}\n * @public\n */\nexport interface GetInventoryLocationsDto extends InventoryLocationSearchModel {\n}\n\n/**\n * Use to get a list of inventory location sections.\n * @see {@link InventoryLocationSectionSearchModel}\n * @public\n */\nexport interface GetInventoryLocationSectionsDto extends InventoryLocationSectionSearchModel {\n}\n\nexport class Inventory {\n\t/**\n\t * Get InventoryLocationRegions by InventoryLocation ID\n\t * @param {@link cef.store.api.GetInventoryLocationRegionsByInventoryLocationIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetInventoryLocationRegionsByInventoryLocationID\n\t * @path <API Root>/Inventory/InventoryLocation/Regions/ByInventoryLocationID\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<InventoryLocationRegionPagedResults>}\n\t * @public\n\t */\n\tGetInventoryLocationRegionsByInventoryLocationID = (routeParams?: GetInventoryLocationRegionsByInventoryLocationIDDto): IHttpPromise<InventoryLocationRegionPagedResults> =>\n\t\taxios.post([\"Inventory\", \"InventoryLocation\", \"Regions\", \"ByInventoryLocationID\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of inventory locations.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetInventoryLocations\n\t * @path <API Root>/Inventory/InventoryLocations\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<InventoryLocationPagedResults>}\n\t * @public\n\t */\n\tGetInventoryLocations = (routeParams?: GetInventoryLocationsDto): IHttpPromise<InventoryLocationPagedResults> =>\n\t\taxios.get([\"Inventory\", \"InventoryLocations\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of inventory location sections.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetInventoryLocationSections\n\t * @path <API Root>/Inventory/InventoryLocationSections\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<InventoryLocationSectionPagedResults>}\n\t * @public\n\t */\n\tGetInventoryLocationSections = (routeParams?: GetInventoryLocationSectionsDto): IHttpPromise<InventoryLocationSectionPagedResults> =>\n\t\taxios.get([\"Inventory\", \"InventoryLocationSections\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Invoicing.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsDisplayNameBase,\n\tImplementsNameBase,\n\tSalesInvoiceModel,\n\tSalesInvoiceEventSearchModel,\n\tSalesInvoiceEventPagedResults,\n\tStateModel,\n\tStateSearchModel,\n\tSalesInvoiceStatePagedResults,\n\tStatusModel,\n\tStatusSearchModel,\n\tSalesInvoiceStatusPagedResults,\n\tTypeModel,\n\tTypeSearchModel,\n\tSalesInvoiceTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesInvoiceStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesInvoiceStateExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesInvoiceStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesInvoiceStatusExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesInvoiceTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesInvoiceTypeExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of sales invoice events.\n * @see {@link SalesInvoiceEventSearchModel}\n * @public\n */\nexport interface GetSalesInvoiceEventsDto extends SalesInvoiceEventSearchModel {\n}\n\n/**\n * Use to get a list of sales invoice states.\n * @see {@link StateSearchModel}\n * @public\n */\nexport interface GetSalesInvoiceStatesDto extends StateSearchModel {\n}\n\n/**\n * Use to get a list of sales invoice statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetSalesInvoiceStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of sales invoice types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetSalesInvoiceTypesDto extends TypeSearchModel {\n}\n\nexport class Invoicing {\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStateExistsByDisplayName\n\t * @path <API Root>/Invoicing/SalesInvoiceState/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceStateExistsByDisplayName = (routeParams?: CheckSalesInvoiceStateExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStateExistsByKey\n\t * @path <API Root>/Invoicing/SalesInvoiceState/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceStateExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStateExistsByName\n\t * @path <API Root>/Invoicing/SalesInvoiceState/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceStateExistsByName = (routeParams?: CheckSalesInvoiceStateExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStatusExistsByDisplayName\n\t * @path <API Root>/Invoicing/SalesInvoiceStatus/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceStatusExistsByDisplayName = (routeParams?: CheckSalesInvoiceStatusExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStatusExistsByKey\n\t * @path <API Root>/Invoicing/SalesInvoiceStatus/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceStatusExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceStatusExistsByName\n\t * @path <API Root>/Invoicing/SalesInvoiceStatus/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceStatusExistsByName = (routeParams?: CheckSalesInvoiceStatusExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceTypeExistsByDisplayName\n\t * @path <API Root>/Invoicing/SalesInvoiceType/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceTypeExistsByDisplayName = (routeParams?: CheckSalesInvoiceTypeExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceTypeExistsByKey\n\t * @path <API Root>/Invoicing/SalesInvoiceType/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceTypeExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesInvoiceTypeExistsByName\n\t * @path <API Root>/Invoicing/SalesInvoiceType/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesInvoiceTypeExistsByName = (routeParams?: CheckSalesInvoiceTypeExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales invoice.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceByID\n\t * @path <API Root>/Invoicing/SalesInvoice/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesInvoiceModel>}\n\t * @public\n\t */\n\tGetSalesInvoiceByID = (id: number): IHttpPromise<SalesInvoiceModel> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoice\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales invoice events.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceEvents\n\t * @path <API Root>/Invoicing/SalesInvoiceEvents\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesInvoiceEventPagedResults>}\n\t * @public\n\t */\n\tGetSalesInvoiceEvents = (routeParams?: GetSalesInvoiceEventsDto): IHttpPromise<SalesInvoiceEventPagedResults> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceEvents\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales invoice state.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStateByID\n\t * @path <API Root>/Invoicing/SalesInvoiceState/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StateModel>}\n\t * @public\n\t */\n\tGetSalesInvoiceStateByID = (id: number): IHttpPromise<StateModel> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales invoice states.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStates\n\t * @path <API Root>/Invoicing/SalesInvoiceStates\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesInvoiceStatePagedResults>}\n\t * @public\n\t */\n\tGetSalesInvoiceStates = (routeParams?: GetSalesInvoiceStatesDto): IHttpPromise<SalesInvoiceStatePagedResults> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStates\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales invoice status.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStatusByID\n\t * @path <API Root>/Invoicing/SalesInvoiceStatus/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StatusModel>}\n\t * @public\n\t */\n\tGetSalesInvoiceStatusByID = (id: number): IHttpPromise<StatusModel> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales invoice statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceStatuses\n\t * @path <API Root>/Invoicing/SalesInvoiceStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesInvoiceStatusPagedResults>}\n\t * @public\n\t */\n\tGetSalesInvoiceStatuses = (routeParams?: GetSalesInvoiceStatusesDto): IHttpPromise<SalesInvoiceStatusPagedResults> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales invoice type.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceTypeByID\n\t * @path <API Root>/Invoicing/SalesInvoiceType/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<TypeModel>}\n\t * @public\n\t */\n\tGetSalesInvoiceTypeByID = (id: number): IHttpPromise<TypeModel> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales invoice types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoiceTypes\n\t * @path <API Root>/Invoicing/SalesInvoiceTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesInvoiceTypePagedResults>}\n\t * @public\n\t */\n\tGetSalesInvoiceTypes = (routeParams?: GetSalesInvoiceTypesDto): IHttpPromise<SalesInvoiceTypePagedResults> =>\n\t\taxios.get([\"Invoicing\", \"SalesInvoiceTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.JSConfigs.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\nexport class JSConfigs {\n\t/**\n\t * Gets the current cache counter value\n\t * @param {@link cef.store.api.GetCacheCounterDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCacheCounter\n\t * @path <API Root>/JSConfigs/Counter\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tGetCacheCounter = (): IHttpPromise<number> =>\n\t\taxios.post([\"JSConfigs\", \"Counter\"].join(\"/\"));\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreFrontCEFConfig\n\t * @path <API Root>/JSConfigs/StoreFront\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tGetStoreFrontCEFConfig = (): IHttpPromise<void> =>\n\t\taxios.get([\"JSConfigs\", \"StoreFront\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreFrontCEFConfigAlt\n\t * @path <API Root>/JSConfigs/StoreFrontAlt\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<string>}\n\t * @public\n\t */\n\tGetStoreFrontCEFConfigAlt = (): IHttpPromise<string> =>\n\t\taxios.get([\"JSConfigs\", \"StoreFrontAlt\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreFrontCEFConfigReact\n\t * @path <API Root>/JSConfigs/StoreFrontReact\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<any>}\n\t * @public\n\t */\n\tGetStoreFrontCEFConfigReact = (): IHttpPromise<any> =>\n\t\taxios.get([\"JSConfigs\", \"StoreFrontReact\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Flushes the cached setting values and reloads the config file.\n\t * @param {@link cef.store.api.ReloadSettingsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReloadSettings\n\t * @path <API Root>/JSConfigs/Reload\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tReloadSettings = (): IHttpPromise<void> =>\n\t\taxios.post([\"JSConfigs\", \"Reload\"].join(\"/\"));\n}\n","/**\n * @file _api/cvApi.Manufacturers.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tManufacturerModel,\n\tManufacturerSearchModel,\n\tManufacturerPagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckManufacturerExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of manufacturers.\n * @see {@link ManufacturerSearchModel}\n * @public\n */\nexport interface GetManufacturersDto extends ManufacturerSearchModel {\n}\n\nexport class Manufacturers {\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckManufacturerExistsByID\n\t * @path <API Root>/Manufacturers/Manufacturer/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckManufacturerExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckManufacturerExistsByKey\n\t * @path <API Root>/Manufacturers/Manufacturer/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckManufacturerExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckManufacturerExistsByName\n\t * @path <API Root>/Manufacturers/Manufacturer/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckManufacturerExistsByName = (routeParams?: CheckManufacturerExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific manufacturer.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetManufacturerByID\n\t * @path <API Root>/Manufacturers/Manufacturer/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ManufacturerModel>}\n\t * @public\n\t */\n\tGetManufacturerByID = (id: number): IHttpPromise<ManufacturerModel> =>\n\t\taxios.get([\"Manufacturers\", \"Manufacturer\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of manufacturers.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetManufacturers\n\t * @path <API Root>/Manufacturers/Manufacturers\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ManufacturerPagedResults>}\n\t * @public\n\t */\n\tGetManufacturers = (routeParams?: GetManufacturersDto): IHttpPromise<ManufacturerPagedResults> =>\n\t\taxios.get([\"Manufacturers\", \"Manufacturers\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Media.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tStoredFileSearchModel,\n\tStoredFilePagedResults,\n\tTypeSearchModel,\n\tStoredFileTypePagedResults,\n\tFileEntityType,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIUploadResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to get a list of stored files.\n * @see {@link StoredFileSearchModel}\n * @public\n */\nexport interface GetStoredFilesDto extends StoredFileSearchModel {\n}\n\n/**\n * Use to get a list of stored file types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetStoredFileTypesDto extends TypeSearchModel {\n}\n\n/**\n * FileUrl\n * @public\n */\nexport interface GetStoredFileUrlDto {\n\tEntityType: FileEntityType;\n\tFileKey: string;\n}\n\n/**\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)\n * @public\n */\nexport interface UploadStoredFileDto {\n\tEntityFileType: FileEntityType;\n\tName?: string;\n\tAsync: boolean;\n\tStoredFileTypeKey?: string;\n\tMasterID?: number;\n}\n\nexport class Media {\n\t/**\n\t * Initiate download of a specific file\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DownloadStoredFile\n\t * @path <API Root>/Media/StoredFiles/Download/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<number>>}\n\t * @public\n\t */\n\tDownloadStoredFile = (id: number): IHttpPromise<Array<number>> =>\n\t\taxios.get([\"Media\", \"StoredFiles\", \"Download\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of stored files.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoredFiles\n\t * @path <API Root>/Media/StoredFiles\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoredFilePagedResults>}\n\t * @public\n\t */\n\tGetStoredFiles = (routeParams?: GetStoredFilesDto): IHttpPromise<StoredFilePagedResults> =>\n\t\taxios.get([\"Media\", \"StoredFiles\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of stored file types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoredFileTypes\n\t * @path <API Root>/Media/StoredFileTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoredFileTypePagedResults>}\n\t * @public\n\t */\n\tGetStoredFileTypes = (routeParams?: GetStoredFileTypesDto): IHttpPromise<StoredFileTypePagedResults> =>\n\t\taxios.get([\"Media\", \"StoredFileTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * FileUrl\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoredFileUrl\n\t * @path <API Root>/Media/StoredFiles/Url\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<string>}\n\t * @public\n\t */\n\tGetStoredFileUrl = (routeParams: GetStoredFileUrlDto): IHttpPromise<string> =>\n\t\taxios.get([\"Media\", \"StoredFiles\", \"Url\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Get Upload StoredFile Results\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetUploadStoredFileResults\n\t * @path <API Root>/Media/StoredFiles/UploadResults/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<IUploadResponse>}\n\t * @public\n\t */\n\tGetUploadStoredFileResults = (id: string): IHttpPromise<IUploadResponse> =>\n\t\taxios.get([\"Media\", \"StoredFiles\", \"UploadResults\", encodeURIComponent(id)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\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)\n\t * @param {@link cef.store.api.UploadStoredFileDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UploadStoredFile\n\t * @path <API Root>/Media/StoredFiles/Upload\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<IUploadResponse>}\n\t * @public\n\t */\n\tUploadStoredFile = (routeParams: UploadStoredFileDto): IHttpPromise<IUploadResponse> =>\n\t\taxios.post([\"Media\", \"StoredFiles\", \"Upload\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n}\n","/**\n * @file _api/cvApi.Messaging.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tConversationModel,\n\tMessageModel,\n\tConversationSearchModel,\n\tConversationPagedResults,\n\tMessageSearchModel,\n\tMessagePagedResults,\n\tUserTypingStatus,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tCEFActionResponse,\n\tDictionary,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to create a new conversation.\n * @see {@link ConversationModel}\n * @public\n */\nexport interface CreateConversationDto extends ConversationModel {\n}\n\n/**\n * Use to create a new message.\n * @see {@link MessageModel}\n * @public\n */\nexport interface CreateMessageDto extends MessageModel {\n}\n\n/**\n * Use to get conversation headers for the current user\n * @see {@link ConversationSearchModel}\n * @public\n */\nexport interface GetConversationHeadersForCurrentUserDto extends ConversationSearchModel {\n}\n\n/**\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.\n * @public\n */\nexport interface GetMessagesForActiveConversationsForCurrentUserDto {\n\tPostedSince?: Date;\n}\n\n/**\n * Use to get messages\n * @see {@link MessageSearchModel}\n * @public\n */\nexport interface GetMessagesForCurrentUserDto extends MessageSearchModel {\n}\n\n/**\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.\n * @public\n */\nexport interface GetMessagesForEndedConversationsForCurrentUserDto {\n\tID?: number;\n\tPostedSince?: Date;\n}\n\n/**\n * Use to get messages\n * @see {@link MessageSearchModel}\n * @public\n */\nexport interface GetMessagesFromCurrentUserDto extends MessageSearchModel {\n}\n\n/**\n * Use to add a message to a conversation, all message recipients in the conversation will see the message.\n * @see {@link MessageModel}\n * @public\n */\nexport interface PostMessageToConversationDto extends MessageModel {\n}\n\n/**\n * Use to update an existing message.\n * @see {@link MessageModel}\n * @public\n */\nexport interface UpdateMessageDto extends MessageModel {\n}\n\nexport class Messaging {\n\t/**\n\t * Use to create a new conversation.\n\t * @param {@link cef.store.api.CreateConversationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateConversation\n\t * @path <API Root>/Messaging/Conversation/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateConversation = (routeParams?: CreateConversationDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Messaging\", \"Conversation\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to create a new message.\n\t * @param {@link cef.store.api.CreateMessageDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateMessage\n\t * @path <API Root>/Messaging/Message/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateMessage = (routeParams?: CreateMessageDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Messaging\", \"Message\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Deactivate a specific message from the system [Soft-Delete].\n\t * @param {@link cef.store.api.DeactivateMessageByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeactivateMessageByID\n\t * @path <API Root>/Messaging/Message/Deactivate/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeactivateMessageByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Messaging\", \"Message\", \"Deactivate\", \"ID\", id].join(\"/\"));\n\n\t/**\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.\n\t * @param {@link cef.store.api.EndConversationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.EndConversation\n\t * @path <API Root>/Messaging/Conversation/End/{ID}\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tEndConversation = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Messaging\", \"Conversation\", \"End\", id].join(\"/\"));\n\n\t/**\n\t * Use to get conversation headers for the current user\n\t * @param {@link cef.store.api.GetConversationHeadersForCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetConversationHeadersForCurrentUser\n\t * @path <API Root>/Messaging/CurrentUser/ConversationHeaders\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<ConversationPagedResults>}\n\t * @public\n\t */\n\tGetConversationHeadersForCurrentUser = (routeParams?: GetConversationHeadersForCurrentUserDto): IHttpPromise<ConversationPagedResults> =>\n\t\taxios.post([\"Messaging\", \"CurrentUser\", \"ConversationHeaders\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific message.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessageByID\n\t * @path <API Root>/Messaging/Message/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<MessageModel>}\n\t * @public\n\t */\n\tGetMessageByID = (id: number): IHttpPromise<MessageModel> =>\n\t\taxios.get([\"Messaging\", \"Message\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\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.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesForActiveConversationsForCurrentUser\n\t * @path <API Root>/Messaging/CurrentUser/Messages/ActiveConversations\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<cefalt.store.Dictionary<Array<MessageModel>>>>}\n\t * @public\n\t */\n\tGetMessagesForActiveConversationsForCurrentUser = (routeParams?: GetMessagesForActiveConversationsForCurrentUserDto): IHttpPromise<CEFActionResponseT<Dictionary<Array<MessageModel>>>> =>\n\t\taxios.get([\"Messaging\", \"CurrentUser\", \"Messages\", \"ActiveConversations\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get messages\n\t * @param {@link cef.store.api.GetMessagesForCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesForCurrentUser\n\t * @path <API Root>/Messaging/CurrentUser/Messages\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<MessagePagedResults>}\n\t * @public\n\t */\n\tGetMessagesForCurrentUser = (routeParams?: GetMessagesForCurrentUserDto): IHttpPromise<MessagePagedResults> =>\n\t\taxios.post([\"Messaging\", \"CurrentUser\", \"Messages\"].join(\"/\"), routeParams);\n\n\t/**\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.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesForEndedConversationsForCurrentUser\n\t * @path <API Root>/Messaging/CurrentUser/Messages/EndedConversations\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<cefalt.store.Dictionary<Array<MessageModel>>>>}\n\t * @public\n\t */\n\tGetMessagesForEndedConversationsForCurrentUser = (routeParams?: GetMessagesForEndedConversationsForCurrentUserDto): IHttpPromise<CEFActionResponseT<Dictionary<Array<MessageModel>>>> =>\n\t\taxios.get([\"Messaging\", \"CurrentUser\", \"Messages\", \"EndedConversations\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get messages\n\t * @param {@link cef.store.api.GetMessagesFromCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetMessagesFromCurrentUser\n\t * @path <API Root>/Messaging/CurrentUser/Messages/From\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<MessagePagedResults>}\n\t * @public\n\t */\n\tGetMessagesFromCurrentUser = (routeParams?: GetMessagesFromCurrentUserDto): IHttpPromise<MessagePagedResults> =>\n\t\taxios.post([\"Messaging\", \"CurrentUser\", \"Messages\", \"From\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get the typing states for other users in your non-ended conversations.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetOtherConversationUsersTypingStatuses\n\t * @path <API Root>/Messaging/ConversationUser/GetTypingStateForOtherConversationUsers\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<UserTypingStatus>>>}\n\t * @public\n\t */\n\tGetOtherConversationUsersTypingStatuses = (): IHttpPromise<CEFActionResponseT<Array<UserTypingStatus>>> =>\n\t\taxios.get([\"Messaging\", \"ConversationUser\", \"GetTypingStateForOtherConversationUsers\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to add a message to a conversation, all message recipients in the conversation will see the message.\n\t * @param {@link cef.store.api.PostMessageToConversationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.PostMessageToConversation\n\t * @path <API Root>/Messaging/Conversation/PostMessage\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<MessageModel>>}\n\t * @public\n\t */\n\tPostMessageToConversation = (routeParams?: PostMessageToConversationDto): IHttpPromise<CEFActionResponseT<MessageModel>> =>\n\t\taxios.post([\"Messaging\", \"Conversation\", \"PostMessage\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to set a conversation that when it ends, it should send an email to the user\n\t * @param {@link cef.store.api.SetConversationToCopyDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SetConversationToCopy\n\t * @path <API Root>/Messaging/Conversation/SetToCopy/{ID}\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetConversationToCopy = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.put([\"Messaging\", \"Conversation\", \"SetToCopy\", id].join(\"/\"));\n\n\t/**\n\t * Use to set the typing state while the user is typing.\n\t * @param {@link cef.store.api.SetConversationUserTypingStateForCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SetConversationUserTypingStateForCurrentUser\n\t * @path <API Root>/Messaging/ConversationUser/CurrentUser/SetTypingState/{IsTyping}\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetConversationUserTypingStateForCurrentUser = (isTyping: boolean): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Messaging\", \"ConversationUser\", \"CurrentUser\", \"SetTypingState\", isTyping].join(\"/\"));\n\n\t/**\n\t * Use to update an existing message.\n\t * @param {@link cef.store.api.UpdateMessageDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateMessage\n\t * @path <API Root>/Messaging/Message/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateMessage = (routeParams?: UpdateMessageDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Messaging\", \"Message\", \"Update\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Ordering.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsDisplayNameBase,\n\tImplementsNameBase,\n\tSalesOrderSearchModel,\n\tSalesOrderPagedResults,\n\tAvailableOrdersPagedResults,\n\tSalesOrderModel,\n\tSalesOrderEventSearchModel,\n\tSalesOrderEventPagedResults,\n\tStateModel,\n\tStateSearchModel,\n\tSalesOrderStatePagedResults,\n\tStatusModel,\n\tStatusSearchModel,\n\tSalesOrderStatusPagedResults,\n\tTypeModel,\n\tTypeSearchModel,\n\tSalesOrderTypePagedResults,\n\tSubscriptionSearchModel,\n\tSubscriptionModel,\n\tSubscriptionHistorySearchModel,\n\tSubscriptionHistoryPagedResults,\n\tImplementsIDBase,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface ApproveSalesOrderDto {\n\t/** The sales order ID. */\n\tSalesOrderID: number;\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesOrderStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesOrderStateExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesOrderStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesOrderStatusExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesOrderTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesOrderTypeExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface DenySalesOrderDto {\n\t/** The sales order ID. */\n\tSalesOrderID: number;\n}\n\n/**\n * Used to get all orders associated to a provider's account\n * @see {@link SalesOrderSearchModel}\n * @public\n */\nexport interface GetAllOrdersForProviderDto extends SalesOrderSearchModel {\n  UserContactFirstNameOrLastName?: string;\n  UserContactLastName?: string;\n  SelectedVisitType?: string;\n}\n\n/**\n * Used to get all available orders associated to a provider's account\n * @see {@link SalesOrderSearchModel}\n * @public\n */\nexport interface GetAvailableOrdersForProviderDto extends SalesOrderSearchModel {\n\tShippingContactRegionID?: number;\n\tShippingContactName?: string;\n}\n\n/**\n * Use to get history of sales orders for the current account\n * @see {@link SalesOrderSearchModel}\n * @public\n */\nexport interface GetCurrentAccountSalesOrdersDto extends SalesOrderSearchModel {\n  UserContactLastName?: string;\n  SelectedVisitType?: string;\n}\n\n/**\n * Use to get history of sales order for the current store\n * @see {@link SalesOrderSearchModel}\n * @public\n */\nexport interface GetCurrentStoreSalesOrdersDto extends SalesOrderSearchModel {\n}\n\n/**\n * Use to get history of sales order for the current user\n * @see {@link SalesOrderSearchModel}\n * @public\n */\nexport interface GetCurrentUserSalesOrdersDto extends SalesOrderSearchModel {\n}\n\n/**\n * Use to get a list of sales order events.\n * @see {@link SalesOrderEventSearchModel}\n * @public\n */\nexport interface GetSalesOrderEventsDto extends SalesOrderEventSearchModel {\n}\n\n/**\n * Use to get a list of sales order states.\n * @see {@link StateSearchModel}\n * @public\n */\nexport interface GetSalesOrderStatesDto extends StateSearchModel {\n}\n\n/**\n * Use to get a list of sales order statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetSalesOrderStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of sales order types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetSalesOrderTypesDto extends TypeSearchModel {\n}\n\n/**\n * View subscription to update. Get by subscriptionID.\n * @see {@link SubscriptionSearchModel}\n * @public\n */\nexport interface GetSubscriptionBySalesOrderIDDto extends SubscriptionSearchModel {\n}\n\n/**\n * Use to get all on-demand subscriptions.\n * @see {@link SubscriptionHistorySearchModel}\n * @public\n */\nexport interface GetSubscriptionHistoryBySubscriptionIDDto extends SubscriptionHistorySearchModel {\n\tSubID: number;\n}\n\n/**\n * Send an email with the sales order receipt.\n * @see {@link ImplementsIDBase}\n * @public\n */\nexport interface SendSalesOrderConfirmationEmailDto extends ImplementsIDBase {\n\tEmail?: string;\n}\n\n/**\n * Update the product on an order.\n * @public\n */\nexport interface UpdateProductOnOrderDto {\n\t/** The sales order ID. */\n\tSalesOrderID: number;\n\t/** The product ID. */\n\tProductID: number;\n}\n\nexport class Ordering {\n\t/**\n\t * @param {@link cef.store.api.ApproveSalesOrderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.ApproveSalesOrder\n\t * @path <API Root>/Ordering/SalesOrders/Approve\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tApproveSalesOrder = (routeParams: ApproveSalesOrderDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Ordering\", \"SalesOrders\", \"Approve\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStateExistsByDisplayName\n\t * @path <API Root>/Ordering/SalesOrderState/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderStateExistsByDisplayName = (routeParams?: CheckSalesOrderStateExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStateExistsByKey\n\t * @path <API Root>/Ordering/SalesOrderState/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderStateExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStateExistsByName\n\t * @path <API Root>/Ordering/SalesOrderState/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderStateExistsByName = (routeParams?: CheckSalesOrderStateExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStatusExistsByDisplayName\n\t * @path <API Root>/Ordering/SalesOrderStatus/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderStatusExistsByDisplayName = (routeParams?: CheckSalesOrderStatusExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStatusExistsByKey\n\t * @path <API Root>/Ordering/SalesOrderStatus/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderStatusExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderStatusExistsByName\n\t * @path <API Root>/Ordering/SalesOrderStatus/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderStatusExistsByName = (routeParams?: CheckSalesOrderStatusExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderTypeExistsByDisplayName\n\t * @path <API Root>/Ordering/SalesOrderType/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderTypeExistsByDisplayName = (routeParams?: CheckSalesOrderTypeExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderTypeExistsByKey\n\t * @path <API Root>/Ordering/SalesOrderType/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderTypeExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesOrderTypeExistsByName\n\t * @path <API Root>/Ordering/SalesOrderType/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesOrderTypeExistsByName = (routeParams?: CheckSalesOrderTypeExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Used by a doctor to claim an order\n\t * @param {@link cef.store.api.ClaimOrderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.ClaimOrder\n\t * @path <API Root>/Ordering/ClaimOrder/{ID}\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tClaimOrder = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Ordering\", \"ClaimOrder\", id].join(\"/\"));\n\n\t/**\n\t * @param {@link cef.store.api.DenySalesOrderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.DenySalesOrder\n\t * @path <API Root>/Ordering/SalesOrders/Deny\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDenySalesOrder = (routeParams: DenySalesOrderDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Ordering\", \"SalesOrders\", \"Deny\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Used to get all orders associated to a provider's account\n\t * @param {@link cef.store.api.GetAllOrdersForProviderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.GetAllOrdersForProvider\n\t * @path <API Root>/Ordering/CurrentProvider/GetAllOrders\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesOrderPagedResults>}\n\t * @public\n\t */\n\tGetAllOrdersForProvider = (routeParams?: GetAllOrdersForProviderDto): IHttpPromise<SalesOrderPagedResults> =>\n\t\taxios.post([\"Ordering\", \"CurrentProvider\", \"GetAllOrders\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Used to get all available orders associated to a provider's account\n\t * @generatedByCSharpType Clarity.Clients.MANGO.GetAvailableOrdersForProvider\n\t * @path <API Root>/Ordering/GetAvailableOrders\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AvailableOrdersPagedResults>}\n\t * @public\n\t */\n\tGetAvailableOrdersForProvider = (routeParams?: GetAvailableOrdersForProviderDto): IHttpPromise<AvailableOrdersPagedResults> =>\n\t\taxios.get([\"Ordering\", \"GetAvailableOrders\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get history of sales orders for the current account\n\t * @param {@link cef.store.api.GetCurrentAccountSalesOrdersDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountSalesOrders\n\t * @path <API Root>/Ordering/CurrentAccount/SalesOrders\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesOrderPagedResults>}\n\t * @public\n\t */\n\tGetCurrentAccountSalesOrders = (routeParams?: GetCurrentAccountSalesOrdersDto): IHttpPromise<SalesOrderPagedResults> =>\n\t\taxios.post([\"Ordering\", \"CurrentAccount\", \"SalesOrders\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of sales order for the current store\n\t * @param {@link cef.store.api.GetCurrentStoreSalesOrdersDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStoreSalesOrders\n\t * @path <API Root>/Ordering/CurrentStore/SalesOrders\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesOrderPagedResults>}\n\t * @public\n\t */\n\tGetCurrentStoreSalesOrders = (routeParams?: GetCurrentStoreSalesOrdersDto): IHttpPromise<SalesOrderPagedResults> =>\n\t\taxios.post([\"Ordering\", \"CurrentStore\", \"SalesOrders\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of sales order for the current user\n\t * @param {@link cef.store.api.GetCurrentUserSalesOrdersDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserSalesOrders\n\t * @path <API Root>/Ordering/CurrentUser/SalesOrders\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesOrderPagedResults>}\n\t * @public\n\t */\n\tGetCurrentUserSalesOrders = (routeParams?: GetCurrentUserSalesOrdersDto): IHttpPromise<SalesOrderPagedResults> =>\n\t\taxios.post([\"Ordering\", \"CurrentUser\", \"SalesOrders\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific sales order.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderByID\n\t * @path <API Root>/Ordering/SalesOrder/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesOrderModel>}\n\t * @public\n\t */\n\tGetSalesOrderByID = (id: number): IHttpPromise<SalesOrderModel> =>\n\t\taxios.get([\"Ordering\", \"SalesOrder\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales order events.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderEvents\n\t * @path <API Root>/Ordering/SalesOrderEvents\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesOrderEventPagedResults>}\n\t * @public\n\t */\n\tGetSalesOrderEvents = (routeParams?: GetSalesOrderEventsDto): IHttpPromise<SalesOrderEventPagedResults> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderEvents\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales order state.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStateByID\n\t * @path <API Root>/Ordering/SalesOrderState/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StateModel>}\n\t * @public\n\t */\n\tGetSalesOrderStateByID = (id: number): IHttpPromise<StateModel> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales order states.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStates\n\t * @path <API Root>/Ordering/SalesOrderStates\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesOrderStatePagedResults>}\n\t * @public\n\t */\n\tGetSalesOrderStates = (routeParams?: GetSalesOrderStatesDto): IHttpPromise<SalesOrderStatePagedResults> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderStates\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales order status.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStatusByID\n\t * @path <API Root>/Ordering/SalesOrderStatus/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StatusModel>}\n\t * @public\n\t */\n\tGetSalesOrderStatusByID = (id: number): IHttpPromise<StatusModel> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales order statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderStatuses\n\t * @path <API Root>/Ordering/SalesOrderStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesOrderStatusPagedResults>}\n\t * @public\n\t */\n\tGetSalesOrderStatuses = (routeParams?: GetSalesOrderStatusesDto): IHttpPromise<SalesOrderStatusPagedResults> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales order type.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderTypeByID\n\t * @path <API Root>/Ordering/SalesOrderType/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<TypeModel>}\n\t * @public\n\t */\n\tGetSalesOrderTypeByID = (id: number): IHttpPromise<TypeModel> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales order types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesOrderTypes\n\t * @path <API Root>/Ordering/SalesOrderTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesOrderTypePagedResults>}\n\t * @public\n\t */\n\tGetSalesOrderTypes = (routeParams?: GetSalesOrderTypesDto): IHttpPromise<SalesOrderTypePagedResults> =>\n\t\taxios.get([\"Ordering\", \"SalesOrderTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales order and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSecureSalesOrder\n\t * @path <API Root>/Ordering/SecureSalesOrder/{ID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<SalesOrderModel>}\n\t * @public\n\t */\n\tGetSecureSalesOrder = (id: number): IHttpPromise<SalesOrderModel> =>\n\t\taxios.get([\"Ordering\", \"SecureSalesOrder\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * View subscription to update. Get by subscriptionID.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionBySalesOrderID\n\t * @path <API Root>/Ordering/SalesOrder/Detail/Subscription\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SubscriptionModel>}\n\t * @public\n\t */\n\tGetSubscriptionBySalesOrderID = (routeParams?: GetSubscriptionBySalesOrderIDDto): IHttpPromise<SubscriptionModel> =>\n\t\taxios.get([\"Ordering\", \"SalesOrder\", \"Detail\", \"Subscription\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get all on-demand subscriptions.\n\t * @param {@link cef.store.api.GetSubscriptionHistoryBySubscriptionIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionHistoryBySubscriptionID\n\t * @path <API Root>/Ordering/SalesOrder/Detail/Subscription/History\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SubscriptionHistoryPagedResults>}\n\t * @public\n\t */\n\tGetSubscriptionHistoryBySubscriptionID = (routeParams: GetSubscriptionHistoryBySubscriptionIDDto): IHttpPromise<SubscriptionHistoryPagedResults> =>\n\t\taxios.post([\"Ordering\", \"SalesOrder\", \"Detail\", \"Subscription\", \"History\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Send an email with the sales order receipt.\n\t * @param {@link cef.store.api.SendSalesOrderConfirmationEmailDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SendSalesOrderConfirmationEmail\n\t * @path <API Root>/Ordering/SalesOrder/SendReceiptEmail\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSendSalesOrderConfirmationEmail = (routeParams?: SendSalesOrderConfirmationEmailDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Ordering\", \"SalesOrder\", \"SendReceiptEmail\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Used by a doctor to unclaim an order\n\t * @param {@link cef.store.api.UnclaimOrderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.UnclaimOrder\n\t * @path <API Root>/Ordering/UnclaimOrder/{ID}\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tUnclaimOrder = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Ordering\", \"UnclaimOrder\", id].join(\"/\"));\n\n\t/**\n\t * Update the product on an order.\n\t * @param {@link cef.store.api.UpdateProductOnOrderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.UpdateProductOnOrder\n\t * @path <API Root>/Ordering/SalesOrders/UpdateProductOnOrder\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tUpdateProductOnOrder = (routeParams: UpdateProductOnOrderDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Ordering\", \"SalesOrders\", \"UpdateProductOnOrder\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Payments.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsDisplayNameBase,\n\tImplementsNameBase,\n\tWalletModel,\n\tCreditModel,\n\tCreditPaymentModel,\n\tCreditSearchModel,\n\tCreditPagedResults,\n\tStatusSearchModel,\n\tCreditStatusPagedResults,\n\tStatusModel,\n\tSubscriptionSearchModel,\n\tSubscriptionPagedResults,\n\tPaymentMethodSearchModel,\n\tPaymentMethodPagedResults,\n\tPaymentStatusPagedResults,\n\tTypeSearchModel,\n\tPaymentTypePagedResults,\n\tRepeatTypeSearchModel,\n\tRepeatTypePagedResults,\n\tSalesInvoicePaymentSearchModel,\n\tPaymentPagedResults,\n\tSubscriptionModel,\n\tSubscriptionStatusPagedResults,\n\tSubscriptionTypeSearchModel,\n\tSubscriptionTypePagedResults,\n\tContactModel,\n\tApiKeyWebhookReturn,\n\tOrderEventWebhookReturn,\n\tOrderWebhookReturn,\n\tAccountWebhookReturn,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponse,\n\tCEFActionResponseT,\n\tDictionary,\n\tTransactionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not)\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckCreditStatusForStorefrontExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not)\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckCreditStatusForStorefrontExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to add an entry to the current user's wallet\n * @see {@link WalletModel}\n * @public\n */\nexport interface CreateCurrentUserWalletEntryDto extends WalletModel {\n}\n\n/**\n * Use to get credits for this Account\n * @see {@link CreditSearchModel}\n * @public\n */\nexport interface CreditsForCurrentAccountDto extends CreditSearchModel {\n}\n\n/**\n * Use to get credits for this Account (lite)\n * @see {@link CreditSearchModel}\n * @public\n */\nexport interface CreditsForCurrentAccountLiteDto extends CreditSearchModel {\n}\n\n/**\n * Used to get a list of the Variants associated to the Master product passed in and their pack size purchase options.\n * @public\n */\nexport interface DeactivateCurrentUserSubscriptionByIDDto {\n\tSubscriptionID: number;\n}\n\n/**\n * Use to get a list of credit statuses\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetCreditStatusesForStorefrontDto extends StatusSearchModel {\n}\n\n/**\n * Use to get subscriptions by Current User as a dropdown-appropriate listing.\n * @see {@link SubscriptionSearchModel}\n * @public\n */\nexport interface GetCurrentUserSubscriptionsDto extends SubscriptionSearchModel {\n}\n\n/**\n * Use to get a list of payment methods.\n * @see {@link PaymentMethodSearchModel}\n * @public\n */\nexport interface GetPaymentMethodsDto extends PaymentMethodSearchModel {\n}\n\n/**\n * Retrieve a payments provider authentication token.\n * @public\n */\nexport interface GetPaymentsProviderAuthenticationTokenDto {\n\tPaymentsProviderName: string;\n}\n\n/**\n * Use to get a list of payment statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetPaymentStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Retrieve a payments provider transaction report by id or date range.\n * @public\n */\nexport interface GetPaymentTransactionReportDto {\n\tStartDate?: Date;\n\tEndDate?: Date;\n\tTransactionID?: string;\n}\n\n/**\n * Use to get a list of payment types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetPaymentTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get a list of repeat types.\n * @see {@link RepeatTypeSearchModel}\n * @public\n */\nexport interface GetRepeatTypesDto extends RepeatTypeSearchModel {\n}\n\n/**\n * Use to get sales invoice payments for current account by invoice ID.\n * @see {@link SalesInvoicePaymentSearchModel}\n * @public\n */\nexport interface GetSalesInvoicePaymentsForCurrentAccountDto extends SalesInvoicePaymentSearchModel {\n\t/** Optional account identifier for user / account emulation. */\n\tAccountID?: number;\n}\n\n/**\n * Use to get a list of subscription statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetSubscriptionStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of subscription types.\n * @see {@link SubscriptionTypeSearchModel}\n * @public\n */\nexport interface GetSubscriptionTypesDto extends SubscriptionTypeSearchModel {\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface GetSurchargeForInvoicePaymentDto {\n\tBIN?: string;\n\tBillingContactID: number;\n\tInvoiceIDs?: Set<number>;\n\tWalletID?: number;\n\tTotalAmount: number;\n\tAmountsPerInvoice?: Dictionary<number>;\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface GetSurchargeForQuickInvoicePaymentDto {\n\tBIN?: string;\n\tBillingContact?: ContactModel;\n\tInvoiceIDs?: Set<number>;\n\tTotalAmount: number;\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface PayoneerOrderEventWebhookReturnDto {\n\tapi_key?: ApiKeyWebhookReturn; // Name format overridden\n\tevent?: OrderEventWebhookReturn; // Name format overridden\n\torder?: OrderWebhookReturn; // Name format overridden\n\taccount?: AccountWebhookReturn; // Name format overridden\n}\n\n/**\n * Use to update an entry in the current user's wallet\n * @see {@link WalletModel}\n * @public\n */\nexport interface UpdateCurrentUserWalletEntryDto extends WalletModel {\n}\n\n/**\n * Use to get all on-demand subscriptions.\n * @see {@link SubscriptionSearchModel}\n * @public\n */\nexport interface ViewOnDemandSubscriptionsDto extends SubscriptionSearchModel {\n\tUID: number;\n}\n\nexport class Payments {\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.AssignPayoneerAccountUserForCurrentStore\n\t * @path <API Root>/Payments/CurrentStore/AssignPayoneerAccountUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tAssignPayoneerAccountUserForCurrentStore = (): IHttpPromise<CEFActionResponse> =>\n\t\taxios.get([\"Payments\", \"CurrentStore\", \"AssignPayoneerAccountUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.AssignPayoneerAccountUserForCurrentUser\n\t * @path <API Root>/Payments/CurrentUser/AssignPayoneerAccountUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tAssignPayoneerAccountUserForCurrentUser = (): IHttpPromise<CEFActionResponse> =>\n\t\taxios.get([\"Payments\", \"CurrentUser\", \"AssignPayoneerAccountUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCreditStatusForStorefrontExistsByDisplayName\n\t * @path <API Root>/Payments/CreditStatusForStorefront/Exists/DisplayName\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCreditStatusForStorefrontExistsByDisplayName = (routeParams?: CheckCreditStatusForStorefrontExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCreditStatusForStorefrontExistsByKey\n\t * @path <API Root>/Payments/CreditStatusForStorefront/Exists/Key/{Key*}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCreditStatusForStorefrontExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckCreditStatusForStorefrontExistsByName\n\t * @path <API Root>/Payments/CreditStatusForStorefront/Exists/Name\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckCreditStatusForStorefrontExistsByName = (routeParams?: CheckCreditStatusForStorefrontExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * @param {@link cef.store.api.CreateAPayoneerAccountForCurrentStoreDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.CreateAPayoneerAccountForCurrentStore\n\t * @path <API Root>/Payments/CurrentStore/CreateAPayoneerAccount\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tCreateAPayoneerAccountForCurrentStore = (): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.post([\"Payments\", \"CurrentStore\", \"CreateAPayoneerAccount\"].join(\"/\"));\n\n\t/**\n\t * @param {@link cef.store.api.CreateAPayoneerAccountForCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.CreateAPayoneerAccountForCurrentUser\n\t * @path <API Root>/Payments/CurrentUser/CreateAPayoneerAccount\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tCreateAPayoneerAccountForCurrentUser = (): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.post([\"Payments\", \"CurrentUser\", \"CreateAPayoneerAccount\"].join(\"/\"));\n\n\t/**\n\t * Use to add an entry to the current user's wallet\n\t * @param {@link cef.store.api.CreateCurrentUserWalletEntryDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateCurrentUserWalletEntry\n\t * @path <API Root>/Payments/Wallet/CurrentUser/Entry/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<WalletModel>>}\n\t * @public\n\t */\n\tCreateCurrentUserWalletEntry = (routeParams?: CreateCurrentUserWalletEntryDto): IHttpPromise<CEFActionResponseT<WalletModel>> =>\n\t\taxios.post([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific credit and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreditForCurrentAccount\n\t * @path <API Root>/Payments/Credit/CreditForCurrentAccount/{ID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CreditModel>}\n\t * @public\n\t */\n\tCreditForCurrentAccount = (id: number): IHttpPromise<CreditModel> =>\n\t\taxios.get([\"Payments\", \"Credit\", \"CreditForCurrentAccount\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a set of payments for a specific credit and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreditPaymentsForCurrentAccount\n\t * @path <API Root>/Payments/Credit/CreditPaymentsForCurrentAccount/{ID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<Array<CreditPaymentModel>>}\n\t * @public\n\t */\n\tCreditPaymentsForCurrentAccount = (id: number): IHttpPromise<Array<CreditPaymentModel>> =>\n\t\taxios.get([\"Payments\", \"Credit\", \"CreditPaymentsForCurrentAccount\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get credits for this Account\n\t * @param {@link cef.store.api.CreditsForCurrentAccountDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreditsForCurrentAccount\n\t * @path <API Root>/Payments/Credit/CreditsForCurrentAccount\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CreditPagedResults>}\n\t * @public\n\t */\n\tCreditsForCurrentAccount = (routeParams?: CreditsForCurrentAccountDto): IHttpPromise<CreditPagedResults> =>\n\t\taxios.post([\"Payments\", \"Credit\", \"CreditsForCurrentAccount\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get credits for this Account (lite)\n\t * @param {@link cef.store.api.CreditsForCurrentAccountLiteDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreditsForCurrentAccountLite\n\t * @path <API Root>/Payments/Credit/CreditsForCurrentAccountLite\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CreditPagedResults>}\n\t * @public\n\t */\n\tCreditsForCurrentAccountLite = (routeParams?: CreditsForCurrentAccountLiteDto): IHttpPromise<CreditPagedResults> =>\n\t\taxios.post([\"Payments\", \"Credit\", \"CreditsForCurrentAccountLite\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to deactivate a specific entry in the current user's wallet\n\t * @param {@link cef.store.api.CurrentUserMarkWalletEntryAsDefaultDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentUserMarkWalletEntryAsDefault\n\t * @path <API Root>/Payments/Wallet/CurrentUser/Entry/SetAsDefault/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentUserMarkWalletEntryAsDefault = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"SetAsDefault\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Used to get a list of the Variants associated to the Master product passed in and their pack size purchase options.\n\t * @param {@link cef.store.api.DeactivateCurrentUserSubscriptionByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.DeactivateCurrentUserSubscriptionByID\n\t * @path <API Root>/Payments/Subscription/DeactivateCurrentUserSubscription\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeactivateCurrentUserSubscriptionByID = (routeParams: DeactivateCurrentUserSubscriptionByIDDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Payments\", \"Subscription\", \"DeactivateCurrentUserSubscription\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to deactivate a specific entry in the current user's wallet\n\t * @param {@link cef.store.api.DeactivateCurrentUserWalletEntryDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeactivateCurrentUserWalletEntry\n\t * @path <API Root>/Payments/Wallet/CurrentUser/Entry/Deactivate/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeactivateCurrentUserWalletEntry = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"Deactivate\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLForBuyerToSetUpPaymentAccounts\n\t * @path <API Root>/Payments/CurrentStore/GetPayoneerAuthedURLForBuyerToSetUpPaymentAccounts\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tGetAuthedURLForBuyerToSetUpPaymentAccounts = (): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.get([\"Payments\", \"CurrentStore\", \"GetPayoneerAuthedURLForBuyerToSetUpPaymentAccounts\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder\n\t * @path <API Root>/Payments/GetPayoneerAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder/OrderID/{OrderID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tGetAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder = (orderID: number): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.get([\"Payments\", \"GetPayoneerAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder\", \"OrderID\", orderID].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLForStoreOwnerToSetUpPayoutAccountsForCurrentStore\n\t * @path <API Root>/Payments/CurrentStore/GetPayoneerAuthedURLForStoreOwnerToSetUpPayoutAccounts\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tGetAuthedURLForStoreOwnerToSetUpPayoutAccountsForCurrentStore = (): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.get([\"Payments\", \"CurrentStore\", \"GetPayoneerAuthedURLForStoreOwnerToSetUpPayoutAccounts\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetAuthedURLToReleaseFundsForEscrowOrder\n\t * @path <API Root>/Payments/GetPayoneerAuthedURLToReleaseFundsForEscrowOrder/OrderID/{OrderID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tGetAuthedURLToReleaseFundsForEscrowOrder = (orderID: number): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.get([\"Payments\", \"GetPayoneerAuthedURLToReleaseFundsForEscrowOrder\", \"OrderID\", orderID].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of credit statuses\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCreditStatusesForStorefront\n\t * @path <API Root>/Payments/CreditStatusesForStorefront\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CreditStatusPagedResults>}\n\t * @public\n\t */\n\tGetCreditStatusesForStorefront = (routeParams?: GetCreditStatusesForStorefrontDto): IHttpPromise<CreditStatusPagedResults> =>\n\t\taxios.get([\"Payments\", \"CreditStatusesForStorefront\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific credit status\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCreditStatusForStorefrontByID\n\t * @path <API Root>/Payments/CreditStatusForStorefront/ID/{ID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<StatusModel>}\n\t * @public\n\t */\n\tGetCreditStatusForStorefrontByID = (id: number): IHttpPromise<StatusModel> =>\n\t\taxios.get([\"Payments\", \"CreditStatusForStorefront\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get subscriptions by Current User as a dropdown-appropriate listing.\n\t * @param {@link cef.store.api.GetCurrentUserSubscriptionsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserSubscriptions\n\t * @path <API Root>/Payments/CurrentUser/Subscriptions\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SubscriptionPagedResults>}\n\t * @public\n\t */\n\tGetCurrentUserSubscriptions = (routeParams?: GetCurrentUserSubscriptionsDto): IHttpPromise<SubscriptionPagedResults> =>\n\t\taxios.post([\"Payments\", \"CurrentUser\", \"Subscriptions\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get the wallet for the current user\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserWallet\n\t * @path <API Root>/Payments/Wallet/CurrentUser/List\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<WalletModel>>>}\n\t * @public\n\t */\n\tGetCurrentUserWallet = (): IHttpPromise<CEFActionResponseT<Array<WalletModel>>> =>\n\t\taxios.get([\"Payments\", \"Wallet\", \"CurrentUser\", \"List\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get an entry from the current user's wallet\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserWalletEntryByID\n\t * @path <API Root>/Payments/Wallet/CurrentUser/Entry/ByID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<WalletModel>>}\n\t * @public\n\t */\n\tGetCurrentUserWalletEntryByID = (id: number): IHttpPromise<CEFActionResponseT<WalletModel>> =>\n\t\taxios.get([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"ByID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @param {@link cef.store.api.GetPaymentInstructionsUrlForEscrowOrderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.GetPaymentInstructionsUrlForEscrowOrder\n\t * @path <API Root>/Payments/GetPaymentInstructionsUrlForEscrowOrder/{OrderID}/{PayoneerAccountID}/{PayoneerCustomerID}\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tGetPaymentInstructionsUrlForEscrowOrder = (orderID: number, payoneerAccountID: number, payoneerCustomerID: number): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.post([\"Payments\", \"GetPaymentInstructionsUrlForEscrowOrder\", orderID, payoneerAccountID, payoneerCustomerID].join(\"/\"));\n\n\t/**\n\t * Use to get a list of payment methods.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentMethods\n\t * @path <API Root>/Payments/PaymentMethods\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PaymentMethodPagedResults>}\n\t * @public\n\t */\n\tGetPaymentMethods = (routeParams?: GetPaymentMethodsDto): IHttpPromise<PaymentMethodPagedResults> =>\n\t\taxios.get([\"Payments\", \"PaymentMethods\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Retrieve a payments provider authentication token.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentsProviderAuthenticationToken\n\t * @path <API Root>/Payments/GetPaymentsProviderAuthenticationToken\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<string>>}\n\t * @public\n\t */\n\tGetPaymentsProviderAuthenticationToken = (routeParams: GetPaymentsProviderAuthenticationTokenDto): IHttpPromise<CEFActionResponseT<string>> =>\n\t\taxios.get([\"Payments\", \"GetPaymentsProviderAuthenticationToken\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of payment statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentStatuses\n\t * @path <API Root>/Payments/PaymentStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PaymentStatusPagedResults>}\n\t * @public\n\t */\n\tGetPaymentStatuses = (routeParams?: GetPaymentStatusesDto): IHttpPromise<PaymentStatusPagedResults> =>\n\t\taxios.get([\"Payments\", \"PaymentStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Retrieve a payments provider transaction report by id or date range.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentTransactionReport\n\t * @path <API Root>/Payments/GetPaymentTransactionsReport\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<TransactionResponse>>}\n\t * @public\n\t */\n\tGetPaymentTransactionReport = (routeParams?: GetPaymentTransactionReportDto): IHttpPromise<CEFActionResponseT<TransactionResponse>> =>\n\t\taxios.get([\"Payments\", \"GetPaymentTransactionsReport\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of payment types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPaymentTypes\n\t * @path <API Root>/Payments/PaymentTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PaymentTypePagedResults>}\n\t * @public\n\t */\n\tGetPaymentTypes = (routeParams?: GetPaymentTypesDto): IHttpPromise<PaymentTypePagedResults> =>\n\t\taxios.get([\"Payments\", \"PaymentTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of repeat types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRepeatTypes\n\t * @path <API Root>/Payments/RepeatTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<RepeatTypePagedResults>}\n\t * @public\n\t */\n\tGetRepeatTypes = (routeParams?: GetRepeatTypesDto): IHttpPromise<RepeatTypePagedResults> =>\n\t\taxios.get([\"Payments\", \"RepeatTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get sales invoice payments for current account by invoice ID.\n\t * @param {@link cef.store.api.GetSalesInvoicePaymentsForCurrentAccountDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesInvoicePaymentsForCurrentAccount\n\t * @path <API Root>/Payments/CurrentAccount/SalesInvoicePayments\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<PaymentPagedResults>}\n\t * @public\n\t */\n\tGetSalesInvoicePaymentsForCurrentAccount = (routeParams?: GetSalesInvoicePaymentsForCurrentAccountDto): IHttpPromise<PaymentPagedResults> =>\n\t\taxios.post([\"Payments\", \"CurrentAccount\", \"SalesInvoicePayments\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific subscription.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionByID\n\t * @path <API Root>/Payments/Subscription/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SubscriptionModel>}\n\t * @public\n\t */\n\tGetSubscriptionByID = (id: number): IHttpPromise<SubscriptionModel> =>\n\t\taxios.get([\"Payments\", \"Subscription\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of subscription statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionStatuses\n\t * @path <API Root>/Payments/SubscriptionStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SubscriptionStatusPagedResults>}\n\t * @public\n\t */\n\tGetSubscriptionStatuses = (routeParams?: GetSubscriptionStatusesDto): IHttpPromise<SubscriptionStatusPagedResults> =>\n\t\taxios.get([\"Payments\", \"SubscriptionStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of subscription types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSubscriptionTypes\n\t * @path <API Root>/Payments/SubscriptionTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SubscriptionTypePagedResults>}\n\t * @public\n\t */\n\tGetSubscriptionTypes = (routeParams?: GetSubscriptionTypesDto): IHttpPromise<SubscriptionTypePagedResults> =>\n\t\taxios.get([\"Payments\", \"SubscriptionTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * @param {@link cef.store.api.GetSurchargeForInvoicePaymentDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Surcharges.GetSurchargeForInvoicePayment\n\t * @path <API Root>/Payments/SurchargeForInvoices\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tGetSurchargeForInvoicePayment = (routeParams: GetSurchargeForInvoicePaymentDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Payments\", \"SurchargeForInvoices\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @param {@link cef.store.api.GetSurchargeForQuickInvoicePaymentDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Surcharges.GetSurchargeForQuickInvoicePayment\n\t * @path <API Root>/Payments/SurchargeForQuickInvoices\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tGetSurchargeForQuickInvoicePayment = (routeParams: GetSurchargeForQuickInvoicePaymentDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Payments\", \"SurchargeForQuickInvoices\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @param {@link cef.store.api.PayoneerOrderEventWebhookReturnDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Payoneer.PayoneerOrderEventWebhookReturn\n\t * @path <API Root>/Payments/Payoneer/OrderEventWebhooks\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<void>}\n\t * @public\n\t */\n\tPayoneerOrderEventWebhookReturn = (routeParams?: PayoneerOrderEventWebhookReturnDto): IHttpPromise<void> =>\n\t\taxios.post([\"Payments\", \"Payoneer\", \"OrderEventWebhooks\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get all on-demand subscriptions.\n\t * @param {@link cef.store.api.RefillOnDemandSubscriptionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RefillOnDemandSubscription\n\t * @path <API Root>/Payments/CurrentUser/Subscriptions/OnDemand/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRefillOnDemandSubscription = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Payments\", \"CurrentUser\", \"Subscriptions\", \"OnDemand\", id].join(\"/\"));\n\n\t/**\n\t * Use to update an entry in the current user's wallet\n\t * @param {@link cef.store.api.UpdateCurrentUserWalletEntryDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCurrentUserWalletEntry\n\t * @path <API Root>/Payments/Wallet/CurrentUser/Entry/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<WalletModel>>}\n\t * @public\n\t */\n\tUpdateCurrentUserWalletEntry = (routeParams?: UpdateCurrentUserWalletEntryDto): IHttpPromise<CEFActionResponseT<WalletModel>> =>\n\t\taxios.put([\"Payments\", \"Wallet\", \"CurrentUser\", \"Entry\", \"Update\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get all on-demand subscriptions.\n\t * @param {@link cef.store.api.ViewOnDemandSubscriptionsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ViewOnDemandSubscriptions\n\t * @path <API Root>/Payments/CurrentUser/Subscriptions/OnDemand\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SubscriptionPagedResults>}\n\t * @public\n\t */\n\tViewOnDemandSubscriptions = (routeParams: ViewOnDemandSubscriptionsDto): IHttpPromise<SubscriptionPagedResults> =>\n\t\taxios.post([\"Payments\", \"CurrentUser\", \"Subscriptions\", \"OnDemand\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Prescriptions.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tCEFActionResponse,\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to cancel and existing prescription.\n * @public\n */\nexport interface CancelExistingPrescriptionDto {\n\tPrescriptionID: number;\n}\n\nexport class Prescriptions {\n\t/**\n\t * Use to cancel and existing prescription.\n\t * @param {@link cef.store.api.CancelExistingPrescriptionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.CancelExistingPrescription\n\t * @path <API Root>/Prescriptions/CancelPrescription\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCancelExistingPrescription = (routeParams: CancelExistingPrescriptionDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Prescriptions\", \"CancelPrescription\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Creates a prescription for a patient.\n\t * @param {@link cef.store.api.GenerateEPIQPrescriptionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Prescriptions.EPIQ.GenerateEPIQPrescription\n\t * @path <API Root>/Prescriptions/EPIQ/GeneratePrescription\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tGenerateEPIQPrescription = (): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Prescriptions\", \"EPIQ\", \"GeneratePrescription\"].join(\"/\"));\n}\n","/**\n * @file _api/cvApi.Pricing.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tCalculatedPrice,\n\tPriceRuleModel,\n\tPricePointSearchModel,\n\tPricePointPagedResults,\n\tPriceRuleSearchModel,\n\tPriceRulePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tDictionary,\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Calculate the prices for multiple products by IDs.\n * @public\n */\nexport interface CalculatePricesForProductsDto {\n\tProductIDs: Array<number>;\n}\n\n/**\n * Use to create a new price rule.\n * @see {@link PriceRuleModel}\n * @public\n */\nexport interface CreatePriceRuleDto extends PriceRuleModel {\n}\n\n/**\n * Use to get a list of price points.\n * @see {@link PricePointSearchModel}\n * @public\n */\nexport interface GetPricePointsDto extends PricePointSearchModel {\n}\n\n/**\n * Use to get a list of price rules.\n * @see {@link PriceRuleSearchModel}\n * @public\n */\nexport interface GetPriceRulesDto extends PriceRuleSearchModel {\n}\n\n/**\n * Use to update an existing price rule.\n * @see {@link PriceRuleModel}\n * @public\n */\nexport interface UpdatePriceRuleDto extends PriceRuleModel {\n}\n\nexport class Pricing {\n\t/**\n\t * Calculate the price for a product by ID.\n\t * @param {@link cef.store.api.CalculatePricesForProductDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CalculatePricesForProduct\n\t * @path <API Root>/Pricing/Prices/ForProduct/{ProductID}/Quantity/{Quantity}\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<CalculatedPrice>>}\n\t * @public\n\t */\n\tCalculatePricesForProduct = (productID: number, quantity: number): IHttpPromise<CEFActionResponseT<CalculatedPrice>> =>\n\t\taxios.post([\"Pricing\", \"Prices\", \"ForProduct\", productID, \"Quantity\", quantity].join(\"/\"));\n\n\t/**\n\t * Calculate the prices for multiple products by IDs.\n\t * @param {@link cef.store.api.CalculatePricesForProductsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CalculatePricesForProducts\n\t * @path <API Root>/Pricing/Prices/ForProducts\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<cefalt.store.Dictionary<CalculatedPrice>>>}\n\t * @public\n\t */\n\tCalculatePricesForProducts = (routeParams: CalculatePricesForProductsDto): IHttpPromise<CEFActionResponseT<Dictionary<CalculatedPrice>>> =>\n\t\taxios.post([\"Pricing\", \"Prices\", \"ForProducts\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to create a new price rule.\n\t * @param {@link cef.store.api.CreatePriceRuleDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreatePriceRule\n\t * @path <API Root>/Pricing/PriceRule/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreatePriceRule = (routeParams?: CreatePriceRuleDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Pricing\", \"PriceRule\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Removes a specific price rule from the system [Hard-Delete].\n\t * @param {@link cef.store.api.DeletePriceRuleByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeletePriceRuleByID\n\t * @path <API Root>/Pricing/PriceRule/Delete/ID/{ID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeletePriceRuleByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Pricing\", \"PriceRule\", \"Delete\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Use to get a list of price points.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPricePoints\n\t * @path <API Root>/Pricing/PricePoints\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PricePointPagedResults>}\n\t * @public\n\t */\n\tGetPricePoints = (routeParams?: GetPricePointsDto): IHttpPromise<PricePointPagedResults> =>\n\t\taxios.get([\"Pricing\", \"PricePoints\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific price rule.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPriceRuleByID\n\t * @path <API Root>/Pricing/PriceRule/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PriceRuleModel>}\n\t * @public\n\t */\n\tGetPriceRuleByID = (id: number): IHttpPromise<PriceRuleModel> =>\n\t\taxios.get([\"Pricing\", \"PriceRule\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of price rules.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPriceRules\n\t * @path <API Root>/Pricing/PriceRules\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PriceRulePagedResults>}\n\t * @public\n\t */\n\tGetPriceRules = (routeParams?: GetPriceRulesDto): IHttpPromise<PriceRulePagedResults> =>\n\t\taxios.get([\"Pricing\", \"PriceRules\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to update an existing price rule.\n\t * @param {@link cef.store.api.UpdatePriceRuleDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdatePriceRule\n\t * @path <API Root>/Pricing/PriceRule/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdatePriceRule = (routeParams?: UpdatePriceRuleDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Pricing\", \"PriceRule\", \"Update\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Products.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tImplementsSeoUrlBase,\n\tGetPackSizesVariantDTO,\n\tProductModel,\n\tCategoryModel,\n\tTypeSearchModel,\n\tProductAssociationTypePagedResults,\n\tImplementsIDBase,\n\tImplementsKeyBase,\n\tProductDownloadTypePagedResults,\n\tProductImageSearchModel,\n\tProductImagePagedResults,\n\tProductImageTypePagedResults,\n\tProductInventoryLocationSectionSearchModel,\n\tProductInventoryLocationSectionPagedResults,\n\tSerializableAttributesDictionary,\n\tProductReviewInformationModel,\n\tProductSearchModel,\n\tProductPagedResults,\n\tQuickOrderFormProductsModel,\n\tPreviouslyOrderedProductPagedResults,\n\tStatusSearchModel,\n\tProductStatusPagedResults,\n\tProductTypePagedResults,\n\tImportResponse,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tKeyValuePair,\n\tDictionary,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckProductExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this SEO URL exists and return the id if it does (null if it does not).\n * @see {@link ImplementsSeoUrlBase}\n * @public\n */\nexport interface CheckProductExistsBySeoUrlDto extends ImplementsSeoUrlBase {\n}\n\n/**\n * Used to get a list of the Variants associated to the Master product passed in and their pack size purchase options.\n * @public\n */\nexport interface GetAllPackSizesForPurchaseOptionDto {\n\tSelectedProductID: number;\n}\n\n/**\n * Use to get best selling products in the system\n * @public\n */\nexport interface GetBestSellersProductsDto {\n\t/** Count of Products to Pull */\n\tCount: number;\n\t/** Number of days back from today to use for calculations */\n\tDays: number;\n\tCategorySeoUrl?: string;\n}\n\n/**\n * Used to get the one-time variant from any product ID.\n * @public\n */\nexport interface GetOneTimeVariantFromAnyProductIDDto {\n\tProductID: number;\n}\n\n/**\n * Use to get a list of product association types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetProductAssociationTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get a specific product.\n * @see {@link ImplementsIDBase}\n * @public\n */\nexport interface GetProductByIDDto extends ImplementsIDBase {\n\t/** The store the user has selected if present */\n\tStoreID?: number;\n\t/** The brand the user has selected if present */\n\tBrandID?: number;\n\t/** A flag indicating that this is a vendor admin request. This can only be set by the server. */\n\tIsVendorAdmin?: boolean;\n\t/** The identifier of the vendor which is logged in. This can only be set by the server. */\n\tVendorAdminID?: number;\n\t/** The identifier of the preview version to load. */\n\tPreviewID?: number;\n}\n\n/**\n * Use to get a specific product by the key.\n * @see {@link ImplementsKeyBase}\n * @public\n */\nexport interface GetProductByKeyDto extends ImplementsKeyBase {\n\t/** The store the user has selected if present */\n\tStoreID?: number;\n\t/** The brand the user has selected if present */\n\tBrandID?: number;\n\t/** A flag indicating that this is a vendor admin request. This can only be set by the server. */\n\tIsVendorAdmin?: boolean;\n\t/** The identifier of the vendor which is logged in. This can only be set by the server. */\n\tVendorAdminID?: number;\n}\n\n/**\n * Use to get a list of product download types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetProductDownloadTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get a list of product images.\n * @see {@link ProductImageSearchModel}\n * @public\n */\nexport interface GetProductImagesDto extends ProductImageSearchModel {\n}\n\n/**\n * Use to get a list of product image types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetProductImageTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get a list of product inventory location sections.\n * @see {@link ProductInventoryLocationSectionSearchModel}\n * @public\n */\nexport interface GetProductInventoryLocationSectionsDto extends ProductInventoryLocationSectionSearchModel {\n}\n\n/**\n * Get Product Metadata By SEO URL.\n * @public\n */\nexport interface GetProductMetadataByURLDto {\n\t/** The SEO URL to perform the lookup with */\n\tSeoUrl: string;\n}\n\n/**\n * Get product reviews summary information for a set of products\n * @public\n */\nexport interface GetProductReviewsDto {\n\ti?: Array<number>;\n}\n\n/**\n * Use to get a list of products.\n * @see {@link ProductSearchModel}\n * @public\n */\nexport interface GetProductsDto extends ProductSearchModel {\n}\n\n/**\n * GET Product By category\n * @public\n */\nexport interface GetProductsByCategoryDto {\n\t/** Product type ID */\n\tProductTypeIDs: Array<number>;\n}\n\n/**\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.\n * @public\n */\nexport interface GetProductsByIDsDto {\n\t/** The store the user has selected if present */\n\tStoreID?: number;\n\t/** The brand the user has selected if present */\n\tBrandID?: number;\n\t/** A flag indicating that this is a vendor admin request. This can only be set by the server. */\n\tIsVendorAdmin?: boolean;\n\t/** The identifier of the vendor which is logged in. This can only be set by the server. */\n\tVendorAdminID?: number;\n\t/** The identifiers of products to read out */\n\ti: Array<number>;\n}\n\n/**\n * GET Product By category\n * @see {@link ProductSearchModel}\n * @public\n */\nexport interface GetProductsByPreviouslyOrderedDto extends ProductSearchModel {\n}\n\n/**\n * Use to get a list of products (for the current store only)\n * @see {@link ProductSearchModel}\n * @public\n */\nexport interface GetProductsForCurrentStoreDto extends ProductSearchModel {\n}\n\n/**\n * Use to get a list of product statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetProductStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of product types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetProductTypesDto extends TypeSearchModel {\n}\n\n/**\n * Imports product records.\n * @public\n */\nexport interface ImportProductsDto {\n\tFile?: string;\n\tMap?: Dictionary<Array<string>>;\n}\n\n/**\n * Used to get a list of the associated replacement products\n * @public\n */\nexport interface ReplacementProductsDto {\n\tProductID: number;\n}\n\nexport class Products {\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsByID\n\t * @path <API Root>/Products/Product/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckProductExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsByKey\n\t * @path <API Root>/Products/Product/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckProductExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsByName\n\t * @path <API Root>/Products/Product/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckProductExistsByName = (routeParams?: CheckProductExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this SEO URL exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckProductExistsBySeoUrl\n\t * @path <API Root>/Products/Product/Exists/SeoUrl\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckProductExistsBySeoUrl = (routeParams?: CheckProductExistsBySeoUrlDto): IHttpPromise<number> =>\n\t\taxios.get([\"Products\", \"Product\", \"Exists\", \"SeoUrl\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Used to get a list of the Variants associated to the Master product passed in and their pack size purchase options.\n\t * @param {@link cef.store.api.GetAllPackSizesForPurchaseOptionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.GetAllPackSizesForPurchaseOption\n\t * @path <API Root>/Products/Product/GetAllPackSizes\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<GetPackSizesVariantDTO>>>}\n\t * @public\n\t */\n\tGetAllPackSizesForPurchaseOption = (routeParams: GetAllPackSizesForPurchaseOptionDto): IHttpPromise<CEFActionResponseT<Array<GetPackSizesVariantDTO>>> =>\n\t\taxios.post([\"Products\", \"Product\", \"GetAllPackSizes\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get best selling products in the system\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetBestSellersProducts\n\t * @path <API Root>/Products/BestSellers\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<ProductModel>>}\n\t * @public\n\t */\n\tGetBestSellersProducts = (routeParams: GetBestSellersProductsDto): IHttpPromise<Array<ProductModel>> =>\n\t\taxios.get([\"Products\", \"BestSellers\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Used to get the one-time variant from any product ID.\n\t * @param {@link cef.store.api.GetOneTimeVariantFromAnyProductIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.GetOneTimeVariantFromAnyProductID\n\t * @path <API Root>/Products/Product/GetOneTimeVariantFromAnyProductID\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<ProductModel>>}\n\t * @public\n\t */\n\tGetOneTimeVariantFromAnyProductID = (routeParams: GetOneTimeVariantFromAnyProductIDDto): IHttpPromise<CEFActionResponseT<ProductModel>> =>\n\t\taxios.post([\"Products\", \"Product\", \"GetOneTimeVariantFromAnyProductID\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPersonalizationProductsForCurrentUser\n\t * @path <API Root>/Products/Personalization/ForCurrentUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<ProductModel>>}\n\t * @public\n\t */\n\tGetPersonalizationProductsForCurrentUser = (): IHttpPromise<Array<ProductModel>> =>\n\t\taxios.get([\"Products\", \"Personalization\", \"ForCurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPersonalizedCategoryAndProductFeedForCurrentUser\n\t * @path <API Root>/Products/Personalization/Feed/ForCurrentUser\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<KeyValuePair<CategoryModel,Array<ProductModel>>>>}\n\t * @public\n\t */\n\tGetPersonalizedCategoryAndProductFeedForCurrentUser = (): IHttpPromise<Array<KeyValuePair<CategoryModel,Array<ProductModel>>>> =>\n\t\taxios.get([\"Products\", \"Personalization\", \"Feed\", \"ForCurrentUser\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of product association types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductAssociationTypes\n\t * @path <API Root>/Products/ProductAssociationTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductAssociationTypePagedResults>}\n\t * @public\n\t */\n\tGetProductAssociationTypes = (routeParams?: GetProductAssociationTypesDto): IHttpPromise<ProductAssociationTypePagedResults> =>\n\t\taxios.get([\"Products\", \"ProductAssociationTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific product.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductByID\n\t * @path <API Root>/Products/Product/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductModel>}\n\t * @public\n\t */\n\tGetProductByID = (id: number, routeParams?: GetProductByIDDto): IHttpPromise<ProductModel> =>\n\t\taxios.get([\"Products\", \"Product\", \"ID\", id].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific product by the key.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductByKey\n\t * @path <API Root>/Products/Product/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductModel>}\n\t * @public\n\t */\n\tGetProductByKey = (key: string, routeParams?: GetProductByKeyDto): IHttpPromise<ProductModel> =>\n\t\taxios.get([\"Products\", \"Product\", \"Key\", encodeURIComponent(key)].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of product download types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductDownloadTypes\n\t * @path <API Root>/Products/ProductDownloadTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductDownloadTypePagedResults>}\n\t * @public\n\t */\n\tGetProductDownloadTypes = (routeParams?: GetProductDownloadTypesDto): IHttpPromise<ProductDownloadTypePagedResults> =>\n\t\taxios.get([\"Products\", \"ProductDownloadTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of product images.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductImages\n\t * @path <API Root>/Products/ProductImages\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductImagePagedResults>}\n\t * @public\n\t */\n\tGetProductImages = (routeParams?: GetProductImagesDto): IHttpPromise<ProductImagePagedResults> =>\n\t\taxios.get([\"Products\", \"ProductImages\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of product image types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductImageTypes\n\t * @path <API Root>/Products/ProductImageTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductImageTypePagedResults>}\n\t * @public\n\t */\n\tGetProductImageTypes = (routeParams?: GetProductImageTypesDto): IHttpPromise<ProductImageTypePagedResults> =>\n\t\taxios.get([\"Products\", \"ProductImageTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of product inventory location sections.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductInventoryLocationSections\n\t * @path <API Root>/Products/ProductInventoryLocationSections\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductInventoryLocationSectionPagedResults>}\n\t * @public\n\t */\n\tGetProductInventoryLocationSections = (routeParams?: GetProductInventoryLocationSectionsDto): IHttpPromise<ProductInventoryLocationSectionPagedResults> =>\n\t\taxios.get([\"Products\", \"ProductInventoryLocationSections\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Gets the importable keys for Products.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductKeys\n\t * @path <API Root>/Products/Product/Keys\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<cefalt.store.Dictionary<Array<string>>>}\n\t * @public\n\t */\n\tGetProductKeys = (): IHttpPromise<Dictionary<Array<string>>> =>\n\t\taxios.get([\"Products\", \"Product\", \"Keys\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Get Product Metadata By SEO URL.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductMetadataByURL\n\t * @path <API Root>/Products/Product/URL/Metadata\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SerializableAttributesDictionary>}\n\t * @public\n\t */\n\tGetProductMetadataByURL = (routeParams: GetProductMetadataByURLDto): IHttpPromise<SerializableAttributesDictionary> =>\n\t\taxios.get([\"Products\", \"Product\", \"URL\", \"Metadata\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Get product reviews summary information\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductReview\n\t * @path <API Root>/Products/ReviewSummary/ByProductID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductReviewInformationModel>}\n\t * @public\n\t */\n\tGetProductReview = (id: number): IHttpPromise<ProductReviewInformationModel> =>\n\t\taxios.get([\"Products\", \"ReviewSummary\", \"ByProductID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Get product reviews summary information for a set of products\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductReviews\n\t * @path <API Root>/Products/ReviewSummary/ByProductIDs\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<ProductReviewInformationModel>>}\n\t * @public\n\t */\n\tGetProductReviews = (routeParams?: GetProductReviewsDto): IHttpPromise<Array<ProductReviewInformationModel>> =>\n\t\taxios.get([\"Products\", \"ReviewSummary\", \"ByProductIDs\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of products.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProducts\n\t * @path <API Root>/Products/Products\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductPagedResults>}\n\t * @public\n\t */\n\tGetProducts = (routeParams?: GetProductsDto): IHttpPromise<ProductPagedResults> =>\n\t\taxios.get([\"Products\", \"Products\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * GET Product By category\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsByCategory\n\t * @path <API Root>/Products/GetProductsByCategory\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<QuickOrderFormProductsModel>}\n\t * @public\n\t */\n\tGetProductsByCategory = (routeParams: GetProductsByCategoryDto): IHttpPromise<QuickOrderFormProductsModel> =>\n\t\taxios.get([\"Products\", \"GetProductsByCategory\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\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.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsByIDs\n\t * @path <API Root>/Products/Products/ByIDs\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<ProductModel>>}\n\t * @public\n\t */\n\tGetProductsByIDs = (routeParams: GetProductsByIDsDto): IHttpPromise<Array<ProductModel>> =>\n\t\taxios.get([\"Products\", \"Products\", \"ByIDs\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * GET Product By category\n\t * @param {@link cef.store.api.GetProductsByPreviouslyOrderedDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsByPreviouslyOrdered\n\t * @path <API Root>/Products/GetProductsByPreviouslyOrdered\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<PreviouslyOrderedProductPagedResults>}\n\t * @public\n\t */\n\tGetProductsByPreviouslyOrdered = (routeParams?: GetProductsByPreviouslyOrderedDto): IHttpPromise<PreviouslyOrderedProductPagedResults> =>\n\t\taxios.post([\"Products\", \"GetProductsByPreviouslyOrdered\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of products (for the current store only)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductsForCurrentStore\n\t * @path <API Root>/Products/CurrentStore/Products\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<ProductPagedResults>}\n\t * @public\n\t */\n\tGetProductsForCurrentStore = (routeParams?: GetProductsForCurrentStoreDto): IHttpPromise<ProductPagedResults> =>\n\t\taxios.get([\"Products\", \"CurrentStore\", \"Products\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of product statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductStatuses\n\t * @path <API Root>/Products/ProductStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductStatusPagedResults>}\n\t * @public\n\t */\n\tGetProductStatuses = (routeParams?: GetProductStatusesDto): IHttpPromise<ProductStatusPagedResults> =>\n\t\taxios.get([\"Products\", \"ProductStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of product types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetProductTypes\n\t * @path <API Root>/Products/ProductTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductTypePagedResults>}\n\t * @public\n\t */\n\tGetProductTypes = (routeParams?: GetProductTypesDto): IHttpPromise<ProductTypePagedResults> =>\n\t\taxios.get([\"Products\", \"ProductTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Imports product records.\n\t * @param {@link cef.store.api.ImportProductsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ImportProducts\n\t * @path <API Root>/Products/Product/Import\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<ImportResponse>}\n\t * @public\n\t */\n\tImportProducts = (routeParams?: ImportProductsDto): IHttpPromise<ImportResponse> =>\n\t\taxios.post([\"Products\", \"Product\", \"Import\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Used to get a list of the associated replacement products\n\t * @param {@link cef.store.api.ReplacementProductsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.ReplacementProducts\n\t * @path <API Root>/Products/Product/ReplacementProducts\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<Array<ProductModel>>}\n\t * @public\n\t */\n\tReplacementProducts = (routeParams: ReplacementProductsDto): IHttpPromise<Array<ProductModel>> =>\n\t\taxios.post([\"Products\", \"Product\", \"ReplacementProducts\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Providers.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tCheckoutModel,\n\tCartModel,\n\tCalculatedInventory,\n\tSalesReturnModel,\n\tSalesInvoiceSearchModel,\n\tSalesInvoicePagedResults,\n\tSalesQuoteSearchModel,\n\tSalesQuotePagedResults,\n\tSalesReturnSearchModel,\n\tSalesReturnPagedResults,\n\tSampleRequestSearchModel,\n\tSampleRequestPagedResults,\n\tDiscountsForInvoice,\n\tDiscountsForOrderResponse,\n\tDiscountsForQuote,\n\tImplementsIDBase,\n\tSalesInvoiceModel,\n\tSalesQuoteModel,\n\tSampleRequestModel,\n\tPaymentModel,\n\tContactModel,\n\tPayMultipleInvoicesResponse,\n\tResponse,\n\tCheckoutResult,\n\tAuctionCatalogSearchForm,\n\tAuctionSearchViewModel,\n\tCategoryCatalogSearchForm,\n\tCategorySearchViewModel,\n\tFranchiseCatalogSearchForm,\n\tFranchiseSearchViewModel,\n\tLotCatalogSearchForm,\n\tLotSearchViewModel,\n\tManufacturerCatalogSearchForm,\n\tManufacturerSearchViewModel,\n\tProductCatalogSearchForm,\n\tProductSearchViewModel,\n\tStoreCatalogSearchForm,\n\tStoreSearchViewModel,\n\tVendorCatalogSearchForm,\n\tVendorSearchViewModel,\n\tSalesQuoteStatusUpdate,\n\tSalesQuoteSalesGroupIdentifiers,\n\tAuctionSuggestResult,\n\tCategorySuggestResult,\n\tFranchiseSuggestResult,\n\tLotSuggestResult,\n\tManufacturerSuggestResult,\n\tProductSuggestResult,\n\tStoreSuggestResult,\n\tVendorSuggestResult,\n\tAddressModel,\n\tAddressValidationResultModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tDictionary,\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Analyze the current cart and build target carts for it based on the internal rules.\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface AnalyzeCurrentCartToTargetCartsDto extends CheckoutModel {\n\t/** Reset the analysis results so any previous target setups are removed. */\n\tResetAnalysis: boolean;\n}\n\n/**\n * Submit the current quote cart of the given session type\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface AnalyzeCurrentQuoteCartToTargetQuoteCartsDto extends CheckoutModel {\n\t/** Reset the analysis results so any previous target setups are removed. */\n\tResetAnalysis: boolean;\n}\n\n/**\n * Calculates inventory for the given product identifier. Returns a model containing relevant information about how the inventory was calculated, limits to purchasing, etc.\n * @public\n */\nexport interface BulkCalculateInventoryDto {\n\tProductIDs: Array<number>;\n}\n\n/**\n * Returns a boolean value indicating whether there is any available inventory for the given product identifier.\n * @public\n */\nexport interface BulkCheckHasAnyAvailableInventoryDto {\n\tProductIDs: Array<number>;\n}\n\n/**\n * Clear the current target carts and start over.\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface ClearCurrentCartToTargetCartsAnalysisDto extends CheckoutModel {\n}\n\n/**\n * Clear the current target carts and start over.\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface ClearCurrentQuoteCartToTargetCartsAnalysisDto extends CheckoutModel {\n}\n\n/**\n * Generates a RMA for each item. An email notification will be sent to the customer.\n * @see {@link SalesReturnModel}\n * @public\n */\nexport interface CreateSalesReturnFromStorefrontDto extends SalesReturnModel {\n}\n\n/**\n * Returns a total sum count of available inventory for the given product identifier.\n * @public\n */\nexport interface GetBulkAvailableInventoryCountDto {\n\tProductIDs: Array<number>;\n}\n\n/**\n * Use to get history of invoices for this Account\n * @see {@link SalesInvoiceSearchModel}\n * @public\n */\nexport interface GetCurrentAccountSalesInvoicesDto extends SalesInvoiceSearchModel {\n}\n\n/**\n * Use to get history of invoices for this Account (lite)\n * @see {@link SalesInvoiceSearchModel}\n * @public\n */\nexport interface GetCurrentAccountSalesInvoicesLiteDto extends SalesInvoiceSearchModel {\n}\n\n/**\n * Use to get history of quotes for the current account\n * @see {@link SalesQuoteSearchModel}\n * @public\n */\nexport interface GetCurrentAccountSalesQuotesDto extends SalesQuoteSearchModel {\n}\n\n/**\n * Use to get history of returns for the current account\n * @see {@link SalesReturnSearchModel}\n * @public\n */\nexport interface GetCurrentAccountSalesReturnsDto extends SalesReturnSearchModel {\n}\n\n/**\n * Use to get history of sample request for the current account\n * @see {@link SampleRequestSearchModel}\n * @public\n */\nexport interface GetCurrentAccountSampleRequestsDto extends SampleRequestSearchModel {\n}\n\n/**\n * Use to get history of invoices for this user\n * @see {@link SalesInvoiceSearchModel}\n * @public\n */\nexport interface GetCurrentUserSalesInvoicesDto extends SalesInvoiceSearchModel {\n}\n\n/**\n * Use to get history of quotes for the current user.\n * @see {@link SalesQuoteSearchModel}\n * @public\n */\nexport interface GetCurrentUserSalesQuotesDto extends SalesQuoteSearchModel {\n}\n\n/**\n * Use to get history of returns for the current user.\n * @see {@link SalesReturnSearchModel}\n * @public\n */\nexport interface GetCurrentUserSalesReturnsDto extends SalesReturnSearchModel {\n}\n\n/**\n * Use to get history of sample requests for the current user\n * @see {@link SampleRequestSearchModel}\n * @public\n */\nexport interface GetCurrentUserSampleRequestsDto extends SampleRequestSearchModel {\n}\n\n/**\n * Use to get a specific sales invoice and check for valid quick pay token.\n * @see {@link ImplementsIDBase}\n * @public\n */\nexport interface GetQuickPaySalesInvoiceDto extends ImplementsIDBase {\n\tQuickPayToken: string;\n}\n\n/**\n * Use to pay multiple invoices, specifying the amount with each one\n * @public\n */\nexport interface PayMultipleInvoicesByAmountsDto {\n\tAmounts: Dictionary<number>;\n\tPayment: PaymentModel;\n\tBilling?: ContactModel;\n\tCredits?: Dictionary<number>;\n}\n\n/**\n * Provide payment information to a specific invoice by ID.\n * @public\n */\nexport interface PaySingleInvoiceByIDDto {\n\tInvoiceID: number;\n\tPayment: PaymentModel;\n\tBilling?: ContactModel;\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface PlaidCreateWalletDto {\n\tPublicToken?: string;\n}\n\n/**\n * WARNING! There is no Summary value on this endpoint, please ask a Developer to add one\n * @public\n */\nexport interface PlaidGetLinkTokenDto {\n\tLang?: string;\n\tCountries?: Array<string>;\n}\n\n/**\n * Checkout the current shopping cart\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface ProcessCurrentCartToSingleOrderDto extends CheckoutModel {\n}\n\n/**\n * Checkout the current cart of the given session type.\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface ProcessCurrentCartToTargetOrdersDto extends CheckoutModel {\n}\n\n/**\n * Submit the current quote cart of the given session type\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface ProcessCurrentQuoteCartToSingleQuoteDto extends CheckoutModel {\n}\n\n/**\n * Submit the current quote cart of the given session type.\n * @see {@link CheckoutModel}\n * @public\n */\nexport interface ProcessCurrentQuoteCartToTargetQuotesDto extends CheckoutModel {\n}\n\n/**\n * Provide quick payment information to a specific invoice by ID.\n * @public\n */\nexport interface QuickPaySingleInvoiceByIDDto {\n\tInvoiceID: number;\n\tPayment: PaymentModel;\n\tBilling?: ContactModel;\n}\n\n/**\n * Search the auction catalog. Returns a range of data\n * @see {@link AuctionCatalogSearchForm}\n * @public\n */\nexport interface SearchAuctionCatalogWithProviderDto extends AuctionCatalogSearchForm {\n}\n\n/**\n * Search the category catalog. Returns a range of data\n * @see {@link CategoryCatalogSearchForm}\n * @public\n */\nexport interface SearchCategoryCatalogWithProviderDto extends CategoryCatalogSearchForm {\n}\n\n/**\n * Search the franchise catalog. Returns a range of data\n * @see {@link FranchiseCatalogSearchForm}\n * @public\n */\nexport interface SearchFranchiseCatalogWithProviderDto extends FranchiseCatalogSearchForm {\n}\n\n/**\n * Search the lot catalog. Returns a range of data\n * @see {@link LotCatalogSearchForm}\n * @public\n */\nexport interface SearchLotCatalogWithProviderDto extends LotCatalogSearchForm {\n}\n\n/**\n * Search the manufacturer catalog. Returns a range of data\n * @see {@link ManufacturerCatalogSearchForm}\n * @public\n */\nexport interface SearchManufacturerCatalogWithProviderDto extends ManufacturerCatalogSearchForm {\n}\n\n/**\n * Search the product catalog. Returns a range of data\n * @see {@link ProductCatalogSearchForm}\n * @public\n */\nexport interface SearchProductCatalogWithProviderDto extends ProductCatalogSearchForm {\n}\n\n/**\n * Search the store catalog. Returns a range of data\n * @see {@link StoreCatalogSearchForm}\n * @public\n */\nexport interface SearchStoreCatalogWithProviderDto extends StoreCatalogSearchForm {\n}\n\n/**\n * Search the vendor catalog. Returns a range of data\n * @see {@link VendorCatalogSearchForm}\n * @public\n */\nexport interface SearchVendorCatalogWithProviderDto extends VendorCatalogSearchForm {\n}\n\n/**\n * Membership Registration Process step 1: Send Invitation (User gets an email with an invite token)\n * @public\n */\nexport interface SendInvitationDto {\n\t/** Email to send the invitation to */\n\tEmail: string;\n}\n\n/**\n * Use to update a specific sales order item\n * @public\n */\nexport interface SendReceiptNotificationWithEmailDto {\n\t/** Order ID */\n\tOrderID: number;\n\t/** Email address to send the notification to */\n\tEmail: string;\n}\n\n/**\n * Sets the specified Quote as Approved\n * @see {@link SalesQuoteStatusUpdate}\n * @public\n */\nexport interface SetSalesQuoteAsApprovedDto extends SalesQuoteStatusUpdate {\n}\n\n/**\n * Sets the specified Quote as Cancelled\n * @see {@link SalesQuoteStatusUpdate}\n * @public\n */\nexport interface SetSalesQuoteAsCancelledDto extends SalesQuoteStatusUpdate {\n}\n\n/**\n * Sets the specified Quote as Pending\n * @see {@link SalesQuoteStatusUpdate}\n * @public\n */\nexport interface SetSalesQuoteAsPendingDto extends SalesQuoteStatusUpdate {\n}\n\n/**\n * Sets the specified Quote as Rejected\n * @see {@link SalesQuoteStatusUpdate}\n * @public\n */\nexport interface SetSalesQuoteAsRejectedDto extends SalesQuoteStatusUpdate {\n}\n\n/**\n * Submit a quote for processing by the store\n * @see {@link SalesQuoteModel}\n * @public\n */\nexport interface SubmitRequestForQuoteForGenericProductsDto extends SalesQuoteModel {\n\tDoShareBusinessCardWithSupplier?: boolean;\n}\n\n/**\n * Submit a quote for processing by the store\n * @see {@link SalesQuoteModel}\n * @public\n */\nexport interface SubmitRequestForQuoteForSingleProductDto extends SalesQuoteModel {\n\t/** A flag indicating that the business card should be shared with the supplier. */\n\tDoShareBusinessCardWithSupplier?: boolean;\n\t/** A flag indicating to recommend other suppliers. */\n\tDoRecommendOtherSuppliers?: boolean;\n}\n\n/**\n * Search the auction catalog. Returns a range of data\n * @see {@link AuctionCatalogSearchForm}\n * @public\n */\nexport interface SuggestAuctionCatalogWithProviderDto extends AuctionCatalogSearchForm {\n}\n\n/**\n * Search the category catalog. Returns a range of data\n * @see {@link CategoryCatalogSearchForm}\n * @public\n */\nexport interface SuggestCategoryCatalogWithProviderDto extends CategoryCatalogSearchForm {\n}\n\n/**\n * Search the franchise catalog. Returns a range of data\n * @see {@link FranchiseCatalogSearchForm}\n * @public\n */\nexport interface SuggestFranchiseCatalogWithProviderDto extends FranchiseCatalogSearchForm {\n}\n\n/**\n * Search the lot catalog. Returns a range of data\n * @see {@link LotCatalogSearchForm}\n * @public\n */\nexport interface SuggestLotCatalogWithProviderDto extends LotCatalogSearchForm {\n}\n\n/**\n * Search the manufacturer catalog. Returns a range of data\n * @see {@link ManufacturerCatalogSearchForm}\n * @public\n */\nexport interface SuggestManufacturerCatalogWithProviderDto extends ManufacturerCatalogSearchForm {\n}\n\n/**\n * Search the product catalog. Returns a range of data\n * @see {@link ProductCatalogSearchForm}\n * @public\n */\nexport interface SuggestProductCatalogWithProviderDto extends ProductCatalogSearchForm {\n}\n\n/**\n * Search the store catalog. Returns a range of data\n * @see {@link StoreCatalogSearchForm}\n * @public\n */\nexport interface SuggestStoreCatalogWithProviderDto extends StoreCatalogSearchForm {\n}\n\n/**\n * Search the vendor catalog. Returns a range of data\n * @see {@link VendorCatalogSearchForm}\n * @public\n */\nexport interface SuggestVendorCatalogWithProviderDto extends VendorCatalogSearchForm {\n}\n\n/**\n * Use to update a sales return\n * @see {@link SalesReturnModel}\n * @public\n */\nexport interface UpdateSalesReturnFromStorefrontDto extends SalesReturnModel {\n}\n\n/**\n * Use to validate address with AddressProvider\n * @public\n */\nexport interface ValidateAddressDto {\n\tAccountContactID?: number;\n\tContactID?: number;\n\tAddressID?: number;\n\tAddress?: AddressModel;\n}\n\nexport class Providers {\n\t/**\n\t * Analyze the current cart and build target carts for it based on the internal rules.\n\t * @param {@link cef.store.api.AnalyzeCurrentCartToTargetCartsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.AnalyzeCurrentCartToTargetCarts\n\t * @path <API Root>/Providers/Checkout/AnalyzeCurrentCartToTargetCarts\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<CartModel>>>}\n\t * @public\n\t */\n\tAnalyzeCurrentCartToTargetCarts = (routeParams: AnalyzeCurrentCartToTargetCartsDto): IHttpPromise<CEFActionResponseT<Array<CartModel>>> =>\n\t\taxios.post([\"Providers\", \"Checkout\", \"AnalyzeCurrentCartToTargetCarts\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Submit the current quote cart of the given session type\n\t * @param {@link cef.store.api.AnalyzeCurrentQuoteCartToTargetQuoteCartsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.AnalyzeCurrentQuoteCartToTargetQuoteCarts\n\t * @path <API Root>/Providers/SubmitQuote/AnalyzeCurrentQuoteCartToTargetQuoteCarts\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<CartModel>>>}\n\t * @public\n\t */\n\tAnalyzeCurrentQuoteCartToTargetQuoteCarts = (routeParams: AnalyzeCurrentQuoteCartToTargetQuoteCartsDto): IHttpPromise<CEFActionResponseT<Array<CartModel>>> =>\n\t\taxios.post([\"Providers\", \"SubmitQuote\", \"AnalyzeCurrentQuoteCartToTargetQuoteCarts\"].join(\"/\"), routeParams);\n\n\t/**\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.\n\t * @param {@link cef.store.api.BulkCalculateInventoryDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.BulkCalculateInventory\n\t * @path <API Root>/Providers/Inventory/BulkCalculateInventory\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<cefalt.store.Dictionary<CalculatedInventory>>>}\n\t * @public\n\t */\n\tBulkCalculateInventory = (routeParams: BulkCalculateInventoryDto): IHttpPromise<CEFActionResponseT<Dictionary<CalculatedInventory>>> =>\n\t\taxios.post([\"Providers\", \"Inventory\", \"BulkCalculateInventory\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Returns a boolean value indicating whether there is any available inventory for the given product identifier.\n\t * @param {@link cef.store.api.BulkCheckHasAnyAvailableInventoryDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.BulkCheckHasAnyAvailableInventory\n\t * @path <API Root>/Providers/Inventory/BulkCheckHasAnyAvailableInventory\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<cefalt.store.Dictionary<boolean>>>}\n\t * @public\n\t */\n\tBulkCheckHasAnyAvailableInventory = (routeParams: BulkCheckHasAnyAvailableInventoryDto): IHttpPromise<CEFActionResponseT<Dictionary<boolean>>> =>\n\t\taxios.post([\"Providers\", \"Inventory\", \"BulkCheckHasAnyAvailableInventory\"].join(\"/\"), routeParams);\n\n\t/**\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.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.CalculateInventory\n\t * @path <API Root>/Providers/Inventory/CalculateInventory/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<CalculatedInventory>>}\n\t * @public\n\t */\n\tCalculateInventory = (id: number): IHttpPromise<CEFActionResponseT<CalculatedInventory>> =>\n\t\taxios.get([\"Providers\", \"Inventory\", \"CalculateInventory\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Returns a boolean value indicating whether there is any available inventory for the given product identifier.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.CheckHasAnyAvailableInventory\n\t * @path <API Root>/Providers/Inventory/CheckHasAnyAvailableInventory/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<boolean>>}\n\t * @public\n\t */\n\tCheckHasAnyAvailableInventory = (id: number): IHttpPromise<CEFActionResponseT<boolean>> =>\n\t\taxios.get([\"Providers\", \"Inventory\", \"CheckHasAnyAvailableInventory\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Clear the current target carts and start over.\n\t * @param {@link cef.store.api.ClearCurrentCartToTargetCartsAnalysisDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ClearCurrentCartToTargetCartsAnalysis\n\t * @path <API Root>/Providers/Checkout/ClearCurrentCartToTargetCartsAnalysis\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tClearCurrentCartToTargetCartsAnalysis = (routeParams?: ClearCurrentCartToTargetCartsAnalysisDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Providers\", \"Checkout\", \"ClearCurrentCartToTargetCartsAnalysis\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Clear the current target carts and start over.\n\t * @param {@link cef.store.api.ClearCurrentQuoteCartToTargetCartsAnalysisDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ClearCurrentQuoteCartToTargetCartsAnalysis\n\t * @path <API Root>/Providers/SubmitQuote/ClearCurrentCartToTargetCartsAnalysis\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tClearCurrentQuoteCartToTargetCartsAnalysis = (routeParams?: ClearCurrentQuoteCartToTargetCartsAnalysisDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Providers\", \"SubmitQuote\", \"ClearCurrentCartToTargetCartsAnalysis\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Generates a RMA for each item. An email notification will be sent to the customer.\n\t * @param {@link cef.store.api.CreateSalesReturnFromStorefrontDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.CreateSalesReturnFromStorefront\n\t * @path <API Root>/Providers/Returning/Actions/CreateSalesReturnFromStorefront\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateSalesReturnFromStorefront = (routeParams?: CreateSalesReturnFromStorefrontDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Providers\", \"Returning\", \"Actions\", \"CreateSalesReturnFromStorefront\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Returns a total sum count of available inventory for the given product identifier.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.GetAvailableInventoryCount\n\t * @path <API Root>/Providers/Inventory/CalculateInventory/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tGetAvailableInventoryCount = (id: number): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.get([\"Providers\", \"Inventory\", \"CalculateInventory\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Returns a total sum count of available inventory for the given product identifier.\n\t * @param {@link cef.store.api.GetBulkAvailableInventoryCountDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Inventory.GetBulkAvailableInventoryCount\n\t * @path <API Root>/Providers/Inventory/BulkCalculateInventoryCount\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<cefalt.store.Dictionary<number>>>}\n\t * @public\n\t */\n\tGetBulkAvailableInventoryCount = (routeParams: GetBulkAvailableInventoryCountDto): IHttpPromise<CEFActionResponseT<Dictionary<number>>> =>\n\t\taxios.post([\"Providers\", \"Inventory\", \"BulkCalculateInventoryCount\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of invoices for this Account\n\t * @param {@link cef.store.api.GetCurrentAccountSalesInvoicesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesInvoices\n\t * @path <API Root>/Providers/Invoicing/Queries/RecordsForCurrentAccount\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesInvoicePagedResults>}\n\t * @public\n\t */\n\tGetCurrentAccountSalesInvoices = (routeParams?: GetCurrentAccountSalesInvoicesDto): IHttpPromise<SalesInvoicePagedResults> =>\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Queries\", \"RecordsForCurrentAccount\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of invoices for this Account (lite)\n\t * @param {@link cef.store.api.GetCurrentAccountSalesInvoicesLiteDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesInvoicesLite\n\t * @path <API Root>/Providers/Invoicing/Queries/RecordsForCurrentAccountLite\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesInvoicePagedResults>}\n\t * @public\n\t */\n\tGetCurrentAccountSalesInvoicesLite = (routeParams?: GetCurrentAccountSalesInvoicesLiteDto): IHttpPromise<SalesInvoicePagedResults> =>\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Queries\", \"RecordsForCurrentAccountLite\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of quotes for the current account\n\t * @param {@link cef.store.api.GetCurrentAccountSalesQuotesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesQuotes\n\t * @path <API Root>/Providers/Quoting/Queries/RecordsForCurrentAccount\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesQuotePagedResults>}\n\t * @public\n\t */\n\tGetCurrentAccountSalesQuotes = (routeParams?: GetCurrentAccountSalesQuotesDto): IHttpPromise<SalesQuotePagedResults> =>\n\t\taxios.post([\"Providers\", \"Quoting\", \"Queries\", \"RecordsForCurrentAccount\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of returns for the current account\n\t * @param {@link cef.store.api.GetCurrentAccountSalesReturnsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.GetCurrentAccountSalesReturns\n\t * @path <API Root>/Providers/Returning/Queries/CurrentAccountSalesReturns\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesReturnPagedResults>}\n\t * @public\n\t */\n\tGetCurrentAccountSalesReturns = (routeParams?: GetCurrentAccountSalesReturnsDto): IHttpPromise<SalesReturnPagedResults> =>\n\t\taxios.post([\"Providers\", \"Returning\", \"Queries\", \"CurrentAccountSalesReturns\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of sample request for the current account\n\t * @param {@link cef.store.api.GetCurrentAccountSampleRequestsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SampleRequestHandlers.Queries.Services.Endpoints.GetCurrentAccountSampleRequests\n\t * @path <API Root>/Providers/Sampling/Queries/RecordsForCurrentAccount\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SampleRequestPagedResults>}\n\t * @public\n\t */\n\tGetCurrentAccountSampleRequests = (routeParams?: GetCurrentAccountSampleRequestsDto): IHttpPromise<SampleRequestPagedResults> =>\n\t\taxios.post([\"Providers\", \"Sampling\", \"Queries\", \"RecordsForCurrentAccount\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get count of unpaid or partially paid invoices for this Account\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentAccountUnpaidOrPartiallyPaidSalesInvoicesCount\n\t * @path <API Root>/Providers/Invoicing/Queries/CurrentAccountUnpaidOrPartiallyPaidCount\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tGetCurrentAccountUnpaidOrPartiallyPaidSalesInvoicesCount = (): IHttpPromise<number> =>\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"CurrentAccountUnpaidOrPartiallyPaidCount\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get history of invoices for this user\n\t * @param {@link cef.store.api.GetCurrentUserSalesInvoicesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetCurrentUserSalesInvoices\n\t * @path <API Root>/Providers/Invoicing/Queries/RecordsForCurrentUser\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesInvoicePagedResults>}\n\t * @public\n\t */\n\tGetCurrentUserSalesInvoices = (routeParams?: GetCurrentUserSalesInvoicesDto): IHttpPromise<SalesInvoicePagedResults> =>\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of quotes for the current user.\n\t * @param {@link cef.store.api.GetCurrentUserSalesQuotesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetCurrentUserSalesQuotes\n\t * @path <API Root>/Providers/Quoting/Queries/RecordsForCurrentUser\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesQuotePagedResults>}\n\t * @public\n\t */\n\tGetCurrentUserSalesQuotes = (routeParams?: GetCurrentUserSalesQuotesDto): IHttpPromise<SalesQuotePagedResults> =>\n\t\taxios.post([\"Providers\", \"Quoting\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of returns for the current user.\n\t * @param {@link cef.store.api.GetCurrentUserSalesReturnsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.GetCurrentUserSalesReturns\n\t * @path <API Root>/Providers/Returning/Queries/RecordsForCurrentUser\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesReturnPagedResults>}\n\t * @public\n\t */\n\tGetCurrentUserSalesReturns = (routeParams?: GetCurrentUserSalesReturnsDto): IHttpPromise<SalesReturnPagedResults> =>\n\t\taxios.post([\"Providers\", \"Returning\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get history of sample requests for the current user\n\t * @param {@link cef.store.api.GetCurrentUserSampleRequestsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SampleRequestHandlers.Queries.Services.Endpoints.GetCurrentUserSampleRequests\n\t * @path <API Root>/Providers/Sampling/Queries/RecordsForCurrentUser\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SampleRequestPagedResults>}\n\t * @public\n\t */\n\tGetCurrentUserSampleRequests = (routeParams?: GetCurrentUserSampleRequestsDto): IHttpPromise<SampleRequestPagedResults> =>\n\t\taxios.post([\"Providers\", \"Sampling\", \"Queries\", \"RecordsForCurrentUser\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get the discounts for the top level and item levels at the same time.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetDiscountsForInvoice\n\t * @path <API Root>/Providers/Invoicing/Queries/Secured/DiscountsFor/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<DiscountsForInvoice>}\n\t * @public\n\t */\n\tGetDiscountsForInvoice = (id: number): IHttpPromise<DiscountsForInvoice> =>\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"Secured\", \"DiscountsFor\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get the discounts for the top level and item levels at the same time.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetDiscountsForOrder\n\t * @path <API Root>/Providers/Ordering/Queries/Secured/DiscountsFor/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<DiscountsForOrderResponse>}\n\t * @public\n\t */\n\tGetDiscountsForOrder = (id: number): IHttpPromise<DiscountsForOrderResponse> =>\n\t\taxios.get([\"Providers\", \"Ordering\", \"Queries\", \"Secured\", \"DiscountsFor\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get the discounts for the top level and item levels at the same time.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetDiscountsForQuote\n\t * @path <API Root>/Providers/Quoting/Queries/Secured/DiscountsFor/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<DiscountsForQuote>}\n\t * @public\n\t */\n\tGetDiscountsForQuote = (id: number): IHttpPromise<DiscountsForQuote> =>\n\t\taxios.get([\"Providers\", \"Quoting\", \"Queries\", \"Secured\", \"DiscountsFor\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific sales invoice and check for valid quick pay token.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetQuickPaySalesInvoice\n\t * @path <API Root>/Providers/Invoicing/Queries/QuickPay/{ID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<SalesInvoiceModel>}\n\t * @public\n\t */\n\tGetQuickPaySalesInvoice = (id: number, routeParams: GetQuickPaySalesInvoiceDto): IHttpPromise<SalesInvoiceModel> =>\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"QuickPay\", id].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales invoice and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetSecureSalesInvoice\n\t * @path <API Root>/Providers/Invoicing/Queries/Secured/{ID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<SalesInvoiceModel>}\n\t * @public\n\t */\n\tGetSecureSalesInvoice = (id: number): IHttpPromise<SalesInvoiceModel> =>\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific sales invoice and check for ownership by the current Account by key.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Queries.Services.Endpoints.GetSecureSalesInvoiceByKey\n\t * @path <API Root>/Providers/Invoicing/Queries/Secured/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesInvoiceModel>}\n\t * @public\n\t */\n\tGetSecureSalesInvoiceByKey = (key: string): IHttpPromise<SalesInvoiceModel> =>\n\t\taxios.get([\"Providers\", \"Invoicing\", \"Queries\", \"Secured\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific sales quote and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Queries.Services.Endpoints.GetSecureSalesQuote\n\t * @path <API Root>/Providers/Quoting/Queries/Secured/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesQuoteModel>}\n\t * @public\n\t */\n\tGetSecureSalesQuote = (id: number): IHttpPromise<SalesQuoteModel> =>\n\t\taxios.get([\"Providers\", \"Quoting\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific sales return and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.GetSecureSalesReturn\n\t * @path <API Root>/Providers/Returning/Queries/Secured/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnModel>}\n\t * @public\n\t */\n\tGetSecureSalesReturn = (id: number): IHttpPromise<SalesReturnModel> =>\n\t\taxios.get([\"Providers\", \"Returning\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific sample request and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SampleRequestHandlers.Queries.Services.Endpoints.GetSecureSampleRequest\n\t * @path <API Root>/Providers/Sampling/Queries/Secured/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SampleRequestModel>}\n\t * @public\n\t */\n\tGetSecureSampleRequest = (id: number): IHttpPromise<SampleRequestModel> =>\n\t\taxios.get([\"Providers\", \"Sampling\", \"Queries\", \"Secured\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Test if the Sales Order is eligible for return.\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Queries.Services.Endpoints.IsSalesOrderReadyForReturn\n\t * @path <API Root>/Providers/Returning/Queries/IsSalesOrderReadyForReturn/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tIsSalesOrderReadyForReturn = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.get([\"Providers\", \"Returning\", \"Queries\", \"IsSalesOrderReadyForReturn\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to pay multiple invoices, specifying the amount with each one\n\t * @param {@link cef.store.api.PayMultipleInvoicesByAmountsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Actions.Services.Endpoints.PayMultipleInvoicesByAmounts\n\t * @path <API Root>/Providers/Invoicing/Actions/PayMultiple\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<PayMultipleInvoicesResponse>>}\n\t * @public\n\t */\n\tPayMultipleInvoicesByAmounts = (routeParams: PayMultipleInvoicesByAmountsDto): IHttpPromise<CEFActionResponseT<PayMultipleInvoicesResponse>> =>\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Actions\", \"PayMultiple\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Provide payment information to a specific invoice by ID.\n\t * @param {@link cef.store.api.PaySingleInvoiceByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Actions.Services.Endpoints.PaySingleInvoiceByID\n\t * @path <API Root>/Providers/Invoicing/Actions/Pay\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tPaySingleInvoiceByID = (routeParams: PaySingleInvoiceByIDDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Actions\", \"Pay\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @param {@link cef.store.api.PlaidCreateWalletDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Plaid.PlaidCreateWallet\n\t * @path <API Root>/Providers/Payments/Plaid/CreateWallets\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Response>>}\n\t * @public\n\t */\n\tPlaidCreateWallet = (routeParams?: PlaidCreateWalletDto): IHttpPromise<CEFActionResponseT<Response>> =>\n\t\taxios.post([\"Providers\", \"Payments\", \"Plaid\", \"CreateWallets\"].join(\"/\"), routeParams);\n\n\t/**\n\t * @param {@link cef.store.api.PlaidGetLinkTokenDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Payments.Plaid.PlaidGetLinkToken\n\t * @path <API Root>/Providers/Payments/Plaid/GetLinkToken\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Response>>}\n\t * @public\n\t */\n\tPlaidGetLinkToken = (routeParams?: PlaidGetLinkTokenDto): IHttpPromise<CEFActionResponseT<Response>> =>\n\t\taxios.post([\"Providers\", \"Payments\", \"Plaid\", \"GetLinkToken\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Checkout the current shopping cart\n\t * @param {@link cef.store.api.ProcessCurrentCartToSingleOrderDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentCartToSingleOrder\n\t * @path <API Root>/Providers/Checkout/ProcessCurrentCartToSingleOrder\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CheckoutResult>}\n\t * @public\n\t */\n\tProcessCurrentCartToSingleOrder = (routeParams?: ProcessCurrentCartToSingleOrderDto): IHttpPromise<CheckoutResult> =>\n\t\taxios.post([\"Providers\", \"Checkout\", \"ProcessCurrentCartToSingleOrder\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Checkout the current cart of the given session type.\n\t * @param {@link cef.store.api.ProcessCurrentCartToTargetOrdersDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentCartToTargetOrders\n\t * @path <API Root>/Providers/Checkout/ProcessCurrentCartToTargetOrders\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CheckoutResult>}\n\t * @public\n\t */\n\tProcessCurrentCartToTargetOrders = (routeParams?: ProcessCurrentCartToTargetOrdersDto): IHttpPromise<CheckoutResult> =>\n\t\taxios.post([\"Providers\", \"Checkout\", \"ProcessCurrentCartToTargetOrders\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Submit the current quote cart of the given session type\n\t * @param {@link cef.store.api.ProcessCurrentQuoteCartToSingleQuoteDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentQuoteCartToSingleQuote\n\t * @path <API Root>/Providers/SubmitQuote/ProcessCurrentQuoteCartToSingleQuote\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CheckoutResult>}\n\t * @public\n\t */\n\tProcessCurrentQuoteCartToSingleQuote = (routeParams?: ProcessCurrentQuoteCartToSingleQuoteDto): IHttpPromise<CheckoutResult> =>\n\t\taxios.post([\"Providers\", \"SubmitQuote\", \"ProcessCurrentQuoteCartToSingleQuote\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Submit the current quote cart of the given session type.\n\t * @param {@link cef.store.api.ProcessCurrentQuoteCartToTargetQuotesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Checkouts.ProcessCurrentQuoteCartToTargetQuotes\n\t * @path <API Root>/Providers/SubmitQuote/ProcessCurrentCartToTargetOrders\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CheckoutResult>}\n\t * @public\n\t */\n\tProcessCurrentQuoteCartToTargetQuotes = (routeParams?: ProcessCurrentQuoteCartToTargetQuotesDto): IHttpPromise<CheckoutResult> =>\n\t\taxios.post([\"Providers\", \"SubmitQuote\", \"ProcessCurrentCartToTargetOrders\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Provide quick payment information to a specific invoice by ID.\n\t * @param {@link cef.store.api.QuickPaySingleInvoiceByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesInvoiceHandlers.Actions.Services.Endpoints.QuickPaySingleInvoiceByID\n\t * @path <API Root>/Providers/Invoicing/Actions/QuickPay\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tQuickPaySingleInvoiceByID = (routeParams: QuickPaySingleInvoiceByIDDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Providers\", \"Invoicing\", \"Actions\", \"QuickPay\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Search the auction catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchAuctionCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Auctions/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<AuctionSearchViewModel>}\n\t * @public\n\t */\n\tSearchAuctionCatalogWithProvider = (routeParams?: SearchAuctionCatalogWithProviderDto): IHttpPromise<AuctionSearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Auctions\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the category catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchCategoryCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Categories/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CategorySearchViewModel>}\n\t * @public\n\t */\n\tSearchCategoryCatalogWithProvider = (routeParams?: SearchCategoryCatalogWithProviderDto): IHttpPromise<CategorySearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Categories\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the franchise catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchFranchiseCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Franchises/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<FranchiseSearchViewModel>}\n\t * @public\n\t */\n\tSearchFranchiseCatalogWithProvider = (routeParams?: SearchFranchiseCatalogWithProviderDto): IHttpPromise<FranchiseSearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Franchises\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the lot catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchLotCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Lots/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<LotSearchViewModel>}\n\t * @public\n\t */\n\tSearchLotCatalogWithProvider = (routeParams?: SearchLotCatalogWithProviderDto): IHttpPromise<LotSearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Lots\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the manufacturer catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchManufacturerCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Manufacturers/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ManufacturerSearchViewModel>}\n\t * @public\n\t */\n\tSearchManufacturerCatalogWithProvider = (routeParams?: SearchManufacturerCatalogWithProviderDto): IHttpPromise<ManufacturerSearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Manufacturers\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the product catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchProductCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Products/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ProductSearchViewModel>}\n\t * @public\n\t */\n\tSearchProductCatalogWithProvider = (routeParams?: SearchProductCatalogWithProviderDto): IHttpPromise<ProductSearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Products\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the store catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchStoreCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Stores/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoreSearchViewModel>}\n\t * @public\n\t */\n\tSearchStoreCatalogWithProvider = (routeParams?: SearchStoreCatalogWithProviderDto): IHttpPromise<StoreSearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Stores\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the vendor catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SearchVendorCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Vendors/Query\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<VendorSearchViewModel>}\n\t * @public\n\t */\n\tSearchVendorCatalogWithProvider = (routeParams?: SearchVendorCatalogWithProviderDto): IHttpPromise<VendorSearchViewModel> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Vendors\", \"Query\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Membership Registration Process step 1: Send Invitation (User gets an email with an invite token)\n\t * @param {@link cef.store.api.SendInvitationDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Emails.SendInvitation\n\t * @path <API Root>/Providers/Emails/Authentication/SendInvitation\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSendInvitation = (routeParams: SendInvitationDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Providers\", \"Emails\", \"Authentication\", \"SendInvitation\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update a specific sales order item\n\t * @param {@link cef.store.api.SendReceiptNotificationWithEmailDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Emails.SendReceiptNotificationWithEmail\n\t * @path <API Root>/Providers/Emails/ReceiptNotificationToEmailAddress\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSendReceiptNotificationWithEmail = (routeParams: SendReceiptNotificationWithEmailDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Providers\", \"Emails\", \"ReceiptNotificationToEmailAddress\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Sets the specified Quote as Approved\n\t * @param {@link cef.store.api.SetSalesQuoteAsApprovedDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsApproved\n\t * @path <API Root>/Providers/Quoting/Actions/Approved\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<SalesQuoteSalesGroupIdentifiers>>}\n\t * @public\n\t */\n\tSetSalesQuoteAsApproved = (routeParams?: SetSalesQuoteAsApprovedDto): IHttpPromise<CEFActionResponseT<SalesQuoteSalesGroupIdentifiers>> =>\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Approved\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Sets the specified Quote as Cancelled\n\t * @param {@link cef.store.api.SetSalesQuoteAsCancelledDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsCancelled\n\t * @path <API Root>/Providers/Quoting/Actions/Cancelled\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetSalesQuoteAsCancelled = (routeParams?: SetSalesQuoteAsCancelledDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Cancelled\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Sets the specified Quote as Pending\n\t * @param {@link cef.store.api.SetSalesQuoteAsPendingDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsPending\n\t * @path <API Root>/Providers/Quoting/Actions/Pending\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetSalesQuoteAsPending = (routeParams?: SetSalesQuoteAsPendingDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Pending\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Sets the specified Quote as Rejected\n\t * @param {@link cef.store.api.SetSalesQuoteAsRejectedDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SetSalesQuoteAsRejected\n\t * @path <API Root>/Providers/Quoting/Actions/Rejected\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetSalesQuoteAsRejected = (routeParams?: SetSalesQuoteAsRejectedDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Providers\", \"Quoting\", \"Actions\", \"Rejected\"].join(\"/\"), routeParams);\n\n\t/**\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.\n\t * @param {@link cef.store.api.SetSalesReturnAsCancelledDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.SetSalesReturnAsCancelled\n\t * @path <API Root>/Providers/Returning/Actions/Cancel/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetSalesReturnAsCancelled = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Providers\", \"Returning\", \"Actions\", \"Cancel\", id].join(\"/\"));\n\n\t/**\n\t * The return will be set to 'Shipped' status. An email notification will be sent to the customer.\n\t * @param {@link cef.store.api.SetSalesReturnAsShippedDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.SetSalesReturnAsShipped\n\t * @path <API Root>/Providers/Returning/Actions/Shipped/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSetSalesReturnAsShipped = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Providers\", \"Returning\", \"Actions\", \"Shipped\", id].join(\"/\"));\n\n\t/**\n\t * Submit a quote for processing by the store\n\t * @param {@link cef.store.api.SubmitRequestForQuoteForGenericProductsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SubmitRequestForQuoteForGenericProducts\n\t * @path <API Root>/Providers/Quoting/Actions/SubmitForGenericProducts\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSubmitRequestForQuoteForGenericProducts = (routeParams?: SubmitRequestForQuoteForGenericProductsDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Providers\", \"Quoting\", \"Actions\", \"SubmitForGenericProducts\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Submit a quote for processing by the store\n\t * @param {@link cef.store.api.SubmitRequestForQuoteForSingleProductDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesQuoteHandlers.Actions.Services.Endpoints.SubmitRequestForQuoteForSingleProduct\n\t * @path <API Root>/Providers/Quoting/Actions/SubmitForSingleProduct\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSubmitRequestForQuoteForSingleProduct = (routeParams?: SubmitRequestForQuoteForSingleProductDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Providers\", \"Quoting\", \"Actions\", \"SubmitForSingleProduct\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Search the auction catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestAuctionCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Auctions/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<AuctionSuggestResult>>}\n\t * @public\n\t */\n\tSuggestAuctionCatalogWithProvider = (routeParams?: SuggestAuctionCatalogWithProviderDto): IHttpPromise<Array<AuctionSuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Auctions\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the category catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestCategoryCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Categories/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<CategorySuggestResult>>}\n\t * @public\n\t */\n\tSuggestCategoryCatalogWithProvider = (routeParams?: SuggestCategoryCatalogWithProviderDto): IHttpPromise<Array<CategorySuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Categories\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the franchise catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestFranchiseCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Franchises/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<FranchiseSuggestResult>>}\n\t * @public\n\t */\n\tSuggestFranchiseCatalogWithProvider = (routeParams?: SuggestFranchiseCatalogWithProviderDto): IHttpPromise<Array<FranchiseSuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Franchises\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the lot catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestLotCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Lots/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<LotSuggestResult>>}\n\t * @public\n\t */\n\tSuggestLotCatalogWithProvider = (routeParams?: SuggestLotCatalogWithProviderDto): IHttpPromise<Array<LotSuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Lots\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the manufacturer catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestManufacturerCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Manufacturers/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<ManufacturerSuggestResult>>}\n\t * @public\n\t */\n\tSuggestManufacturerCatalogWithProvider = (routeParams?: SuggestManufacturerCatalogWithProviderDto): IHttpPromise<Array<ManufacturerSuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Manufacturers\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the product catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestProductCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Products/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<ProductSuggestResult>>}\n\t * @public\n\t */\n\tSuggestProductCatalogWithProvider = (routeParams?: SuggestProductCatalogWithProviderDto): IHttpPromise<Array<ProductSuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Products\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the store catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestStoreCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Stores/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<StoreSuggestResult>>}\n\t * @public\n\t */\n\tSuggestStoreCatalogWithProvider = (routeParams?: SuggestStoreCatalogWithProviderDto): IHttpPromise<Array<StoreSuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Stores\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Search the vendor catalog. Returns a range of data\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.Searching.ElasticSearch.SuggestVendorCatalogWithProvider\n\t * @path <API Root>/Providers/Searching/Vendors/Suggest\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<Array<VendorSuggestResult>>}\n\t * @public\n\t */\n\tSuggestVendorCatalogWithProvider = (routeParams?: SuggestVendorCatalogWithProviderDto): IHttpPromise<Array<VendorSuggestResult>> =>\n\t\taxios.get([\"Providers\", \"Searching\", \"Vendors\", \"Suggest\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to update a sales return\n\t * @param {@link cef.store.api.UpdateSalesReturnFromStorefrontDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.SalesReturnHandlers.Actions.Services.Endpoints.UpdateSalesReturnFromStorefront\n\t * @path <API Root>/Providers/Returning/Actions/UpdateSalesReturnFromStorefront\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateSalesReturnFromStorefront = (routeParams?: UpdateSalesReturnFromStorefrontDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Providers\", \"Returning\", \"Actions\", \"UpdateSalesReturnFromStorefront\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to validate address with AddressProvider\n\t * @param {@link cef.store.api.ValidateAddressDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Providers.AddressValidation.ValidateAddress\n\t * @path <API Root>/Providers/Geography/ValidateAddress\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<AddressValidationResultModel>}\n\t * @public\n\t */\n\tValidateAddress = (routeParams?: ValidateAddressDto): IHttpPromise<AddressValidationResultModel> =>\n\t\taxios.post([\"Providers\", \"Geography\", \"ValidateAddress\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Questionnaire.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tQuestionModel,\n\tQuestionnaireModel,\n\tTypeModel,\n\tAnswerModel,\n\tQuestionnaireSearchModel,\n\tQuestionnairePagedResults,\n\tQuestionSearchModel,\n\tQuestionPagedResults,\n\tTypeSearchModel,\n\tQuestionTypePagedResults,\n\tQuestionOptionModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Checks if the current user has answered the given brand's questionnaire.\n * @public\n */\nexport interface CheckIfQuestionnaireIsAnsweredDto {\n\t/** Brand ID For Search, Note: This will be overridden on data calls automatically */\n\tBrandID?: number;\n\tBrandIDIncludeNull?: boolean;\n\t/** The Brand Key for objects */\n\tBrandKey?: string;\n\t/** The Brand Name for objects */\n\tBrandName?: string;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\t/** Match a store which uses this category */\n\tBrandCategoryID?: number;\n}\n\n/**\n * Use to create a new question.\n * @see {@link QuestionModel}\n * @public\n */\nexport interface CreateQuestionDto extends QuestionModel {\n}\n\n/**\n * Use to create a new questionnaire.\n * @see {@link QuestionnaireModel}\n * @public\n */\nexport interface CreateQuestionnaireDto extends QuestionnaireModel {\n}\n\n/**\n * Use to create a new question type.\n * @see {@link TypeModel}\n * @public\n */\nexport interface CreateQuestionTypeDto extends TypeModel {\n}\n\n/**\n * Retrieves answers for the provided list of questions for the current user.\n * @public\n */\nexport interface GetAnswersForQuestionsDto {\n\t/** List of Question IDs for which answers are required. */\n\tQuestionIDs: Array<number>;\n\tForUserID?: number;\n}\n\n/**\n * Use to get a list of questionnaires.\n * @see {@link QuestionnaireSearchModel}\n * @public\n */\nexport interface GetQuestionnairesDto extends QuestionnaireSearchModel {\n}\n\n/**\n * Use to get a list of questions.\n * @see {@link QuestionSearchModel}\n * @public\n */\nexport interface GetQuestionsDto extends QuestionSearchModel {\n}\n\n/**\n * Use to get a list of question types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetQuestionTypesDto extends TypeSearchModel {\n}\n\n/**\n * Securely creates many answers, ensures that the user ID on the answers is the current user.\n * @public\n */\nexport interface SecureCreateOrUpdateAnswersDto {\n\tAnswers?: Array<AnswerModel>;\n}\n\n/**\n * Use to update an existing question.\n * @see {@link QuestionModel}\n * @public\n */\nexport interface UpdateQuestionDto extends QuestionModel {\n}\n\n/**\n * Use to update an existing questionnaire.\n * @see {@link QuestionnaireModel}\n * @public\n */\nexport interface UpdateQuestionnaireDto extends QuestionnaireModel {\n}\n\n/**\n * Use to update an existing question option.\n * @see {@link QuestionOptionModel}\n * @public\n */\nexport interface UpdateQuestionOptionDto extends QuestionOptionModel {\n}\n\nexport class Questionnaire {\n\t/**\n\t * Checks if the current user has answered the given brand's questionnaire.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckIfQuestionnaireIsAnswered\n\t * @path <API Root>/Questionnaire/CurrentUser/HasAnswersForBrandQuestionnaire\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<boolean>>}\n\t * @public\n\t */\n\tCheckIfQuestionnaireIsAnswered = (routeParams?: CheckIfQuestionnaireIsAnsweredDto): IHttpPromise<CEFActionResponseT<boolean>> =>\n\t\taxios.get([\"Questionnaire\", \"CurrentUser\", \"HasAnswersForBrandQuestionnaire\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to create a new question.\n\t * @param {@link cef.store.api.CreateQuestionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateQuestion\n\t * @path <API Root>/Questionnaire/Question/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateQuestion = (routeParams?: CreateQuestionDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Questionnaire\", \"Question\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to create a new questionnaire.\n\t * @param {@link cef.store.api.CreateQuestionnaireDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateQuestionnaire\n\t * @path <API Root>/Questionnaire/Questionnaire/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateQuestionnaire = (routeParams?: CreateQuestionnaireDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Questionnaire\", \"Questionnaire\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to create a new question type.\n\t * @param {@link cef.store.api.CreateQuestionTypeDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateQuestionType\n\t * @path <API Root>/Questionnaire/QuestionType/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateQuestionType = (routeParams?: CreateQuestionTypeDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Questionnaire\", \"QuestionType\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Deactivate a specific question from the system [Soft-Delete].\n\t * @param {@link cef.store.api.DeactivateQuestionByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeactivateQuestionByID\n\t * @path <API Root>/Questionnaire/Question/Deactivate/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeactivateQuestionByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Questionnaire\", \"Question\", \"Deactivate\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Deactivate a specific questionnaire from the system [Soft-Delete].\n\t * @param {@link cef.store.api.DeactivateQuestionnaireByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeactivateQuestionnaireByID\n\t * @path <API Root>/Questionnaire/Questionnaire/Deactivate/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeactivateQuestionnaireByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Questionnaire\", \"Questionnaire\", \"Deactivate\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Removes a specific question from the system [Hard-Delete].\n\t * @param {@link cef.store.api.DeleteQuestionByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteQuestionByID\n\t * @path <API Root>/Questionnaire/Question/Delete/ID/{ID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeleteQuestionByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Questionnaire\", \"Question\", \"Delete\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Removes a specific questionnaire from the system [Hard-Delete].\n\t * @param {@link cef.store.api.DeleteQuestionnaireByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteQuestionnaireByID\n\t * @path <API Root>/Questionnaire/Questionnaire/Delete/ID/{ID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeleteQuestionnaireByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Questionnaire\", \"Questionnaire\", \"Delete\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Retrieves answers for the provided list of questions for the current user.\n\t * @param {@link cef.store.api.GetAnswersForQuestionsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetAnswersForQuestions\n\t * @path <API Root>/Questionnaire/CurrentUser/GetAnswersForQuestions\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<AnswerModel>>>}\n\t * @public\n\t */\n\tGetAnswersForQuestions = (routeParams: GetAnswersForQuestionsDto): IHttpPromise<CEFActionResponseT<Array<AnswerModel>>> =>\n\t\taxios.post([\"Questionnaire\", \"CurrentUser\", \"GetAnswersForQuestions\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific question.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestionByID\n\t * @path <API Root>/Questionnaire/Question/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<QuestionModel>}\n\t * @public\n\t */\n\tGetQuestionByID = (id: number): IHttpPromise<QuestionModel> =>\n\t\taxios.get([\"Questionnaire\", \"Question\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific questionnaire.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestionnaireByID\n\t * @path <API Root>/Questionnaire/Questionnaire/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<QuestionnaireModel>}\n\t * @public\n\t */\n\tGetQuestionnaireByID = (id: number): IHttpPromise<QuestionnaireModel> =>\n\t\taxios.get([\"Questionnaire\", \"Questionnaire\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific questionnaire by the key.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestionnaireByKey\n\t * @path <API Root>/Questionnaire/Questionnaire/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<QuestionnaireModel>}\n\t * @public\n\t */\n\tGetQuestionnaireByKey = (key: string): IHttpPromise<QuestionnaireModel> =>\n\t\taxios.get([\"Questionnaire\", \"Questionnaire\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of questionnaires.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestionnaires\n\t * @path <API Root>/Questionnaire/Questionnaires\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<QuestionnairePagedResults>}\n\t * @public\n\t */\n\tGetQuestionnaires = (routeParams?: GetQuestionnairesDto): IHttpPromise<QuestionnairePagedResults> =>\n\t\taxios.get([\"Questionnaire\", \"Questionnaires\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of questions.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestions\n\t * @path <API Root>/Questionnaire/Questions\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<QuestionPagedResults>}\n\t * @public\n\t */\n\tGetQuestions = (routeParams?: GetQuestionsDto): IHttpPromise<QuestionPagedResults> =>\n\t\taxios.get([\"Questionnaire\", \"Questions\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific question type.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestionTypeByID\n\t * @path <API Root>/Questionnaire/QuestionType/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<TypeModel>}\n\t * @public\n\t */\n\tGetQuestionTypeByID = (id: number): IHttpPromise<TypeModel> =>\n\t\taxios.get([\"Questionnaire\", \"QuestionType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of question types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetQuestionTypes\n\t * @path <API Root>/Questionnaire/QuestionTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<QuestionTypePagedResults>}\n\t * @public\n\t */\n\tGetQuestionTypes = (routeParams?: GetQuestionTypesDto): IHttpPromise<QuestionTypePagedResults> =>\n\t\taxios.get([\"Questionnaire\", \"QuestionTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Reactivate a specific question from the system [Restore from Soft-Delete].\n\t * @param {@link cef.store.api.ReactivateQuestionByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReactivateQuestionByID\n\t * @path <API Root>/Questionnaire/Question/Reactivate/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tReactivateQuestionByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Questionnaire\", \"Question\", \"Reactivate\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Reactivate a specific questionnaire from the system [Restore from Soft-Delete].\n\t * @param {@link cef.store.api.ReactivateQuestionnaireByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReactivateQuestionnaireByID\n\t * @path <API Root>/Questionnaire/Questionnaire/Reactivate/ID/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tReactivateQuestionnaireByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Questionnaire\", \"Questionnaire\", \"Reactivate\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Securely creates many answers, ensures that the user ID on the answers is the current user.\n\t * @param {@link cef.store.api.SecureCreateOrUpdateAnswersDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.SecureCreateOrUpdateAnswers\n\t * @path <API Root>/Questionnaire/Answers/UpsertMany\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tSecureCreateOrUpdateAnswers = (routeParams?: SecureCreateOrUpdateAnswersDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Questionnaire\", \"Answers\", \"UpsertMany\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update an existing question.\n\t * @param {@link cef.store.api.UpdateQuestionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateQuestion\n\t * @path <API Root>/Questionnaire/Question/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateQuestion = (routeParams?: UpdateQuestionDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Questionnaire\", \"Question\", \"Update\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update an existing questionnaire.\n\t * @param {@link cef.store.api.UpdateQuestionnaireDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateQuestionnaire\n\t * @path <API Root>/Questionnaire/Questionnaire/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateQuestionnaire = (routeParams?: UpdateQuestionnaireDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Questionnaire\", \"Questionnaire\", \"Update\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update an existing question option.\n\t * @param {@link cef.store.api.UpdateQuestionOptionDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateQuestionOption\n\t * @path <API Root>/Questionnaire/QuestionOption/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateQuestionOption = (routeParams?: UpdateQuestionOptionDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Questionnaire\", \"QuestionOption\", \"Update\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Quoting.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsDisplayNameBase,\n\tImplementsNameBase,\n\tSalesQuoteModel,\n\tSalesQuoteEventSearchModel,\n\tSalesQuoteEventPagedResults,\n\tSalesQuoteSearchModel,\n\tSalesQuotePagedResults,\n\tStateModel,\n\tStateSearchModel,\n\tSalesQuoteStatePagedResults,\n\tStatusModel,\n\tStatusSearchModel,\n\tSalesQuoteStatusPagedResults,\n\tTypeModel,\n\tTypeSearchModel,\n\tSalesQuoteTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesQuoteStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesQuoteStateExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesQuoteStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesQuoteStatusExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesQuoteTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesQuoteTypeExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of sales quote events.\n * @see {@link SalesQuoteEventSearchModel}\n * @public\n */\nexport interface GetSalesQuoteEventsDto extends SalesQuoteEventSearchModel {\n}\n\n/**\n * Use to get a list of sales quotes.\n * @see {@link SalesQuoteSearchModel}\n * @public\n */\nexport interface GetSalesQuotesDto extends SalesQuoteSearchModel {\n}\n\n/**\n * Use to get a list of sales quote states.\n * @see {@link StateSearchModel}\n * @public\n */\nexport interface GetSalesQuoteStatesDto extends StateSearchModel {\n}\n\n/**\n * Use to get a list of sales quote statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetSalesQuoteStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of sales quote types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetSalesQuoteTypesDto extends TypeSearchModel {\n}\n\nexport class Quoting {\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStateExistsByDisplayName\n\t * @path <API Root>/Quoting/SalesQuoteState/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteStateExistsByDisplayName = (routeParams?: CheckSalesQuoteStateExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStateExistsByKey\n\t * @path <API Root>/Quoting/SalesQuoteState/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteStateExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStateExistsByName\n\t * @path <API Root>/Quoting/SalesQuoteState/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteStateExistsByName = (routeParams?: CheckSalesQuoteStateExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByDisplayName\n\t * @path <API Root>/Quoting/SalesQuoteStatus/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteStatusExistsByDisplayName = (routeParams?: CheckSalesQuoteStatusExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByID\n\t * @path <API Root>/Quoting/SalesQuoteStatus/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteStatusExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByKey\n\t * @path <API Root>/Quoting/SalesQuoteStatus/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteStatusExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteStatusExistsByName\n\t * @path <API Root>/Quoting/SalesQuoteStatus/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteStatusExistsByName = (routeParams?: CheckSalesQuoteStatusExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteTypeExistsByDisplayName\n\t * @path <API Root>/Quoting/SalesQuoteType/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteTypeExistsByDisplayName = (routeParams?: CheckSalesQuoteTypeExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteTypeExistsByKey\n\t * @path <API Root>/Quoting/SalesQuoteType/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteTypeExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesQuoteTypeExistsByName\n\t * @path <API Root>/Quoting/SalesQuoteType/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesQuoteTypeExistsByName = (routeParams?: CheckSalesQuoteTypeExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales quote.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteByID\n\t * @path <API Root>/Quoting/SalesQuote/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesQuoteModel>}\n\t * @public\n\t */\n\tGetSalesQuoteByID = (id: number): IHttpPromise<SalesQuoteModel> =>\n\t\taxios.get([\"Quoting\", \"SalesQuote\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales quote events.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteEvents\n\t * @path <API Root>/Quoting/SalesQuoteEvents\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesQuoteEventPagedResults>}\n\t * @public\n\t */\n\tGetSalesQuoteEvents = (routeParams?: GetSalesQuoteEventsDto): IHttpPromise<SalesQuoteEventPagedResults> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteEvents\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of sales quotes.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuotes\n\t * @path <API Root>/Quoting/SalesQuotes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesQuotePagedResults>}\n\t * @public\n\t */\n\tGetSalesQuotes = (routeParams?: GetSalesQuotesDto): IHttpPromise<SalesQuotePagedResults> =>\n\t\taxios.get([\"Quoting\", \"SalesQuotes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales quote state.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStateByID\n\t * @path <API Root>/Quoting/SalesQuoteState/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StateModel>}\n\t * @public\n\t */\n\tGetSalesQuoteStateByID = (id: number): IHttpPromise<StateModel> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales quote states.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStates\n\t * @path <API Root>/Quoting/SalesQuoteStates\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesQuoteStatePagedResults>}\n\t * @public\n\t */\n\tGetSalesQuoteStates = (routeParams?: GetSalesQuoteStatesDto): IHttpPromise<SalesQuoteStatePagedResults> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteStates\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales quote status.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStatusByID\n\t * @path <API Root>/Quoting/SalesQuoteStatus/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StatusModel>}\n\t * @public\n\t */\n\tGetSalesQuoteStatusByID = (id: number): IHttpPromise<StatusModel> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales quote statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteStatuses\n\t * @path <API Root>/Quoting/SalesQuoteStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesQuoteStatusPagedResults>}\n\t * @public\n\t */\n\tGetSalesQuoteStatuses = (routeParams?: GetSalesQuoteStatusesDto): IHttpPromise<SalesQuoteStatusPagedResults> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales quote type.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteTypeByID\n\t * @path <API Root>/Quoting/SalesQuoteType/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<TypeModel>}\n\t * @public\n\t */\n\tGetSalesQuoteTypeByID = (id: number): IHttpPromise<TypeModel> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales quote types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesQuoteTypes\n\t * @path <API Root>/Quoting/SalesQuoteTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesQuoteTypePagedResults>}\n\t * @public\n\t */\n\tGetSalesQuoteTypes = (routeParams?: GetSalesQuoteTypesDto): IHttpPromise<SalesQuoteTypePagedResults> =>\n\t\taxios.get([\"Quoting\", \"SalesQuoteTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Returning.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsDisplayNameBase,\n\tImplementsNameBase,\n\tSalesReturnModel,\n\tSalesReturnEventSearchModel,\n\tSalesReturnEventPagedResults,\n\tSalesReturnReasonSearchModel,\n\tSalesReturnReasonPagedResults,\n\tSalesReturnSearchModel,\n\tSalesReturnPagedResults,\n\tStateModel,\n\tStateSearchModel,\n\tSalesReturnStatePagedResults,\n\tStatusModel,\n\tStatusSearchModel,\n\tSalesReturnStatusPagedResults,\n\tTypeModel,\n\tTypeSearchModel,\n\tSalesReturnTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesReturnStateExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesReturnStateExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesReturnStatusExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesReturnStatusExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckSalesReturnTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckSalesReturnTypeExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of sales return events.\n * @see {@link SalesReturnEventSearchModel}\n * @public\n */\nexport interface GetSalesReturnEventsDto extends SalesReturnEventSearchModel {\n}\n\n/**\n * Use to get a list of sales return reasons.\n * @see {@link SalesReturnReasonSearchModel}\n * @public\n */\nexport interface GetSalesReturnReasonsDto extends SalesReturnReasonSearchModel {\n}\n\n/**\n * Use to get a list of sales returns.\n * @see {@link SalesReturnSearchModel}\n * @public\n */\nexport interface GetSalesReturnsDto extends SalesReturnSearchModel {\n}\n\n/**\n * Use to get a list of sales return states.\n * @see {@link StateSearchModel}\n * @public\n */\nexport interface GetSalesReturnStatesDto extends StateSearchModel {\n}\n\n/**\n * Use to get a list of sales return statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetSalesReturnStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of sales return types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetSalesReturnTypesDto extends TypeSearchModel {\n}\n\nexport class Returning {\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStateExistsByDisplayName\n\t * @path <API Root>/Returning/SalesReturnState/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnStateExistsByDisplayName = (routeParams?: CheckSalesReturnStateExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStateExistsByKey\n\t * @path <API Root>/Returning/SalesReturnState/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnStateExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStateExistsByName\n\t * @path <API Root>/Returning/SalesReturnState/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnStateExistsByName = (routeParams?: CheckSalesReturnStateExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStatusExistsByDisplayName\n\t * @path <API Root>/Returning/SalesReturnStatus/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnStatusExistsByDisplayName = (routeParams?: CheckSalesReturnStatusExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStatusExistsByKey\n\t * @path <API Root>/Returning/SalesReturnStatus/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnStatusExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnStatusExistsByName\n\t * @path <API Root>/Returning/SalesReturnStatus/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnStatusExistsByName = (routeParams?: CheckSalesReturnStatusExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnTypeExistsByDisplayName\n\t * @path <API Root>/Returning/SalesReturnType/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnTypeExistsByDisplayName = (routeParams?: CheckSalesReturnTypeExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnTypeExistsByKey\n\t * @path <API Root>/Returning/SalesReturnType/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnTypeExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckSalesReturnTypeExistsByName\n\t * @path <API Root>/Returning/SalesReturnType/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckSalesReturnTypeExistsByName = (routeParams?: CheckSalesReturnTypeExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales return.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnByID\n\t * @path <API Root>/Returning/SalesReturn/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnModel>}\n\t * @public\n\t */\n\tGetSalesReturnByID = (id: number): IHttpPromise<SalesReturnModel> =>\n\t\taxios.get([\"Returning\", \"SalesReturn\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales return events.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnEvents\n\t * @path <API Root>/Returning/SalesReturnEvents\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnEventPagedResults>}\n\t * @public\n\t */\n\tGetSalesReturnEvents = (routeParams?: GetSalesReturnEventsDto): IHttpPromise<SalesReturnEventPagedResults> =>\n\t\taxios.get([\"Returning\", \"SalesReturnEvents\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of sales return reasons.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnReasons\n\t * @path <API Root>/Returning/SalesReturnReasons\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnReasonPagedResults>}\n\t * @public\n\t */\n\tGetSalesReturnReasons = (routeParams?: GetSalesReturnReasonsDto): IHttpPromise<SalesReturnReasonPagedResults> =>\n\t\taxios.get([\"Returning\", \"SalesReturnReasons\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of sales returns.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturns\n\t * @path <API Root>/Returning/SalesReturns\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnPagedResults>}\n\t * @public\n\t */\n\tGetSalesReturns = (routeParams?: GetSalesReturnsDto): IHttpPromise<SalesReturnPagedResults> =>\n\t\taxios.get([\"Returning\", \"SalesReturns\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales return state.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStateByID\n\t * @path <API Root>/Returning/SalesReturnState/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StateModel>}\n\t * @public\n\t */\n\tGetSalesReturnStateByID = (id: number): IHttpPromise<StateModel> =>\n\t\taxios.get([\"Returning\", \"SalesReturnState\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales return states.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStates\n\t * @path <API Root>/Returning/SalesReturnStates\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnStatePagedResults>}\n\t * @public\n\t */\n\tGetSalesReturnStates = (routeParams?: GetSalesReturnStatesDto): IHttpPromise<SalesReturnStatePagedResults> =>\n\t\taxios.get([\"Returning\", \"SalesReturnStates\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales return status.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStatusByID\n\t * @path <API Root>/Returning/SalesReturnStatus/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StatusModel>}\n\t * @public\n\t */\n\tGetSalesReturnStatusByID = (id: number): IHttpPromise<StatusModel> =>\n\t\taxios.get([\"Returning\", \"SalesReturnStatus\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales return statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnStatuses\n\t * @path <API Root>/Returning/SalesReturnStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnStatusPagedResults>}\n\t * @public\n\t */\n\tGetSalesReturnStatuses = (routeParams?: GetSalesReturnStatusesDto): IHttpPromise<SalesReturnStatusPagedResults> =>\n\t\taxios.get([\"Returning\", \"SalesReturnStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales return type.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnTypeByID\n\t * @path <API Root>/Returning/SalesReturnType/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<TypeModel>}\n\t * @public\n\t */\n\tGetSalesReturnTypeByID = (id: number): IHttpPromise<TypeModel> =>\n\t\taxios.get([\"Returning\", \"SalesReturnType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales return types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesReturnTypes\n\t * @path <API Root>/Returning/SalesReturnTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesReturnTypePagedResults>}\n\t * @public\n\t */\n\tGetSalesReturnTypes = (routeParams?: GetSalesReturnTypesDto): IHttpPromise<SalesReturnTypePagedResults> =>\n\t\taxios.get([\"Returning\", \"SalesReturnTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Reviews.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tReviewModel,\n\tTypeSearchModel,\n\tReviewTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to create a new review.\n * @see {@link ReviewModel}\n * @public\n */\nexport interface CreateReviewDto extends ReviewModel {\n}\n\n/**\n * Use to get a list of review types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetReviewTypesDto extends TypeSearchModel {\n}\n\nexport class Reviews {\n\t/**\n\t * Use to create a new review.\n\t * @param {@link cef.store.api.CreateReviewDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateReview\n\t * @path <API Root>/Reviews/Review/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateReview = (routeParams?: CreateReviewDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Reviews\", \"Review\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of review types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetReviewTypes\n\t * @path <API Root>/Reviews/ReviewTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ReviewTypePagedResults>}\n\t * @public\n\t */\n\tGetReviewTypes = (routeParams?: GetReviewTypesDto): IHttpPromise<ReviewTypePagedResults> =>\n\t\taxios.get([\"Reviews\", \"ReviewTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Sales.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tSalesGroupSearchModel,\n\tSalesGroupPagedResults,\n\tSalesGroupModel,\n\tTypeSearchModel,\n\tSalesItemTargetTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to get history of sales groups for the current account\n * @see {@link SalesGroupSearchModel}\n * @public\n */\nexport interface GetCurrentAccountSalesGroupsDto extends SalesGroupSearchModel {\n}\n\n/**\n * Use to get a list of sales item target types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetSalesItemTargetTypesDto extends TypeSearchModel {\n}\n\nexport class Sales {\n\t/**\n\t * Use to get history of sales groups for the current account\n\t * @param {@link cef.store.api.GetCurrentAccountSalesGroupsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountSalesGroups\n\t * @path <API Root>/Sales/CurrentAccount/SalesGroups\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<SalesGroupPagedResults>}\n\t * @public\n\t */\n\tGetCurrentAccountSalesGroups = (routeParams?: GetCurrentAccountSalesGroupsDto): IHttpPromise<SalesGroupPagedResults> =>\n\t\taxios.post([\"Sales\", \"CurrentAccount\", \"SalesGroups\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific sales group.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesGroupByID\n\t * @path <API Root>/Sales/SalesGroup/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesGroupModel>}\n\t * @public\n\t */\n\tGetSalesGroupByID = (id: number): IHttpPromise<SalesGroupModel> =>\n\t\taxios.get([\"Sales\", \"SalesGroup\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sales item target types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSalesItemTargetTypes\n\t * @path <API Root>/Sales/SalesItemTargetTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesItemTargetTypePagedResults>}\n\t * @public\n\t */\n\tGetSalesItemTargetTypes = (routeParams?: GetSalesItemTargetTypesDto): IHttpPromise<SalesItemTargetTypePagedResults> =>\n\t\taxios.get([\"Sales\", \"SalesItemTargetTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific sales group and check for ownership by the current Account.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSecureSalesGroup\n\t * @path <API Root>/Sales/SecureSalesGroup/{ID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<SalesGroupModel>}\n\t * @public\n\t */\n\tGetSecureSalesGroup = (id: number): IHttpPromise<SalesGroupModel> =>\n\t\taxios.get([\"Sales\", \"SecureSalesGroup\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n}\n","/**\n * @file _api/cvApi.Sampling.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tSampleRequestModel,\n\tStateSearchModel,\n\tSampleRequestStatePagedResults,\n\tStatusSearchModel,\n\tSampleRequestStatusPagedResults,\n\tTypeSearchModel,\n\tSampleRequestTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to get a list of sample request states.\n * @see {@link StateSearchModel}\n * @public\n */\nexport interface GetSampleRequestStatesDto extends StateSearchModel {\n}\n\n/**\n * Use to get a list of sample request statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetSampleRequestStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of sample request types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetSampleRequestTypesDto extends TypeSearchModel {\n}\n\nexport class Sampling {\n\t/**\n\t * Use to get a specific sample request.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestByID\n\t * @path <API Root>/Sampling/SampleRequest/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SampleRequestModel>}\n\t * @public\n\t */\n\tGetSampleRequestByID = (id: number): IHttpPromise<SampleRequestModel> =>\n\t\taxios.get([\"Sampling\", \"SampleRequest\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of sample request states.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestStates\n\t * @path <API Root>/Sampling/SampleRequestStates\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SampleRequestStatePagedResults>}\n\t * @public\n\t */\n\tGetSampleRequestStates = (routeParams?: GetSampleRequestStatesDto): IHttpPromise<SampleRequestStatePagedResults> =>\n\t\taxios.get([\"Sampling\", \"SampleRequestStates\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of sample request statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestStatuses\n\t * @path <API Root>/Sampling/SampleRequestStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SampleRequestStatusPagedResults>}\n\t * @public\n\t */\n\tGetSampleRequestStatuses = (routeParams?: GetSampleRequestStatusesDto): IHttpPromise<SampleRequestStatusPagedResults> =>\n\t\taxios.get([\"Sampling\", \"SampleRequestStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of sample request types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSampleRequestTypes\n\t * @path <API Root>/Sampling/SampleRequestTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SampleRequestTypePagedResults>}\n\t * @public\n\t */\n\tGetSampleRequestTypes = (routeParams?: GetSampleRequestTypesDto): IHttpPromise<SampleRequestTypePagedResults> =>\n\t\taxios.get([\"Sampling\", \"SampleRequestTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Scheduling.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tAppointmentModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponse,\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Gets appointments for the current account in the given time range.\n * @public\n */\nexport interface GetCurrentAccountAppointmentsDto {\n\tStart: Date;\n\tEnd: Date;\n}\n\n/**\n * Reserves an appointment with the given details.\n * @see {@link AppointmentModel}\n * @public\n */\nexport interface ReserveAppointmentDto extends AppointmentModel {\n}\n\nexport class Scheduling {\n\t/**\n\t * Confirms the given appointment.\n\t * @param {@link cef.store.api.CancelAppointmentDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CancelAppointment\n\t * @path <API Root>/Scheduling/CancelAppointment/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCancelAppointment = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Scheduling\", \"CancelAppointment\", id].join(\"/\"));\n\n\t/**\n\t * Confirms the given appointment.\n\t * @param {@link cef.store.api.ConfirmAppointmentDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ConfirmAppointment\n\t * @path <API Root>/Scheduling/ConfirmAppointment/{ID}\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tConfirmAppointment = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Scheduling\", \"ConfirmAppointment\", id].join(\"/\"));\n\n\t/**\n\t * Gets appointments for the current account in the given time range.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentAccountAppointments\n\t * @path <API Root>/Scheduling/CurrentAppointments/TimeRange\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<AppointmentModel>>>}\n\t * @public\n\t */\n\tGetCurrentAccountAppointments = (routeParams: GetCurrentAccountAppointmentsDto): IHttpPromise<CEFActionResponseT<Array<AppointmentModel>>> =>\n\t\taxios.get([\"Scheduling\", \"CurrentAppointments\", \"TimeRange\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Securely retrieves an appointment, or returns an error if not possible.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSecureAppointment\n\t * @path <API Root>/Scheduling/SecureAppointment/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<AppointmentModel>>}\n\t * @public\n\t */\n\tGetSecureAppointment = (id: number): IHttpPromise<CEFActionResponseT<AppointmentModel>> =>\n\t\taxios.get([\"Scheduling\", \"SecureAppointment\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Reserves an appointment with the given details.\n\t * @param {@link cef.store.api.ReserveAppointmentDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ReserveAppointment\n\t * @path <API Root>/Scheduling/ReserveAppointment\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tReserveAppointment = (routeParams?: ReserveAppointmentDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Scheduling\", \"ReserveAppointment\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Shipping.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tTypeSearchModel,\n\tPackageTypePagedResults,\n\tStatusSearchModel,\n\tShipmentStatusPagedResults,\n\tShipmentTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to get a list of package types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetPackageTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get a list of shipment statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetShipmentStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a list of shipment types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetShipmentTypesDto extends TypeSearchModel {\n}\n\nexport class Shipping {\n\t/**\n\t * Use to get a list of package types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetPackageTypes\n\t * @path <API Root>/Shipping/PackageTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<PackageTypePagedResults>}\n\t * @public\n\t */\n\tGetPackageTypes = (routeParams?: GetPackageTypesDto): IHttpPromise<PackageTypePagedResults> =>\n\t\taxios.get([\"Shipping\", \"PackageTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of shipment statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetShipmentStatuses\n\t * @path <API Root>/Shipping/ShipmentStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ShipmentStatusPagedResults>}\n\t * @public\n\t */\n\tGetShipmentStatuses = (routeParams?: GetShipmentStatusesDto): IHttpPromise<ShipmentStatusPagedResults> =>\n\t\taxios.get([\"Shipping\", \"ShipmentStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of shipment types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetShipmentTypes\n\t * @path <API Root>/Shipping/ShipmentTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<ShipmentTypePagedResults>}\n\t * @public\n\t */\n\tGetShipmentTypes = (routeParams?: GetShipmentTypesDto): IHttpPromise<ShipmentTypePagedResults> =>\n\t\taxios.get([\"Shipping\", \"ShipmentTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Shopping.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsTypeNameForStorefrontBase,\n\tSerializableAttributesDictionary,\n\tSalesItemTargetBaseModel,\n\tAppliedCartItemDiscountModel,\n\tImplementsCartLookupForStorefrontBase,\n\tImplementsTypeNameBase,\n\tCartTypeModel,\n\tContactModel,\n\tCartModel,\n\tSalesItemBaseSearchModel,\n\tCartItemPagedResults,\n\tStateSearchModel,\n\tCartStatePagedResults,\n\tStatusSearchModel,\n\tCartStatusPagedResults,\n\tImplementsNameBase,\n\tCartTypeSearchModel,\n\tCartTypePagedResults,\n\tRateQuoteModel,\n\tImplementsIDOnBodyBase,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tSalesItemBaseModel,\n\tCEFActionResponse,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\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)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface AddBufferSkuCartItemDto extends ImplementsTypeNameForStorefrontBase {\n\t/** Buffer Sku SEO URL */\n\tBufferSkuSEOURL: string;\n\t/** Amount to Fill (will divide cost of item to get quantity to add) */\n\tAmountToFill: string;\n}\n\n/**\n * Use to add an item to the specified session cart for the current user (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface AddCartItemDto extends ImplementsTypeNameForStorefrontBase {\n\t/** The ID of the product to add */\n\tProductID: number;\n\t/** The quantity of the product to add */\n\tQuantity: number;\n\t/** Cart Item Serializable JSON Attributes */\n\tSerializableAttributes?: SerializableAttributesDictionary;\n\t/** Shipment to add to item */\n\tTargets?: Array<SalesItemTargetBaseModel>;\n\t/** [Optional] */\n\tForceUniqueLineItemKey?: string;\n}\n\n/**\n * Use to add multiple items to the specified session cart for the current user (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface AddCartItemsDto extends ImplementsTypeNameForStorefrontBase {\n\t/** Cart items to add */\n\tItems: Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>;\n}\n\n/**\n * Use to add an item to the compare cart for the current user (or anon)\n * @see {@link ImplementsCartLookupForStorefrontBase}\n * @public\n */\nexport interface AddCompareCartItemDto extends ImplementsCartLookupForStorefrontBase {\n\t/** The ID of the product to add */\n\tProductID: number;\n\t/** Cart Item Serializable JSON Attributes */\n\tSerializableAttributes?: SerializableAttributesDictionary;\n}\n\n/**\n * Use to add an item to the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface AddStaticCartItemDto extends ImplementsTypeNameForStorefrontBase {\n\t/** The ID of the product to add */\n\tProductID: number;\n\t/** The quantity of the product to add (Only applicable to Notify Me When In Stock static cart */\n\tQuantity: number;\n\t/** Cart Item Serializable JSON Attributes */\n\tSerializableAttributes?: SerializableAttributesDictionary;\n}\n\n/**\n * Use to add a Lot to the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n * @see {@link ImplementsTypeNameBase}\n * @public\n */\nexport interface AddStaticCartLotDto extends ImplementsTypeNameBase {\n\t/** The ID of the lot to add */\n\tLotID: number;\n\t/** The quantity of the product to add (Only applicable to Notify Me When In Stock static cart */\n\tQuantity: number;\n}\n\n/**\n * Use to get shipping rates for the current cart.\n * @public\n */\nexport interface ApplyCurrentCartShippingRateQuoteDto {\n\t/** The type name of the session cart to apply the selected rate quote to. */\n\tTypeName: string;\n\t/** The Key of the rate quote to select. Send null to un-assign the current rate quote. */\n\tRateQuoteID?: number;\n\t/** The requested ship by date from the Customer. */\n\tRequestedShipDate?: Date;\n}\n\n/**\n * Use to clear a specific session cart for the current user (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface ClearCurrentCartDto extends ImplementsTypeNameForStorefrontBase {\n}\n\n/**\n * Use to get shipping rates for the current cart.\n * @public\n */\nexport interface ClearCurrentCartShippingRateQuoteDto {\n\t/** The type name of the session cart to clear the selected rate quote from. */\n\tTypeName: string;\n}\n\n/**\n * Use to clear a specific compare cart for the current user (or anon)\n * @see {@link ImplementsCartLookupForStorefrontBase}\n * @public\n */\nexport interface ClearCurrentCompareCartDto extends ImplementsCartLookupForStorefrontBase {\n}\n\n/**\n * Use to clear a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n * @see {@link ImplementsTypeNameBase}\n * @public\n */\nexport interface ClearCurrentStaticCartDto extends ImplementsTypeNameBase {\n}\n\n/**\n * Create a custom cart type assigned to the current user (custom shopping lists).\n * @see {@link CartTypeModel}\n * @public\n */\nexport interface CreateCartTypeForCurrentUserDto extends CartTypeModel {\n}\n\n/**\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)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartAddBufferFeeDto extends ImplementsTypeNameForStorefrontBase {\n\t/** Amount to Fee */\n\tAmountToFee: string;\n}\n\n/**\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)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartAddDiscountDto extends ImplementsTypeNameForStorefrontBase {\n\t/** Discount Code */\n\tCode: string;\n}\n\n/**\n * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartClearBillingContactDto extends ImplementsTypeNameForStorefrontBase {\n}\n\n/**\n * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartClearShippingContactDto extends ImplementsTypeNameForStorefrontBase {\n}\n\n/**\n * Get the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartGetShippingContactDto extends ImplementsTypeNameForStorefrontBase {\n\t/** The Cart ID (requires admin to set) */\n\tCartID?: number;\n\t/** The User ID (requires admin to set) */\n\tUserID?: number;\n\t/** The Account ID (requires admin to set) */\n\tAccountID?: number;\n}\n\n/**\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)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartRemoveDiscountDto extends ImplementsTypeNameForStorefrontBase {\n\t/** Cart Discount ID */\n\tID: number;\n}\n\n/**\n * Set the billing contact on the current user's session cart (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartSetBillingContactDto extends ImplementsTypeNameForStorefrontBase {\n\t/** The Cart ID (requires admin to set) */\n\tCartID?: number;\n\t/** The User ID (requires admin to set) */\n\tUserID?: number;\n\t/** The billing contact */\n\tBillingContact?: ContactModel;\n}\n\n/**\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)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartSetSetSameAsBillingDto extends ImplementsTypeNameForStorefrontBase {\n\t/** The Cart ID (requires admin to set) */\n\tCartID?: number;\n\t/** The User ID (requires admin to set) */\n\tUserID?: number;\n\t/** The flag value */\n\tIsSameAsBilling: boolean;\n}\n\n/**\n * Set the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface CurrentCartSetShippingContactDto extends ImplementsTypeNameForStorefrontBase {\n\t/** The Cart ID (requires admin to set) */\n\tCartID?: number;\n\t/** The User ID (requires admin to set) */\n\tUserID?: number;\n\t/** The shipping contact */\n\tShippingContact?: ContactModel;\n}\n\n/**\n * Use to update the current user's session cart (Shopping, Quote, Samples) attributes\n * @see {@link CartModel}\n * @public\n */\nexport interface CurrentCartUpdateAttributesDto extends CartModel {\n}\n\n/**\n * Delete a custom cart type assigned to the current user (custom shopping lists).\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface DeleteCartTypeForCurrentUserDto extends ImplementsTypeNameForStorefrontBase {\n}\n\n/**\n * Use to get a list of cart items.\n * @see {@link SalesItemBaseSearchModel}\n * @public\n */\nexport interface GetCartItemsDto extends SalesItemBaseSearchModel {\n}\n\n/**\n * Use to get a list of cart states.\n * @see {@link StateSearchModel}\n * @public\n */\nexport interface GetCartStatesDto extends StateSearchModel {\n}\n\n/**\n * Use to get a list of cart statuses.\n * @see {@link StatusSearchModel}\n * @public\n */\nexport interface GetCartStatusesDto extends StatusSearchModel {\n}\n\n/**\n * Use to get a specific cart type by the name.\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface GetCartTypeByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Gets a custom cart type assigned to the current user (custom shopping lists).\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface GetCartTypeForCurrentUserDto extends ImplementsTypeNameForStorefrontBase {\n}\n\n/**\n * Use to get a list of cart types.\n * @see {@link CartTypeSearchModel}\n * @public\n */\nexport interface GetCartTypesDto extends CartTypeSearchModel {\n}\n\n/**\n * Use to get a specific session cart for the current user (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface GetCurrentCartDto extends ImplementsTypeNameForStorefrontBase {\n\tValidate?: boolean;\n}\n\n/**\n * Use to access all items in the specified session cart for the current user (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface GetCurrentCartItemsDto extends ImplementsTypeNameForStorefrontBase {\n}\n\n/**\n * Use to get shipping rates for the current cart.\n * @public\n */\nexport interface GetCurrentCartShippingRateQuotesDto {\n\t/** Cart Type Name */\n\tTypeName?: string;\n\t/** Adding the Expedited flag will activate the fee and change to target ship by with expedited timeline. */\n\tExpedited: boolean;\n}\n\n/**\n * Use to get a specific compare cart for the current user (or anon)\n * @see {@link ImplementsCartLookupForStorefrontBase}\n * @public\n */\nexport interface GetCurrentCompareCartDto extends ImplementsCartLookupForStorefrontBase {\n}\n\n/**\n * Use to get a specific compare cart for the current user (or anon)\n * @see {@link ImplementsCartLookupForStorefrontBase}\n * @public\n */\nexport interface GetCurrentCompareCartItemsDto extends ImplementsCartLookupForStorefrontBase {\n}\n\n/**\n * Use to get a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n * @see {@link ImplementsTypeNameBase}\n * @public\n */\nexport interface GetCurrentStaticCartDto extends ImplementsTypeNameBase {\n}\n\n/**\n * Use to access all items in the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n * @see {@link ImplementsTypeNameBase}\n * @public\n */\nexport interface GetCurrentStaticCartItemsDto extends ImplementsTypeNameBase {\n}\n\n/**\n * Use to get a list of the cart types this user has.\n * @public\n */\nexport interface GetCurrentUserCartTypesDto {\n\t/** Include Cart Types not created by the User, such as the default Cart, Wish List, etc. Defaults to True if not set */\n\tIncludeNotCreated?: boolean;\n}\n\n/**\n * Use to deactivate an item from the specified session cart for the current user (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface RemoveCartItemByProductIDAndTypeDto extends ImplementsTypeNameForStorefrontBase {\n\t/** Product ID */\n\tProductID: number;\n\t/** [Optional] */\n\tForceUniqueLineItemKey?: string;\n}\n\n/**\n * Removes a Discount from an item in the current user's session cart (Shopping, Quote) (Not available for Static carts or Samples carts)\n * @see {@link ImplementsIDOnBodyBase}\n * @public\n */\nexport interface RemoveCartItemDiscountDto extends ImplementsIDOnBodyBase {\n}\n\n/**\n * Use to deactivate an item from the compare cart for the current user (or anon)\n * @see {@link ImplementsCartLookupForStorefrontBase}\n * @public\n */\nexport interface RemoveCompareCartItemByProductIDDto extends ImplementsCartLookupForStorefrontBase {\n}\n\n/**\n * Use to deactivate an item from the specified static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n * @see {@link ImplementsTypeNameBase}\n * @public\n */\nexport interface RemoveStaticCartItemByProductIDAndTypeDto extends ImplementsTypeNameBase {\n\t/** Product ID */\n\tProductID: number;\n\t/** [Optional] */\n\tForceUniqueLineItemKey?: string;\n}\n\n/**\n * Use to send an email containing the current user's cart items to an email address\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface ShareCurrentCartItemsByEmailDto extends ImplementsTypeNameForStorefrontBase {\n\tEmail: string;\n}\n\n/**\n * Use to send an email containing the current user's static cart items from the specified type to an email address\n * @see {@link ImplementsTypeNameBase}\n * @public\n */\nexport interface ShareStaticCartItemsByEmailDto extends ImplementsTypeNameBase {\n\tEmail: string;\n}\n\n/**\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.\n * @public\n */\nexport interface UpdateCartItemQuantityDto {\n\t/** The identifier of the cart item to change the quantity value on. */\n\tCartItemID: number;\n\t/** The new Quantity value to set (actual number, not an offset). */\n\tQuantity: number;\n\t/** The new Quantity Back-Ordered value to set (actual number, not an offset). */\n\tQuantityBackOrdered: number;\n\t/** The new Quantity Pre-Sold value to set (actual number, not an offset). */\n\tQuantityPreSold: number;\n}\n\n/**\n * Use to update multiple items in the specified session cart for the current user (Shopping, Quote, Samples)\n * @see {@link ImplementsTypeNameForStorefrontBase}\n * @public\n */\nexport interface UpdateCartItemsDto extends ImplementsTypeNameForStorefrontBase {\n\t/** Cart items to update */\n\tItems: Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>;\n}\n\n/**\n * Use to update an existing cart type.\n * @see {@link CartTypeModel}\n * @public\n */\nexport interface UpdateCartTypeDto extends CartTypeModel {\n}\n\nexport class Shopping {\n\t/**\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)\n\t * @param {@link cef.store.api.AddBufferSkuCartItemDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddBufferSkuCartItem\n\t * @path <API Root>/Shopping/CurrentCart/AddBufferSkuCartItem\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<boolean>}\n\t * @public\n\t */\n\tAddBufferSkuCartItem = (routeParams: AddBufferSkuCartItemDto): IHttpPromise<boolean> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"AddBufferSkuCartItem\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to add an item to the specified session cart for the current user (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.AddCartItemDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddCartItem\n\t * @path <API Root>/Shopping/CurrentCart/Item/Add\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tAddCartItem = (routeParams: AddCartItemDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"Item\", \"Add\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to add multiple items to the specified session cart for the current user (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.AddCartItemsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddCartItems\n\t * @path <API Root>/Shopping/CurrentCart/Items/Add\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<number>>>}\n\t * @public\n\t */\n\tAddCartItems = (routeParams: AddCartItemsDto): IHttpPromise<CEFActionResponseT<Array<number>>> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"Items\", \"Add\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to add an item to the compare cart for the current user (or anon)\n\t * @param {@link cef.store.api.AddCompareCartItemDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddCompareCartItem\n\t * @path <API Root>/Shopping/CurrentCompareCart/Item/Add\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tAddCompareCartItem = (routeParams: AddCompareCartItemDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Shopping\", \"CurrentCompareCart\", \"Item\", \"Add\"].join(\"/\"), routeParams);\n\n\t/**\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)\n\t * @param {@link cef.store.api.AddStaticCartItemDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddStaticCartItem\n\t * @path <API Root>/Shopping/CurrentStaticCart/Item/Add\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tAddStaticCartItem = (routeParams: AddStaticCartItemDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"Item\", \"Add\"].join(\"/\"), routeParams);\n\n\t/**\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)\n\t * @param {@link cef.store.api.AddStaticCartLotDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.AddStaticCartLot\n\t * @path <API Root>/Shopping/CurrentStaticCart/Lot/Add\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tAddStaticCartLot = (routeParams: AddStaticCartLotDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"Lot\", \"Add\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get shipping rates for the current cart.\n\t * @param {@link cef.store.api.ApplyCurrentCartShippingRateQuoteDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ApplyCurrentCartShippingRateQuote\n\t * @path <API Root>/Shopping/CurrentCart/ShippingRateQuotes/Apply\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tApplyCurrentCartShippingRateQuote = (routeParams: ApplyCurrentCartShippingRateQuoteDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShippingRateQuotes\", \"Apply\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to clear a specific session cart for the current user (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.ClearCurrentCartDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentCart\n\t * @path <API Root>/Shopping/CurrentCart/Clear\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tClearCurrentCart = (routeParams?: ClearCurrentCartDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Clear\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Use to get shipping rates for the current cart.\n\t * @param {@link cef.store.api.ClearCurrentCartShippingRateQuoteDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentCartShippingRateQuote\n\t * @path <API Root>/Shopping/CurrentCart/ShippingRateQuotes/Clear\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tClearCurrentCartShippingRateQuote = (routeParams: ClearCurrentCartShippingRateQuoteDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShippingRateQuotes\", \"Clear\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to clear a specific compare cart for the current user (or anon)\n\t * @param {@link cef.store.api.ClearCurrentCompareCartDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentCompareCart\n\t * @path <API Root>/Shopping/CurrentCompareCart/Clear\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tClearCurrentCompareCart = (routeParams?: ClearCurrentCompareCartDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentCompareCart\", \"Clear\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Use to clear a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n\t * @param {@link cef.store.api.ClearCurrentStaticCartDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ClearCurrentStaticCart\n\t * @path <API Root>/Shopping/CurrentStaticCart/Clear\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tClearCurrentStaticCart = (routeParams?: ClearCurrentStaticCartDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentStaticCart\", \"Clear\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Create a custom cart type assigned to the current user (custom shopping lists).\n\t * @param {@link cef.store.api.CreateCartTypeForCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateCartTypeForCurrentUser\n\t * @path <API Root>/Shopping/CurrentUser/CreateCartType\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CartTypeModel>}\n\t * @public\n\t */\n\tCreateCartTypeForCurrentUser = (routeParams?: CreateCartTypeForCurrentUserDto): IHttpPromise<CartTypeModel> =>\n\t\taxios.post([\"Shopping\", \"CurrentUser\", \"CreateCartType\"].join(\"/\"), routeParams);\n\n\t/**\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)\n\t * @param {@link cef.store.api.CurrentCartAddBufferFeeDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartAddBufferFee\n\t * @path <API Root>/Shopping/CurrentCart/AddBufferFee\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<boolean>}\n\t * @public\n\t */\n\tCurrentCartAddBufferFee = (routeParams: CurrentCartAddBufferFeeDto): IHttpPromise<boolean> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"AddBufferFee\"].join(\"/\"), routeParams);\n\n\t/**\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)\n\t * @param {@link cef.store.api.CurrentCartAddDiscountDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartAddDiscount\n\t * @path <API Root>/Shopping/CurrentCart/AddDiscount\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartAddDiscount = (routeParams: CurrentCartAddDiscountDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"AddDiscount\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.CurrentCartClearBillingContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartClearBillingContact\n\t * @path <API Root>/Shopping/CurrentCart/ClearBillingContact\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartClearBillingContact = (routeParams?: CurrentCartClearBillingContactDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"ClearBillingContact\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Clear the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.CurrentCartClearShippingContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartClearShippingContact\n\t * @path <API Root>/Shopping/CurrentCart/ClearShippingContact\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartClearShippingContact = (routeParams?: CurrentCartClearShippingContactDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"ClearShippingContact\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Get the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.CurrentCartGetShippingContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartGetShippingContact\n\t * @path <API Root>/Shopping/CurrentCart/GetShippingContact\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<ContactModel>>}\n\t * @public\n\t */\n\tCurrentCartGetShippingContact = (routeParams?: CurrentCartGetShippingContactDto): IHttpPromise<CEFActionResponseT<ContactModel>> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"GetShippingContact\"].join(\"/\"), routeParams);\n\n\t/**\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)\n\t * @param {@link cef.store.api.CurrentCartRemoveDiscountDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartRemoveDiscount\n\t * @path <API Root>/Shopping/CurrentCart/RemoveDiscount\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartRemoveDiscount = (routeParams: CurrentCartRemoveDiscountDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"RemoveDiscount\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Set the billing contact on the current user's session cart (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.CurrentCartSetBillingContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartSetBillingContact\n\t * @path <API Root>/Shopping/CurrentCart/SetBillingContact\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartSetBillingContact = (routeParams?: CurrentCartSetBillingContactDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"SetBillingContact\"].join(\"/\"), routeParams);\n\n\t/**\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)\n\t * @param {@link cef.store.api.CurrentCartSetSetSameAsBillingDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartSetSetSameAsBilling\n\t * @path <API Root>/Shopping/CurrentCart/SetSameAsBilling\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartSetSetSameAsBilling = (routeParams: CurrentCartSetSetSameAsBillingDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"SetSameAsBilling\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Set the shipping contact on the current user's session cart (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.CurrentCartSetShippingContactDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartSetShippingContact\n\t * @path <API Root>/Shopping/CurrentCart/SetShippingContact\n\t * @verb PATCH\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartSetShippingContact = (routeParams?: CurrentCartSetShippingContactDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.patch([\"Shopping\", \"CurrentCart\", \"SetShippingContact\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update the current user's session cart (Shopping, Quote, Samples) attributes\n\t * @param {@link cef.store.api.CurrentCartUpdateAttributesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CurrentCartUpdateAttributes\n\t * @path <API Root>/Shopping/CurrentCart/UpdateAttributes\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tCurrentCartUpdateAttributes = (routeParams?: CurrentCartUpdateAttributesDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.put([\"Shopping\", \"CurrentCart\", \"UpdateAttributes\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Removes a specific cart from the system [Hard-Delete].\n\t * @param {@link cef.store.api.DeleteCartByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteCartByID\n\t * @path <API Root>/Shopping/Cart/Delete/ID/{ID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeleteCartByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"Cart\", \"Delete\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Removes a specific cart type from the system [Hard-Delete].\n\t * @param {@link cef.store.api.DeleteCartTypeByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteCartTypeByID\n\t * @path <API Root>/Shopping/CartType/Delete/ID/{ID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeleteCartTypeByID = (id: number): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CartType\", \"Delete\", \"ID\", id].join(\"/\"));\n\n\t/**\n\t * Delete a custom cart type assigned to the current user (custom shopping lists).\n\t * @param {@link cef.store.api.DeleteCartTypeForCurrentUserDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.DeleteCartTypeForCurrentUser\n\t * @path <API Root>/Shopping/CurrentUser/DeleteCartType\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tDeleteCartTypeForCurrentUser = (routeParams?: DeleteCartTypeForCurrentUserDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentUser\", \"DeleteCartType\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Use to get a specific cart item.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartItemByID\n\t * @path <API Root>/Shopping/CartItem/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SalesItemBaseModel<AppliedCartItemDiscountModel>>}\n\t * @public\n\t */\n\tGetCartItemByID = (id: number): IHttpPromise<SalesItemBaseModel<AppliedCartItemDiscountModel>> =>\n\t\taxios.get([\"Shopping\", \"CartItem\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of cart items.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartItems\n\t * @path <API Root>/Shopping/CartItems\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CartItemPagedResults>}\n\t * @public\n\t */\n\tGetCartItems = (routeParams?: GetCartItemsDto): IHttpPromise<CartItemPagedResults> =>\n\t\taxios.get([\"Shopping\", \"CartItems\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of cart states.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartStates\n\t * @path <API Root>/Shopping/CartStates\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CartStatePagedResults>}\n\t * @public\n\t */\n\tGetCartStates = (routeParams?: GetCartStatesDto): IHttpPromise<CartStatePagedResults> =>\n\t\taxios.get([\"Shopping\", \"CartStates\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of cart statuses.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartStatuses\n\t * @path <API Root>/Shopping/CartStatuses\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CartStatusPagedResults>}\n\t * @public\n\t */\n\tGetCartStatuses = (routeParams?: GetCartStatusesDto): IHttpPromise<CartStatusPagedResults> =>\n\t\taxios.get([\"Shopping\", \"CartStatuses\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific cart type by the name.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartTypeByName\n\t * @path <API Root>/Shopping/CartType/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CartTypeModel>}\n\t * @public\n\t */\n\tGetCartTypeByName = (routeParams?: GetCartTypeByNameDto): IHttpPromise<CartTypeModel> =>\n\t\taxios.get([\"Shopping\", \"CartType\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Gets a custom cart type assigned to the current user (custom shopping lists).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartTypeForCurrentUser\n\t * @path <API Root>/Shopping/CurrentUser/CartType\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<CartTypeModel>>}\n\t * @public\n\t */\n\tGetCartTypeForCurrentUser = (routeParams?: GetCartTypeForCurrentUserDto): IHttpPromise<CEFActionResponseT<CartTypeModel>> =>\n\t\taxios.get([\"Shopping\", \"CurrentUser\", \"CartType\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of cart types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCartTypes\n\t * @path <API Root>/Shopping/CartTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<CartTypePagedResults>}\n\t * @public\n\t */\n\tGetCartTypes = (routeParams?: GetCartTypesDto): IHttpPromise<CartTypePagedResults> =>\n\t\taxios.get([\"Shopping\", \"CartTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific session cart for the current user (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.GetCurrentCartDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCart\n\t * @path <API Root>/Shopping/CurrentCart\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<CartModel>>}\n\t * @public\n\t */\n\tGetCurrentCart = (routeParams?: GetCurrentCartDto): IHttpPromise<CEFActionResponseT<CartModel>> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to access all items in the specified session cart for the current user (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.GetCurrentCartItemsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCartItems\n\t * @path <API Root>/Shopping/CurrentCart/Items\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>>}\n\t * @public\n\t */\n\tGetCurrentCartItems = (routeParams?: GetCurrentCartItemsDto): IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"Items\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get shipping rates for the current cart.\n\t * @param {@link cef.store.api.GetCurrentCartShippingRateQuotesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCartShippingRateQuotes\n\t * @path <API Root>/Shopping/CurrentCart/ShippingRateQuotes\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<RateQuoteModel>>>}\n\t * @public\n\t */\n\tGetCurrentCartShippingRateQuotes = (routeParams: GetCurrentCartShippingRateQuotesDto): IHttpPromise<CEFActionResponseT<Array<RateQuoteModel>>> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShippingRateQuotes\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific compare cart for the current user (or anon)\n\t * @param {@link cef.store.api.GetCurrentCompareCartDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCompareCart\n\t * @path <API Root>/Shopping/CurrentCompareCart\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CartModel>}\n\t * @public\n\t */\n\tGetCurrentCompareCart = (routeParams?: GetCurrentCompareCartDto): IHttpPromise<CartModel> =>\n\t\taxios.post([\"Shopping\", \"CurrentCompareCart\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific compare cart for the current user (or anon)\n\t * @param {@link cef.store.api.GetCurrentCompareCartItemsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentCompareCartItems\n\t * @path <API Root>/Shopping/CurrentCompareCart/Items\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>>}\n\t * @public\n\t */\n\tGetCurrentCompareCartItems = (routeParams?: GetCurrentCompareCartItemsDto): IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>> =>\n\t\taxios.post([\"Shopping\", \"CurrentCompareCart\", \"Items\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific static cart for the current user (Wish List, Notify Me When In Stock, Favorites List)\n\t * @param {@link cef.store.api.GetCurrentStaticCartDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStaticCart\n\t * @path <API Root>/Shopping/CurrentStaticCart\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CartModel>}\n\t * @public\n\t */\n\tGetCurrentStaticCart = (routeParams?: GetCurrentStaticCartDto): IHttpPromise<CartModel> =>\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\"].join(\"/\"), routeParams);\n\n\t/**\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)\n\t * @param {@link cef.store.api.GetCurrentStaticCartItemsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStaticCartItems\n\t * @path <API Root>/Shopping/CurrentStaticCart/Items\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>>}\n\t * @public\n\t */\n\tGetCurrentStaticCartItems = (routeParams?: GetCurrentStaticCartItemsDto): IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>> =>\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"Items\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of the cart types this user has.\n\t * @param {@link cef.store.api.GetCurrentUserCartTypesDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentUserCartTypes\n\t * @path <API Root>/Shopping/CurrentUser/UsedCartTypes\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CartTypePagedResults>}\n\t * @public\n\t */\n\tGetCurrentUserCartTypes = (routeParams?: GetCurrentUserCartTypesDto): IHttpPromise<CartTypePagedResults> =>\n\t\taxios.post([\"Shopping\", \"CurrentUser\", \"UsedCartTypes\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to deactivate a specific cart item by it's identifier (regardless of cart type name or session vs static cart type)\n\t * @param {@link cef.store.api.RemoveCartItemByIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCartItemByID\n\t * @path <API Root>/Shopping/CurrentCart/Item/Remove/ByID/{ID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<boolean>}\n\t * @public\n\t */\n\tRemoveCartItemByID = (id: number): IHttpPromise<boolean> =>\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Item\", \"Remove\", \"ByID\", id].join(\"/\"));\n\n\t/**\n\t * Use to deactivate an item from the specified session cart for the current user (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.RemoveCartItemByProductIDAndTypeDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCartItemByProductIDAndType\n\t * @path <API Root>/Shopping/CurrentCart/Item/Remove/ByProductIDAndType\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<boolean>}\n\t * @public\n\t */\n\tRemoveCartItemByProductIDAndType = (routeParams: RemoveCartItemByProductIDAndTypeDto): IHttpPromise<boolean> =>\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Item\", \"Remove\", \"ByProductIDAndType\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\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)\n\t * @param {@link cef.store.api.RemoveCartItemDiscountDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCartItemDiscount\n\t * @path <API Root>/Shopping/CurrentCart/Item/Discount/Remove\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRemoveCartItemDiscount = (routeParams?: RemoveCartItemDiscountDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentCart\", \"Item\", \"Discount\", \"Remove\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Use to deactivate an item from the compare cart for the current user (or anon)\n\t * @param {@link cef.store.api.RemoveCompareCartItemByProductIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveCompareCartItemByProductID\n\t * @path <API Root>/Shopping/CurrentCompareCart/Item/Remove/ByProductID/{ProductID}\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRemoveCompareCartItemByProductID = (productID: number, routeParams?: RemoveCompareCartItemByProductIDDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentCompareCart\", \"Item\", \"Remove\", \"ByProductID\", productID].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\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)\n\t * @param {@link cef.store.api.RemoveStaticCartItemByProductIDAndTypeDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.RemoveStaticCartItemByProductIDAndType\n\t * @path <API Root>/Shopping/CurrentStaticCart/Item/Remove\n\t * @verb DELETE\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tRemoveStaticCartItemByProductIDAndType = (routeParams: RemoveStaticCartItemByProductIDAndTypeDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.delete([\"Shopping\", \"CurrentStaticCart\", \"Item\", \"Remove\"].join(\"/\"),\n\t\t{\n\t\t\tdata: routeParams\n\t\t});\n\n\t/**\n\t * Use to send an email containing the current user's cart items to an email address\n\t * @param {@link cef.store.api.ShareCurrentCartItemsByEmailDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ShareCurrentCartItemsByEmail\n\t * @path <API Root>/Shopping/CurrentCart/ShareByEmail\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tShareCurrentCartItemsByEmail = (routeParams: ShareCurrentCartItemsByEmailDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Shopping\", \"CurrentCart\", \"ShareByEmail\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to send an email containing the current user's static cart items from the specified type to an email address\n\t * @param {@link cef.store.api.ShareStaticCartItemsByEmailDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.ShareStaticCartItemsByEmail\n\t * @path <API Root>/Shopping/CurrentStaticCart/ShareByEmail\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponse>}\n\t * @public\n\t */\n\tShareStaticCartItemsByEmail = (routeParams: ShareStaticCartItemsByEmailDto): IHttpPromise<CEFActionResponse> =>\n\t\taxios.post([\"Shopping\", \"CurrentStaticCart\", \"ShareByEmail\"].join(\"/\"), routeParams);\n\n\t/**\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.\n\t * @param {@link cef.store.api.UpdateCartItemQuantityDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCartItemQuantity\n\t * @path <API Root>/Shopping/CurrentCart/Item/UpdateQuantity\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateCartItemQuantity = (routeParams: UpdateCartItemQuantityDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Shopping\", \"CurrentCart\", \"Item\", \"UpdateQuantity\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update multiple items in the specified session cart for the current user (Shopping, Quote, Samples)\n\t * @param {@link cef.store.api.UpdateCartItemsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCartItems\n\t * @path <API Root>/Shopping/CurrentCart/Items/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>>}\n\t * @public\n\t */\n\tUpdateCartItems = (routeParams: UpdateCartItemsDto): IHttpPromise<Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>> =>\n\t\taxios.put([\"Shopping\", \"CurrentCart\", \"Items\", \"Update\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to update an existing cart type.\n\t * @param {@link cef.store.api.UpdateCartTypeDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.UpdateCartType\n\t * @path <API Root>/Shopping/CartType/Update\n\t * @verb PUT\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tUpdateCartType = (routeParams?: UpdateCartTypeDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.put([\"Shopping\", \"CartType\", \"Update\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Stores.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tImplementsDisplayNameBase,\n\tStoreModel,\n\tSiteDomainModel,\n\tSiteDomainSearchModel,\n\tSiteDomainPagedResults,\n\tUserModel,\n\tImplementsSeoUrlBase,\n\tStoreInventoryLocationsMatrixModel,\n\tTypeSearchModel,\n\tStoreInventoryLocationTypePagedResults,\n\tStoreRegionSearchModel,\n\tStoreRegionPagedResults,\n\tStoreSearchModel,\n\tStorePagedResults,\n\tTypeModel,\n\tStoreTypePagedResults,\n\tStoreUserSearchModel,\n\tStoreUserPagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckStoreExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Check if this Display Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsDisplayNameBase}\n * @public\n */\nexport interface CheckStoreTypeExistsByDisplayNameDto extends ImplementsDisplayNameBase {\n}\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckStoreTypeExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of site domains.\n * @see {@link SiteDomainSearchModel}\n * @public\n */\nexport interface GetSiteDomainsDto extends SiteDomainSearchModel {\n}\n\n/**\n * Use to get a specific store by the SEO URL.\n * @see {@link ImplementsSeoUrlBase}\n * @public\n */\nexport interface GetStoreBySeoUrlDto extends ImplementsSeoUrlBase {\n}\n\n/**\n * Use to get a list of store inventory location types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetStoreInventoryLocationTypesDto extends TypeSearchModel {\n}\n\n/**\n * Get store regions by store ID\n * @see {@link StoreRegionSearchModel}\n * @public\n */\nexport interface GetStoreRegionsByStoreIDDto extends StoreRegionSearchModel {\n}\n\n/**\n * Use to get a list of stores.\n * @see {@link StoreSearchModel}\n * @public\n */\nexport interface GetStoresDto extends StoreSearchModel {\n}\n\n/**\n * Use to get a list of store types.\n * @see {@link TypeSearchModel}\n * @public\n */\nexport interface GetStoreTypesDto extends TypeSearchModel {\n}\n\n/**\n * Use to get a list of store users.\n * @see {@link StoreUserSearchModel}\n * @public\n */\nexport interface GetStoreUsersDto extends StoreUserSearchModel {\n}\n\nexport class Stores {\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreExistsByID\n\t * @path <API Root>/Stores/Store/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckStoreExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Stores\", \"Store\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreExistsByKey\n\t * @path <API Root>/Stores/Store/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckStoreExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Stores\", \"Store\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreExistsByName\n\t * @path <API Root>/Stores/Store/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckStoreExistsByName = (routeParams?: CheckStoreExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Stores\", \"Store\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this Display Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreTypeExistsByDisplayName\n\t * @path <API Root>/Stores/StoreType/Exists/DisplayName\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckStoreTypeExistsByDisplayName = (routeParams?: CheckStoreTypeExistsByDisplayNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Stores\", \"StoreType\", \"Exists\", \"DisplayName\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreTypeExistsByKey\n\t * @path <API Root>/Stores/StoreType/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckStoreTypeExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Stores\", \"StoreType\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckStoreTypeExistsByName\n\t * @path <API Root>/Stores/StoreType/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckStoreTypeExistsByName = (routeParams?: CheckStoreTypeExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Stores\", \"StoreType\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the current store based on url, sub-domain or sub-folder\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetCurrentStore\n\t * @path <API Root>/Stores/Store/Current\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<StoreModel>>}\n\t * @public\n\t */\n\tGetCurrentStore = (): IHttpPromise<CEFActionResponseT<StoreModel>> =>\n\t\taxios.get([\"Stores\", \"Store\", \"Current\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific site domain.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSiteDomainByID\n\t * @path <API Root>/Stores/SiteDomain/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SiteDomainModel>}\n\t * @public\n\t */\n\tGetSiteDomainByID = (id: number): IHttpPromise<SiteDomainModel> =>\n\t\taxios.get([\"Stores\", \"SiteDomain\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of site domains.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetSiteDomains\n\t * @path <API Root>/Stores/SiteDomains\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<SiteDomainPagedResults>}\n\t * @public\n\t */\n\tGetSiteDomains = (routeParams?: GetSiteDomainsDto): IHttpPromise<SiteDomainPagedResults> =>\n\t\taxios.get([\"Stores\", \"SiteDomains\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the Administrator of the Store's User info\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreAdministratorUser\n\t * @path <API Root>/Stores/StoreAdministratorUser/{StoreID}\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<UserModel>>}\n\t * @public\n\t */\n\tGetStoreAdministratorUser = (storeID: number): IHttpPromise<CEFActionResponseT<UserModel>> =>\n\t\taxios.get([\"Stores\", \"StoreAdministratorUser\", storeID].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific store.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreByID\n\t * @path <API Root>/Stores/Store/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoreModel>}\n\t * @public\n\t */\n\tGetStoreByID = (id: number): IHttpPromise<StoreModel> =>\n\t\taxios.get([\"Stores\", \"Store\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a specific store by the SEO URL.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreBySeoUrl\n\t * @path <API Root>/Stores/Store/SeoUrl\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoreModel>}\n\t * @public\n\t */\n\tGetStoreBySeoUrl = (routeParams?: GetStoreBySeoUrlDto): IHttpPromise<StoreModel> =>\n\t\taxios.get([\"Stores\", \"Store\", \"SeoUrl\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get the store that the current user has administrative rights to (limited to store admins)\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreInventoryLocationsMatrix\n\t * @path <API Root>/Stores/InventoryLocationsMatrix\n\t * @verb GET\n\t * @priority 1\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<StoreInventoryLocationsMatrixModel>>>}\n\t * @public\n\t */\n\tGetStoreInventoryLocationsMatrix = (): IHttpPromise<CEFActionResponseT<Array<StoreInventoryLocationsMatrixModel>>> =>\n\t\taxios.get([\"Stores\", \"InventoryLocationsMatrix\"].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of store inventory location types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreInventoryLocationTypes\n\t * @path <API Root>/Stores/StoreInventoryLocationTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoreInventoryLocationTypePagedResults>}\n\t * @public\n\t */\n\tGetStoreInventoryLocationTypes = (routeParams?: GetStoreInventoryLocationTypesDto): IHttpPromise<StoreInventoryLocationTypePagedResults> =>\n\t\taxios.get([\"Stores\", \"StoreInventoryLocationTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Get store regions by store ID\n\t * @param {@link cef.store.api.GetStoreRegionsByStoreIDDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreRegionsByStoreID\n\t * @path <API Root>/Stores/StoreRegions/ByStoreID\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<StoreRegionPagedResults>}\n\t * @public\n\t */\n\tGetStoreRegionsByStoreID = (routeParams?: GetStoreRegionsByStoreIDDto): IHttpPromise<StoreRegionPagedResults> =>\n\t\taxios.post([\"Stores\", \"StoreRegions\", \"ByStoreID\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a list of stores.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStores\n\t * @path <API Root>/Stores/Stores\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StorePagedResults>}\n\t * @public\n\t */\n\tGetStores = (routeParams?: GetStoresDto): IHttpPromise<StorePagedResults> =>\n\t\taxios.get([\"Stores\", \"Stores\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific store type.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreTypeByID\n\t * @path <API Root>/Stores/StoreType/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<TypeModel>}\n\t * @public\n\t */\n\tGetStoreTypeByID = (id: number): IHttpPromise<TypeModel> =>\n\t\taxios.get([\"Stores\", \"StoreType\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of store types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreTypes\n\t * @path <API Root>/Stores/StoreTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoreTypePagedResults>}\n\t * @public\n\t */\n\tGetStoreTypes = (routeParams?: GetStoreTypesDto): IHttpPromise<StoreTypePagedResults> =>\n\t\taxios.get([\"Stores\", \"StoreTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of store users.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetStoreUsers\n\t * @path <API Root>/Stores/StoreUsers\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<StoreUserPagedResults>}\n\t * @public\n\t */\n\tGetStoreUsers = (routeParams?: GetStoreUsersDto): IHttpPromise<StoreUserPagedResults> =>\n\t\taxios.get([\"Stores\", \"StoreUsers\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.Structure.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tNoteModel,\n\tNoteSearchModel,\n\tNotePagedResults,\n\tNoteTypeSearchModel,\n\tNoteTypePagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to create a new note.\n * @see {@link NoteModel}\n * @public\n */\nexport interface CreateNoteDto extends NoteModel {\n}\n\n/**\n * Securely create a note for an associated patient.\n * @see {@link NoteModel}\n * @public\n */\nexport interface CreateSecurePatientNoteAsDoctorDto extends NoteModel {\n}\n\n/**\n * Use to get a list of notes.\n * @see {@link NoteSearchModel}\n * @public\n */\nexport interface GetNotesDto extends NoteSearchModel {\n}\n\n/**\n * Use to get a list of note types.\n * @see {@link NoteTypeSearchModel}\n * @public\n */\nexport interface GetNoteTypesDto extends NoteTypeSearchModel {\n}\n\n/**\n * Securely fetch sales orders for an associated patient.\n * @see {@link NoteSearchModel}\n * @public\n */\nexport interface GetSecurePatientNotesAsDoctorDto extends NoteSearchModel {\n}\n\nexport class Structure {\n\t/**\n\t * Use to create a new note.\n\t * @param {@link cef.store.api.CreateNoteDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateNote\n\t * @path <API Root>/Structure/Note/Create\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<number>>}\n\t * @public\n\t */\n\tCreateNote = (routeParams?: CreateNoteDto): IHttpPromise<CEFActionResponseT<number>> =>\n\t\taxios.post([\"Structure\", \"Note\", \"Create\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Securely create a note for an associated patient.\n\t * @param {@link cef.store.api.CreateSecurePatientNoteAsDoctorDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.CreateSecurePatientNoteAsDoctor\n\t * @path <API Root>/Structure/SecureNotes/Create/ForPatientAsDoctor\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<boolean>>}\n\t * @public\n\t */\n\tCreateSecurePatientNoteAsDoctor = (routeParams?: CreateSecurePatientNoteAsDoctorDto): IHttpPromise<CEFActionResponseT<boolean>> =>\n\t\taxios.post([\"Structure\", \"SecureNotes\", \"Create\", \"ForPatientAsDoctor\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Use to get a specific note.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetNoteByID\n\t * @path <API Root>/Structure/Note/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<NoteModel>}\n\t * @public\n\t */\n\tGetNoteByID = (id: number): IHttpPromise<NoteModel> =>\n\t\taxios.get([\"Structure\", \"Note\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of notes.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetNotes\n\t * @path <API Root>/Structure/Notes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<NotePagedResults>}\n\t * @public\n\t */\n\tGetNotes = (routeParams?: GetNotesDto): IHttpPromise<NotePagedResults> =>\n\t\taxios.get([\"Structure\", \"Notes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a list of note types.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetNoteTypes\n\t * @path <API Root>/Structure/NoteTypes\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<NoteTypePagedResults>}\n\t * @public\n\t */\n\tGetNoteTypes = (routeParams?: GetNoteTypesDto): IHttpPromise<NoteTypePagedResults> =>\n\t\taxios.get([\"Structure\", \"NoteTypes\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Securely fetch sales orders for an associated patient.\n\t * @param {@link cef.store.api.GetSecurePatientNotesAsDoctorDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Clients.MANGO.GetSecurePatientNotesAsDoctor\n\t * @path <API Root>/Structure/SecureNotes/ForPatientAsDoctor\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<Array<NoteModel>>>}\n\t * @public\n\t */\n\tGetSecurePatientNotesAsDoctor = (routeParams?: GetSecurePatientNotesAsDoctorDto): IHttpPromise<CEFActionResponseT<Array<NoteModel>>> =>\n\t\taxios.post([\"Structure\", \"SecureNotes\", \"ForPatientAsDoctor\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Tracking.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tEndUserEventRequest,\n\tEndUserEventResponse,\n\tPaging,\n\tProductModel,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tCEFActionResponseT,\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Use to create a new page view event along with additional data points as needed (Event, Visit, Visitor)\n * @see {@link EndUserEventRequest}\n * @public\n */\nexport interface CreateFullPageViewEventDto extends EndUserEventRequest {\n}\n\n/**\n * Get Recently Viewed Products based on Tracking data\n * @public\n */\nexport interface GetRecentlyViewedProductsDto {\n\tPaging?: Paging;\n}\n\nexport class Tracking {\n\t/**\n\t * Use to create a new page view event along with additional data points as needed (Event, Visit, Visitor)\n\t * @param {@link cef.store.api.CreateFullPageViewEventDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CreateFullPageViewEvent\n\t * @path <API Root>/Tracking/PageViewEvent/CreateFull\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<CEFActionResponseT<EndUserEventResponse>>}\n\t * @public\n\t */\n\tCreateFullPageViewEvent = (routeParams?: CreateFullPageViewEventDto): IHttpPromise<CEFActionResponseT<EndUserEventResponse>> =>\n\t\taxios.post([\"Tracking\", \"PageViewEvent\", \"CreateFull\"].join(\"/\"), routeParams);\n\n\t/**\n\t * Get Recently Viewed Products based on Tracking data\n\t * @param {@link cef.store.api.GetRecentlyViewedProductsDto} routeParams - The route parameters as a Body Object\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetRecentlyViewedProducts\n\t * @path <API Root>/Tracking/RecentlyViewedProducts\n\t * @verb POST\n\t * @returns {ng.IHttpPromise<Array<ProductModel>>}\n\t * @public\n\t */\n\tGetRecentlyViewedProducts = (routeParams?: GetRecentlyViewedProductsDto): IHttpPromise<Array<ProductModel>> =>\n\t\taxios.post([\"Tracking\", \"RecentlyViewedProducts\"].join(\"/\"), routeParams);\n}\n","/**\n * @file _api/cvApi.Vendors.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\nimport axios from \"../axios\";\nimport cvApi from \"./cvApi\";\n\nimport {\n\tImplementsNameBase,\n\tVendorModel,\n\tVendorSearchModel,\n\tVendorPagedResults,\n} from \"./cvApi._DtoClasses\";\n\nimport {\n\tIHttpPromise\n} from \"./cvApi.shared\";\n\n/**\n * Check if this Name exists and return the id if it does (null if it does not).\n * @see {@link ImplementsNameBase}\n * @public\n */\nexport interface CheckVendorExistsByNameDto extends ImplementsNameBase {\n}\n\n/**\n * Use to get a list of vendors.\n * @see {@link VendorSearchModel}\n * @public\n */\nexport interface GetVendorsDto extends VendorSearchModel {\n}\n\nexport class Vendors {\n\t/**\n\t * Check if this ID exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckVendorExistsByID\n\t * @path <API Root>/Vendors/Vendor/Exists/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckVendorExistsByID = (id: number): IHttpPromise<number> =>\n\t\taxios.get([\"Vendors\", \"Vendor\", \"Exists\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this key exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckVendorExistsByKey\n\t * @path <API Root>/Vendors/Vendor/Exists/Key/{Key*}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckVendorExistsByKey = (key: string): IHttpPromise<number> =>\n\t\taxios.get([\"Vendors\", \"Vendor\", \"Exists\", \"Key\", encodeURIComponent(key)].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Check if this Name exists and return the id if it does (null if it does not).\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.CheckVendorExistsByName\n\t * @path <API Root>/Vendors/Vendor/Exists/Name\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<number>}\n\t * @public\n\t */\n\tCheckVendorExistsByName = (routeParams?: CheckVendorExistsByNameDto): IHttpPromise<number> =>\n\t\taxios.get([\"Vendors\", \"Vendor\", \"Exists\", \"Name\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n\n\t/**\n\t * Use to get a specific vendor.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetVendorByID\n\t * @path <API Root>/Vendors/Vendor/ID/{ID}\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<VendorModel>}\n\t * @public\n\t */\n\tGetVendorByID = (id: number): IHttpPromise<VendorModel> =>\n\t\taxios.get([\"Vendors\", \"Vendor\", \"ID\", id].join(\"/\"), { params: { _: cvApi.cacheCounter } });\n\n\t/**\n\t * Use to get a list of vendors.\n\t * @generatedByCSharpType Clarity.Ecommerce.Service.GetVendors\n\t * @path <API Root>/Vendors/Vendors\n\t * @verb GET\n\t * @returns {ng.IHttpPromise<VendorPagedResults>}\n\t * @public\n\t */\n\tGetVendors = (routeParams?: GetVendorsDto): IHttpPromise<VendorPagedResults> =>\n\t\taxios.get([\"Vendors\", \"Vendors\"].join(\"/\"),\n\t\t{\n\t\t\tparams: { ...routeParams, _: cvApi.cacheCounter }\n\t\t});\n}\n","/**\n * @file _api/cvApi.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Creates the cvApi singleton\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\nimport { CEFAPI } from \"./cvApi._ServiceClass\";\nconst instance = new CEFAPI();\nexport default instance;\n","/**\n * @file _api/cvApi._ServiceClass.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\n\n/** Exposes access to the ServiceStack routes */\nimport { Accounts } from \"./cvApi.Accounts\";\nimport { Advertising } from \"./cvApi.Advertising\";\nimport { Appointments } from \"./cvApi.Appointments\";\nimport { Attributes } from \"./cvApi.Attributes\";\nimport { Auctions } from \"./cvApi.Auctions\";\nimport { Authentication } from \"./cvApi.Authentication\";\nimport { Brands } from \"./cvApi.Brands\";\nimport { Categories } from \"./cvApi.Categories\";\nimport { Contacts } from \"./cvApi.Contacts\";\nimport { Currencies } from \"./cvApi.Currencies\";\nimport { DoseSpot } from \"./cvApi.DoseSpot\";\nimport { Franchises } from \"./cvApi.Franchises\";\nimport { Geography } from \"./cvApi.Geography\";\nimport { Globalization } from \"./cvApi.Globalization\";\nimport { Importer } from \"./cvApi.Importer\";\nimport { Inventory } from \"./cvApi.Inventory\";\nimport { Invoicing } from \"./cvApi.Invoicing\";\nimport { JSConfigs } from \"./cvApi.JSConfigs\";\nimport { Manufacturers } from \"./cvApi.Manufacturers\";\nimport { Media } from \"./cvApi.Media\";\nimport { Messaging } from \"./cvApi.Messaging\";\nimport { Ordering } from \"./cvApi.Ordering\";\nimport { Payments } from \"./cvApi.Payments\";\nimport { Prescriptions } from \"./cvApi.Prescriptions\";\nimport { Pricing } from \"./cvApi.Pricing\";\nimport { Products } from \"./cvApi.Products\";\nimport { Providers } from \"./cvApi.Providers\";\nimport { Questionnaire } from \"./cvApi.Questionnaire\";\nimport { Quoting } from \"./cvApi.Quoting\";\nimport { Returning } from \"./cvApi.Returning\";\nimport { Reviews } from \"./cvApi.Reviews\";\nimport { Sales } from \"./cvApi.Sales\";\nimport { Sampling } from \"./cvApi.Sampling\";\nimport { Scheduling } from \"./cvApi.Scheduling\";\nimport { Shipping } from \"./cvApi.Shipping\";\nimport { Shopping } from \"./cvApi.Shopping\";\nimport { Stores } from \"./cvApi.Stores\";\nimport { Structure } from \"./cvApi.Structure\";\nimport { Tracking } from \"./cvApi.Tracking\";\nimport { Vendors } from \"./cvApi.Vendors\";\n\nexport class CEFAPI {\n\taccounts: Accounts;\n\tadvertising: Advertising;\n\tappointments: Appointments;\n\tattributes: Attributes;\n\tauctions: Auctions;\n\tauthentication: Authentication;\n\tbrands: Brands;\n\tcategories: Categories;\n\tcontacts: Contacts;\n\tcurrencies: Currencies;\n\tdoseSpot: DoseSpot;\n\tfranchises: Franchises;\n\tgeography: Geography;\n\tglobalization: Globalization;\n\timporter: Importer;\n\tinventory: Inventory;\n\tinvoicing: Invoicing;\n\tjsConfigs: JSConfigs;\n\tmanufacturers: Manufacturers;\n\tmedia: Media;\n\tmessaging: Messaging;\n\tordering: Ordering;\n\tpayments: Payments;\n\tprescriptions: Prescriptions;\n\tpricing: Pricing;\n\tproducts: Products;\n\tproviders: Providers;\n\tquestionnaire: Questionnaire;\n\tquoting: Quoting;\n\treturning: Returning;\n\treviews: Reviews;\n\tsales: Sales;\n\tsampling: Sampling;\n\tscheduling: Scheduling;\n\tshipping: Shipping;\n\tshopping: Shopping;\n\tstores: Stores;\n\tstructure: Structure;\n\ttracking: Tracking;\n\tvendors: Vendors;\n\tcacheCounter: number;\n\t\n\tconstructor() {\n\t\tthis.accounts = new Accounts();\n\t\tthis.advertising = new Advertising();\n\t\tthis.appointments = new Appointments();\n\t\tthis.attributes = new Attributes();\n\t\tthis.auctions = new Auctions();\n\t\tthis.authentication = new Authentication();\n\t\tthis.brands = new Brands();\n\t\tthis.categories = new Categories();\n\t\tthis.contacts = new Contacts();\n\t\tthis.currencies = new Currencies();\n\t\tthis.doseSpot = new DoseSpot();\n\t\tthis.franchises = new Franchises();\n\t\tthis.geography = new Geography();\n\t\tthis.globalization = new Globalization();\n\t\tthis.importer = new Importer();\n\t\tthis.inventory = new Inventory();\n\t\tthis.invoicing = new Invoicing();\n\t\tthis.jsConfigs = new JSConfigs();\n\t\tthis.manufacturers = new Manufacturers();\n\t\tthis.media = new Media();\n\t\tthis.messaging = new Messaging();\n\t\tthis.ordering = new Ordering();\n\t\tthis.payments = new Payments();\n\t\tthis.prescriptions = new Prescriptions();\n\t\tthis.pricing = new Pricing();\n\t\tthis.products = new Products();\n\t\tthis.providers = new Providers();\n\t\tthis.questionnaire = new Questionnaire();\n\t\tthis.quoting = new Quoting();\n\t\tthis.returning = new Returning();\n\t\tthis.reviews = new Reviews();\n\t\tthis.sales = new Sales();\n\t\tthis.sampling = new Sampling();\n\t\tthis.scheduling = new Scheduling();\n\t\tthis.shipping = new Shipping();\n\t\tthis.shopping = new Shopping();\n\t\tthis.stores = new Stores();\n\t\tthis.structure = new Structure();\n\t\tthis.tracking = new Tracking();\n\t\tthis.vendors = new Vendors();\n\t}\n}\n\n","import { isUndefined } from \"lodash\";\n\nexport class Promiser {\n  promises: any;\n\n  results: any;\n\n  constructor() {\n    this.promises = {};\n    this.results = {};\n  }\n\n  resolve<T>(\n    key: string,\n    toCall: () => Promise<T>,\n    cacheResult: boolean = true,\n    tryCount: number = 1,\n    undefinedIsFailure: boolean = false,\n  ): Promise<T> {\n    // Check if the given key has a cached result already\n    if (Object.hasOwn(this.results, key)) {\n      return Promise.resolve(this.results[key]);\n    }\n    // If not, check if there is an existing promise to generate the result\n    if (!this.promises[key]) {\n      // If no promise exists, create it from the promiser method passed in\n      // Justification: We're appropriately handling the async nature of the internal call\n      // eslint-disable-next-line no-async-promise-executor\n      const internalPromiseWrapper = new Promise<T>(async (resolve, reject) => {\n        const errors = [];\n        for (let i = 0; i < tryCount; i++) {\n          try {\n            // Justification: Need loop to ensure called sequentially (and only on failure of prev) instead of currently\n            // eslint-disable-next-line no-await-in-loop\n            const r = await toCall();\n            if (undefinedIsFailure && isUndefined(r)) {\n              throw new Error(\"Promise result was undefined\");\n            }\n            // Once the promise completes, store the result into the promiser if requested (default true)\n            if (r && cacheResult) {\n              this.results[key] = r;\n            }\n            // Remove the cached promise\n            delete this.promises[key];\n            // Return the successful result\n            resolve(r);\n            return;\n          } catch (err) {\n            errors.push(err);\n            console.error(err);\n            // Continue loop to next attempt\n          }\n        }\n        // If loop exited without a successful result, there must be errors, throw them now\n        reject(errors);\n      });\n      this.promises[key] = internalPromiseWrapper;\n    }\n    // Return the promise for the given key\n    return this.promises[key];\n  }\n\n  flush(key?: string | RegExp): void {\n    if (!key) {\n      // If no key, flush all results\n      this.results = {};\n      return;\n    }\n    if (!(key instanceof RegExp)) {\n      // Clear a specific key\n      delete this.results[key];\n      return;\n    }\n    // Clear any key that matches the regex\n    const keys = Object.keys(this.results);\n    for (const resultKey of keys) {\n      if (key.test(resultKey)) {\n        delete this.results[resultKey];\n      }\n    }\n  }\n}\n\nconst instance = new Promiser();\nexport default instance;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { RootState } from \"src/_redux/store\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport axios from \"src/axios\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\n\ninterface ICefConfigSliceState {\n  value: CEFConfig | null;\n}\n\nexport const cefConfigSlice = createSlice({\n  name: \"cefConfig\",\n  initialState: {\n    value: null,\n  } as ICefConfigSliceState,\n  reducers: {\n    setCefConfig: (state, action: PayloadAction<CEFConfig>) => {\n      state.value = action.payload;\n    }\n  }\n});\n\nexport const { setCefConfig } = cefConfigSlice.actions;\nexport const useCefConfig = (): CEFConfig | null => {\n  const cefConfig = useSelector((state: RootState) => state.cefConfig.value);\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (cefConfig === null) {\n      // @ts-ignore\n      const fromDoc = document.cefConfig as CEFConfig;\n      if (fromDoc) {\n        // Set the axios base URL from cef config API values\n        axios.defaults.baseURL = corsLink(\n          fromDoc,\n          \"\",\n          \"api\"\n        );\n        dispatch(setCefConfig(fromDoc));\n        // Now that the API is configured, we can load the cache counter\n        promiser.resolve(\n          \"loadCacheCounter\",\n          () => cvApi.jsConfigs.GetCacheCounter()\n            .then(r => r.data)\n            .catch(() => 0)\n            .then(counter => {\n              cvApi.cacheCounter = counter;\n              return counter;\n            })\n        );\n      }\n    }\n  }, [ cefConfig ]);\n\n  return cefConfig;\n};\n\nexport default cefConfigSlice.reducer;\n","import { BaseModel } from \"src/_api/cvApi._DtoClasses\";\n\nexport const getCookieValue = (name: string): string => {\n  return document.cookie.match(`(^|;)\\\\s*${name}\\\\s*=\\\\s*([^;]+)`)?.pop() || \"\";\n};\n\nexport const sortByCreatedDateDescending = <T extends BaseModel>(a: T, b: T): number => {\n  return new Date(a.CreatedDate) > new Date(b.CreatedDate) ? -1 : 1;\n};\n\n// Helper function to remove '==' from Base64 string if present\nexport function stripEquals(base64String: string): string {\n  return base64String.endsWith(\"==\") ? base64String.slice(0, -2) : base64String;\n}\n\n// Helper function to convert buffer to Base64 string\nexport function bufferToBase64(buffer: ArrayBuffer): string {\n  return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n}\n\n// Helper function to perform SHA512 hash and return the buffer\nexport async function hashAndEncode(text: string): Promise<ArrayBuffer> {\n  const encoder = new TextEncoder();\n  const data = encoder.encode(text);\n  const result = await crypto.subtle.digest(\"SHA-512\", data);\n  return result;\n}\n\nexport function isFileAcceptable(fileTypes: string[], fileName: string): boolean {\n  const fileExtension = fileName.split('.').pop()?.toLowerCase();\n  const fileMimeType = getMimeType(fileExtension);\n\n  if (!fileExtension || !fileMimeType) {\n    return false;\n  }\n\n  return fileTypes.some(t => {\n    const typeLowered = t.toLowerCase();\n    const isWildCard = typeLowered.endsWith(\"/*\");\n    if (isWildCard) {\n      const baseType = typeLowered.split(\"/\")[0]; // \"image/*\" => \"image\"\n      return fileMimeType.startsWith(baseType);\n    }\n    if (typeLowered === fileMimeType) {\n      return true;\n    }\n    if (typeLowered.startsWith(\".\")) {\n      return typeLowered === `.${fileExtension}`;\n    }\n    return false;\n  });\n}\n\nconst mimeTypes: { [key: string]: string } = {\n  jpg: \"image/jpeg\",\n  jpeg: \"image/jpeg\",\n  png: \"image/png\",\n  gif: \"image/gif\",\n  bmp: \"image/bmp\",\n  webp: \"image/webp\",\n  tiff: \"image/tiff\",\n  tif: \"image/tiff\",\n  svg: \"image/svg+xml\",\n  ico: \"image/x-icon\",\n  pdf: \"application/pdf\",\n  doc: \"application/msword\",\n  docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n  xls: \"application/vnd.ms-excel\",\n  xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n  ppt: \"application/vnd.ms-powerpoint\",\n  pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n  txt: \"text/plain\",\n  csv: \"text/csv\",\n  rtf: \"application/rtf\",\n  odt: \"application/vnd.oasis.opendocument.text\",\n  ods: \"application/vnd.oasis.opendocument.spreadsheet\",\n  mp3: \"audio/mpeg\",\n  wav: \"audio/wav\",\n  ogg: \"audio/ogg\",\n  m4a: \"audio/x-m4a\",\n  flac: \"audio/flac\",\n  aac: \"audio/aac\",\n  mp4: \"video/mp4\",\n  avi: \"video/x-msvideo\",\n  mkv: \"video/x-matroska\",\n  mov: \"video/quicktime\",\n  wmv: \"video/x-ms-wmv\",\n  webm: \"video/webm\",\n  flv: \"video/x-flv\",\n  ogv: \"video/ogg\",\n  zip: \"application/zip\",\n  rar: \"application/x-rar-compressed\",\n  tar: \"application/x-tar\",\n  gz: \"application/gzip\",\n  \"7z\": \"application/x-7z-compressed\",\n  html: \"text/html\",\n  css: \"text/css\",\n  js: \"application/javascript\",\n  json: \"application/json\",\n  xml: \"application/xml\",\n  wasm: \"application/wasm\",\n  md: \"text/markdown\",\n  woff: \"font/woff\",\n  woff2: \"font/woff2\",\n  ttf: \"font/ttf\",\n  otf: \"font/otf\",\n  apk: \"application/vnd.android.package-archive\",\n  exe: \"application/x-msdownload\",\n  dmg: \"application/x-apple-diskimage\",\n  iso: \"application/x-iso9660-image\",\n};\n\nfunction getMimeType(extension: string): string | null {\n  if (!extension) {\n    return null;\n  }\n  return mimeTypes[extension];\n}\n","/* eslint-disable no-unused-vars */\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport axios from \"src/axios\";\nimport cvApi from \"src/_api/cvApi\";\nimport { RegisterNewUserDto } from \"src/_api\";\nimport { AuthProviderLoginDto, IHttpPromise, UserModel } from \"src/_api/cvApi.shared\";\nimport { AccountModel, AuthenticateResponse, MFARequirementsModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { setAccount, setAffiliateAccounts, setUser } from \"src/_redux/slices/authSlice\";\nimport promiser from \"src/_shared/Promiser\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { getCookieValue } from \"src/_shared/common/Helpers\";\nimport Cookies from \"js-cookie\";\n\nexport type AuthBody = AuthProviderLoginDto & { MFAToken?: string, checked?: boolean };\n\nexport enum LoginResponseStatus {\n  Success,\n  Failure,\n  Challenge,\n  ForcedPasswordReset\n}\n\nexport interface LoginResponse {\n  Status: LoginResponseStatus;\n  MFAResult?: MFARequirementsModel;\n}\n\nexport interface IAuthFactory {\n  preAuth: (force?: boolean) => Promise<boolean>;\n  loadCurrentUser: (force?: boolean) => Promise<UserModel>;\n  loadCurrentAccount: (force?: boolean) => Promise<AccountModel>;\n  loadAffiliateAccounts: (force?: boolean) => Promise<AccountModel[]>;\n  setAffiliateAccount: (name: string) => Promise<AccountModel>;\n  login: (credentials: AuthBody) => Promise<LoginResponse>;\n  logout: () => Promise<void>;\n  requestMFA: (username: string, usePhone: boolean) => Promise<boolean>;\n  register: (user: RegisterNewUserDto) => Promise<void>;\n  hasRole: (role: string) => Promise<boolean>;\n  hasPermission: (permission: string) => Promise<boolean>;\n  updateCurrentUser: (newUser: UserModel) => Promise<UserModel>;\n  updateCurrentAccount: (newAccount: AccountModel) => Promise<AccountModel>;\n}\n\nfunction readOrPopulateAuthenticationCookie(\n    value: string,\n    populator: () => IHttpPromise<void>,\n    loop?: boolean\n): Promise<boolean> {\n  const cookieValue = getCookieValue(value);\n  if (!cookieValue && !loop) {\n    return populator()\n      .then(() => readOrPopulateAuthenticationCookie(value, populator, true));\n  }\n  return Promise.resolve(cookieValue === \"1\");\n}\n\nfunction readRoleCookie(role: string): Promise<boolean> {\n  return readOrPopulateAuthenticationCookie(\n    `cef_hr_${role.replace(/\\s+/ug, \"%20\")}`,\n    () => cvApi.authentication.CurrentUserHasRole({ Name: role })\n  );\n}\n\nfunction readPermissionCookie(permission: string): Promise<boolean> {\n  return readOrPopulateAuthenticationCookie(\n    `cef_hp_${permission.replace(/\\s+/ug, \"%20\")}`,\n    () => cvApi.authentication.CurrentUserHasPermission({ Name: permission })\n  );\n}\n\nexport const useAuthFactory = (): IAuthFactory | null => {\n  const [ authFactory, setAuthFactory ] = useState<IAuthFactory>(null);\n\n  const cefConfig = useCefConfig();\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (!cefConfig) {\n      return;\n    }\n    const factory = {\n      preAuth: (force?: boolean): Promise<boolean> => {\n        if (force) {\n          promiser.flush(\"authFactory:PreAuth\");\n        }\n        return promiser.resolve(\n          \"authFactory:PreAuth\",\n          () => cvApi.contacts\n            .GetCurrentUserName()\n            .then(r => {\n              return r?.data?.ActionSucceeded ?? false;\n            })\n            .catch(reason => {\n              console.log(reason);\n              return false;\n            })\n        );\n      },\n\n      loadCurrentUser: (force?: boolean): Promise<UserModel> => {\n        if (force) {\n          promiser.flush(\"authFactory:LoadCurrentUser\");\n        }\n        return promiser.resolve(\n          \"authFactory:LoadCurrentUser\",\n          () => factory.preAuth(force)\n            .then(authed => {\n              if (!authed) {\n                return null;\n              }\n              return cvApi.contacts.GetCurrentUser();\n            })\n            .then(r => {\n              dispatch(setUser({ ...r?.data, Loading: false }));\n              return r?.data;\n            })\n        );\n      },\n\n      loadCurrentAccount: (force?: boolean): Promise<AccountModel> => {\n        if (force) {\n          promiser.flush(\"authFactory:LoadCurrentAccount\");\n        }\n        return promiser.resolve(\n          \"authFactory:LoadCurrentAccount\",\n          () => factory.preAuth()\n            .then(authed => {\n              if (!authed) {\n                return null;\n              }\n              return cvApi.accounts.GetCurrentAccount()\n                .then(r => {\n                  if (!r?.data) {\n                    throw new Error(\"Unable to load current account\");\n                  }\n                  dispatch(setAccount(r.data));\n                  return r.data;\n                })\n                .catch(reason => {\n                  console.log(reason);\n                  return null;\n                });\n            })\n        );\n      },\n\n      loadAffiliateAccounts: (force?: boolean): Promise<AccountModel[]> => {\n        if (force) {\n          promiser.flush(\"authFactory:LoadAffiliateAccounts\");\n        }\n        return promiser.resolve(\n          \"authFactory:LoadAffiliateAccounts\",\n          () => factory.preAuth()\n            .then(authed => {\n              if (!authed) {\n                return null;\n              }\n              return factory.hasRole(\"CEF Affiliate Administrator\")\n                .then(hasRole => {\n                  if (!hasRole) {\n                    return null;\n                  }\n                  return cvApi.accounts.GetAccountsForCurrentAccount({ Active: true, AsListing: true });\n                })\n                .then(r => {\n                  if (!r?.data) {\n                    throw new Error(\"Unable to load affiliated accounts\");\n                  }\n                  dispatch(setAffiliateAccounts(r.data.Results));\n                  return r.data.Results;\n                });\n            })\n        );\n      },\n\n      setAffiliateAccount: (name: string): Promise<AccountModel> => {\n        if (name) {\n          Cookies.set(\"cefSelectedAffiliateAccountKey\", name);\n        } else {\n          Cookies.remove(\"cefSelectedAffiliateAccountKey\");\n        }\n        return factory.loadCurrentAccount(true);\n      },\n\n      hasRole: (role: string): Promise<boolean> => {\n        const key = `authFactory:HasRole:${role}`;\n        return promiser.resolve(\n          key,\n          () => factory\n            .preAuth()\n            .then(res => {\n              if (!res) {\n                return false;\n              }\n              return readRoleCookie(role);\n            })\n        );\n      },\n\n      hasPermission: (permission: string): Promise<boolean> => {\n        const key = `authFactory:HasPermission:${permission}`;\n        return promiser.resolve(\n          key,\n          () => factory\n            .preAuth()\n            .then(res => {\n              if (!res) {\n                return false;\n              }\n              return readPermissionCookie(permission);\n            })\n        );\n      },\n\n      login: async (credentials: AuthBody): Promise<LoginResponse> => {\n        // Step 1: Check for MFA\n        if (cefConfig.authProviderMFAEnabled) {\n          if (!credentials.MFAToken && !credentials.checked) {\n            try {\n              const mfaResult = await cvApi.authentication.CheckForMFAForUsername(credentials.Username);\n              if (mfaResult?.data?.ActionSucceeded) {\n                // MFA required for this user\n                return Promise.resolve({\n                  Status: LoginResponseStatus.Challenge,\n                  MFAResult: mfaResult.data.Result\n                });\n              }\n            } catch (err) {\n              // MFA not required or an error occurred - either way, attempt normal auth\n              console.error(err);\n            }\n          }\n          credentials.Password = (credentials.Password ?? \"\") + (credentials.MFAToken ?? \"\");\n        }\n        // Step 2: Check for forced password reset\n        if (!credentials.checked) {\n          const forcedResetChecked = await cvApi.authentication.CheckForcedPasswordReset({\n            UserName: credentials.Username,\n            Password: credentials.Password\n          });\n          if (forcedResetChecked.data?.ActionSucceeded) {\n            return Promise.resolve({\n              Status: LoginResponseStatus.ForcedPasswordReset\n            });\n          }\n        }\n        // Step 3: send auth request\n        const providers = cefConfig.authProvider.split(\",\");\n        for (const provider of providers) {\n          try {\n            // eslint-disable-next-line no-await-in-loop\n            const authResponse = await axios.post<AuthenticateResponse>(\n              `/auth/${provider}`,\n              credentials\n            );\n            if (authResponse?.data?.UserName) {\n              // Login successful\n              promiser.flush(/authFactory:.*/u);\n              // eslint-disable-next-line no-await-in-loop\n              return await factory.loadCurrentUser(true)\n                .then(() => {\n                  return Promise.resolve({ Status: LoginResponseStatus.Success });\n                });\n            }\n          } catch (err) {\n            console.error(err);\n            continue;\n          }\n        }\n        return Promise.reject(LoginResponseStatus.Failure);\n      },\n\n      requestMFA: (username: string, usePhone: boolean): Promise<boolean> => {\n        return cvApi.authentication\n          .RequestMFAForUsername(username, { UsePhone: usePhone })\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              return false;\n            }\n            return true;\n          });\n      },\n\n      logout: (): Promise<void> => {\n        return axios.post(\"/auth/logout\")\n          .then(() => {\n            promiser.flush(/authFactory:.*/u);\n            // redirect to homepage\n            window.location.href = corsLink(cefConfig, cefConfig.routes.site.root, \"site\", \"primary\");\n            // @ts-ignore\n            dispatch(setUser({ Loading: false }));\n          })\n          .catch((err: Error) => {\n            console.error(err);\n          });\n      },\n\n      register: (user: RegisterNewUserDto): Promise<void> => {\n        return cvApi.authentication\n          .RegisterNewUser(user)\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Failed to register new user\" ];\n            }\n          });\n      },\n\n      updateCurrentUser: (newUser: UserModel): Promise<UserModel> => {\n        return cvApi.contacts\n          .UpdateCurrentUser(newUser)\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Failed to update current user\" ];\n            }\n            return factory.loadCurrentUser(true);\n          });\n      },\n\n      updateCurrentAccount: (newAccount: AccountModel): Promise<AccountModel> => {\n        return cvApi.accounts\n          .UpdateCurrentAccount(newAccount)\n          .then(r => {\n            if (!r?.data) {\n              throw new Error(\"Unable to update account\");\n            }\n            return factory.loadCurrentAccount(true);\n          });\n      }\n    };\n    setAuthFactory(factory);\n  }, [ cefConfig ]);\n\n  return authFactory;\n};\n","/* eslint-disable arrow-body-style */\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\nimport { AccountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { RootState, WithLoading } from \"src/_redux/store\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IAuthSliceState {\n  currentUser: WithLoading<UserModel>;\n  currentAccount: WithLoading<AccountModel>;\n  affiliateAccounts: AccountModel[];\n}\n\n// Klaviyo Identify User Function\nconst identifyUser = (user: any) => {\n  const { AccountID, ContactPhone, ContactEmail, ContactFirstName, ContactLastName } = user;\n  window._learnq = window._learnq || [];\n  window._learnq.push(['identify', {\n    \"Account ID\": AccountID,\n    \"Phone\": ContactPhone,\n    \"Email\": ContactEmail,\n    \"First Name\": ContactFirstName,\n    \"Last Name\": ContactLastName,\n  }]);\n};\n\nexport const authSlice = createSlice({\n  name: \"auth\",\n  initialState: {\n    currentUser: { Loading: true },\n    currentAccount: { Loading: true },\n    affiliateAccounts: null,\n  } as IAuthSliceState,\n  reducers: {\n    logout: state => {\n      state.currentUser = null;\n      state.currentAccount = null;\n    },\n    setAccount: (state, action: PayloadAction<WithLoading<AccountModel>>) => {\n      state.currentAccount = action.payload;\n    },\n    setUser: (state, action: PayloadAction<WithLoading<UserModel>>) => {\n      state.currentUser = action.payload;\n    },\n    setAffiliateAccounts: (state, action: PayloadAction<AccountModel[]>) => {\n      state.affiliateAccounts = action.payload;\n    }\n  }\n});\n\nexport const { logout, setUser, setAccount, setAffiliateAccounts } = authSlice.actions;\n\nexport const useCurrentUser = (): WithLoading<UserModel> => {\n  const user = useSelector((state: RootState) => state.auth.currentUser);\n  const authFactory = useAuthFactory();\n\n  useEffect(() => {\n    if (user.Loading && authFactory !== null) {\n      authFactory.loadCurrentUser();\n    } else if (!user.Loading) {\n      // Call identifyUser only once when user data is available\n      identifyUser(user);\n    }\n  }, [user, authFactory]);\n\n  return user;\n};\n\nexport const useSetCurrentUser = (): ((newUser: WithLoading<UserModel>) => void) => {\n  const dispatch = useDispatch();\n  const currentUser = useCurrentUser();\n\n  return async (newUser: WithLoading<UserModel>) => {\n    dispatch(setUser({ ...currentUser, Loading: true }));\n    try {\n      await cvApi.contacts.UpdateCurrentUser(newUser);\n      dispatch(setUser({ ...newUser, Loading: false }));\n    } catch (err) {\n      dispatch(setUser({ ...currentUser, Loading: false }));\n    }\n  };\n};\n\nexport const useCurrentAccount = (): WithLoading<AccountModel> => {\n  const account = useSelector((state: RootState) => state.auth.currentAccount);\n  const authFactory = useAuthFactory();\n\n  useEffect(() => {\n    if (account.Loading && authFactory !== null) {\n      authFactory.loadCurrentAccount();\n    }\n  }, [ account, authFactory ]);\n\n  return account;\n};\n\nexport const useAffiliateAccounts = (): AccountModel[] => {\n  const accounts = useSelector((state: RootState) => state.auth.affiliateAccounts);\n  const authFactory = useAuthFactory();\n  const currentUser = useCurrentUser();\n\n  useEffect(() => {\n    if (currentUser.ID > 0 && accounts === null && authFactory !== null) {\n      authFactory.loadAffiliateAccounts();\n    }\n  }, [ currentUser, accounts, authFactory ]);\n\n  return accounts;\n};\n\nexport default authSlice.reducer;","/** @format */\n\nimport _ from \"lodash\";\nimport { Alert } from \"react-bootstrap\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\ninterface IErrorViewProps {\n  viewState: IViewState;\n  componentName?: string;\n  classes?: string;\n}\n\nexport const ErrorView = (props: IErrorViewProps): JSX.Element | null => {\n  const { viewState, componentName, classes } = props;\n  const cefConfig = useCefConfig();\n\n  if (!viewState?.hasError) {\n    return null;\n  }\n\n  if (cefConfig?.debug) {\n    console.error(viewState);\n    console.log(`Error occurred in ${componentName}`);\n  }\n\n  const errorMessageArr = [];\n\n  if (_.isString(viewState.errorMessage)) {\n    errorMessageArr.push(viewState.errorMessage);\n  }\n  if (_.isArray(viewState.errorMessages)) {\n    errorMessageArr.push(...viewState.errorMessages);\n  }\n\n  return (\n    <Alert\n      variant=\"danger\"\n      className={classes ?? \"\"}>\n      {errorMessageArr.map((error, i) => (\n        <p\n          className={`${i === 0 && \"mb-0\"}`}\n          key={error.slice(0, 10)}>\n          {error}\n        </p>\n      ))}\n    </Alert>\n  );\n};\n","import { AllHTMLAttributes } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ITranslateProps extends AllHTMLAttributes<HTMLSpanElement> {\n  translateKey: string;\n}\n\nexport const Translate = (props: ITranslateProps): JSX.Element => {\n  const { translateKey, ...remaining } = props;\n\n  const { t } = useTranslation();\n\n  return <span {...remaining}>{t(translateKey)}</span>;\n};\n","import { Translate } from \"src/_shared/Translate\";\nimport { Col, Row, Spinner } from \"react-bootstrap\";\nimport { SizeProp } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface ILoadingWidgetProps {\n  overlay?: boolean;\n  padIn?: boolean;\n  size?: SizeProp;\n  message?: string;\n  messageKey?: string;\n  classes?: string;\n  innerClasses?: string;\n}\n\nexport const LoadingWidget = (props: ILoadingWidgetProps): JSX.Element => {\n  const { overlay, padIn, message, messageKey, classes, innerClasses } = props;\n\n  let additionalClasses = \"\";\n  if (overlay) {\n    additionalClasses += `overlay position-absolute align-items-center ay-0 ax-${padIn ? \"0\" : \"3\"}`;\n  }\n  if (classes && typeof classes === \"string\") {\n    additionalClasses += ` ${classes}`;\n  }\n\n  return (\n    <Row\n      className={additionalClasses}\n      style={{\n        zIndex: overlay ? 10000 : \"inherit\",\n        background: overlay ? \"rgba(var(--bs-light-rgb),0.7)\" : \"inherit\"\n      }}>\n      <Col\n        xs={12}\n        className={`text-center o-100 ${!overlay && !innerClasses ? \"p-5\" : \"\"} ${innerClasses ? innerClasses : \"\"}`}>\n        {/* @ts-ignore */}\n        <Spinner animation=\"border\" />\n        {messageKey && (\n          <p>\n            <Translate translateKey={messageKey} />\n          </p>\n        )}\n        {message && <p>{message}</p>}\n        {message && messageKey && <Translate translateKey={\"common.Loading.Ellipses\"} />}\n      </Col>\n    </Row>\n  );\n};\n","import React from \"react\";\n// @ts-ignore\nimport ReactDOM from \"react-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Modal as BootstrapModal, Button } from \"react-bootstrap\";\n\ninterface IConfirmationModalProps {\n  bodyClasses?: string;\n  confirmBtnLabel?: string | JSX.Element;\n  confirmBtnClasses?: string;\n  confirmBtnVariant?: string;\n  confirmBtnSID?: string;\n  cancelBtnLabel?: string | JSX.Element;\n  cancelBtnVariant?: string;\n  cancelBtnClasses?: string;\n  cancelBtnSID?: string;\n  confirmDisabled?: boolean;\n  customHeaderComponent?: JSX.Element;\n  footerClasses?: string;\n  headerClasses?: string;\n  showHeader?: boolean;\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  title?: string;\n  show: boolean;\n  onConfirm?: Function;\n  confirmButton?: React.ReactNode;\n  onCancel: Function;\n  children?: React.ReactNode;\n  hideFooter?: boolean;\n}\n\nexport const ConfirmationModal = (props: IConfirmationModalProps): JSX.Element => {\n  const {\n    title,\n    showHeader,\n    bodyClasses,\n    confirmBtnLabel,\n    confirmBtnClasses,\n    confirmBtnVariant,\n    cancelBtnLabel,\n    cancelBtnVariant,\n    cancelBtnClasses,\n    onConfirm,\n    confirmButton,\n    confirmDisabled,\n    customHeaderComponent,\n    footerClasses,\n    headerClasses,\n    onCancel,\n    size,\n    show,\n    confirmBtnSID,\n    cancelBtnSID\n  } = props;\n\n  const { t } = useTranslation();\n\n  const onConfirmButtonPressed = (): void => {\n    onConfirm();\n  };\n\n  const onCancelButtonPressed = (): void => {\n    if (onCancel) {\n      onCancel();\n    }\n  };\n\n  return (\n    <BootstrapModal\n      show={show}\n      onHide={onCancelButtonPressed}\n      size={size as \"lg\"}\n      contentClassName=\"border-0\">\n      {showHeader && (\n        <BootstrapModal.Header\n          closeButton\n          className={headerClasses ?? \"bg-light border-medium py-2 rounded-0 text-black\"}>\n          {customHeaderComponent ?? (\n            <h5\n              id=\"txtConfirmationModalTitle\"\n              className=\"modal-title text-capitalize mb-0\">\n              {title ?? t(\"ui.storefront.common.PleaseConfirm\")}\n            </h5>\n          )}\n        </BootstrapModal.Header>\n      )}\n      <BootstrapModal.Body className={bodyClasses}>\n        {props.children}\n      </BootstrapModal.Body>\n      {!props.hideFooter && (\n        <BootstrapModal.Footer className={footerClasses}>\n          <Button\n            id=\"btnConfirmationModalCancel\"\n            variant={cancelBtnVariant ?? \"outline-secondary\"}\n            className={cancelBtnClasses ?? \"\"}\n            onClick={onCancelButtonPressed}\n            data-sid={cancelBtnSID}>\n            {cancelBtnLabel ?? t(\"ui.storefront.common.Cancel\")}\n          </Button>\n          {confirmButton ?? (\n            <Button\n              id=\"btnConfirmationModalConfirm\"\n              variant={confirmBtnVariant ?? \"primary\"}\n              className={`ms-2 ${confirmBtnClasses ?? \"\"}`}\n              disabled={confirmDisabled || false}\n              onClick={onConfirmButtonPressed}\n              data-sid={confirmBtnSID}>\n              {confirmBtnLabel ?? \"Confirm\"}\n            </Button>\n          )}\n        </BootstrapModal.Footer>\n      )}\n    </BootstrapModal>\n  );\n};\n\nConfirmationModal.defaultProps = {\n  showHeader: true\n};\n\nexport const confirm = (props: Omit<IConfirmationModalProps, \"show\" | \"onConfirm\" | \"onCancel\">): Promise<void> => {\n  return new Promise((resolve, reject) => {\n    const div = document.createElement(\"div\");\n\n    const cleanup = () => {\n      ReactDOM.unmountComponentAtNode(div);\n      document.body.removeChild(div);\n    };\n\n    const onConfirm = () => {\n      cleanup();\n      resolve();\n    };\n\n    const onCancel = () => {\n      cleanup();\n      // eslint-disable-next-line prefer-promise-reject-errors\n      reject();\n    };\n\n    document.body.appendChild(div);\n\n    ReactDOM.render(\n      <ConfirmationModal\n        {...props}\n        show={true}\n        onConfirm={onConfirm}\n        onCancel={onCancel}\n      />,\n      div\n    );\n  });\n};\n","import React from \"react\";\n// @ts-ignore\nimport ReactDOM from \"react-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Modal as BootstrapModal } from \"react-bootstrap\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\n\ninterface IModalProps {\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  title?: string;\n  titleID?: string;\n  showHeader?: boolean;\n  CustomHeader?: () => JSX.Element;\n  onCancel: Function;\n  show: boolean;\n  children?: React.ReactNode;\n  loading?: boolean;\n  modalBodyClasses?: string;\n  modalClasses?: string;\n  headerClasses?: string;\n  includeFooter?: boolean;\n  footerClasses?: string;\n  hideCloseButton?: boolean;\n  backdrop?: boolean | string;\n}\n\nexport const Modal = (props: IModalProps): JSX.Element => {\n  const {\n    title,\n    titleID,\n    onCancel,\n    size,\n    show,\n    loading,\n    showHeader,\n    CustomHeader,\n    modalBodyClasses,\n    modalClasses,\n    headerClasses,\n    includeFooter,\n    footerClasses,\n    hideCloseButton,\n    backdrop\n  } = props;\n\n  const { t } = useTranslation();\n\n  const onCancelButtonPressed = () => {\n    if (onCancel) {\n      onCancel();\n    }\n  };\n\n  // NOTE: TS doesn't know \"md\" exists\n  return (\n    <BootstrapModal\n      show={show}\n      onHide={onCancelButtonPressed}\n      size={size as \"lg\"}\n      contentClassName={modalClasses || \"border-0\"}\n      backdrop={backdrop as \"static\"}>\n      {showHeader && (\n        <BootstrapModal.Header\n          closeButton={!hideCloseButton}\n          className={headerClasses || \"bg-light rounded-0 py-2 mt-1\"}\n          closeVariant=\"black\">\n          {CustomHeader\n            ? <CustomHeader />\n            : (\n              <h5 className=\"modal-title text-capitalize mb-0\"\n                data-sid={titleID ?? \"\"}\n                id={titleID ?? \"\"}>\n                {title ?? t(\"ui.storefront.common.Message\")}\n              </h5>\n            )}\n        </BootstrapModal.Header>\n      )}\n      <BootstrapModal.Body className={`${modalBodyClasses ?? \"\"}`}>\n        {loading ? <LoadingWidget /> : props.children}\n      </BootstrapModal.Body>\n      {includeFooter && (\n        <BootstrapModal.Footer className={footerClasses || \"\"}></BootstrapModal.Footer>\n      )}\n    </BootstrapModal>\n  );\n};\n\nModal.defaultProps = {\n  showHeader: true,\n  size: \"lg\"\n};\n\nexport const modal = (props: Omit<IModalProps, \"show\" | \"onCancel\">): Promise<void> => {\n  return new Promise((resolve, reject) => {\n    const div = document.createElement(\"div\");\n\n    const cleanup = () => {\n      ReactDOM.unmountComponentAtNode(div);\n      document.body.removeChild(div);\n    };\n\n    const onCancel = () => {\n      cleanup();\n      resolve();\n    };\n\n    document.body.appendChild(div);\n\n    ReactDOM.render(<Modal {...props}\n      show={true}\n      onCancel={onCancel} />, div);\n  });\n};\n","/** @format */\n\nimport { useState } from \"react\";\n// @ts-ignore\nimport ReactDOM from \"react-dom\";\nimport _ from \"lodash\";\nimport { CEFActionError, CEFActionResponseT, IHttpPromiseCallbackArg } from \"src/_api/cvApi.shared\";\nimport { ResponseError } from \"src/_api/cvApi._DtoClasses\";\nimport {\n  Debounce,\n  IErrorMessageArg,\n  IHTTPResponseT,\n  IUseViewStateResult,\n  IViewState,\n  IWaitMessageArg\n} from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { Modal } from \"src/_shared/modals\";\n\nexport const useViewState = (): IUseViewStateResult => {\n  const [ viewState, setViewState ] = useState<IViewState>({\n    errorMessage: null,\n    errorMessages: null,\n    hasError: false,\n    loading: true,\n    running: false,\n    success: false,\n    waitMessage: null\n  });\n\n  const cefConfig = useCefConfig();\n\n  const debounce500: Debounce = {\n    updateOn: \"default blur\",\n    debounce: { default: 500, blur: 0 },\n    allowInvalid: false\n  };\n\n  function consoleDebug(...args: unknown[]): void {\n    if (cefConfig.debug) {\n      console.debug(...args);\n    }\n  }\n\n  function setRunning(waitMessage: IWaitMessageArg): void {\n    let newValue: string | null = null;\n    if (waitMessage) {\n      if (Object.prototype.toString.call(waitMessage) === \"[object Promise]\") {\n        // Wait message is a Promise\n        Promise.resolve(waitMessage as Promise<string>).then((msg: string) => {\n          newValue = msg;\n        });\n      } else if (typeof waitMessage === \"string\") {\n        newValue = waitMessage;\n      }\n    }\n    setViewState({\n      ...viewState,\n      errorMessage: null,\n      errorMessages: null,\n      hasError: false,\n      running: true,\n      success: false,\n      waitMessage: newValue\n    });\n  }\n\n  function finishRunning(\n      hasError = false,\n      errorMessage: IErrorMessageArg = null,\n      errorMessages: string[] = null,\n      useModal: boolean = false\n  ): void {\n    let messageToUse = \"\";\n    // CEFActionReponseT\n    if (_.has(errorMessage, \"Result\")) {\n      messageToUse = (errorMessage as CEFActionResponseT<any>).Result;\n    }\n    if (errorMessage instanceof Error) {\n      messageToUse = (errorMessage as Error).message;\n    }\n    // IHttpPromiseCallbackArg<ResponseError>\n    if (_.has(errorMessage, \"data.ErrorCode\")) {\n      messageToUse = (errorMessage as IHttpPromiseCallbackArg<ResponseError>).data.Message;\n    }\n    if (typeof errorMessage === \"string\") {\n      messageToUse = errorMessage;\n    }\n    if (_.isArray(errorMessage)) {\n      messageToUse = errorMessage[0];\n    }\n    // IHTTPResponseT<CEFActionError>\n    if (_.has(errorMessage, \"data.ResponseStatus.Message\")) {\n      messageToUse = (errorMessage as IHTTPResponseT<CEFActionError>).data.ResponseStatus.Message;\n    }\n    if (hasError && cefConfig.debug) {\n      consoleDebug(messageToUse);\n    }\n    setViewState({\n      ...viewState,\n      errorMessage: messageToUse,\n      errorMessages,\n      hasError,\n      running: false,\n      success: !hasError,\n      waitMessage: null\n    });\n    if (useModal) {\n      const div = document.createElement(\"div\");\n\n      const cleanUp = () => {\n        ReactDOM.unmountComponentAtNode(div);\n        document.body.removeChild(div);\n      };\n\n      document.body.appendChild(div);\n\n      ReactDOM.render(\n        <Modal\n          show={true}\n          onCancel={() => cleanUp()}>\n          {JSON.stringify(messageToUse)}\n        </Modal>,\n        div\n      );\n    }\n  }\n\n  function setLoading(): void {\n    setViewState({\n      ...viewState,\n      loading: true\n    });\n  }\n\n  function finishLoading(): void {\n    setViewState({\n      ...viewState,\n      loading: false\n    });\n  }\n\n  return {\n    setRunning,\n    finishRunning,\n    setLoading,\n    finishLoading,\n    viewState,\n    debounce500\n  };\n};\n","/**\n * @file React/src/_shared/common/ImageWithFallback.tsx\n * @author Copyright (c) 2019-2023 clarity-ventures.com. All rights reserved.\n * @desc Image with placeholder.jpg as fallback\n */\nimport { ImgHTMLAttributes, SyntheticEvent, useState } from \"react\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsImageLink } from \"src/_shared/common/Cors\";\n\ninterface IImageWithFallbackProps extends ImgHTMLAttributes<any> {\n  // A synthetic property from react\n  dispatch?: any;\n  kind?: keyof CEFConfig[\"images\"];\n  imageResizerParamsBody?: { [key: string]: any };\n}\n\nexport const ImageWithFallback = ({\n  src,\n  alt,\n  dispatch,\n  kind,\n  imageResizerParamsBody,\n  ...props\n}: IImageWithFallbackProps): JSX.Element => {\n  const [ imgSrc, setImgSrc ] = useState<string | undefined>(src);\n  // This is to prevent infinite image loading if 'corsDefaultImageLink' also fails to load placeholder.jpg\n  const [ fallBackError, setFallBackError ] = useState<boolean>(false);\n  const cefConfig = useCefConfig();\n  const onError = (event: SyntheticEvent<HTMLImageElement, Event>) => {\n    if (fallBackError) {\n      return null;\n    }\n    setFallBackError(true);\n    // Will cause corsImageLink to fallback to placeholder, see Cors.ts\n    return setImgSrc(undefined);\n  };\n\n  return (\n    <img\n      alt={alt}\n      src={corsImageLink(cefConfig, imgSrc, kind, imageResizerParamsBody)}\n      onError={onError}\n      {...props}\n    />\n  );\n};\n\nImageWithFallback.defaultProps = {\n  imageResizerParamsBody: {\n    mode: \"pad\",\n    scale: \"both\",\n    maxheight: 200,\n    maxwidth: 200\n  }\n};\n","import { useEffect, useState } from \"react\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CategoryModel } from \"src/_api/cvApi.shared\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { Anchor } from \"react-bootstrap\";\n\nexport const Categories = (): JSX.Element => {\n  const [ categories, setCategories ] = useState<Array<CategoryModel>>([]);\n  const [ categoriesBySeoUrl, setCategoriesBySeoUrl ] = useState<Record<string, CategoryModel>>(null);\n  const [ categoriesByNamePipeKey, setCategoriesByNamePipeKey ] = useState<Record<string, CategoryModel>>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    getCategories();\n  }, []);\n\n  function getCategories(): void {\n    setRunning();\n    cvApi.categories\n      .GetCategoriesThreeLevels()\n      .then(result => {\n        const newCatsBySeoUrl: Record<string, CategoryModel> = {};\n        const newCatsByNamePipeKey: Record<string, CategoryModel> = {};\n        for (const cat of result.data) {\n          if (!cat.SeoUrl) {\n            console.warn(`Category #${cat.ID} is missing an SeoUrl, cannot build into tree`);\n            continue;\n          }\n          newCatsBySeoUrl[cat.SeoUrl] = cat;\n          newCatsByNamePipeKey[`${cat.Name}|${cat.CustomKey}`] = cat;\n          if (cat.Children) {\n            for (const kit of cat.Children) {\n              newCatsBySeoUrl[kit.SeoUrl] = kit;\n              newCatsByNamePipeKey[`${kit.Name}|${kit.CustomKey}`] = kit;\n            }\n          }\n        }\n        setCategoriesBySeoUrl(newCatsBySeoUrl);\n        setCategoriesByNamePipeKey(newCatsByNamePipeKey);\n        setCategories(result.data);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to get categories\");\n      });\n  }\n\n  if (!categories || !categories.length) {\n    return <LoadingWidget />;\n  }\n\n  function n(category: CategoryModel | string, categoryTop: string = null, categoryMid: string = null): string {\n    if (!categoriesBySeoUrl || !categoriesByNamePipeKey) {\n      // Loading\n      return null;\n    }\n    if (!category) {\n      return null;\n    }\n    if (typeof category === \"string\") {\n      if (category in categoriesBySeoUrl) {\n        return n(categoriesBySeoUrl[category]);\n      }\n      if (category in categoriesByNamePipeKey) {\n        return n(categoriesByNamePipeKey[category]);\n      }\n      if (Boolean(categoryMid)) {\n        const full = `${categoryTop}/${categoryMid}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      if (Boolean(categoryTop)) {\n        const full = `${categoryTop}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      return \"Unknown Category\";\n    }\n    return category.DisplayName ?? category.Name;\n  }\n\n  return (\n    <>\n      <div\n        className=\"mega-menu-tabset w-100 d-flex\"\n        id=\"mega-menu-tabset\">\n        <div className=\"d-flex p-2 my-3 mx-4 w-100\">\n          {categories !== null && Array.isArray(categories)\n            ? categories.map((category, index): React.ReactNode => {\n              if (category.ParentName) {\n                return null;\n              }\n              if (!category.SerializableAttributes?.AltLink) {\n                console.warn(`Category #${category.ID} is missing an AltLink attribute, cannot build link for menu`);\n                return null;\n              }\n              // NOTE: As these are always top level categories, no need to include ParentSeoUrl here\n              return (\n                <Anchor\n                  key={`CategorymenuItem_${category.ID}}`}\n                  data-sid={`menuItem_${index}`}\n                  href={\n                    category.SerializableAttributes?.AltLink?.Value\n                      ? corsLink(cefConfig, `/${category.SerializableAttributes?.AltLink?.Value}`, \"productDetail\")\n                      : `/Product/${category.Name}`\n                  }\n                  className=\"text-black m-2 d-flex w-25\">\n                  <div className=\"d-flex align-items-center\">\n                    <ImageWithFallback\n                      kind=\"categories\"\n                      src={category.PrimaryImageFileName}\n                      imageResizerParamsBody={{ height: 75, width: 75 }}\n                      alt={category.DisplayName ?? category.Name}\n                    />\n                    <div className=\"d-flex flex-column justify-content-center pt-2 px-2 text-black text-capitalize\">\n                      <span>{n(category)}</span>\n                      <span className=\"small mega-menu-cat-description\">{category.Description}</span>\n                    </div>\n                  </div>\n                </Anchor>\n              );\n            })\n            : null}\n        </div>\n      </div>\n      <ErrorView viewState={viewState} />\n    </>\n  );\n};\n","import { IFormGroupLabelProps } from \"./_formGroupTypes\";\nimport { Form, OverlayTrigger, Tooltip } from \"react-bootstrap\";\n\nexport const FormGroupLabel = (props: IFormGroupLabelProps): JSX.Element => {\n  const { tooltipText, label, labelClassName, formIdentifier, required, hideRequired } = props;\n\n  const RenderTooltip = (tooltipProps: any) => <Tooltip {...tooltipProps}>\n    {tooltipText}\n  </Tooltip>;\n\n  const isRegistrationForm = formIdentifier === \"emEmailRegistrationB2C\"\n  || formIdentifier === \"pwPasswordRegistrationB2C\";\n\n  if (tooltipText) {\n    return <OverlayTrigger placement=\"top\"\n      delay={{ show: 250, hide: 400 }}\n      overlay={RenderTooltip}>\n      <Form.Label htmlFor={formIdentifier} className={labelClassName || \"mb-0\"}>\n        {isRegistrationForm && required && !hideRequired ? <span className=\"text-danger\">&nbsp;*&nbsp;</span> : null}\n        <span>{label}</span>\n        {!isRegistrationForm && required && !hideRequired ? <span className=\"text-danger\">&nbsp;*&nbsp;</span> : null}\n        <span className=\"ps-1\">\n          <i className=\"fal fa-fw fa-info-circle\" />\n        </span>\n      </Form.Label>\n    </OverlayTrigger>;\n  }\n\n  return (\n    <Form.Label htmlFor={formIdentifier} className={labelClassName || \"mb-0\"}>\n      {isRegistrationForm && required && !hideRequired ? <span className=\"text-danger\">&nbsp;*&nbsp;</span> : null}\n      <span>{label}</span>\n      {!isRegistrationForm && required && !hideRequired ? <span className=\"text-danger\">&nbsp;*</span> : null}\n    </Form.Label>\n  );\n};\n","import { ChangeEvent, forwardRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { PatternFormat, PatternFormatProps } from \"react-number-format\";\nimport { ITextInputFormGroupProps } from \"./_formGroupTypes\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faBriefcase, faCity, faRoad } from \"@fortawesome/free-solid-svg-icons\";\nimport { FormGroupLabel } from \"./FormGroupLabel\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const debounce = (func: Function, wait: number, context: any) => {\n  // eslint-disable-next-line no-undef\n  let timeout: NodeJS.Timeout = null;\n  return (...args: any[]): void => {\n    // eslint-disable-next-line prefer-rest-params\n    const later = () => {\n      timeout = null;\n      func.apply(context, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n};\n\nexport const TextInputFormGroupNew = (props: ITextInputFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    pattern,\n    patternMessage,\n    validateObject,\n    formIdentifier,\n    dataSid,\n    disabled,\n    required,\n    requiredMessage,\n    autoComplete,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    leftIcon,\n    rightIcon,\n    inputClasses,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onKeyPress,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    onPaste,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    // TODO: startTouched,\n    placeholderKey,\n    placeholderText,\n    minLength,\n    minLengthMessage,\n    maxLength,\n    maxLengthMessage,\n    isEmail,\n    isPhone,\n    isFax,\n    isUsername,\n    // inputMode,\n    hideRequired,\n    unitLabel,\n    leftIconContainerClassName,\n    valueToPrefill,\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n\n  const textInput = register(formIdentifier, {\n    maxLength: {\n      value: typeof maxLength === \"number\" ? maxLength : null,\n      message:\n        maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\n    },\n    minLength: {\n      value: typeof minLength === \"number\" ? minLength : null,\n      message: minLengthMessage ?? `Must reach minimum length of ${minLength}`\n    },\n    pattern: {\n      value: isEmail\n        // eslint-disable-next-line no-useless-escape, prefer-named-capture-group, require-unicode-regexp, max-len\n        ? /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i\n        : pattern,\n      message: patternMessage ?? \"Value does not match required pattern\"\n    },\n    required: {\n      value: typeof required === \"boolean\" ? required : null,\n      message:\n        requiredMessage\n        ?? t(\"ui.storefront.common.validation.ThisFieldIsRequired\")\n    },\n    validate: validateObject ?? null\n  });\n\n  let inputAutoComplete: string = null;\n  if (isUsername) {\n    inputAutoComplete = \"username\";\n  } else if (isEmail) {\n    inputAutoComplete = \"email\";\n  } else if (isPhone) {\n    inputAutoComplete = \"tel\";\n  } else if (isFax) {\n    inputAutoComplete = \"fax\";\n  } else if (autoComplete) {\n    inputAutoComplete = autoComplete;\n  }\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  const renderLeftIcon = () => {\n    if (!leftIcon) {\n      return null;\n    }\n    if (!isEmail && !isFax && !isPhone && !leftIcon) {\n      return null;\n    }\n    let iconString = null;\n    if (leftIcon === faRoad) {\n      iconString = \"fal fa-fw fa-road\";\n    } else if (leftIcon === faBriefcase) {\n      iconString = \"fal fa-fw fa-briefcase\";\n    } else if (leftIcon === faCity) {\n      iconString = \"fal fa-fw fa-city\";\n    }\n    return (\n      <InputGroup.Text className={leftIconContainerClassName}>\n        {iconString && <i className={iconString}/>}\n        {isEmail ? <i className=\"fal fa-fw fa-envelope\" /> : null}\n        {isPhone ? <i className=\"fal fa-fw fa-phone\" /> : null}\n        {isFax ? <i className=\"fal fa-fw fa-fax\" /> : null}\n        {!iconString && leftIcon ? <FontAwesomeIcon icon={leftIcon} className=\"fa-fw\" /> : null}\n      </InputGroup.Text>\n    );\n  };\n\n  return (\n    <Form.Group\n      className={`position-relative ${formClasses ?? \"\"} ${\n        errors[formIdentifier] ? \"has-error\" : \"\"\n      }`}>\n      <FormGroupLabel\n        label={labelText ?? t(labelKey)}\n        formIdentifier={formIdentifier}\n        tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n        required={required}\n        hideRequired={hideRequired}\n      />\n      <InputGroup>\n        {renderLeftIcon()}\n        <Form.Control\n          className={`rounded-input form-control ${rightIcon ? \"\" : \"rounded-end\"} ${applyValidClass()} ${inputClasses ?? \"\"}`}\n          data-sid={dataSid ?? null}\n          type={isPhone || isFax ? \"tel\" : \"text\"}\n          as={isPhone ? PatternFormatWrapper : Form.Control}\n          defaultValue={valueToPrefill}\n          format=\"###-###-####\"\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onKeyDown={onKeyDown}\n          onKeyUp={onKeyUp}\n          onKeyPress={onKeyPress}\n          onPaste={onPaste}\n          onMouseDown={onMouseDown}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          onMouseMove={onMouseMove}\n          onMouseOver={onMouseOver}\n          onMouseUp={onMouseUp}\n          disabled={disabled}\n          // Prevents Excess Input\n          maxLength={maxLength ?? 100}\n          autoComplete={inputAutoComplete ?? \"off\"}\n          {...textInput}\n          onChange={debounce((e: ChangeEvent<HTMLInputElement>) => {\n            textInput.onChange(e);\n            if (extraOnChange) {\n              extraOnChange(e);\n            }\n            if (!touched) {\n              setTouched(true);\n            }\n          // eslint-disable-next-line no-invalid-this\n          }, 500, this)}\n          id={formIdentifier}\n          placeholder={placeholderKey ? t(placeholderKey) : placeholderText}\n        />\n        {rightIcon\n          ? <InputGroup.Text className=\"rounded-end\">\n            <i className=\"fal fa-fw fa-right-icon\" />\n          </InputGroup.Text>\n          : null}\n        {unitLabel && (\n          <InputGroup.Text className=\"rounded-end bg-transparent border-0\">\n            {unitLabel}\n          </InputGroup.Text>\n        )}\n        {errors[formIdentifier] && !hideInvalidTooltip\n          ? <div className=\"input-group-append w-100 pt-1 pl-1\" role=\"alert\">\n            <span className=\"text-danger\">\n              {errors[formIdentifier].message}\n            </span>\n          </div>\n          : null}\n        {/* TODO: add success messages */}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n\nconst PatternFormatWrapper = forwardRef<HTMLInputElement, PatternFormatProps>((props, ref) => {\n  return <PatternFormat {...props} getInputRef={ref}/>;\n});\nPatternFormatWrapper.displayName = \"PatternFormatWrapper\";\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Form, InputGroup, ListGroup } from \"react-bootstrap\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\nimport { IPasswordInputFormGroupProps } from \"./_formGroupTypes\";\n\nexport const PasswordInputFormGroupNew = (props: IPasswordInputFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    pattern,\n    patternMessage,\n    formIdentifier,\n    disabled,\n    required,\n    requiredMessage,\n    labelKey,\n    // TODO: labelText,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    inputClasses,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    // TODO: Use showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: Use failsOn,\n    placeholderKey,\n    placeholderText,\n    minLengthMessage,\n    maxLength,\n    maxLengthMessage,\n    requireDigitMessage,\n    requireUppercaseMessage,\n    requireLowercaseMessage,\n    requireSpecialMessage,\n    suppressRequirements,\n    dataSid,\n    leftIconContainerClassName,\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const [ showPassword, setShowPassword ] = useState(false);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const toggleShowPassword = (): void => {\n    setShowPassword(!showPassword);\n  };\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  const reqd = typeof required === \"boolean\" ? required : true;\n\n  const passwordInput = register(formIdentifier, {\n    maxLength: {\n      value: typeof maxLength === \"number\" && !suppressRequirements ? maxLength : null,\n      message:\n        maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\n    },\n    minLength: {\n      value: suppressRequirements ? null : cefConfig?.passwordRequireLength,\n      message: minLengthMessage ?? `Must reach minimum length of ${cefConfig?.passwordRequireLength}`\n    },\n    pattern: {\n      value: pattern,\n      message: patternMessage ?? \"Value does not match required pattern\"\n    },\n    required: {\n      value: reqd,\n      message: requiredMessage ?? \"This field is required\"\n    },\n    validate: reqd\n      ? {\n        hasLowerCase: value => {\n          if (!suppressRequirements && cefConfig?.passwordRequireLowercase && !value.match(/[a-z]/gu)) {\n            return requireLowercaseMessage ?? \"Password must contain at least one lowercase character\";\n          }\n          return true;\n        },\n        hasUpperCase: value => {\n          if (!suppressRequirements && cefConfig?.passwordRequireUppercase && !value.match(/[A-Z]/gu)) {\n            return requireUppercaseMessage ?? \"Password must contain at least one uppercase character\";\n          }\n          return true;\n        },\n        hasNumber: value => {\n          if (!suppressRequirements && cefConfig?.passwordRequireDigit && !value.match(/\\d+/gu)) {\n            return requireDigitMessage ?? \"Password must contain at least one number\";\n          }\n          return true;\n        },\n        hasSpecial: value => {\n          if (!suppressRequirements\n            && cefConfig?.passwordRequireSpecial\n            && !value.match(/[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]+/gu)) {\n            return requireSpecialMessage ?? \"Password must contain at least one special character\";\n          }\n          return true;\n        }\n      }\n      : null\n  });\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    if (hideInvalidTooltip) {\n      return \"is-valid\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  return (\n    <Form.Group\n      className={`position-relative ${formClasses ?? \"\"} ${\n        errors[formIdentifier] ? \"has-error\" : \"\"\n      }`}>\n      <FormGroupLabel\n        label={t(labelKey)}\n        formIdentifier={formIdentifier}\n        tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n        required={reqd}\n      />\n      <InputGroup className={`rounded-input ${applyValidClass()}`}>\n        <input\n          className={`form-control ${applyValidClass()} ${inputClasses ?? \"\"}`}\n          type={showPassword ? \"text\" : \"password\"}\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onKeyDown={onKeyDown}\n          onKeyUp={onKeyUp}\n          onMouseDown={onMouseDown}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          onMouseMove={onMouseMove}\n          onMouseOver={onMouseOver}\n          onMouseUp={onMouseUp}\n          disabled={disabled}\n          data-sid={dataSid}\n          {...passwordInput}\n          onChange={e => {\n            passwordInput.onChange(e);\n            if (extraOnChange) {\n              extraOnChange(e);\n            }\n            if (!touched) {\n              setTouched(true);\n            }\n          }}\n          id={formIdentifier}\n          placeholder={placeholderKey ? t(placeholderKey) : placeholderText ? placeholderText : \"\"}\n        />\n\n        <Button\n          id=\"btnShowPassword\"\n          variant=\"outline-primary\"\n          className=\"border-0 rounded-end-0 rounded-start d-flex h-100 align-items-center\"\n          onClick={toggleShowPassword}>\n          <i className={`far fa-fw ${showPassword ? \"fa-eye-slash\" : \"fa-eye\"}`} />\n        </Button>\n\n      </InputGroup>\n      {errors[formIdentifier] && !hideInvalidTooltip\n        ? <div className=\"w-100\">\n          <ListGroup as=\"ul\" className=\"list-unstyled\">\n            {errors[formIdentifier]\n                && Object.values<string>(errors[formIdentifier].types).map(\n                  (msg): JSX.Element => <li className=\"text-danger\" key={msg}>\n                    {msg}\n                  </li>\n\n                )}\n          </ListGroup>\n        </div>\n        : null}\n    </Form.Group>\n  );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\n// import classes from \"./CheckboxFormGroup.module.scss\";\nimport { ICheckboxFormGroupProps } from \"../../../../../../src/_shared/forms/formGroups/_formGroupTypes\";\n\nexport const CheckboxFormGroupNew = (props: ICheckboxFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    disabled,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    inputClass,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    checkboxOptions,\n    formIdentifier,\n    // setValue\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const [ tooltipIsOpen, setTooltipIsOpen ] = useState<boolean>(false);\n  const [ errorExists, setErrorExists ] = useState<boolean>(false);\n\n  const inputsRefs = useRef<HTMLInputElement[]>([]);\n  const { t } = useTranslation();\n  const relevantFields = checkboxOptions.map(op => op.identifier);\n\n  useEffect(() => {\n    if (hideInvalidTooltip) {\n      return;\n    }\n    let willBeError = false;\n    for (const field of relevantFields) {\n      if (errors[field]) {\n        willBeError = true;\n        break;\n      }\n    }\n    if (willBeError) {\n      setErrorExists(true);\n      return;\n    }\n    setErrorExists(false);\n  });\n\n  const applyHasErrorClass = (): string => (errorExists ? \"has-error\" : \"\");\n\n  return (\n    <Form.Group className={`position-relative mb-2 ${formClasses ?? \"\"} ${applyHasErrorClass()}`}>\n      {tooltipIsOpen ? (\n        <div className={\"rounded border text-center p-2 w-25 small bg-dark text-light form-group-tooltip\"}>\n          {t(tooltipKey)}\n        </div>\n      ) : null}\n      <InputGroup className=\"d-block\">\n        {checkboxOptions.map((option, index) => {\n          const { identifier, required, requiredMessage, labelKey, labelText } = option;\n          const { ref, ...checkboxInput } = register(identifier, {\n            required:\n              typeof required === \"boolean\"\n                ? {\n                  value: required,\n                  message: typeof required === \"boolean\" ? requiredMessage : undefined\n                }\n                : undefined\n          });\n          return (\n            <Form.Label\n              htmlFor={identifier}\n              key={labelText}\n              className=\"control-label d-flex\"\n              onMouseEnter={e => {\n                if (tooltipKey || tooltipText) {\n                  setTooltipIsOpen(true);\n                }\n              }}\n              onMouseLeave={e => {\n                if (tooltipIsOpen) {\n                  setTooltipIsOpen(false);\n                }\n              }}\n            >\n              {required ? <span className=\"text-danger\">&nbsp;*&nbsp;</span>\n                : <span className=\"invisible\">&nbsp;*&nbsp;</span>}\n              <Form.Check\n                as=\"input\"\n                className={`${inputClass ?? \"\"}`}\n                type=\"checkbox\"\n                onBlur={onBlur}\n                onFocus={onFocus}\n                onKeyDown={onKeyDown}\n                onKeyUp={onKeyUp}\n                onMouseDown={onMouseDown}\n                onMouseEnter={onMouseEnter}\n                onMouseLeave={onMouseLeave}\n                onMouseMove={onMouseMove}\n                onMouseOver={onMouseOver}\n                onMouseUp={onMouseUp}\n                disabled={disabled}\n                {...checkboxInput}\n                onChange={e => {\n                  checkboxInput.onChange(e);\n                  if (extraOnChange) {\n                    extraOnChange(e);\n                  }\n                  if (!touched) {\n                    setTouched(true);\n                  }\n                }}\n                id={identifier}\n                name={identifier}\n                ref={(e: HTMLInputElement) => {\n                  ref(e);\n                  // @ts-ignore\n                  inputsRefs.current[index] = e;\n                }}\n              />\n              <span className=\"ms-3\">{t(labelKey)}</span>\n              {tooltipKey || tooltipText ? (\n                <span className=\"text-info\">\n                  <i className=\"fal fa-fw fa-check-circle\" />\n                </span>\n              ) : null}\n            </Form.Label>\n          );\n        })}\n        {errorExists && !hideInvalidTooltip ? (\n          <InputGroup.Text\n            className=\"text-start text-wrap m-0\"\n            role=\"alert\">\n            {Object.keys(errors)\n              .filter(errorKey => relevantFields.includes(errorKey))\n              .map(errorKey => {\n                if (!errors[errorKey]) {\n                  return null;\n                }\n                return (\n                  <span\n                    key={errorKey}\n                    className=\"text-danger bg-transparent border-0\">\n                    {errors[errorKey].message}\n                  </span>\n                );\n              })}\n          </InputGroup.Text>\n        ) : null}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { UserModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useForm } from \"react-hook-form\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { LoginResponseStatus, useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { TextInputFormGroupNew } from \"./formGroups/TextInputFormGroupNew\";\nimport { PasswordInputFormGroupNew } from \"../../_shared/forms/formGroups/PasswordInputFormGroupNew\";\nimport { CheckboxFormGroupNew } from \"./formGroups/CheckboxFormGroupNew\";\n\ninterface ILoginFormProps {\n  // Redux\n  currentUser?: UserModel;\n  showCancel?: boolean;\n  onCancel?: Function;\n  onLoginSuccess?: () => void;\n  returnUrl?: string;\n  onError?: () => void;\n  onClearError?: () => void;\n  signInLeft?: boolean;\n  usernameFieldId?: string;\n  passwordFieldId?: string;\n  usernameDataSid?: string;\n  passwordDataSid?: string;\n}\n\ninterface ILoginData {\n  Username: string;\n  Password: string;\n  MFAToken?: string;\n}\n\nexport const LoginForm = (props: ILoginFormProps): JSX.Element => {\n  const {\n    showCancel,\n    onCancel,\n    onLoginSuccess,\n    returnUrl,\n    onError,\n    onClearError,\n    signInLeft,\n    usernameFieldId,\n    passwordFieldId,\n    usernameDataSid,\n    passwordDataSid\n  } = props;\n\n  const [ showMFA, setShowMFA ] = useState<boolean>(false);\n  const [ , setHideLogin ] = useState<boolean>(false);\n  const [ emailFirstAndLastFour, setEmailFirstAndLastFour ] = useState<string>(\"\");\n  const [ MFAToken, setMFAToken ] = useState<string>(null);\n  const [ hasRunLoginSuccess, setHasRunLoginSuccess ] = useState<boolean>(false);\n  // Const [rememberMe, setRememberMe] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const authenticationFactory = useAuthFactory();\n  const history = useHistory();\n  const location = useLocation();\n  const currentUser = useCurrentUser();\n  const cefConfig = useCefConfig();\n\n  const queryParams = new URLSearchParams(location.search);\n  const returnUrlParam = queryParams.get(\"returnUrl\");\n\n  const {\n    register,\n    reset,\n    formState,\n    getValues\n  } = useForm({\n    mode: \"all\",\n    criteriaMode: \"all\"\n  });\n\n  const usernameIDResolved = usernameFieldId ?? \"txtLoginUsername\";\n  const passwordIDResolved = passwordFieldId ?? \"txtLoginPassword\";\n\n  useEffect(() => {\n    if (viewState.hasError && onError) {\n      onError();\n    } else if (onClearError) {\n      onClearError();\n    }\n  }, [ viewState ]);\n\n  const handleCancel = (): void => {\n    reset();\n    if (onCancel) {\n      onCancel();\n    }\n  };\n\n  function handleSubmit(usePhone?: boolean, state?: string): void {\n    // Finish Running will be called for either an error state or when the page reloads, etc.\n    setRunning();\n    authenticationFactory.login({\n      Username: getValues(usernameIDResolved),\n      Password: getValues(passwordIDResolved),\n      MFAToken\n    })\n      .then(res => {\n        if (res.Status === LoginResponseStatus.Challenge) {\n          // MFA challenge\n          // TODO: res.MFAResult contains the exact result of the MFA call, use it\n          // to show which MFA options the user has configured\n          setShowMFA(true);\n          setEmailFirstAndLastFour(res.MFAResult?.EmailFirstAndLastFour);\n          finishRunning();\n          return;\n        }\n        if (res.Status === LoginResponseStatus.ForcedPasswordReset) {\n          const link = corsLink(cefConfig, \"\", \"forcedPasswordReset\", null, null, {\n            email: getValues(usernameIDResolved)\n          });\n          history.push(link);\n          history.go(0);\n          return;\n        }\n        /* TODO: Add a setting for \"default\" post-login redirect\n        if (!returnUrl || returnUrl === \"/\") {\n          history.push(corsLink(cefConfig, \"\", \"catalog\"));\n          history.go(0);\n          return;\n        }\n        */\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({\n          event: \"sign_in\"\n        });\n        if (returnUrl !== \"/\") {\n          history.push(returnUrl);\n          history.go(0);\n          return;\n        }\n        finishRunning();\n      })\n      .catch((err: LoginResponseStatus) => {\n        finishRunning(true, \"Invalid UserName or Password\");\n      });\n  }\n\n  function requestMFA(loginData: ILoginData, usePhone: boolean): Promise<boolean> {\n    return authenticationFactory\n      .requestMFA(loginData.Username, usePhone);\n  }\n\n  function requestMFATokenViaEmail(): void {\n    setRunning();\n    requestMFA({\n      Username: getValues(usernameIDResolved),\n      Password: getValues(passwordIDResolved),\n      MFAToken\n    }, false).then(() => {\n      setHideLogin(false);\n      finishRunning();\n    });\n  }\n  /* TODO:\n  function requestMFATokenViaSMS(): void {\n    setRunning();\n    requestMFA(loginData, true).then(() => {\n      setHideLogin(false);\n      finishRunning();\n    });\n  }\n  */\n\n  function keySubmit(e: React.KeyboardEvent<HTMLInputElement>): void {\n    if (!e?.key || e.key !== \"Enter\" || !formState.isValid) {\n      return;\n    }\n    handleSubmit(null, \"home\");\n  }\n\n  useEffect(() => {\n    if (currentUser?.ID > 0 && onLoginSuccess && !hasRunLoginSuccess) {\n      onLoginSuccess();\n      setHasRunLoginSuccess(true);\n    }\n    return () => {\n      reset();\n      setMFAToken(\"\");\n      finishRunning();\n    };\n  }, [ currentUser, onLoginSuccess ]);\n\n  if (currentUser?.ID > 0) {\n    return (\n      <p>\n        {`${t(\"ui.storefront.user.login.YouAreCurrentlyLoggedInAs\")} ${currentUser.Contact.FirstName}`}\n      </p>\n    );\n  }\n\n  return <Col xs={12}>\n    {viewState.running\n      ? <LoadingWidget />\n      : <div className=\"d-flex flex-column justify-content-center align-items-center\">\n        <div className=\"bg-brand-light vw-100 py-4\">\n          <div className=\"d-flex flex-column justify-content-center align-items-center\">\n            <h1 className=\"mb-2 pt-4\"\n              data-sid=\"txtRegistrationHeaderTitle\"\n              id=\"header-font\">\n            Welcome\n              <span className=\"text-primary text-center d-block\" id=\"header-font\">back!</span>\n            </h1>\n            <h2 className=\"py-4\">Sign in</h2>\n            <div className=\"login-form\">\n              <TextInputFormGroupNew\n                register={register}\n                errors={formState.errors}\n                formIdentifier={usernameIDResolved}\n                dataSid={usernameDataSid}\n                formClasses=\"form-group col-xs-12 mb-3\"\n                inputClasses=\"\"\n                required={true}\n                placeholderText=\"Email\"\n                onKeyDown={keySubmit}\n              />\n              <PasswordInputFormGroupNew\n                register={register}\n                errors={formState.errors}\n                formIdentifier={passwordIDResolved}\n                dataSid={passwordDataSid}\n                formClasses=\"form-group col-xs-12 mb-2\"\n                inputClasses=\"\"\n                required={true}\n                suppressRequirements={true}\n                placeholderText=\"Password\"\n                tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\n                onKeyDown={keySubmit}\n              />\n              <Form.Group as={Col}\n                xs={12}\n                className=\"has-error mb-2\">\n                {showMFA\n                  ? <>\n                    <div\n                      className={`form-group col-12 my-2 ${viewState.hasError ? \"has-error\" : \"\"}`}>\n                      <label className=\"control-label\" htmlFor=\"txtMFAPrompt\">\n                        {t(\"ui.storefront.controls.login.MFARequired\")}\n                      </label>\n                      <span className=\"d-block\">{t(\"ui.storefront.controls.login.ReceiveCode\")}</span>\n                      <div className=\"button-group\">\n                        <button\n                          type=\"button\"\n                          className=\"btn btn-primary\"\n                          id=\"mfaEmail\"\n                          name=\"mfaEmail\"\n                          onClick={() => requestMFATokenViaEmail()}>\n                          Email:&nbsp;\n                          <span>{emailFirstAndLastFour}</span>\n                        </button>\n                        {/* <button\n                          type=\"button\"\n                          className=\"btn btn-primary\"\n                          id=\"mfaSMS\"\n                          name=\"mfaSMS\"\n                          ng-click=\"requestMFATokenViaSMS()\">\n                          SMS:&nbsp;&bull;&bull;&bull;-&bull;&bull;&bull;-\n                          <span ng-bind=\"mfaResult.PhoneLastFour\"></span>\n                        </button> */}\n                      </div>\n                    </div>\n                    <div\n                      className={`form-group col-12 my-2 ${viewState.hasError ? \"has-error\" : \"\"}`}>\n                      <label\n                        className=\"control-label\"\n                        htmlFor=\"txtMFAPrompt\">\n                        {t(\"ui.storefront.controls.login.AuthToken\")}\n                      </label>\n                      <div className=\"input-group\">\n                        <input\n                          type=\"text\"\n                          className={`form-control ${viewState.running ? \"disabled\" : \"\"}`}\n                          id=\"txtMFAPrompt\"\n                          name=\"txtMFAPrompt\"\n                          autoComplete=\"off\"\n                          placeholder={t(\"ui.storefront.controls.login.EnterYourAuthToken\")}\n                          onChange={e => {\n                            setMFAToken(e.target.value);\n                          }}\n                          onKeyDown={e => keySubmit(e)}\n                        />\n                        {/* <button\n                          type=\"button\"\n                          className=\"btn btn-primary\"\n                          id=\"resend\"\n                          name=\"resend\"\n                          ng-click=\"submit('resend')\">\n                          Resend\n                        </button> */}\n                      </div>\n                    </div>\n                  </>\n                  : null}\n              </Form.Group>\n            </div>\n            <div className=\"align-items-center gx-3 mt-2\">\n              <Col className={`text-${signInLeft ? \"start\" : \"end\"} ${signInLeft ? \"order-2\" : \"order-1\"}`}>\n                <small className=\"small d-flex justify-content-between\">\n                  <div className=\"remember-me-checkbox\">\n                    <CheckboxFormGroupNew\n                      formIdentifier=\"ckRememberMe\"\n                      register={register}\n                      setValue={(key, value) => {\n                        // setValue(key as keyof ILoginData, value);\n                        // trigger(key as keyof ILoginData);\n                      }}\n                      errors={formState.errors}\n                      checkboxOptions={[\n                        {\n                          identifier: \"ckRememberMe\",\n                          labelKey: \"ui.storefront.user.login.RememberMe\",\n                          labelText: \"Remember me\"\n                        }\n                      ]}\n                    />\n                  </div>\n                  <div>\n                    <a id=\"btnLoginForgotPassword\"\n                      href={corsLink(cefConfig, \"/\", \"forgotPassword\")}\n                      onClick={handleCancel}\n                      className=\"text-brand-orange pb-4\">\n                      {t(\"ui.storefront.user.login.ForgotYourPassword\")}\n                    </a>\n                  </div>\n                </small>\n              </Col>\n              <Col xs=\"auto\" className={`pt-4 ${signInLeft ? \"order-1\" : \"order-2\"}`}>\n                <div>\n                  {showCancel && (\n                    <Button variant=\"outline-secondary\" onClick={handleCancel}>\n                      {t(\"ui.storefront.common.Close\")}\n                    </Button>\n                  )}\n                  <Button\n                    id=\"btnLoginSubmit\"\n                    data-sid=\"btnLoginSubmit\"\n                    className=\"btn-fat\"\n                    variant=\"primary\"\n                    disabled={!formState.isValid}\n                    onClick={() => handleSubmit()}>\n                    {t(\"ui.storefront.user.login.SignIn\")}\n                  </Button>\n                </div>\n                <hr className=\"opacity-20 my-4\"></hr>\n                <p className=\"text-center\">Need to create an account?</p>\n\n                <a id=\"btnLoginRegister\"\n                  className=\"text-white hover:none\"\n                  href={returnUrlParam\n                    ? corsLink(cefConfig, \"/\", \"registration\", \"primary\", false, { returnUrl: `${returnUrlParam}` })\n                    : corsLink(cefConfig, \"/\", \"registration\",)}\n                  onClick={handleCancel}>\n                  <Button\n                    variant=\"secondary\"\n                    className=\"btn-fat\">\n                  Create Account\n                  </Button>\n                </a>\n\n              </Col>\n            </div>\n            {viewState.hasError\n          && <Row className=\"mt-3 border-danger border-top border-bottom py-3 gx-0 align-items-center\">\n            <Col xs=\"auto\">\n              <i className=\"fal fa-fw fa-exclamation-triangle fa-2x\" />\n            </Col>\n            <Col className=\"ps-3\">\n              <span id=\"alertLoginErrorMessage\">{viewState.errorMessage}</span>\n            </Col>\n          </Row>\n            }\n          </div>\n        </div>\n      </div>}\n  </Col>;\n};\n","import { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { IRegistrationB2CData } from \"src/Authentication/Registration/_registrationTypes\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useTranslation } from \"react-i18next\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport cvApi from \"src/_api/cvApi\";\nimport { TextInputFormGroupNew } from \"../../_shared/forms/formGroups/TextInputFormGroupNew\";\nimport { PasswordInputFormGroupNew } from \"../../_shared/forms/formGroups/PasswordInputFormGroupNew\";\nimport { CheckboxFormGroupNew } from \"../../_shared/forms/formGroups/CheckboxFormGroupNew\";\n\ninterface IRegistrationB2CFormProps {\n  submitRegistrationB2CForm: SubmitHandler<IRegistrationB2CData>;\n}\n\nexport const RegistrationB2CForm = (props: IRegistrationB2CFormProps): JSX.Element => {\n  const { submitRegistrationB2CForm } = props;\n\n  const { viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const {\n    register,\n    handleSubmit,\n    setValue,\n    trigger,\n    getValues,\n    formState\n  } = useForm<IRegistrationB2CData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const onSubmit: SubmitHandler<IRegistrationB2CData> = (data: IRegistrationB2CData) => {\n    submitRegistrationB2CForm(data);\n  };\n\n  return (\n    <form\n      onSubmit={handleSubmit(onSubmit)}\n      autoComplete=\"off\"\n      className=\"position-relative create-account-form\">\n      {viewState.running && (\n        <Col xs={12}>\n          <LoadingWidget overlay={true} />\n        </Col>\n      )}\n      <Col xs={12} className=\"px-0\">\n        <div className=\"d-flex flex-column mb-5 gap-4\">\n          <TextInputFormGroupNew\n            register={register}\n            errors={formState.errors}\n            isEmail={true}\n            formClasses=\"col-12 form-group\"\n            formIdentifier=\"emEmailRegistrationB2C\"\n            labelText=\"\"\n            labelKey=\"ui.storefront.common.Email\"\n            placeholderText=\"Email\"\n            placeholderKey=\"ui.storefront.common.Email\"\n            inputClasses=\"border-0\"\n            required={true}\n            maxLength={128}\n            maxLengthMessage=\"Email may not exceed 128 characters\"\n            validateObject={{\n              isUnique: () => new Promise<boolean | string>((resolve, reject) => {\n                const curEmailValue = getValues(\"emEmailRegistrationB2C\");\n                if (!curEmailValue?.length) {\n                  resolve(false);\n                  return;\n                }\n                cvApi.authentication\n                  .ValidateEmailIsUnique({ Email: getValues(\"emEmailRegistrationB2C\") })\n                  .then(success => {\n                    if (!success.data?.ActionSucceeded) {\n                      const translated: string = t(\"registration.emailMustBeUnique\", \"Email Must Be Unique\");\n                      resolve(translated);\n                      return;\n                    }\n                    resolve(success.data?.ActionSucceeded);\n                  })\n                  .catch(error => {\n                    reject(error);\n                  });\n              })\n            }}\n            patternMessage=\"Email is not valid/formatted properly\"\n          />\n          <PasswordInputFormGroupNew\n            register={register}\n            errors={formState.errors}\n            formClasses=\"col-12 form-group \"\n            formIdentifier=\"pwPasswordRegistrationB2C\"\n            labelText=\"Password\"\n            labelKey=\"ui.storefront.common.Password\"\n            placeholderText=\"Create Password\"\n            inputClasses=\"border-0 ps-0 password-input\"\n            tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\n            required={true}\n          />\n        </div>\n      </Col>\n      <Col xs={12}>\n        <div className=\"mb-3\">\n          <CheckboxFormGroupNew\n            formIdentifier=\"ckAgreed1\"\n            register={register}\n            setValue={(key, value) => {\n              setValue(key as keyof IRegistrationB2CData, value);\n              trigger(key as keyof IRegistrationB2CData);\n            }}\n            errors={formState.errors}\n            checkboxOptions={[\n              {\n                identifier: \"ckAgreedMarketing\",\n                labelKey: \"ui.storefront.user.B2CRegistration.IAgreeToReceiveMarketingTxt\",\n                labelText: \"I agree to receive marketing emails and product offers from MangoRx.\"\n              }\n            ]}\n          />\n        </div>\n      </Col>\n      <Col xs={12}>\n        <div className=\"mb-3\">\n          <CheckboxFormGroupNew\n            formIdentifier=\"ckAgreed2\"\n            register={register}\n            setValue={(key, value) => {\n              setValue(key as keyof IRegistrationB2CData, value);\n              trigger(key as keyof IRegistrationB2CData);\n            }}\n            errors={formState.errors}\n            checkboxOptions={[\n              {\n                identifier: \"ckAgreedTerms\",\n                labelKey: \"ui.storefront.user.registration.IAgreeToTheTermsOfUseForThisWebsite\",\n                labelText: \"I agree to the Terms & Conditions, Privacy Policy, and Telehealth Consent.\",\n                required: true,\n                requiredMessage: \"You are required to agree to the terms\"\n              }\n            ]}\n          />\n        </div>\n      </Col>\n      <Col xs={12}className=\"p-0\">\n        <Button\n          id=\"btnSubmit_registrationB2CInfo\"\n          as=\"input\"\n          variant=\"primary\"\n          className=\"my-3 w-100 btn-fat\"\n          value={t(\n            \"ui.storefront.memberships.membershipRegistration.completeRegistration.Alt.CreateAccount\",\n            \"Create Account\"\n          )}\n          type=\"submit\"\n          disabled={viewState.running || !formState.isValid}\n        />\n      </Col>\n      <hr className=\"opacity-20 my-4\"></hr>\n    </form>\n  );\n};\n\nexport default RegistrationB2CForm;\n","import { KlaviyoUserProperties, KlaviyoEventProperties } from \"./klaviyo\";\n\nexport const identifyUser = (user: KlaviyoUserProperties): void => {\n  if (typeof window !== \"undefined\" && window._learnq) {\n    window._learnq.push(['identify', user]);\n  }\n};\n\nexport const trackEvent = (eventName: string, properties: KlaviyoEventProperties = {}): void => {\n  if (typeof window !== \"undefined\" && window._learnq) {\n    window._learnq.push(['track', eventName, properties]);\n  }\n};","import { useEffect, useState } from \"react\";\nimport { Button, Row } from \"react-bootstrap\";\nimport { LoginForm } from \"src/_shared/forms/LoginForm\";\nimport { Modal } from \"../_shared/modals/Modal\";\nimport RegistrationB2CForm from \"./RegistrationB2C/RegistrationB2CForm\";\nimport { IRegistrationB2CData } from \"src/Authentication/Registration/_registrationTypes\";\nimport { useForm } from \"react-hook-form\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RegisterNewUserDto } from \"src/_api\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { trackEvent } from \"src/Klaviyo/klaviyo_helpers\";\n\ninterface ILoginModalProps {\n  show: boolean;\n  onConfirm?: () => void;\n  onCancel: () => void;\n  signUpModal?: boolean;\n}\n\nexport const LoginModal = (props: ILoginModalProps): JSX.Element => {\n  const { show, onConfirm, onCancel, signUpModal = false } = props;\n  const [ isSignUpModal, setIsSignUpModal ] = useState<boolean>(signUpModal);\n  const [ loginErrorExists, setLoginErrorExists ] = useState<boolean>(false);\n  const [ showModal, setShowModal ] = useState<boolean>(false);\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const { setError } = useForm<IRegistrationB2CData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  useEffect(() => {\n    setShowModal(show);\n  }, [ show ]);\n\n  const authFactory = useAuthFactory();\n\n  const submitRegistrationB2CForm = async (data: IRegistrationB2CData) => {\n    if (viewState.running) {\n      return;\n    }\n    setRunning();\n    const r = await cvApi.authentication.ValidateEmailIsUnique({\n      Email: data.emEmailRegistrationB2C\n    });\n    if (!r.data.ActionSucceeded) {\n      setError(\"emEmailRegistrationB2C\", {\n        type: \"uniqueEmail\",\n        message: \"Account with that email already exists.\"\n      });\n      finishRunning();\n      return;\n    }\n    const contact: ContactModel = {\n      Active: true,\n      AddressID: null,\n      AddressKey: null,\n      CreatedDate: new Date(),\n      CustomKey: data.emEmailRegistrationB2C,\n      Email1: data.emEmailRegistrationB2C,\n      FirstName: null,\n      ID: null,\n      LastName: null,\n      TypeID: 1,\n      TypeKey: \"General\"\n    };\n    const dto: RegisterNewUserDto = {\n      Active: true,\n      AddressBook: [],\n      Contact: contact,\n      ContactID: null,\n      CreatedDate: new Date(),\n      CustomKey: data.emEmailRegistrationB2C,\n      Email: data.emEmailRegistrationB2C,\n      ID: null,\n      InService: null,\n      IsSMSAllowed: false,\n      OverridePassword: data.pwPasswordRegistrationB2C,\n      SerializableAttributes: {},\n      Status: null,\n      StatusID: null,\n      StatusKey: \"Registered\",\n      StatusName: null,\n      Type: null,\n      TypeID: null,\n      TypeKey: null,\n      TypeName: \"Customer\",\n      UseAutoPay: null,\n      UserName: data.emEmailRegistrationB2C\n    };\n    authFactory\n      .register(dto)\n      .then(() => authFactory.login({ Username: dto.UserName, Password: dto.OverridePassword }))\n      .then(res => {\n        trackEvent(\n          \"Created Account\",\n          {\n            \"Email\": data.emEmailRegistrationB2C,\n            \"Account ID\": \"\",\n          }\n        );\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer?.push({\n          event: \"account_created\"\n        });\n        finishRunning();\n        setShowModal(false);\n        onConfirm();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  return (\n    <Modal\n      title=\"\"\n      show={showModal}\n      onCancel={onCancel}\n      size=\"md\"\n      headerClasses=\"justify-content-center border-0 mb-5 mt-2\"\n      modalClasses=\"atc-questionnaire-modal\"\n      modalBodyClasses={loginErrorExists ? \"alert alert-danger mb-0 border-0\" : \"mb-12\"}\n    >\n      <Row className=\"form-vertical d-flex flex-column align-items-center\">\n        {isSignUpModal\n          ? <div className=\"signup-modal-container d-flex flex-column align-items-center\">\n            <h1 className=\"mb-2 pt-4\"\n              data-sid=\"txtRegistrationHeaderTitle\"\n              id=\"header-font\">\n            Let&apos;s get\n              <span className=\"text-primary d-block\" id=\"header-font\">started!</span>\n            </h1>\n            <h2 className=\"py-4\">Create Account</h2>\n            {viewState.running && <LoadingWidget overlay={true} />}\n            <RegistrationB2CForm\n              submitRegistrationB2CForm={submitRegistrationB2CForm}\n            />\n            <p className=\"text-center\">Already have an account?</p>\n            <div className=\"d-flex justify-content-center\">\n              <Button\n                variant=\"secondary\"\n                className=\"pointer btn-fat\"\n                data-sid=\"btnMiniMenuLogin\"\n                onClick={() => setIsSignUpModal(false)}>\n                    Sign In\n              </Button>\n            </div>\n          </div>\n          : <div className=\"signup-modal-container d-flex flex-column align-items-center\">\n            <LoginForm\n              onLoginSuccess={onConfirm}\n              showCancel={false}\n              onCancel={onCancel}\n              onError={() => setLoginErrorExists(true)}\n              onClearError={() => setLoginErrorExists(false)}\n              usernameFieldId=\"txtLoginUsername\"\n              passwordFieldId=\"pwLoginPassword\"\n              usernameDataSid=\"txtLoginUsername\"\n              passwordDataSid=\"pwLoginPassword\"\n            />\n          </div>}\n      </Row>\n    </Modal>\n  );\n};\n","import { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { RootState, WithLoading } from \"src/_redux/store\";\nimport { BrandModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useBrandFactory } from \"src/_redux/factories/brandFactory\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface ICefConfigSliceState {\n  currentBrand: WithLoading<BrandModel> | null;\n}\n\nexport const brandSlice = createSlice({\n  name: \"brand\",\n  initialState: {\n    currentBrand: { Loading: true }\n  } as ICefConfigSliceState,\n  reducers: {\n    setCurrentBrand: (state, action: PayloadAction<WithLoading<BrandModel>>) => {\n      state.currentBrand = action.payload;\n    }\n  }\n});\n\nexport const { setCurrentBrand } = brandSlice.actions;\n\nexport const useCurrentBrand = (): BrandModel | null => {\n  const brand = useSelector((state: RootState) => state.brand.currentBrand);\n  const brandFactory = useBrandFactory();\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    if (brand.Loading && brandFactory !== null && cefConfig?.featureSet?.brands?.enabled) {\n      brandFactory.loadCurrentBrand();\n    }\n  }, [ brand, brandFactory ]);\n\n  return brand;\n};\n\nexport default brandSlice.reducer;\n","/* eslint-disable arrow-body-style */\nimport { useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { setCurrentBrand } from \"src/_redux/slices/brandSlice\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { BrandModel } from \"src/_api/cvApi._DtoClasses\";\n\nexport interface IBrandFactory {\n  loadCurrentBrand: (force?: boolean) => Promise<BrandModel>;\n}\n\nexport const useBrandFactory = (): IBrandFactory | null => {\n  const dispatch = useDispatch();\n\n  const [ brandFactory ] = useState<IBrandFactory>({\n    loadCurrentBrand: (force?: boolean): Promise<BrandModel> => {\n      if (force) {\n        promiser.flush(\"brandFactory:LoadCurrentBrand\");\n      }\n      return promiser.resolve(\n        \"brandFactory:LoadCurrentBrand\",\n        () => cvApi.brands.GetCurrentBrand()\n          .then(result => {\n            if (!result?.data?.Result) {\n              throw new Error(\"Unable to load current brand\");\n            }\n            dispatch(setCurrentBrand({ ...result.data.Result, Loading: false }));\n            return result.data.Result;\n          })\n      );\n    }\n  });\n\n  return brandFactory;\n};\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from \"react\";\nimport { useLocation } from \"react-router\";\nimport _ from \"lodash\";\nimport { BrandModel } from \"src/_api/cvApi._DtoClasses\";\nimport { CEFConfig, IDashboardSettings } from \"src/_shared/CefConfigTypes\";\nimport { useCurrentBrand } from \"src/_redux/slices/brandSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { corsLink } from \"../common/Cors\";\n\ninterface IUseDashboardLinksData {\n  dashboardLinks?: Array<IDashboardSettings>;\n  flattenedLinks?: Array<IDashboardSettings>;\n  activeLink?: IDashboardSettings;\n  setActiveLink?: Dispatch<SetStateAction<IDashboardSettings>>;\n}\n\ntype FilterByArg = \"Roles\" | \"Permissions\";\n\nexport const useDashboardLinks = (): IUseDashboardLinksData => {\n  const [ dashboardLinks, setDashboardLinks ] = useState<Array<IDashboardSettings>>(null);\n  const [ flattenedLinks, setFlattenedLinks ] = useState<Array<IDashboardSettings>>(null);\n  const [ activeLink, setActiveLink ] = useState<IDashboardSettings>(null);\n\n  const cefConfig: CEFConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n  const authFactory = useAuthFactory();\n\n  const currentBrand = useCurrentBrand();\n  const pathName = useLocation().pathname;\n\n  // X == \"Roles\" or \"Permissions\"\n  const filterByRequiredX = useCallback((\n    links: Array<IDashboardSettings>,\n    filterBy: \"Roles\" | \"Permissions\"\n  ): Promise<Array<IDashboardSettings>> => {\n    // eslint-disable-next-line no-unused-vars\n    const filterByMap: { [filter in FilterByArg]: \"reqAnyRoles\" | \"reqAnyPerms\" } = {\n      Roles: \"reqAnyRoles\",\n      Permissions: \"reqAnyPerms\",\n    };\n    // eslint-disable-next-line no-unused-vars\n    const filterByPromiseMap: { [filter in FilterByArg]: (args?: any) => Promise<any> } = {\n      Roles: authFactory.hasRole,\n      Permissions: authFactory.hasPermission\n    };\n    const linkKeyToCheck = filterByMap[filterBy];\n    const checkPromise = filterByPromiseMap[filterBy];\n\n    const shouldInclude = async (link: IDashboardSettings) => {\n      const isRequired = Boolean(link[linkKeyToCheck] && (link[linkKeyToCheck] as string[]).length);\n      if (!isRequired) {\n        return true;\n      }\n      const results = await Promise.all((link[linkKeyToCheck] as string[]).map(checkPromise));\n      return results.some((x) => x === true);\n    };\n\n    const filterLinks = async (linksArr: IDashboardSettings[]): Promise<IDashboardSettings[]> => {\n      const filteredLinks: IDashboardSettings[] = [];\n      for (const link of linksArr) {\n        // eslint-disable-next-line no-await-in-loop\n        if (await shouldInclude(link)) {\n          // eslint-disable-next-line no-await-in-loop\n          const children = link.children?.length ? await filterLinks(link.children) : null;\n          filteredLinks.push({ ...link, children });\n        }\n      }\n      return filteredLinks;\n    };\n\n    return filterLinks(links);\n  }, [ authFactory ]);\n\n  const getUsableLinks = useCallback(async () => {\n    if (!cefConfig) {\n      return [];\n    }\n    let links: Array<IDashboardSettings> = cefConfig.dashboard\n      .filter((x: IDashboardSettings) => x.enabled)\n      .sort((a: IDashboardSettings, b: IDashboardSettings) => a.order - b.order);\n    links = links.map(x => ({\n      ...x,\n      children: x.children ? x.children.filter(y => y.enabled) : null\n    }));\n    links.find(x => x.name === \"AccountSettings\").children.push(\n      {\n        name: \"PhysicianLicenses\",\n        title: \"Physician Licenses\",\n        titleKey: \"Physician Licenses\",\n        titleKeyFallback: \"Physician Licenses\",\n        icon: \"<i class=\\\"far fa-fw fa-file-certificate\\\" aria-hidden=\\\"true\\\"></i>\",\n        href: \"/dashboard/physician-licenses\",\n        enabled: true,\n        order: 9998,\n        children: null,\n        reqAnyRoles: [ \"Doctor\", \"CEF Global Administrator\" ],\n        reqAnyPerms: null,\n        reqAnyBrandKeys: null,\n      },\n      {\n        name: \"PhysicianLibrary\",\n        title: \"Physician Library\",\n        titleKey: \"Physician Library\",\n        titleKeyFallback: \"Physician Library\",\n        icon: \"<i class=\\\"far fa-fw fa-book-medical\\\" aria-hidden=\\\"true\\\"></i>\",\n        href: \"/dashboard/physician-library\",\n        enabled: true,\n        order: 9997,\n        children: null,\n        reqAnyRoles: [ \"Doctor\", \"CEF Global Administrator\" ],\n        reqAnyPerms: null,\n        reqAnyBrandKeys: null,\n      }\n    );\n    links = await filterByRequiredX(links, \"Roles\");\n    links = await filterByRequiredX(links, \"Permissions\");\n    links = filterByRequiredBrandKey(links, currentBrand);\n    const dashboardBase = corsLink(cefConfig, \"\", \"dashboard\");\n    links.forEach(link => {\n      if (link.name === \"Consultations\") {\n        link.name = \"ScheduledAppointments\";\n        link.titleKey = \"Scheduled Appointments\";\n        link.href = \"/dashboard/scheduled-appointments\";\n      }\n      if (link.children?.length > 0) {\n        link.children.forEach(childLink => {\n          if (!childLink.href || !childLink.href.toLowerCase().startsWith(\"/dashboard\")) {\n            return;\n          }\n          childLink.href = childLink.href.replace(/\\/[Dd]ashboard/igu, dashboardBase);\n        });\n      }\n      if (!link.href || !link.href.toLowerCase().startsWith(\"/dashboard\")) {\n        return;\n      }\n      link.href = link.href.replace(/\\/[Dd]ashboard/igu, dashboardBase);\n    });\n    return links;\n  }, [ cefConfig, currentBrand, authFactory ]);\n\n  async function populateDashboardLinks() {\n    const linksToSet: Array<IDashboardSettings> = await getUsableLinks();\n    setDashboardLinks(linksToSet);\n    const linksFlattened = getFlattenedLinks(linksToSet);\n    setFlattenedLinks(linksFlattened);\n    for (let i = 0; i < linksFlattened.length; i++) {\n      if (linksFlattened[i].href?.toLowerCase() === pathName.toLowerCase()) {\n        setActiveLink(linksFlattened[i]);\n        break;\n      }\n    }\n  }\n\n  useEffect(() => {\n    if (_.isNull(authFactory)\n      || !cefConfig\n      || !cefConfig.dashboard\n      || _.isUndefined(currentUser.ID)\n      || cefConfig.featureSet.brands.enabled && !currentBrand.ID\n      || _.isArray(dashboardLinks)) {\n      return;\n    }\n    populateDashboardLinks();\n  }, [ cefConfig, currentUser, currentBrand, authFactory ]);\n\n  return {\n    dashboardLinks,\n    flattenedLinks,\n    activeLink,\n    setActiveLink\n  };\n};\n\nfunction getFlattenedLinks(links: Array<IDashboardSettings>): Array<IDashboardSettings> {\n  return links.reduce((accu, curVal) => {\n    accu.push(curVal);\n    if (curVal.children) {\n      curVal.children.forEach(child => accu.push(child));\n    }\n    return accu;\n  }, [] as IDashboardSettings[]);\n}\n\nfunction filterByRequiredBrandKey(\n    links: Array<IDashboardSettings>,\n    currentBrand: BrandModel\n): Array<IDashboardSettings> {\n  return links.filter(x => {\n    if (!x.reqAnyBrandKeys?.length) {\n      return true;\n    }\n    const isFound = x.reqAnyBrandKeys.find(y => y === currentBrand.CustomKey);\n    return Boolean(isFound);\n  });\n}\n","/* eslint-disable max-len */\nimport React, { useEffect, useState } from \"react\";\nimport { Button, Dropdown } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useDashboardLinks } from \"src/_shared/customHooks/useDashboardLinks\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { IDashboardSettings } from \"src/_shared/CefConfigTypes\";\nimport Interweave from \"interweave\";\n\nexport const MiniMenu = (): JSX.Element => {\n  const currentUser = useCurrentUser();\n  const cefConfig = useCefConfig();\n\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const authFactory = useAuthFactory();\n\n  // eslint-disable-next-line no-inline-comments, @typescript-eslint/no-unused-vars\n  const { flattenedLinks /* activeLink, setActiveLink */ } = useDashboardLinks();\n\n  useEffect(() => {\n    if (currentUser.ID > 0 && showLoginModal) {\n      setShowLoginModal(false);\n    }\n  }, [ currentUser ]);\n\n  const logout = (e: React.MouseEvent<HTMLAnchorElement>) => {\n    authFactory.logout();\n    e.preventDefault();\n  };\n\n  if (cefConfig && cefConfig.featureSet && !cefConfig.featureSet.login.enabled) {\n    return null;\n  }\n\n  const groupedLinks = flattenedLinks?.reduce<{\n    accountSettings: IDashboardSettings[];\n    shopping: IDashboardSettings[];\n  }>(\n    (acc, item) => {\n      if ([ \"MyProfile\", \"AccountProfile\", \"AddressBook\", \"Wallet\", \"PhysicianLicenses\", \"PhysicianLibrary\" ].includes(item.name)) {\n        acc.accountSettings.push(item);\n      } else {\n        acc.shopping.push(item);\n      }\n      return acc;\n    },\n    { accountSettings: [], shopping: [] }\n  );\n\n  if (!currentUser?.Contact) {\n    return (\n      <>\n        <Button\n          variant=\"secondary\"\n          className=\"pointer\"\n          data-sid=\"btnMiniMenuLogin\"\n          onClick={() => setShowLoginModal(true)}>\n          Sign In\n        </Button>\n        <LoginModal\n          show={showLoginModal}\n          onConfirm={() => {\n            setShowLoginModal(false);\n          }}\n          onCancel={() => setShowLoginModal(false)}\n        />\n      </>\n    );\n  }\n\n  return (\n    <Dropdown>\n      <Dropdown.Toggle\n        variant=\"primary\"\n        className=\"text-capitalize\"\n        id=\"dropdownUser\"\n        data-sid=\"btnMiniMenuUserName\"\n        aria-label=\"user-dropdown\"\n        aria-haspopup=\"true\"\n        data-reference=\"parent\">\n        &nbsp;\n        <span\n          data-sid=\"btnMiniMenuUserNameInner\"\n          className=\"control-label\">\n          {currentUser.DisplayName?.trim() ? currentUser.DisplayName\n            : currentUser.UserName ?? currentUser.ContactEmail}\n        </span>\n      </Dropdown.Toggle>\n      <Dropdown.Menu\n        className=\"ar-3 miniMenu-dropdown-menu\"\n        style={{ left: \"unset\" }}\n        aria-labelledby=\"dropdownUser\">\n        {groupedLinks ? (\n          <>\n            {groupedLinks.shopping.length > 0 && (\n              <div className=\"mb-1 mt-2\">\n                <span className=\"px-2 small py-2 fw-medium text-dark\">\n                  {t(\"ui.storefront.common.Shopping\", \"Shopping\")}\n                </span>\n                {groupedLinks.shopping\n                  .filter(x => Boolean(x.href))\n                  .map((item, innerIndex) => (\n                    <Dropdown.Item\n                      className=\"ps-3\"\n                      // eslint-disable-next-line react/no-array-index-key\n                      key={`${item.titleKey}_${innerIndex}`}\n                      as=\"a\"\n                      href={item.href}\n                      data-sid={`btnMiniMenu_${item.name}`}>\n                      {item.icon && (\n                        // From back end\n                        <Interweave\n                          className=\"mb-0 me-2\"\n                          content={item.icon}\n                        />\n                      )}\n                      {t(item.titleKey, item.titleKeyFallback)}\n                    </Dropdown.Item>\n                  ))}\n              </div>\n            )}\n            {groupedLinks.accountSettings.length > 0 && (\n              <div>\n                <span className=\"px-2 small py-2 fw-medium text-dark\">\n                  {t(\"ui.storefront.common.accountSettings\", \"Account Settings\")}\n                </span>\n                {groupedLinks.accountSettings\n                  .filter(x => Boolean(x.href))\n                  .map((item, innerIndex) => (\n                    <Dropdown.Item\n                      className=\"ps-3\"\n                      // eslint-disable-next-line react/no-array-index-key\n                      key={`${item.titleKey}_${innerIndex}`}\n                      as=\"a\"\n                      href={item.href}\n                      data-sid={`btnMiniMenu_${item.name}`}>\n                      {item.icon && (\n                        // From back end\n                        <Interweave\n                          className=\"mb-0 me-2\"\n                          content={item.icon}\n                        />\n                      )}\n                      {t(item.titleKey, item.titleKeyFallback)}\n                    </Dropdown.Item>\n                  ))}\n              </div>\n            )}\n          </>\n        ) : (\n          <LoadingWidget size=\"lg\" />\n        )}\n        <div className=\"separator\">\n          <hr className=\"m-0\" />\n        </div>\n        <div className=\"mini-menu-logout dropdown-item px-2 py-2 text-danger\">\n          <a\n            className=\"align-items-center d-flex ms-2\"\n            href={corsLink(cefConfig, cefConfig.routes.site.root, \"site\")}\n            onClick={logout}>\n            <i className=\"fa-arrow-right-from-bracket far fa-fw me-2\"></i>\n            <span\n              data-sid=\"btnMiniMenu_Logout\"\n              className=\"text\">\n              {t(\"common.SignOut\", \"Sign Out\")}\n            </span>\n          </a>\n        </div>\n      </Dropdown.Menu>\n    </Dropdown>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"catalogFilterHeaderButton\":\"CatalogFilterHeaderButton_catalogFilterHeaderButton__EPoTh\"};","import { Button, Card, useAccordionButton } from \"react-bootstrap\";\nimport \"src/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton.module.scss\";\nimport { ICatalogFilterHeaderButtonProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\n\nexport const CatalogFilterHeaderButton = (props: ICatalogFilterHeaderButtonProps): JSX.Element => {\n  const { icon, expandedFilterName, setExpandedFilterName, title, dataSid } = props;\n  const onHeaderClicked = useAccordionButton(title);\n\n  return (\n    <Card.Title className=\"catalog-filter-header mb-0\">\n      <Button\n        variant=\"none\"\n        size=\"lg\"\n        data-sid={dataSid}\n        className={`d-flex align-items-center justify-content-between\n          w-100 p-0 text-decoration-none catalogFilterHeaderButton`}\n        onClick={e => {\n          onHeaderClicked(e);\n          setExpandedFilterName(expandedFilterName === title ? null : title);\n        }}>\n        <span>\n          <i className={`${icon} fa-fw me-2 fa-sm`} />\n\n          <span className=\"small cat-gray-text\">{title}</span>\n        </span>\n        <i\n          className={`far fa-fw float-right text-body toggle-icon ${\n            expandedFilterName === title ? \"fa-minus\" : \"fa-plus\"\n          }`}\n        />\n      </Button>\n    </Card.Title>\n  );\n};\n","import { Accordion, Button, Card, Col, ListGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { CatalogFilterHeaderButton } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton\";\n\nexport interface ICatalogFilterListItem {\n  label: string;\n  formatLabel?: (label: string) => string;\n  callbackLabel?: string;\n  count?: number;\n  children?: ICatalogFilterListItem[];\n}\n\ninterface ICatalogFilterProps {\n  expandedFilterName: string;\n  setExpandedFilterName: (name: string) => void;\n  title: string;\n  icon: string;\n  customBodyComponent?: JSX.Element;\n  list?: ICatalogFilterListItem[];\n  onListItemClicked?: (listItem: ICatalogFilterListItem) => void;\n  onListItemExpandBtnClicked?: (listItem: ICatalogFilterListItem) => void;\n  onCollapseAllClicked?: () => void;\n  onExpandAllClicked?: () => void;\n  isChildExpanded?: (listItem: ICatalogFilterListItem) => boolean;\n}\n\nexport const CatalogFilter = (props: ICatalogFilterProps): JSX.Element => {\n  const {\n    expandedFilterName,\n    setExpandedFilterName,\n    title,\n    icon,\n    customBodyComponent,\n    list,\n    onListItemClicked,\n    onListItemExpandBtnClicked,\n    onCollapseAllClicked,\n    onExpandAllClicked,\n    isChildExpanded\n  } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Col xs={12}\n      sm={6}\n      md={12}>\n      <Card className=\"applied-filters mb-1\">\n        <Card.Header className=\"p-2 bg-transparent text-body\">\n          <CatalogFilterHeaderButton\n            expandedFilterName={expandedFilterName}\n            setExpandedFilterName={setExpandedFilterName}\n            title={title}\n            icon={icon}\n          />\n        </Card.Header>\n        {/* TODO: kabob case event key */}\n        <Accordion.Collapse\n          className={expandedFilterName === title ? \"show\" : \"\"}\n          eventKey={`${title.toLowerCase()}-collapse`}>\n          <Card.Body className=\"p-3 bg-light\"\n            style={{ maxHeight: \"50vh\", overflowY: \"scroll\" }}>\n            {customBodyComponent ?? <ListGroup>\n              {list.map(item => {\n                return <Accordion.Item\n                  key={item.label}\n                  eventKey={`${title.toLowerCase()}-collapse`}\n                  className=\"bg-light p-0 border-0\">\n                  <div className=\"d-flex align-items-center justify-content-between w-100\">\n                    <Button\n                      variant=\"link\"\n                      className=\"p-0 form-check-label text-decoration-none text-capitalize text-start \"\n                      onClick={_e => onListItemClicked(item)}>\n                      <div>\n                        <span className=\"text\">{item.formatLabel ? item.formatLabel(item.label) : item.label}</span>\n                        {typeof item.count === \"number\" && <span className=\"count\">{\" \"}({item.count})</span>}\n                      </div>\n                    </Button>\n                    {item.children && <Button\n                      variant=\"link\"\n                      className=\"p-0\"\n                      onClick={() => onListItemExpandBtnClicked(item)}>\n                      <i className={isChildExpanded(item) ? \"far fa-fw fa-minus fa-sm\" : \"far fa-fw fa-plus fa-sm\"} />\n                    </Button>}\n                  </div>\n                  {item.children && <ListGroup\n                    style={{ alignItems: \"flex-start\" }}\n                    className={`collapse collapse-list list-unstyled ${\n                      isChildExpanded(item) ? \"show\" : \"\"\n                    }`}>\n                    {item.children.map(child => <Accordion.Item\n                      key={child.label}\n                      eventKey={child.label}\n                      className=\"py-0 border-0 bg-light w-100\">\n                      <Button\n                        variant=\"link\"\n                        className=\"form-check-label py-0 bg-light text-decoration-none\"\n                        onClick={e => onListItemClicked(child)}>\n                        <span className=\"text\">{child.formatLabel ? child.formatLabel(child.label) : child.label}</span>\n                        {typeof child.count === \"number\" && <span className=\"count\">{\" \"}({child.count})</span>}\n                      </Button>\n                    </Accordion.Item>)\n                    }\n                  </ListGroup>}\n                </Accordion.Item>;\n              })}\n              {Boolean(onCollapseAllClicked)\n              && Boolean(onExpandAllClicked)\n              && <ListGroup.Item className=\"filter-item mt-3 d-flex justify-content-end bg-light border-0\">\n                <Button\n                  variant=\"secondary\"\n                  size=\"sm\"\n                  onClick={_e => onCollapseAllClicked()}>\n                  {t(\"ui.storefront.searchCatalog.filters.CollapseAll\")}\n                </Button>\n                <Button\n                  variant=\"primary\"\n                  size=\"sm\"\n                  className=\"ms-1\"\n                  onClick={_e => onExpandAllClicked()}>\n                  {t(\"ui.storefront.searchCatalog.filters.ExpandAll\")}\n                </Button>\n              </ListGroup.Item>}\n            </ListGroup>}\n          </Card.Body>\n        </ Accordion.Collapse>\n      </Card>\n    </Col>\n  );\n};\n","import { useState } from \"react\";\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { IAttributesFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\nimport { CatalogFilter, ICatalogFilterListItem } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilter\";\n\nexport const AttributesFilter = (\n  props: IAttributesFilterProps\n): JSX.Element => {\n  const {\n    expandedFilterName,\n    setExpandedFilterName,\n    allAttributes,\n    productSearchViewModel,\n    onAttributeClicked\n  } = props;\n\n  const [ expandedAttributes, setExpandedAttributes ] = useState<string[]>([]);\n\n  const toggleExpansion = (listItem: ICatalogFilterListItem) => {\n    if (expandedAttributes.includes(listItem.label)) {\n      setExpandedAttributes(\n        expandedAttributes.filter(a => a !== listItem.label)\n      );\n    } else {\n      setExpandedAttributes([\n        ...expandedAttributes,\n        listItem.label\n      ]);\n    }\n  };\n\n  if (!productSearchViewModel?.Attributes) {\n    return null;\n  }\n\n  return (\n    <CatalogFilter\n      expandedFilterName={expandedFilterName}\n      setExpandedFilterName={setExpandedFilterName}\n      title=\"Attributes\"\n      icon=\"fal fa-fw fa-tasks\"\n      list={productSearchViewModel.Attributes.map(attr => {\n        const { Key, Value } = attr;\n        return {\n          label: Key,\n          children: Value ? Value.map(c => ({\n            label: `${Key}|${c.Key}`,\n            formatLabel: (label: string) => label.split(\"|\")[1],\n            callbackLabel: Key,\n            count: c.Value\n          })) : null\n        };\n      })}\n      onListItemClicked={listItem => {\n        const isChild = Boolean(listItem.callbackLabel);\n        if (isChild) {\n          // Of (parentKey (e.g. IsDigitalDownload), childKey (e.g. No))\n          const [ parentKey, childKey ] = listItem.label.split(\"|\");\n          onAttributeClicked(parentKey, childKey);\n          return;\n        }\n        toggleExpansion(listItem);\n      }}\n      onListItemExpandBtnClicked={toggleExpansion}\n      isChildExpanded={childListItem => expandedAttributes.includes(childListItem.label)}\n      onCollapseAllClicked={() => setExpandedAttributes([])}\n      onExpandAllClicked={() => setExpandedAttributes(allAttributes.map((a: GeneralAttributeModel) => a.CustomKey))}\n    />\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { IBrandsFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\nimport { CatalogFilter } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilter\";\n\nexport const BrandsFilter = (props: IBrandsFilterProps): JSX.Element => {\n  const {\n    expandedFilterName,\n    setExpandedFilterName,\n    brands,\n    onBrandNameClicked\n  } = props;\n\n  const [ brandsInOrder, setBrandsInOrder ] = useState<string[]>(null);\n\n  useEffect(() => {\n    if (!brands) {\n      return;\n    }\n    const brandNames = Object.keys(brands).sort();\n    const unbrandedOptionIndex = brandNames.indexOf(\"Unbranded\");\n\n    if (unbrandedOptionIndex === -1) {\n      // Put \"Unbranded\" at the end\n      brandNames.push(\"Unbranded\");\n    } else {\n      brandNames.splice(unbrandedOptionIndex, 1);\n      brandNames.push(\"Unbranded\");\n    }\n    setBrandsInOrder(brandNames);\n  }, [ brands ]);\n\n  if (!brandsInOrder) {\n    return null;\n  }\n\n  return (\n    <CatalogFilter\n      expandedFilterName={expandedFilterName}\n      setExpandedFilterName={setExpandedFilterName}\n      title={\"Brands\"}\n      icon={\"fal fa-fw fa-building\"}\n      list={brandsInOrder.map(brandName => ({\n        label: brandName,\n        count: brands[brandName]\n      }))}\n      onListItemClicked={listItem => onBrandNameClicked(listItem.label)}\n    />\n  );\n};\n","import { useState } from \"react\";\nimport { AggregateTree, CategoryModel } from \"src/_api/cvApi._DtoClasses\";\nimport { CatalogFilter } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilter\";\nimport { ICategoriesFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport const CategoriesFilter = (props: ICategoriesFilterProps): JSX.Element => {\n  const {\n    expandedFilterName,\n    setExpandedFilterName,\n    categoriesTree,\n    categoriesBySeoUrl,\n    categoriesByNamePipeKey,\n    onCategoryClicked\n  } = props;\n\n  const [ expandedCategories, setExpandedCategories ] = useState<string[]>([]);\n\n  const cefConfig = useCefConfig();\n\n  if (!categoriesTree?.Children) {\n    return null;\n  }\n\n  function n(category: CategoryModel | string, categoryTop: string = null, categoryMid: string = null): string {\n    if (!categoriesBySeoUrl || !categoriesByNamePipeKey) {\n      // Loading\n      return null;\n    }\n    if (!category) {\n      return null;\n    }\n    if (typeof category === \"string\") {\n      if (category in categoriesBySeoUrl) {\n        return n(categoriesBySeoUrl[category]);\n      }\n      if (category in categoriesByNamePipeKey) {\n        return n(categoriesByNamePipeKey[category]);\n      }\n      if (Boolean(categoryMid)) {\n        const full = `${categoryTop}/${categoryMid}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      if (Boolean(categoryTop)) {\n        const full = `${categoryTop}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      return \"Unknown Category\";\n    }\n    return category.DisplayName ?? category.Name;\n  }\n\n  return (\n    <CatalogFilter\n      expandedFilterName={expandedFilterName}\n      setExpandedFilterName={setExpandedFilterName}\n      title={\"Categories\"}\n      icon={\"fal fa-fw fa-folders\"}\n      onCollapseAllClicked={() => setExpandedCategories([])}\n      onExpandAllClicked={() => setExpandedCategories(categoriesTree.Children.map((ch: AggregateTree) => ch.Key))}\n      list={categoriesTree.Children.filter(x => Boolean(x.Key)).map(category => {\n        const { Children, Key, SuspectedThisLevelDocCount } = category;\n        return {\n          label: Key,\n          formatLabel: (label: string) => n(label),\n          count: cefConfig?.catalog.filters.category.topLevelCategoryProductCounts.enabled\n            ? SuspectedThisLevelDocCount\n            : null,\n          children: Children ? Children.map(ch => ({\n            label: ch.Key,\n            formatLabel: (label: string) => n(label),\n            count: cefConfig?.catalog.filters.category.subLevelCategoryProductCounts.enabled ? ch.DocCount : null\n          })) : null\n        };\n      })}\n      onListItemClicked={listItem => onCategoryClicked(listItem.label)}\n      onListItemExpandBtnClicked={listItem => {\n        if (expandedCategories.includes(listItem.label)) {\n          setExpandedCategories(expandedCategories.filter(ec => ec !== listItem.label));\n        } else {\n          setExpandedCategories([ ...expandedCategories, listItem.label ]);\n        }\n      }}\n      isChildExpanded={childListItem => expandedCategories.includes(childListItem.label)}\n    />\n  );\n};\n","export interface IServiceStrings {\n  accounts: {\n    types: {\n      Vendor: string;\n      Customer: string;\n      Affiliate: string;\n      Organization: string;\n      Fabricator: string;\n    }\n  }\n  attributes: {\n    shipOption: string;\n    selectedStoreID: string;\n    shipToHome: string;\n    inStorePickup: string;\n    shipToStore: string;\n  };\n  auth: {\n    providers: {\n      identity: string;\n      openIdConnect: string;\n      dnnSSO: string;\n      cobalt: string;\n      logout: string;\n    };\n    errors: {\n      unableToDetectDNNLogin: string;\n    };\n    roleNames: {\n      csr: string;\n      seller: string;\n    }\n  };\n  carts: {\n    types: {\n      cart: string;\n      quote: string;\n      samples: string;\n      compare: string;\n      notifyMe: string;\n      wishList: string;\n      favorites: string;\n      watchList: string;\n    };\n    targetGroupingPrefix: string;\n    kinds: {\n      session: string;\n      compare: string;\n      static: string;\n    };\n    props: {\n      hasASelectedRateQuote: string;\n    };\n  };\n  checkout: {\n    paymentMethods: {\n      ach: string;\n      creditCard: string;\n      echeck: string;\n      free: string;\n      invoice: string;\n      payoneer: string;\n      payPal: string;\n      quoteMe: string;\n      storeCredit: string;\n      wireTransfer: string;\n    };\n    steps: {\n      [key: string]: string;\n      billing?: string;\n      completed?: string;\n      confirmation?: string;\n      method?: string;\n      payment?: string;\n      shipping?: string;\n      splitShipping?: string;\n      shippingRates?: string;\n    };\n    stepsB2C: {\n      [key: string]: string;\n      completed?: string;\n      payment?: string;\n      shipping?: string;\n      shippingRates?: string;\n    };\n  };\n  cvgrid: {\n    filters: {\n      id: string,\n      input: string,\n      autocomplete: string,\n      attribute: string,\n      select: string,\n      boolean: string,\n      minmaxnumber: string,\n      minmaxdate: string,\n    }\n  };\n  events: {\n    account: {\n      loaded: string;\n      updated: string;\n      refreshRoles: string;\n    };\n    addressBook: {\n      added: string;\n      deleted: string;\n      deleteConfirmed: string;\n      deleteCancelled: string;\n      editSave: string;\n      editCancelled: string;\n      loaded: string;\n      reset: string;\n      resetRegionDropdownNeeded: string;\n    };\n    associator: {\n      added: string;\n      removed: string;\n    };\n    attributes: {\n      ready: string;\n      changed: string;\n    };\n    auth: {\n      signIn: string;\n      signInFailed: string;\n      signOut: string;\n    };\n    carts: {\n      updated: string;\n      itemAdded: string;\n      itemsAdded: string;\n      itemRemoved: string;\n      cleared: string;\n      loaded: string;\n      resetTargets: string;\n      updateShoppingLists: string;\n    };\n    catalog: {\n      change: string;\n      categoryTreeReady: string;\n      searchComplete: string;\n    };\n    chat: {\n      newMessage: string;\n    };\n    checkout: {\n      nextStep: string;\n    };\n    contacts: {\n      propertyChanged: string;\n    };\n    currency: {\n      changed: string;\n      changeFinished: string;\n    };\n    grid: {\n      built: string;\n    };\n    invoices: {\n      paymentMade: string;\n    };\n    lang: {\n      changed: string;\n      changeFinished: string;\n    };\n    lineItems: {\n      updated: string;\n    };\n    location: {\n      updated: string;\n    };\n    menus: {\n      deactivateChildren: string;\n      deactivateGroups: string;\n      hoverToggleOff: string;\n    };\n    modals: {\n      close: string;\n    };\n    orders: {\n      complete: string;\n    };\n    paging: {\n      searchComplete: string;\n    };\n    products: {\n      detailProductLoaded: string;\n      refreshReviews: string;\n      selectedVariantChanged: string;\n      variantInfoLoaded: string;\n    };\n    sales: {\n      totalsUpdated: string;\n    };\n    salesQuotes: {\n      complete: string;\n    };\n    shipping: {\n      loaded: string;\n      rateQuoteSelected: string;\n      ready: string;\n      revalidateStep: string;\n      setSelectedRateQuoteID: string;\n      unready: string;\n    };\n    signalR: {\n      sendMaxAutoBidAsync: string;\n      receiveMaxAutoBid: string;\n      sendQuickBidAsync: string;\n      receiveQuickBid: string;\n    };\n    states: {\n      loaded: string;\n    };\n    statuses: {\n      loaded: string;\n    };\n    stores: {\n      selectionUpdate: string;\n      nearbyUpdate: string;\n      cleared: string;\n      ready: string;\n    };\n    types: {\n      loaded: string;\n    };\n    users: {\n      importedToAccount: string;\n      updated: string;\n      refreshRoles: string;\n    };\n    wallet: {\n      loaded: string;\n      updated: string;\n    };\n  };\n  modalSizes: {\n    xl: \"xl\";\n    lg: \"lg\";\n    md: \"md\";\n    sm: \"sm\";\n  };\n  questionnaire: {\n    types: {\n      BOOLEAN: string;\n      MULTIPLE_CHOICE: string;\n      NUMBER: string;\n      RADIO: string;\n      SELECT: string;\n      STRING: string;\n      TEXT_AREA: string;\n    }\n  }\n  redux: {\n    actionTypes: {\n      cart: {\n        setCart: string;\n        setMessages: string;\n        setLoading: string;\n      };\n      cefConfig: {\n        setCefConfig: string;\n      };\n      currentAccount: {\n        setCurrentAccount: string;\n      };\n      currentAccountAddressBook: {\n        setCurrentAccountAddressBook: string;\n      };\n      quoteCart: {\n        setQuoteCart: string;\n        setMessages: string;\n        setLoading: string;\n      };\n      signalR: {\n        setSignalRConnection: string;\n      };\n      staticCarts: {\n        setFavoritesList: string;\n        setWishList: string;\n        setNotifyMeList: string;\n        setProductAlertList: string;\n        setWatchList: string;\n        setCompareList: string;\n        setShoppingLists: string;\n      };\n      currentUser: {\n        logUserIn: string;\n        logUserOut: string;\n        setLoading: string;\n      };\n      wallet: {\n        setWallet: string;\n      };\n    }\n  }\n  registration: {\n    steps: {\n      [key: string]: string;\n      addressBook?: string;\n      basicInfo?: string;\n      completed?: string;\n      confirmation?: string;\n      custom?: string;\n      wallet?: string;\n    };\n  };\n  submitQuote: {\n    steps: {\n      method: string;\n      shipping: string;\n      shippingRates: string;\n      splitShipping: string;\n      confirmation: string;\n      completed: string;\n    };\n  };\n  salesQuotes: {\n    statuses: {\n      submitted: {\n        name: string;\n        description: string;\n      };\n      inProcess: {\n        name: string;\n        description: string;\n      };\n      processed: {\n        name: string;\n        description: string;\n      };\n      approved: {\n        name: string;\n        description: string;\n        confirmTemplate: string;\n        actionTitle: string;\n        actionTitleAlt: string;\n      };\n      rejected: {\n        name: string;\n        description: string;\n        confirmTemplate: string;\n        actionTitle: string;\n      };\n      expired: {\n        name: string;\n        description: string;\n      };\n      void: {\n        name: string;\n        description: string;\n        confirmTemplate: string;\n        actionTitle: string;\n      };\n    };\n  };\n  tracking: {\n    visitID: string;\n    visitKey: string;\n    visitorID: string;\n    visitorKey: string;\n  };\n}\n\nexport const ServiceStrings: IServiceStrings = {\n  accounts: {\n    types: {\n      Vendor: \"VENDOR\",\n      Customer: \"CUSTOMER\",\n      Affiliate: \"AFFILIATE\",\n      Organization: \"ORGANIZATION\",\n      Fabricator: \"FABRICATOR\"\n    }\n  },\n  attributes: {\n    inStorePickup: \"InStorePickup\",\n    selectedStoreID: \"SelectedStoreID\",\n    shipOption: \"ShipOption\",\n    shipToHome: \"ShipToHome\",\n    shipToStore: \"ShipToStore\"\n  },\n  auth: {\n    providers: {\n      cobalt: \"cobalt\",\n      dnnSSO: \"dnnSSO\",\n      identity: \"identity\",\n      logout: \"logout\",\n      openIdConnect: \"openId\"\n    },\n    errors: {\n      unableToDetectDNNLogin: \"Unable to detect DNN Login\"\n    },\n    roleNames: {\n      csr: \"CSR\",\n      seller: \"SELLER\"\n    }\n  },\n  carts: {\n    types: {\n      cart: \"Cart\",\n      compare: \"Compare Cart\",\n      favorites: \"Favorites List\",\n      notifyMe: \"Notify Me When In Stock\",\n      quote: \"Quote Cart\",\n      samples: \"Samples Cart\",\n      wishList: \"Wish List\",\n      watchList: \"Watch List\"\n    },\n    targetGroupingPrefix: \"Target-Grouping-\",\n    kinds: {\n      session: \"session\",\n      compare: \"compare\",\n      static: \"static\"\n    },\n    props: {\n      hasASelectedRateQuote: \"hasASelectedRateQuote\"\n    }\n  },\n  checkout: {\n    paymentMethods: {\n      ach: \"purchasePaymentMethodACH\",\n      creditCard: \"purchasePaymentMethodCreditCard\",\n      echeck: \"purchasePaymentMethodEcheck\",\n      free: \"purchasePaymentMethodFree\",\n      invoice: \"purchasePaymentMethodInvoice\",\n      payPal: \"purchasePaymentMethodPayPal\",\n      payoneer: \"purchasePaymentMethodPayoneer\",\n      quoteMe: \"purchasePaymentMethodQuoteMe\",\n      storeCredit: \"purchasePaymentMethodStoreCredit\",\n      wireTransfer: \"purchasePaymentMethodWireTransfer\"\n    },\n    steps: {\n      billing: \"purchaseStepBilling\",\n      completed: \"purchaseStepCompleted\",\n      confirmation: \"purchaseStepConfirmation\",\n      method: \"purchaseStepMethod\",\n      payment: \"purchaseStepPayment\",\n      shipping: \"purchaseStepShipping\",\n      shippingRates: \"purchaseStepShippingRates\",\n      splitShipping: \"purchaseStepSplitShipping\"\n    },\n    stepsB2C: {\n      shipping: \"purchaseB2CStepShipping\",\n      shippingRates: \"purchaseB2CStepShippingRates\",\n      payment: \"purchaseB2CStepPayment\",\n      completed: \"purchaseB2CStepCompleted\"\n    },\n  },\n  cvgrid: {\n    filters: {\n      attribute: \"attribute\",\n      autocomplete: \"autocomplete\",\n      boolean: \"boolean\",\n      id: \"id\",\n      input: \"input\",\n      minmaxdate: \"minmaxdate\",\n      minmaxnumber: \"minmaxnumber\",\n      select: \"select\"\n    }\n  },\n  events: {\n    account: {\n      loaded: \"accountLoaded\",\n      updated: \"accountUpdated\",\n      refreshRoles: \"refreshAccountRoles\"\n    },\n    addressBook: {\n      added: \"addressBookAddedEntry\",\n      deleteCancelled: \"addressBookDeleteCancel\",\n      deleteConfirmed: \"addressBookDeleteConfirmed\",\n      deleted: \"addressBookDeletedEntry\",\n      editCancelled: \"addressEditor2Cancel\",\n      editSave: \"addressEditor2Save\",\n      loaded: \"addressBookLoaded\",\n      reset: \"addressBookReset\",\n      resetRegionDropdownNeeded: \"addressBookRsetRegionDropdownNeeded\"\n    },\n    associator: {\n      added: \"associatorAdded\",\n      removed: \"associatorRemoved\"\n    },\n    attributes: {\n      ready: \"attributesReady\",\n      changed: \"jsonAttributesChanged\"\n    },\n    auth: {\n      signIn: \"signIn\",\n      signInFailed: \"signInFailed\",\n      signOut: \"logoutSuccess\"\n    },\n    carts: {\n      cleared: \"cartCleared\",\n      itemAdded: \"cartItemAdded\",\n      itemRemoved: \"cartItemRemoved\",\n      itemsAdded: \"cartItemsAdded\",\n      loaded: \"cartLoaded\",\n      resetTargets: \"cartResetTargets\",\n      updateShoppingLists: \"updateShoppingLists\",\n      updated: \"updateCart\"\n    },\n    catalog: {\n      change: \"searchCatalogChange\",\n      categoryTreeReady: \"categoryTreeReady\",\n      searchComplete: \"searchCatalogProductsSearchComplete\"\n    },\n    chat: {\n      newMessage: \"newConversationMessage\"\n    },\n    checkout: {\n      nextStep: \"purchaseNextStep\"\n    },\n    contacts: {\n      propertyChanged: \"contactPropertyChanged\"\n    },\n    currency: {\n      changed: \"changeCurrency\",\n      changeFinished: \"changeCurrencyFinished\"\n    },\n    grid: {\n      built: \"cvGridBuilt\"\n    },\n    invoices: {\n      paymentMade: \"invoicePaymentOccurred\"\n    },\n    lang: {\n      changed: \"changeLanguage\",\n      changeFinished: \"changeLanguageFinished\"\n    },\n    lineItems: {\n      updated: \"lineItemsUpdated\"\n    },\n    location: {\n      updated: \"mapUserLocationUpdate\"\n    },\n    menus: {\n      deactivateChildren: \"childMenusDeactivate\",\n      deactivateGroups: \"groupMenusDeactivate\",\n      hoverToggleOff: \"menuHoverToggleOffEvent\"\n    },\n    modals: {\n      close: \"closeModal\"\n    },\n    orders: {\n      complete: \"orderCheckoutComplete\"\n    },\n    paging: {\n      searchComplete: \"pagingSearchComplete\"\n    },\n    products: {\n      detailProductLoaded: \"productDetailProductLoaded\",\n      refreshReviews: \"refreshReviews\",\n      selectedVariantChanged: \"productDetailSelectedVariantChanged\",\n      variantInfoLoaded: \"variantInfoLoaded\"\n    },\n    sales: {\n      totalsUpdated: \"totalsUpdated\"\n    },\n    salesQuotes: {\n      complete: \"quoteSubmitComplete\"\n    },\n    shipping: {\n      loaded: \"loadShippingRateQuotesComplete\",\n      rateQuoteSelected: \"shippingRateQuoteSelected\",\n      ready: \"readyToLoadShippingRateQuotes\",\n      revalidateStep: \"revalidateShippingStep\",\n      setSelectedRateQuoteID: \"setSelectedRateQuoteID\",\n      unready: \"unreadyToLoadShippingRateQuotes\"\n    },\n    signalR: {\n      sendMaxAutoBidAsync: \"SendMaxAutoBidAsync\",\n      receiveMaxAutoBid: \"ReceiveMaxAutoBid\",\n      sendQuickBidAsync: \"SendQuickBidAsync\",\n      receiveQuickBid: \"ReceiveQuickBid\"\n    },\n    states: {\n      loaded: \"stateLoaded\"\n    },\n    statuses: {\n      loaded: \"statusLoaded\"\n    },\n    stores: {\n      selectionUpdate: \"globalStoreSelectionUpdate\",\n      nearbyUpdate: \"globalNearbyStoresUpdate\",\n      cleared: \"userSelectedStoreCleared\",\n      ready: \"storesReady\"\n    },\n    types: {\n      loaded: \"typeLoaded\"\n    },\n    users: {\n      importedToAccount: \"usersImportedToAccount\",\n      updated: \"userUpdated\",\n      refreshRoles: \"refreshUserRoles\"\n    },\n    wallet: {\n      loaded: \"walletLoaded\",\n      updated: \"walletUpdated\"\n    }\n  },\n  modalSizes: {\n    xl: \"xl\",\n    lg: \"lg\",\n    md: \"md\",\n    sm: \"sm\"\n  },\n  questionnaire: {\n    types: {\n      BOOLEAN: \"BOOLEAN\",\n      MULTIPLE_CHOICE: \"MULTIPLE_CHOICE\",\n      NUMBER: \"NUMBER\",\n      RADIO: \"RADIO\",\n      SELECT: \"SELECT\",\n      STRING: \"STRING\",\n      TEXT_AREA: \"TEXT_AREA\"\n    }\n  },\n  redux: {\n    actionTypes: {\n      cart: {\n        setCart: \"setCart\",\n        setMessages: \"setCartMessages\",\n        setLoading: \"setCartLoading\"\n      },\n      cefConfig: {\n        setCefConfig: \"setCefConfig\"\n      },\n      currentAccount: {\n        setCurrentAccount: \"setCurrentAccount\"\n      },\n      currentAccountAddressBook: {\n        setCurrentAccountAddressBook: \"setCurrentAccountAddressBook\"\n      },\n      currentUser: {\n        logUserIn: \"logUserIn\",\n        logUserOut: \"logUserOut\",\n        setLoading: \"setUserLoading\"\n      },\n      quoteCart: {\n        setQuoteCart: \"setQuoteCart\",\n        setMessages: \"setQuoteCartMessages\",\n        setLoading: \"setQuoteCartLoading\"\n      },\n      signalR: {\n        setSignalRConnection: \"setSignalRConnection\"\n      },\n      staticCarts: {\n        setCompareList: \"setCompareList\",\n        setFavoritesList: \"setFavoritesList\",\n        setNotifyMeList: \"setNotifyMeList\",\n        setProductAlertList: \"setProductAlertList\",\n        setShoppingLists: \"setShoppingLists\",\n        setWatchList: \"setWatchList\",\n        setWishList: \"setWishList\"\n      },\n      wallet: {\n        setWallet: \"setWallet\"\n      }\n    }\n  },\n  registration: {\n    steps: {\n      addressBook: \"registrationStepAddressBook\",\n      basicInfo: \"registrationStepBasicInfo\",\n      completed: \"registrationStepCompleted\",\n      confirmation: \"registrationStepConfirmation\",\n      custom: \"registrationStepCustom\",\n      wallet: \"registrationStepWallet\"\n    }\n  },\n  salesQuotes: {\n    statuses: {\n      approved: {\n        actionTitle: \"SalesQuoteStatuses.Approve.ActionTitle\",\n        // Approve and Pay\n        actionTitleAlt: \"SalesQuoteStatuses.Approve.ActionTitleAlt\",\n        confirmTemplate: \"SalesQuoteStatuses.Approved.Confirm.Template\",\n        description: \"SalesQuoteStatuses.Approved.Description\",\n        name: \"SalesQuoteStatuses.Approved\"\n      },\n      expired: {\n        name: \"SalesQuoteStatuses.Expired\",\n        description: \"SalesQuoteStatuses.Expired.Description\"\n      },\n      inProcess: {\n        name: \"SalesQuoteStatuses.InProcess\",\n        description: \"SalesQuoteStatuses.InProcess.Description\"\n      },\n      processed: {\n        name: \"SalesQuoteStatuses.Processed\",\n        description: \"SalesQuoteStatuses.Processed.Description\"\n      },\n      rejected: {\n        name: \"SalesQuoteStatuses.Rejected\",\n        description: \"SalesQuoteStatuses.Rejected.Description\",\n        confirmTemplate: \"SalesQuoteStatuses.Rejected.Confirm.Template\",\n        actionTitle: \"SalesQuoteStatuses.Reject.ActionTitle\"\n      },\n      submitted: {\n        name: \"SalesQuoteStatuses.Submitted\",\n        description: \"SalesQuoteStatuses.Submitted.Description\"\n      },\n      void: {\n        name: \"ui.storefront.SalesQuoteStatuses.Void\",\n        description: \"ui.storefront.SalesQuoteStatuses.Void.Description\",\n        confirmTemplate: \"ui.storefront.SalesQuoteStatuses.Void.Confirm.Template\",\n        actionTitle: \"ui.storefront.common.Cancel\"\n      }\n    }\n  },\n  submitQuote: {\n    steps: {\n      completed: \"submitQuotePaneCompleted\",\n      confirmation: \"submitQuotePaneConfirmation\",\n      method: \"submitQuotePaneMethod\",\n      shipping: \"submitQuotePaneShipping\",\n      shippingRates: \"submitQuotePaneShippingRates\",\n      splitShipping: \"submitQuotePaneSplitShipping\"\n    }\n  },\n  tracking: {\n    visitID: \"cef_visit_id\",\n    visitKey: \"cef_visit_key\",\n    visitorID: \"cef_visitor_id\",\n    visitorKey: \"cef_visitor_key\"\n  }\n};\n","/**\n * @file React/src/_shared/customHooks/useInventoryFactory.tsx\n * @author Copyright (c) 2019-2023 clarity-ventures.com. All rights reserved.\n * @desc Inventory Factory hook\n */\nimport { useEffect, useState } from \"react\";\nimport { CalculatedInventories, ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport cvApi from \"src/_api/cvApi\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport _ from \"lodash\";\n\nexport interface IInventoryFactory {\n  factoryAssign<T extends ProductModel | SalesItemBaseModel<AppliedCartItemDiscountModel>>\n    (product: T): Promise<T>;\n  bulkFactoryAssign<T extends ProductModel | SalesItemBaseModel<AppliedCartItemDiscountModel>>\n    (products: T[], dontBuildReadInventoryFunction?: boolean): Promise<T[]>;\n  canProductBeAddedToCart<T extends ProductModel | SalesItemBaseModel<AppliedCartItemDiscountModel>>\n    (product: T): boolean;\n}\n\nclass InventoryFactory implements IInventoryFactory {\n  // Functions\n  private static genBlankInventoryObj(): CalculatedInventories {\n    return {\n      AllowBackOrder: false,\n      AllowPreSale: false,\n      IsDiscontinued: false,\n      IsOutOfStock: false,\n      IsUnlimitedStock: false,\n      MaximumBackOrderPurchaseQuantity: null,\n      MaximumBackOrderPurchaseQuantityGlobal: null,\n      MaximumBackOrderPurchaseQuantityIfPastPurchased: null,\n      MaximumPrePurchaseQuantity: null,\n      MaximumPrePurchaseQuantityGlobal: null,\n      MaximumPrePurchaseQuantityIfPastPurchased: null,\n      MaximumPurchaseQuantity: null,\n      MaximumPurchaseQuantityIfPastPurchased: null,\n      PreSellEndDate: null,\n      ProductID: null,\n      QuantityAllocated: null,\n      QuantityOnHand: null,\n      QuantityPreSellable: null,\n      QuantityPreSold: null,\n      QuantityPresent: null,\n      RelevantLocations: null,\n      loading: true\n    } as CalculatedInventories;\n  }\n\n  factoryAssign\n  <T extends ProductModel | SalesItemBaseModel<AppliedCartItemDiscountModel>>(product: T): Promise<T> {\n    return new Promise((resolve, reject) => {\n      if (!product) {\n        reject(new Error(\"Did not receive a product to assign inventory to\"));\n      }\n      if (!this.cefConfig.featureSet.inventory.enabled || _.isFunction(product.readInventory)) {\n        resolve(product);\n        return;\n      }\n      // eslint-disable-next-line dot-notation\n      product[\"$_rawInventory\"] = InventoryFactory.genBlankInventoryObj();\n      // eslint-disable-next-line dot-notation\n      product.readInventory = () => product[\"$_rawInventory\"];\n      // TODO: MemCache the results by product ID so we can avoid repeat calls for same product\n      let idToUse = 0;\n      if ((product as SalesItemBaseModel<AppliedCartItemDiscountModel>).ProductID) {\n        idToUse = (product as SalesItemBaseModel<AppliedCartItemDiscountModel>).ProductID;\n      } else {\n        idToUse = (product as ProductModel).ID;\n      }\n      cvApi.providers.CalculateInventory(idToUse).then(r => {\n        if (!r?.data?.ActionSucceeded) {\n          console.error(r.data);\n          reject(r.data);\n          return;\n        }\n        // eslint-disable-next-line dot-notation\n        let inventory = product[\"$_rawInventory\"] as CalculatedInventories;\n        if (!inventory) {\n          inventory = { loading: true } as any;\n        }\n        const {\n          ProductID,\n          IsDiscontinued,\n          IsUnlimitedStock,\n          IsOutOfStock,\n          QuantityPresent,\n          QuantityAllocated,\n          QuantityOnHand,\n          MaximumPurchaseQuantity,\n          MaximumPurchaseQuantityIfPastPurchased,\n          AllowBackOrder,\n          MaximumBackOrderPurchaseQuantity,\n          MaximumBackOrderPurchaseQuantityIfPastPurchased,\n          MaximumBackOrderPurchaseQuantityGlobal,\n          AllowPreSale,\n          PreSellEndDate,\n          QuantityPreSellable,\n          QuantityPreSold,\n          MaximumPrePurchaseQuantity,\n          MaximumPrePurchaseQuantityIfPastPurchased,\n          MaximumPrePurchaseQuantityGlobal,\n          RelevantLocations\n        } = r.data.Result;\n        // Assign updated values\n        /*\n         * NOTE: Feature required settings have been run in the server to only assign values\n         * That could be valid both globally and on this individual product's level. All\n         * variables can be assigned here because they will have the correct flags on them\n         * already.\n         */\n        inventory.ProductID = ProductID;\n        inventory.IsDiscontinued = IsDiscontinued;\n        inventory.IsUnlimitedStock = IsUnlimitedStock;\n        inventory.IsOutOfStock = IsOutOfStock;\n        inventory.QuantityPresent = QuantityPresent;\n        inventory.QuantityAllocated = QuantityAllocated;\n        inventory.QuantityOnHand = QuantityOnHand;\n        inventory.MaximumPurchaseQuantity = MaximumPurchaseQuantity;\n        inventory.MaximumPurchaseQuantityIfPastPurchased = MaximumPurchaseQuantityIfPastPurchased;\n        inventory.AllowBackOrder = AllowBackOrder;\n        inventory.MaximumBackOrderPurchaseQuantity = MaximumBackOrderPurchaseQuantity;\n        inventory.MaximumBackOrderPurchaseQuantityIfPastPurchased = MaximumBackOrderPurchaseQuantityIfPastPurchased;\n        inventory.MaximumBackOrderPurchaseQuantityGlobal = MaximumBackOrderPurchaseQuantityGlobal;\n        inventory.AllowPreSale = AllowPreSale;\n        inventory.PreSellEndDate = PreSellEndDate;\n        inventory.QuantityPreSellable = QuantityPreSellable;\n        inventory.QuantityPreSold = QuantityPreSold;\n        inventory.MaximumPrePurchaseQuantity = MaximumPrePurchaseQuantity;\n        inventory.MaximumPrePurchaseQuantityIfPastPurchased = MaximumPrePurchaseQuantityIfPastPurchased;\n        inventory.MaximumPrePurchaseQuantityGlobal = MaximumPrePurchaseQuantityGlobal;\n        inventory.RelevantLocations = RelevantLocations;\n        // Assign calculated values\n        /*\n          // PILS Stock (TODO: Rework this with variables for store only stock)\n          if (r.data.Result.RelevantLocations && r.data.Result.RelevantLocations.length > 0\n              && this.cefConfig.featureSet.inventory.advanced.enabled\n              && this.cefConfig.featureSet.stores.enabled\n              && this.cefConfig.featureSet.inventory.advanced.countOnlyThisStoresWarehouseStock) {\n              const matrix = this.cvCurrentStoreFactory.getStoreInventoryLocationsMatrixImmediate();\n              if (matrix && matrix.length) {\n                  const thisStoresWarehouses = r.data.Result.RelevantLocations\n                      .filter(x => _.some(matrix,\n                          y => y.InternalInventoryLocationKey =\"== \"x.InventoryLocationSectionInventoryLocationKey\n                            || y.DistributionCenterInventoryLocationKey\n                              === x.InventoryLocationSectionInventoryLocationKey));\n                  return _.sumBy(thisStoresWarehouses,\n                      x => (x.Quantity || 0) - (x.QuantityAllocated || 0));\n              }\n          }\n        */\n        // Finish\n        inventory.loading = false;\n        // eslint-disable-next-line dot-notation\n        product[\"$_rawInventory\"] = inventory;\n        resolve(product);\n      });\n    });\n  }\n\n  // eslint-disable-next-line max-len\n  bulkFactoryAssign<T extends ProductModel | SalesItemBaseModel<AppliedCartItemDiscountModel>>(products: T[], dontBuildReadInventoryFunction?: boolean): Promise<T[]> {\n    if (!this.cefConfig.featureSet.inventory.enabled) {\n      return new Promise((resolve, reject) => {\n        resolve(products);\n      });\n    }\n    const debugMsg = \"inventoryFactory.bulkFactoryAssign(products)\";\n    if (!products || !products.length) {\n      console.warn(\n        `${debugMsg} No products provided to check inventory against`\n      );\n      return new Promise((resolve, reject) => {\n        reject(new Error(\"No products provided to check inventory against\"));\n      });\n    }\n    const processed: T[] = [];\n    const toProcess: T[] = [];\n    products.forEach(product => {\n      if (_.isFunction(product.readInventory)) {\n        processed.push(product);\n      } else {\n        // eslint-disable-next-line dot-notation\n        product[\"$_rawInventory\"] = InventoryFactory.genBlankInventoryObj();\n        // TODO: FIX - This value won't serialize in redux on salesItems\n        if (!dontBuildReadInventoryFunction) {\n          // eslint-disable-next-line dot-notation\n          product.readInventory = () => product[\"$_rawInventory\"];\n        }\n        toProcess.push(product);\n      }\n    });\n    if (!toProcess.length) {\n      return new Promise((resolve, reject) => {\n        resolve(processed);\n      });\n    }\n    return new Promise((resolve, reject) => {\n      let productIDsToUse = [];\n      const isSalesItem\n        = _.some(products as SalesItemBaseModel<AppliedCartItemDiscountModel>[], x => x.ProductID);\n      if (isSalesItem) {\n        productIDsToUse = (toProcess as SalesItemBaseModel<AppliedCartItemDiscountModel>[]).map(x => x.ProductID);\n      } else {\n        productIDsToUse = (toProcess as ProductModel[]).map(x => x.ID);\n      }\n      cvApi.providers\n        .BulkCalculateInventory({\n          ProductIDs: productIDsToUse\n        })\n        .then(r => {\n          if (!r || !r.data || !r.data.ActionSucceeded) {\n            console.error(r && r.data);\n            reject(r && r.data);\n            return;\n          }\n          Object.keys(r.data.Result).forEach(productID => {\n            let found: T = null;\n            if (isSalesItem) {\n              found = toProcess.find(x => (x as SalesItemBaseModel<AppliedCartItemDiscountModel>).ProductID\n                === Number(productID));\n            } else {\n              found = toProcess.find(x => x.ID === Number(productID));\n            }\n            // eslint-disable-next-line dot-notation\n            let inventory = found[\"$_rawInventory\"] as CalculatedInventories;\n            if (!inventory) {\n              inventory = { loading: true } as any;\n            }\n            // Assign updated values\n            /*\n             * NOTE: Feature required settings have been run in the server to only assign values\n             * That could be valid both globally and on this individual product's level. All\n             * variables can be assigned here because they will have the correct flags on them\n             * already.\n             */\n            const {\n              ProductID,\n              IsDiscontinued,\n              IsUnlimitedStock,\n              IsOutOfStock,\n              QuantityPresent,\n              QuantityAllocated,\n              QuantityOnHand,\n              MaximumPurchaseQuantity,\n              MaximumPurchaseQuantityIfPastPurchased,\n              AllowBackOrder,\n              MaximumBackOrderPurchaseQuantity,\n              MaximumBackOrderPurchaseQuantityIfPastPurchased,\n              MaximumBackOrderPurchaseQuantityGlobal,\n              AllowPreSale,\n              PreSellEndDate,\n              QuantityPreSellable,\n              QuantityPreSold,\n              MaximumPrePurchaseQuantity,\n              MaximumPrePurchaseQuantityIfPastPurchased,\n              MaximumPrePurchaseQuantityGlobal,\n              RelevantLocations\n            } = r.data.Result[productID];\n            inventory.ProductID = ProductID;\n            inventory.IsDiscontinued = IsDiscontinued;\n            inventory.IsUnlimitedStock = IsUnlimitedStock;\n            inventory.IsOutOfStock = IsOutOfStock;\n            inventory.QuantityPresent = QuantityPresent;\n            inventory.QuantityAllocated = QuantityAllocated;\n            inventory.QuantityOnHand = QuantityOnHand;\n            inventory.MaximumPurchaseQuantity = MaximumPurchaseQuantity;\n            inventory.MaximumPurchaseQuantityIfPastPurchased = MaximumPurchaseQuantityIfPastPurchased;\n            inventory.AllowBackOrder = AllowBackOrder;\n            inventory.MaximumBackOrderPurchaseQuantity = MaximumBackOrderPurchaseQuantity;\n            inventory.MaximumBackOrderPurchaseQuantityIfPastPurchased = MaximumBackOrderPurchaseQuantityIfPastPurchased;\n            inventory.MaximumBackOrderPurchaseQuantityGlobal = MaximumBackOrderPurchaseQuantityGlobal;\n            inventory.AllowPreSale = AllowPreSale;\n            inventory.PreSellEndDate = PreSellEndDate;\n            inventory.QuantityPreSellable = QuantityPreSellable;\n            inventory.QuantityPreSold = QuantityPreSold;\n            inventory.MaximumPrePurchaseQuantity = MaximumPrePurchaseQuantity;\n            inventory.MaximumPrePurchaseQuantityIfPastPurchased = MaximumPrePurchaseQuantityIfPastPurchased;\n            inventory.MaximumPrePurchaseQuantityGlobal = MaximumPrePurchaseQuantityGlobal;\n            inventory.RelevantLocations = RelevantLocations;\n            // Assign calculated values\n            /*\n            // PILS Stock (TODO: Rework this with variables for store only stock)\n            if (r.data.Result.RelevantLocations && r.data.Result.RelevantLocations.length > 0\n                && this.cefConfig.featureSet.inventory.advanced.enabled\n                && this.cefConfig.featureSet.stores.enabled\n                && this.cefConfig.featureSet.inventory.advanced.countOnlyThisStoresWarehouseStock) {\n                const matrix = this.cvCurrentStoreService.getStoreInventoryLocationsMatrixImmediate();\n                if (matrix && matrix.length) {\n                    const thisStoresWarehouses = r.data.Result.RelevantLocations\n                        .filter(x => _.some(matrix,\n                            y => y.InternalInventoryLocationKey === x.InventoryLocationSectionInventoryLocationKey\n                            || y.DistributionCenterInventoryLocationKey\n                              === x.InventoryLocationSectionInventoryLocationKey));\n                    return _.sumBy(thisStoresWarehouses,\n                        x => (x.Quantity || 0) - (x.QuantityAllocated || 0));\n                }\n            }\n            */\n            // Finish\n            inventory.loading = false;\n            // eslint-disable-next-line dot-notation\n            found[\"$_rawInventory\"] = inventory;\n            processed.push(found);\n          });\n          resolve(processed);\n        })\n        .catch(reject);\n    });\n  }\n\n  canProductBeAddedToCart\n  <T extends ProductModel | SalesItemBaseModel<AppliedCartItemDiscountModel>>(product: T): boolean {\n    /*  Product requires inventory to be assigned before calling this in order for it to work */\n    if (\n      (product as ProductModel).TypeName === \"Variant Master\"\n      || !this.cefConfig?.featureSet.inventory.enabled\n      || !product.readInventory\n    ) {\n      return false;\n    }\n    const productInventory = product.readInventory();\n    return !productInventory.IsOutOfStock || productInventory.AllowBackOrder;\n  }\n\n  // Constructor\n  // eslint-disable-next-line no-empty-function, no-useless-constructor\n  constructor(private readonly cefConfig: CEFConfig) { }\n}\n\nexport const useInventoryFactory = (): IInventoryFactory => {\n  const [ inventoryFactory, setInventoryFactory ] = useState(null);\n  const cefConfig = useCefConfig() as CEFConfig;\n  useEffect(() => {\n    if (cefConfig === null) {\n      return;\n    }\n    // New up the class from above only once\n    const instance = new InventoryFactory(cefConfig);\n    setInventoryFactory(instance);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ cefConfig ]);\n  return inventoryFactory;\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-unused-vars */\n/**\n * @file src/_api/clarityEcomService_shared.ts\n * @author Copyright (c) 2015-2023 clarity-ventures.com. All rights reserved.\n * @desc Clarity eCommerce API/service shared class\n */\n\n// eslint-disable-next-line max-classes-per-file\nimport {\n  AccountModel,\n  BrandModel,\n  CalculatedInventory,\n  CategoryModel as DtoClassCategoryModel,\n  ContactModel,\n  CurrencyModel,\n  FileEntityType,\n  FranchiseModel,\n  ManufacturerModel,\n  NameableBaseModel,\n  NoteModel,\n  PriceRuleModel,\n  SalesEventBaseModel,\n  SalesReturnReasonModel,\n  SearchFormBase,\n  SerializableAttributesDictionary,\n  StatusModel,\n  StoredFileModel,\n  StoreModel,\n  TypeModel,\n  UploadStatus,\n  UserModel as DtoClassUserModel,\n  VendorModel,\n  ProductModel as DtoClassProductModel,\n  CEFActionResponse as DtoClassCEFActionResponse,\n  AggregateTree as DtoAggregateTree,\n  AuctionSearchViewModel as DtoClassAuctionSearchViewModel,\n  LotSearchViewModel as DtoClassLotSearchViewModel,\n  ProductSearchViewModel as DtoClassProductSearchViewModel,\n  AggregatePricingRange,\n  AggregateRatingRange,\n  IndexableModelBase,\n  SalesItemTargetBaseModel,\n  ReviewModel,\n  GeneralAttributeModel\n} from \"./cvApi._DtoClasses\";\n\n/**\n * @name CEFActionResponse\n */\nexport interface CEFActionResponse extends DtoClassCEFActionResponse {\n  ActionSucceeded: boolean;\n  Messages?: Array<string>;\n}\n\n/**\n * @name CEFActionResponseT<TResult>\n * @property {TResult} Result\n * @inheritdoc {CEFActionResponse}\n */\nexport interface CEFActionResponseT<TResult> extends CEFActionResponse {\n  Result: TResult;\n}\n\nexport interface IHttpHeadersGetter {\n  (): { [name: string]: string };\n  (headerName: string): string;\n}\n\nexport interface IHttpPromiseCallback<T> {\n  (\n    data: T,\n    status: number,\n    headers: IHttpHeadersGetter,\n    // @ts-ignore\n    config?\n  ): void;\n}\n\nexport interface IHttpPromiseCallbackArgShort {\n  status?: number;\n  headers?: IHttpHeadersGetter;\n  // @ts-ignore\n  config?;\n  statusText?: string;\n}\n\nexport interface IHttpPromiseCallbackArg<T> extends IHttpPromiseCallbackArgShort {\n  data?: T;\n}\n\nexport interface IHttpPromise<T> extends Promise<IHttpPromiseCallbackArg<T>> {}\n\n/**\n * @public\n */\nexport interface ImplementsIDOnQueryBase {\n  ID: number;\n}\n\n/**\n * @public\n */\nexport interface ImplementsKeyOnQueryBase {\n  Key?: string;\n}\n\nexport interface BaseModel {\n  __caller?: string;\n  // Keys not in original model\n  [propName: string]: any;\n}\n\nexport class KeyValuePair<TKey, TValue> {\n  Key: TKey;\n  Value: TValue;\n}\n\nexport class Dictionary<TValue> {\n  // eslint-disable-next-line no-restricted-globals, no-undef\n  [name: string]: TValue;\n}\n\nexport class Guid {\n  static newGuid(): string {\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/gu, c => {\n      // eslint-disable-next-line no-bitwise, @typescript-eslint/no-extra-parens\n      const r = (Math.random() * 16) | 0;\n      // eslint-disable-next-line no-bitwise, @typescript-eslint/no-extra-parens\n      const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n}\n\nexport interface TransactionResponse {\n  success: boolean;\n  responseCode: number;\n  statusMessage: string;\n  transactions: Transaction[];\n}\n\nexport interface Transaction {\n  transactionID: string;\n  creditCard: CreditCard;\n  transactionType: string;\n  description: string;\n  amount: number;\n  invoiceID: string;\n  shippingAddress: Address;\n  billingAddress: Address;\n  ReceiptEmailedTo: string;\n  taxAmount: string;\n  customerReferenceID: string;\n  approval_code: string;\n  approvalMessage: string;\n  avsResponse: string;\n  cscResponse: string;\n  statusCode: string;\n  statusMessage: string;\n  created: Created;\n  settled: string;\n  customerID: string;\n  DiscretionaryData: object;\n}\n\nexport interface CreditCard {\n  maskedNumber: string;\n  expirationMonth: string;\n  expirationYear: string;\n}\n\nexport interface Address {\n  name: string;\n  streetAddress: string;\n  streetAddress2: string;\n  city: string;\n  state: string;\n  zip: string;\n  country: string;\n}\n\nexport interface Created {\n  through: string;\n  at: string;\n  by: string;\n  fromIP: string;\n}\n\nexport interface AuctionSearchViewModel extends DtoClassAuctionSearchViewModel {\n  Categories?: Array<DtoClassCategoryModel>;\n}\nexport interface LotSearchViewModel extends DtoClassLotSearchViewModel {\n  Categories?: Array<DtoClassCategoryModel>;\n}\nexport interface ProductSearchViewModel extends DtoClassProductSearchViewModel {\n  Categories?: Array<DtoClassCategoryModel>;\n}\n\nexport interface SearchViewModelBase<TSearchForm extends SearchFormBase,TIndexModel extends IndexableModelBase> {\n  /** Gets or sets the form. */\n  Form: TSearchForm;\n\n  /** Gets or sets the documents. */\n  Documents: Array<TIndexModel>;\n\n  /** Gets or sets the elapsed milliseconds. */\n  ElapsedMilliseconds: number;\n\n  /** Gets or sets the number of.  */\n  Total: number;\n\n  /** Gets or sets the total number of pages. */\n  TotalPages: number;\n\n  /** Gets or sets the server error. */\n  ServerError?: any;\n\n  /** Gets or sets information describing the debug. */\n  DebugInformation?: string | null;\n\n  /** Gets or sets a value indicating whether this SearchViewModel is valid. */\n  IsValid: boolean;\n\n  /** Gets or sets the hits meta data maximum score. */\n  HitsMetaDataMaxScore?: number | null;\n\n  /** Gets or sets the hits meta data total. */\n  HitsMetaDataTotal?: number | null;\n\n  /** Gets or sets the hits meta data hit scores. */\n  HitsMetaDataHitScores?: Dictionary<number> | null;\n\n  /** Gets or sets the attributes. */\n  Attributes?: Array<KeyValuePair<string, Array<KeyValuePair<string, number | null>>>> | null;\n\n  /** Gets or sets the brand IDs. */\n  BrandIDs?: Dictionary<number | null> | null;\n\n  /** Gets or sets the brand names. */\n  BrandNames?: Dictionary<number | null> | null;\n\n  /** Gets or sets the categories tree. */\n  CategoriesTree?: AggregateTree | null;\n\n  /** Gets or sets the franchise IDs. */\n  FranchiseIDs?: Dictionary<number | null> | null;\n\n  /** Gets or sets the product IDs. */\n  ProductIDs?: Dictionary<number | null> | null;\n\n  /** Gets or sets the manufacturer IDs. */\n  ManufacturerIDs?: Dictionary<number | null> | null;\n\n  /** Gets or sets the store IDs. */\n  StoreIDs?: Dictionary<number | null> | null;\n\n  /** Gets or sets the type values. */\n  Types?: Dictionary<IndexableTypeModel | null> | null;\n\n  /** Gets or sets the vendor IDs. */\n  VendorIDs?: Dictionary<number | null> | null;\n\n  /** Gets or sets the pricing ranges. */\n  PricingRanges?: Array<AggregatePricingRange> | null;\n\n  /** Gets or sets the rating ranges. */\n  RatingRanges?: Array<AggregateRatingRange> | null;\n\n  /** Gets or sets the result IDs. */\n  ResultIDs?: Array<number> | null;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableTypeModel extends IndexableFilterBase {\n  SortOrder: number;\n  Count: number;\n}\n\n/**\n * @public\n */\nexport interface IndexableFilterBase {\n  ID: number;\n  Key?: string;\n  Name?: string;\n}\n\nexport interface HaveAParentBaseModel<TModel> {\n  ParentID?: number;\n  Parent?: TModel;\n  Children?: Array<TModel>;\n  /** Whether or not the object has child objects (read-only) */\n  HasChildren: boolean;\n}\n\nexport interface HaveJsonAttributesBaseModel {\n  /** A list of extending Attributes for the this object */\n  SerializableAttributes?: SerializableAttributesDictionary;\n}\n\nexport interface HaveATypeSearchModel {\n  /** The Type ID for objects */\n  TypeID?: number;\n  /** The Type ID for objects to specifically exclude */\n  ExcludedTypeID?: number;\n  /** The Type IDs for objects to specifically exclude */\n  ExcludedTypeIDs?: Array<number>;\n  /** The Type Key for objects */\n  TypeKey?: string;\n  /** The Type Key for objects to specifically exclude */\n  ExcludedTypeKey?: string;\n  /** The Type Keys for objects to specifically exclude */\n  ExcludedTypeKeys?: Array<string>;\n  /** The Type Name for objects */\n  TypeName?: string;\n  /** The Type Name for objects to specifically exclude */\n  ExcludedTypeName?: string;\n  /** The Type Names for objects to specifically exclude */\n  ExcludedTypeNames?: Array<string>;\n  /** The Type Display Name for objects */\n  TypeDisplayName?: string;\n  /** The Type Display Name for objects to specifically exclude */\n  ExcludedTypeDisplayName?: string;\n  /** The Type Display Names for objects to specifically exclude */\n  ExcludedTypeDisplayNames?: Array<string>;\n  /** The Type Translation Key for objects */\n  TypeTranslationKey?: string;\n}\n\nexport interface HaveSeoBaseModel {\n  /** SEO Keywords to use in the Meta tags of the page for this object */\n  SeoKeywords?: string;\n  /** SEO URL to use to link to the page for this object */\n  SeoUrl?: string;\n  /** SEO Description to use in the Meta tags of the page for this object */\n  SeoDescription?: string;\n  /** SEO General Meta Data to use in the Meta tags of the page for this object */\n  SeoMetaData?: string;\n  /** SEO Page Title to use in the Meta tags of the page for this object */\n  SeoPageTitle?: string;\n}\n\nexport interface HaveNotesBaseModel {\n  /** Notes for the object, optional */\n  Notes?: Array<NoteModel>;\n}\n\nexport interface AggregateTree extends DtoAggregateTree {\n  PrimaryImageFileName?: string;\n  DisplayName?: string;\n}\n\nexport interface HaveImagesBaseModel<TImageModel extends IImageBaseModel> {\n  /** Images for the object, optional */\n  Images?: Array<TImageModel>;\n}\n\nexport interface IImageBaseModel extends BaseModel, HaveATypeModel<TypeModel> {\n  TypeKey?: string;\n  TypeName?: string;\n  TypeDisplayName?: string;\n  TypeTranslationKey?: string;\n  TypeSortOrder?: number;\n  SortOrder?: number;\n  DisplayName?: string;\n  SeoTitle?: string;\n  Author?: string;\n  MediaDate?: Date;\n  Copyright?: string;\n  Location?: string;\n  Latitude?: number;\n  Longitude?: number;\n  IsPrimary: boolean;\n  OriginalWidth?: number;\n  OriginalHeight?: number;\n  OriginalFileFormat?: string;\n  OriginalFileName?: string;\n  OriginalIsStoredInDB: boolean;\n  OriginalBytes?: Array<number>;\n  ThumbnailWidth?: number;\n  ThumbnailHeight?: number;\n  ThumbnailFileFormat?: string;\n  ThumbnailFileName?: string;\n  ThumbnailIsStoredInDB: boolean;\n  ThumbnailBytes?: Array<number>;\n  MasterID?: number;\n  MasterKey?: string;\n}\n\n/* AccountModel extends BaseModel */\nexport interface AmARelationshipTableModel<TSlaveModel extends BaseModel>\n  extends BaseModel {\n  /** Gets or sets the identifier of the master. */\n  MasterID?: number;\n  /** Gets or sets the master key. */\n  MasterKey?: string;\n  /** Gets or sets the identifier of the slave. */\n  SlaveID?: number;\n  /** Gets or sets the slave key. */\n  SlaveKey?: string;\n  /** Gets or sets the slave. */\n  Slave?: TSlaveModel;\n}\n\nexport interface AmARelationshipTableNameableBaseModel<TSlaveModel extends BaseModel>\n  extends AmARelationshipTableModel<TSlaveModel>, NameableBaseModel\n{\n}\n\nexport interface AmAStoredFileRelationshipTableModel\n  extends AmARelationshipTableModel<StoredFileModel>,\n  HaveSeoBaseModel,\n  NameableBaseModel {\n  /** Gets or sets the identifier of the file access type. */\n  FileAccessTypeID: number;\n  /** Gets or sets the sort order. */\n  SortOrder?: number;\n}\n\nexport interface HaveStoredFilesBaseModel<\n  TFileModel extends AmAStoredFileRelationshipTableModel\n  > {\n  /** StoredFiles for the object, optional */\n  StoredFiles?: Array<TFileModel>;\n}\n\nexport interface HaveAStatusModel {\n  /** Identifier for the Status of this object, required if no StatusModel present */\n  StatusID: number;\n  /** Model for Status of this object, required if no StatusID present */\n  Status?: StatusModel;\n  /** Key for the Status of this object, read-only */\n  StatusKey?: string;\n  /** Name for the Status of this object, read-only */\n  StatusName?: string;\n  /** The status display name */\n  StatusDisplayName?: string;\n  /** The status translation key */\n  StatusTranslationKey?: string;\n  /** The status sort order */\n  StatusSortOrder?: number;\n}\n\nexport interface HaveAStateModel {\n  /** Identifier for the State of this object, required if no StateModel present */\n  StateID: number;\n  /** Model for State of this object, required if no StateID present */\n  State?: StatusModel;\n  /** Key for the State of this object, read-only */\n  StateKey?: string;\n  /** Name for the State of this object, read-only */\n  StateName?: string;\n  /** The state display name */\n  StateDisplayName?: string;\n  /** The state translation key */\n  StateTranslationKey?: string;\n  /** The state sort order */\n  StateSortOrder?: number;\n}\n\nexport interface HaveATypeModel<TTypeModel> {\n  /** Identifier for the Type of this object, required if no TypeModel present */\n  TypeID: number;\n  /** Model for Type of this object, required if no TypeID present */\n  Type?: TTypeModel;\n  /** Key for the Type of this object, read-only */\n  TypeKey?: string;\n  /** Name for the Type of this object, read-only */\n  TypeName?: string;\n  /** The type display name */\n  TypeDisplayName?: string;\n  /** The type translation key */\n  TypeTranslationKey?: string;\n  /** The type sort order */\n  TypeSortOrder?: number;\n}\n\nexport interface HaveAStatusSearchModel {\n  /** The Status ID for objects */\n  StatusID?: number;\n  /** The Status ID for objects to specifically exclude */\n  ExcludedStatusID?: number;\n  /** The Status IDs for objects to specifically exclude */\n  ExcludedStatusIDs?: Array<number>;\n  /** The Status Key for objects */\n  StatusKey?: string;\n  /** The Status Key for objects to specifically exclude */\n  ExcludedStatusKey?: string;\n  /** The Status Keys for objects to specifically exclude */\n  ExcludedStatusKeys?: Array<string>;\n  /** The Status Name for objects */\n  StatusName?: string;\n  /** The Status Name for objects to specifically exclude */\n  ExcludedStatusName?: string;\n  /** The Status Names for objects to specifically exclude */\n  ExcludedStatusNames?: Array<string>;\n  /** The Status Display Name for objects */\n  StatusDisplayName?: string;\n  /** The Status Display Name for objects to specifically exclude */\n  ExcludedStatusDisplayName?: string;\n  /** The Status Display Names for objects to specifically exclude */\n  ExcludedStatusDisplayNames?: Array<string>;\n  /** The Status Translation Key for objects */\n  StatusTranslationKey?: string;\n}\n\nexport interface HaveAStatusBaseSearchModel {\n  /** The Status ID for objects */\n  StatusID?: number;\n  /** The Status ID for objects to specifically exclude */\n  ExcludedStatusID?: number;\n  /** The Status IDs for objects to specifically exclude */\n  ExcludedStatusIDs?: Array<number>;\n  /** The Status Key for objects */\n  StatusKey?: string;\n  /** The Status Key for objects to specifically exclude */\n  ExcludedStatusKey?: string;\n  /** The Status Keys for objects to specifically exclude */\n  ExcludedStatusKeys?: Array<string>;\n  /** The Status Name for objects */\n  StatusName?: string;\n  /** The Status Name for objects to specifically exclude */\n  ExcludedStatusName?: string;\n  /** The Status Names for objects to specifically exclude */\n  ExcludedStatusNames?: Array<string>;\n  /** The Status Display Name for objects */\n  StatusDisplayName?: string;\n  /** The Status Display Name for objects to specifically exclude */\n  ExcludedStatusDisplayName?: string;\n  /** The Status Display Names for objects to specifically exclude */\n  ExcludedStatusDisplayNames?: Array<string>;\n  /** The Status Translation Key for objects */\n  StatusTranslationKey?: string;\n}\n\nexport interface HaveAStateSearchModel {\n  /** The State ID for objects */\n  StateID?: number;\n  /** The State ID for objects to specifically exclude */\n  ExcludedStateID?: number;\n  /** The State IDs for objects to specifically exclude */\n  ExcludedStateIDs?: Array<number>;\n  /** The State Key for objects */\n  StateKey?: string;\n  /** The State Key for objects to specifically exclude */\n  ExcludedStateKey?: string;\n  /** The State Keys for objects to specifically exclude */\n  ExcludedStateKeys?: Array<string>;\n  /** The State Name for objects */\n  StateName?: string;\n  /** The State Name for objects to specifically exclude */\n  ExcludedStateName?: string;\n  /** The State Names for objects to specifically exclude */\n  ExcludedStateNames?: Array<string>;\n  /** The State Display Name for objects */\n  StateDisplayName?: string;\n  /** The State Display Name for objects to specifically exclude */\n  ExcludedStateDisplayName?: string;\n  /** The State Display Names for objects to specifically exclude */\n  ExcludedStateDisplayNames?: Array<string>;\n  /** The State Translation Key for objects */\n  StateTranslationKey?: string;\n}\n\nexport interface AmFilterableByAccountsBaseModel<TAccountRelateModel> {\n  /** Accounts this object is associated with */\n  Accounts?: Array<TAccountRelateModel>;\n}\n\nexport interface AmFilterableByBrandsBaseModel<TBrandRelateModel> {\n  /** Brands this object is associated with */\n  Brands?: Array<TBrandRelateModel>;\n}\n\nexport interface AmFilterableByCategoriesBaseModel<TCategoryRelateModel> {\n  /** Categories this object is associated with */\n  Categories?: Array<TCategoryRelateModel>;\n}\n\nexport interface AmFilterableByFranchisesBaseModel<TFranchiseRelateModel> {\n  /** Franchises this object is associated with */\n  Franchises?: Array<TFranchiseRelateModel>;\n}\n\nexport interface AmFilterableByManufacturersBaseModel<TManufacturerRelateModel> {\n  /** Manufacturers this object is associated with */\n  Manufacturers?: Array<TManufacturerRelateModel>;\n}\n\nexport interface AmFilterableByProductsBaseModel<TProductRelateModel> {\n  /** Products this object is associated with */\n  Products?: Array<TProductRelateModel>;\n}\n\nexport interface AmFilterableByStoreBaseModelT<TOther> {\n  /** Gets or sets the stores. */\n  Stores?: Array<TOther>;\n}\n\nexport interface AmFilterableByStoresBaseModel<TStoreRelateModel> {\n  /** Stores this object is associated with */\n  Stores?: Array<TStoreRelateModel>;\n}\n\nexport interface AmFilterableByUsersBaseModel<TUserRelateModel> {\n  /** Users this object is associated with */\n  Users?: Array<TUserRelateModel>;\n}\n\nexport interface AmFilterableByVendorsBaseModel<TVendorRelateModel> {\n  /** Vendors this object is associated with */\n  Vendors?: Array<TVendorRelateModel>;\n}\n\nexport interface AmFilterableByAccountBaseModel {\n  /** Gets or sets the identifier of the Account. */\n  AccountID?: number;\n  /** Gets or sets the Account. */\n  Account?: AccountModel;\n  /** The Account key */\n  StorAccountKey?: string;\n  /** The Account name */\n  AccountName?: string;\n  /** The Account seo url */\n  AccountSeoUrl?: string;\n}\n\nexport interface AmFilterableByBrandBaseModel {\n  /** Gets or sets the identifier of the Brand. */\n  BrandID?: number;\n  /** Gets or sets the Brand. */\n  Brand?: BrandModel;\n  /** The Brand key */\n  BrandKey?: string;\n  /** The Brand name */\n  BrandName?: string;\n}\n\nexport interface AmFilterableByFranchiseBaseModel {\n  /** Gets or sets the identifier of the Franchise. */\n  FranchiseID?: number;\n  /** Gets or sets the Franchise. */\n  Franchise?: FranchiseModel;\n  /** The Franchise key */\n  FranchiseKey?: string;\n  /** The Franchise name */\n  FranchiseName?: string;\n}\n\nexport interface AmFilterableByCategoryBaseModel {\n  /** Gets or sets the identifier of the Category. */\n  CategoryID?: number;\n  /** Gets or sets the Category. */\n  Category?: DtoClassCategoryModel;\n  /** The Category key */\n  CategoryKey?: string;\n  /** The Category name */\n  CategoryName?: string;\n  /** The Category seo url */\n  CategorySeoUrl?: string;\n}\n\nexport interface AmFilterableByManufacturerBaseModel {\n  /** Gets or sets the identifier of the Manufacturer. */\n  ManufacturerID?: number;\n  /** Gets or sets the Manufacturer. */\n  Manufacturer?: ManufacturerModel;\n  /** The Manufacturer key */\n  ManufacturerKey?: string;\n  /** The Manufacturer name */\n  ManufacturerName?: string;\n  /** The Manufacturer seo url */\n  ManufacturerSeoUrl?: string;\n}\n\nexport interface AmFilterableByProductBaseModel {\n  /** Gets or sets the identifier of the Product. */\n  ProductID?: number;\n  /** Gets or sets the Product. */\n  Product?: ProductModel;\n  /** The Product key */\n  ProductKey?: string;\n  /** The Product name */\n  ProductName?: string;\n  /** The Product seo url */\n  ProductSeoUrl?: string;\n}\n\nexport interface AmFilterableByStoreBaseModel {\n  /** Gets or sets the identifier of the Store. */\n  StoreID?: number;\n  /** Gets or sets the Store. */\n  Store?: StoreModel;\n  /** The Store key */\n  StoreKey?: string;\n  /** The Store name */\n  StoreName?: string;\n  /** The Store seo url */\n  StoreSeoUrl?: string;\n}\n\nexport interface AmFilterableByUserBaseModel {\n  /** Gets or sets the identifier of the User. */\n  UserID?: number;\n  /** Gets or sets the User. */\n  User?: UserModel;\n  /** The User key */\n  UserKey?: string;\n  /** The User name */\n  UserName?: string;\n}\n\nexport interface AmFilterableByVendorBaseModel {\n  /** Gets or sets the identifier of the Vendor. */\n  VendorID?: number;\n  /** Gets or sets the Vendor. */\n  Vendor?: VendorModel;\n  /** The Vendor key */\n  VendorKey?: string;\n  /** The Vendor name */\n  VendorName?: string;\n  /** The Vendor seo url */\n  VendorSeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableAccountBaseModel {\n  /** Gets or sets the identifier of the Account. */\n  AccountID?: number;\n  /** Gets or sets the Account. */\n  Account?: AccountModel;\n  /** The Account key */\n  AccountKey?: string;\n  /** The Account name */\n  AccountName?: string;\n  /** The Account seo url */\n  AccountSeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableBrandBaseModel {\n  /** Gets or sets the identifier of the Brand. */\n  BrandID?: number;\n  /** Gets or sets the Brand. */\n  Brand?: BrandModel;\n  /** The Brand key */\n  BrandKey?: string;\n  /** The Brand name */\n  BrandName?: string;\n}\n\nexport interface AmFilterableByNullableCategoryBaseModel {\n  /** Gets or sets the identifier of the Category. */\n  CategoryID?: number;\n  /** Gets or sets the Category. */\n  Category?: DtoClassCategoryModel;\n  /** The Category key */\n  CategoryKey?: string;\n  /** The Category name */\n  CategoryName?: string;\n  /** The Category seo url */\n  CategorySeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableManufacturerBaseModel {\n  /** Gets or sets the identifier of the Manufacturer. */\n  ManufacturerID?: number;\n  /** Gets or sets the Manufacturer. */\n  Manufacturer?: ManufacturerModel;\n  /** The Manufacturer key */\n  ManufacturerKey?: string;\n  /** The Manufacturer name */\n  ManufacturerName?: string;\n  /** The Manufacturer seo url */\n  ManufacturerSeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableProductBaseModel {\n  /** Gets or sets the identifier of the Product. */\n  ProductID?: number;\n  /** Gets or sets the Product. */\n  Product?: ProductModel;\n  /** The Product key */\n  ProductKey?: string;\n  /** The Product name */\n  ProductName?: string;\n  /** The Product seo url */\n  ProductSeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableStoreBaseModel {\n  /** Gets or sets the identifier of the store. */\n  StoreID?: number;\n  /** Gets or sets the store. */\n  Store?: StoreModel;\n  /** The store key */\n  StoreKey?: string;\n  /** The store name */\n  StoreName?: string;\n  /** The store seo url */\n  StoreSeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableUserBaseModel {\n  /** Gets or sets the identifier of the User. */\n  UserID?: number;\n  /** Gets or sets the User. */\n  User?: UserModel;\n  /** The User key */\n  UserKey?: string;\n  /** The User name */\n  UserName?: string;\n  /** The User seo url */\n  UserSeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableVendorBaseModel {\n  /** Gets or sets the identifier of the Vendor. */\n  VendorID?: number;\n  /** Gets or sets the Vendor. */\n  Vendor?: VendorModel;\n  /** The Vendor key */\n  VendorKey?: string;\n  /** The Vendor name */\n  VendorName?: string;\n  /** The Vendor seo url */\n  VendorSeoUrl?: string;\n}\n\nexport interface AmFilterableByNullableFranchiseBaseModel {\n  /** Gets or sets the identifier of the Franchise. */\n  FranchiseID?: number;\n  /** Gets or sets the Franchise. */\n  Franchise?: FranchiseModel;\n  /** The Franchise key */\n  FranchiseKey?: string;\n  /** The Franchise name */\n  FranchiseName?: string;\n  /** The Franchise seo url */\n  FranchiseSeoUrl?: string;\n}\n\nexport interface AmFilterableByAccountSearchModel {\n  /** Account ID For Search, Note: This will be overriden on data calls automatically */\n  AccountID?: number;\n  /** The Account Key for objects */\n  AccountKey?: string;\n  /** The Account Name for objects */\n  AccountName?: string;\n}\nexport interface AmFilterableByAccountBaseSearchModel\n  extends AmFilterableByAccountSearchModel {}\n\nexport interface AmFilterableByBrandSearchModel {\n  /** Brand ID For Search, Note: This will be overriden on data calls automatically */\n  BrandID?: number;\n  /** The Brand Key for objects */\n  BrandKey?: string;\n  /** The Brand Name for objects */\n  BrandName?: string;\n  BrandCategoryID?: number;\n}\nexport interface AmFilterableByBrandBaseSearchModel\n  extends AmFilterableByBrandSearchModel {}\n\nexport interface AmFilterableByFranchiseSearchModel {\n  /** Gets or sets the identifier of the Franchise. */\n  FranchiseID?: number;\n  /** The Franchise key */\n  FranchiseKey?: string;\n  /** The Franchise name */\n  FranchiseName?: string;\n}\nexport interface AmFilterableByFranchiseBaseSearchModel\n  extends AmFilterableByFranchiseSearchModel {}\n\nexport interface AmFilterableByCategorySearchModel {\n  /** Category ID For Search, Note: This will be overriden on data calls automatically */\n  CategoryID?: number;\n  /** The Category Key for objects */\n  CategoryKey?: string;\n  /** The Category Name for objects */\n  CategoryName?: string;\n  /** The Category SEO URL for objects */\n  CategorySeoUrl?: string;\n}\nexport interface AmFilterableByCategoryBaseSearchModel\n  extends AmFilterableByCategorySearchModel {}\n\nexport interface HaveAContactBaseSearchModel {\n  ContactID?: number;\n  ContactKey?: string;\n  ContactName?: string;\n  ContactFirstName?: string;\n  ContactLastName?: string;\n  ContactPhone?: string;\n  ContactFax?: string;\n  ContactEmail?: string;\n}\n\nexport interface AmFilterableByManufacturerSearchModel {\n  /** Manufacturer ID For Search */\n  ManufacturerID?: number;\n  /** The Manufacturer Key for objects */\n  ManufacturerKey?: string;\n  /** The Manufacturer Name for objects */\n  ManufacturerName?: string;\n}\nexport interface AmFilterableByManufacturerBaseSearchModel\n  extends AmFilterableByManufacturerSearchModel {}\n\nexport interface AmFilterableByProductSearchModel {\n  /** Product ID For Search, Note: This will be overriden on data calls automatically */\n  ProductID?: number;\n  /** The Product Key for objects */\n  ProductKey?: string;\n  /** The Product Name for objects */\n  ProductName?: string;\n  /** The Product seo url */\n  ProductSeoUrl?: string;\n}\nexport interface AmFilterableByProductBaseSearchModel\n  extends AmFilterableByProductSearchModel {}\n\n  export interface AmFilterableByStoreSearchModel {\n  /** Store ID For Search, Note: This will be overriden on data calls automatically */\n  StoreID?: number;\n  /** The Store Key for objects */\n  StoreKey?: string;\n  /** The Store Name for objects */\n  StoreName?: string;\n  /** The store seo url */\n  StoreSeoUrl?: string;\n  StoreCountryID?: number;\n  StoreRegionID?: number;\n  StoreCity?: string;\n  StoreAnyCountryID?: number;\n  StoreAnyRegionID?: number;\n  StoreAnyCity?: string;\n}\nexport interface AmFilterableByStoreBaseSearchModel\n  extends AmFilterableByStoreSearchModel {}\n\nexport interface AmFilterableByUserSearchModel {\n  /** User ID For Search, Note: This will be overriden on data calls automatically */\n  UserID?: number;\n  /** The User Key for objects */\n  UserKey?: string;\n  /** The User Name for objects */\n  UserName?: string;\n  /** The User seo url */\n  UserSeoUrl?: string;\n  /** The User Name for objects */\n  UserUsername?: string;\n}\nexport interface AmFilterableByUserBaseSearchModel\n  extends AmFilterableByUserSearchModel {}\n\nexport interface AmFilterableByVendorSearchModel {\n  /** Vendor ID For Search, Note: This will be overriden on data calls automatically */\n  VendorID?: number;\n  /** The Vendor Key for objects */\n  VendorKey?: string;\n  /** The Vendor Name for objects */\n  VendorName?: string;\n}\nexport interface AmFilterableByVendorBaseSearchModel\n  extends AmFilterableByVendorSearchModel {}\n\nexport interface HaveDimensionsBaseModel {\n  Weight: number;\n  WeightUnitOfMeasure?: string;\n  Width: number;\n  WidthUnitOfMeasure?: string;\n  Depth: number;\n  DepthUnitOfMeasure?: string;\n  Height: number;\n  HeightUnitOfMeasure?: string;\n}\nexport interface HaveNullableDimensionsBaseModel {\n  Weight?: number;\n  WeightUnitOfMeasure?: string;\n  Width?: number;\n  WidthUnitOfMeasure?: string;\n  Depth?: number;\n  DepthUnitOfMeasure?: string;\n  Height?: number;\n  HeightUnitOfMeasure?: string;\n}\n\nexport interface HaveRequiresRolesBaseModel {\n  RequiresRolesList?: Array<string>;\n  RequiresRolesAlt?: string;\n  RequiresRolesListAlt?: Array<string>;\n}\n\nexport interface HaveOrderMinimumsBaseModel {\n  MinimumOrderDollarAmount?: number;\n  MinimumOrderDollarAmountAfter?: number;\n  MinimumOrderDollarAmountWarningMessage?: string;\n  MinimumOrderDollarAmountOverrideFee?: number;\n  MinimumOrderDollarAmountOverrideFeeIsPercent: boolean;\n  MinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\n  MinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\n  MinimumOrderQuantityAmount?: number;\n  MinimumOrderQuantityAmountAfter?: number;\n  MinimumOrderQuantityAmountWarningMessage?: string;\n  MinimumOrderQuantityAmountOverrideFee?: number;\n  MinimumOrderQuantityAmountOverrideFeeIsPercent: boolean;\n  MinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\n  MinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\n  MinimumOrderDollarAmountBufferProductID?: number;\n  MinimumOrderDollarAmountBufferProductKey?: string;\n  MinimumOrderDollarAmountBufferProductName?: string;\n  MinimumOrderDollarAmountBufferProduct?: ProductModel;\n  MinimumOrderQuantityAmountBufferProductID?: number;\n  MinimumOrderQuantityAmountBufferProductKey?: string;\n  MinimumOrderQuantityAmountBufferProductName?: string;\n  MinimumOrderQuantityAmountBufferProduct?: ProductModel;\n  MinimumOrderDollarAmountBufferCategoryID?: number;\n  MinimumOrderDollarAmountBufferCategoryKey?: string;\n  MinimumOrderDollarAmountBufferCategoryName?: string;\n  MinimumOrderDollarAmountBufferCategory?: DtoClassCategoryModel;\n  MinimumOrderQuantityAmountBufferCategoryID?: number;\n  MinimumOrderQuantityAmountBufferCategoryKey?: string;\n  MinimumOrderQuantityAmountBufferCategoryName?: string;\n  MinimumOrderQuantityAmountBufferCategory?: DtoClassCategoryModel;\n}\n\nexport interface HaveFreeShippingMinimumsBaseModel {\n  MinimumForFreeShippingDollarAmount?: number;\n  MinimumForFreeShippingDollarAmountAfter?: number;\n  MinimumForFreeShippingDollarAmountWarningMessage?: string;\n  MinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\n  MinimumForFreeShippingQuantityAmount?: number;\n  MinimumForFreeShippingQuantityAmountAfter?: number;\n  MinimumForFreeShippingQuantityAmountWarningMessage?: string;\n  MinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\n  MinimumForFreeShippingDollarAmountBufferProductID?: number;\n  MinimumForFreeShippingDollarAmountBufferProductKey?: string;\n  MinimumForFreeShippingDollarAmountBufferProductName?: string;\n  MinimumForFreeShippingDollarAmountBufferProduct?: ProductModel;\n  MinimumForFreeShippingQuantityAmountBufferProductID?: number;\n  MinimumForFreeShippingQuantityAmountBufferProductKey?: string;\n  MinimumForFreeShippingQuantityAmountBufferProductName?: string;\n  MinimumForFreeShippingQuantityAmountBufferProduct?: ProductModel;\n  MinimumForFreeShippingDollarAmountBufferCategoryID?: number;\n  MinimumForFreeShippingDollarAmountBufferCategoryKey?: string;\n  MinimumForFreeShippingDollarAmountBufferCategoryName?: string;\n  MinimumForFreeShippingDollarAmountBufferCategory?: DtoClassCategoryModel;\n  MinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\n  MinimumForFreeShippingQuantityAmountBufferCategoryKey?: string;\n  MinimumForFreeShippingQuantityAmountBufferCategoryName?: string;\n  MinimumForFreeShippingQuantityAmountBufferCategory?: DtoClassCategoryModel;\n}\n\n/**\n * Interface for sales collection base model.\n * @sa HaveAStatusModel.\n * @sa HaveAStateModel.\n * @sa AmFilterableByNullableBrandBaseModel.\n * @sa AmFilterableByNullableStoreBaseModel.\n * @sa HaveJsonAttributesBaseModel.\n */\nexport interface SalesCollectionBaseModel\n  extends BaseModel,\n  HaveAStatusModel,\n  HaveAStateModel,\n  AmFilterableByNullableAccountBaseModel,\n  AmFilterableByNullableBrandBaseModel,\n  AmFilterableByNullableStoreBaseModel,\n  AmFilterableByNullableUserBaseModel,\n  HaveJsonAttributesBaseModel {\n  /** The item quantity? */\n  ItemQuantity?: number;\n\n  /** The user id */\n  UserID?: number;\n  /** The user */\n  User?: UserModel;\n  /** The user key */\n  UserKey?: string;\n  /** The user name */\n  UserName?: string;\n  /** The user name */\n  UserUsername?: string;\n  /** The user contact first name */\n  UserContactFirstName?: string;\n  /** The user contact last name */\n  UserContactLastName?: string;\n  /** The user contact email */\n  UserContactEmail?: string;\n\n  /** The balance due */\n  BalanceDue?: number;\n  /** The shipping same as billing. */\n  ShippingSameAsBilling: boolean;\n  /** The billing contact */\n  BillingContactID?: number;\n  /** The billing contact */\n  BillingContact?: ContactModel;\n  /** The shipping contact */\n  ShippingContactID?: number;\n  /** The shipping contact */\n  ShippingContact?: ContactModel;\n\n  // Totals?: CartTotals; // Generated\n}\n\nexport interface SalesCollectionBaseModelT<\n  TTypeModel,\n  TContactModel,\n  TSalesEventModel extends SalesEventBaseModel,\n  TDiscountModel extends AppliedDiscountBaseModel,\n  TItemDiscountModel extends AppliedDiscountBaseModel,\n  TFileModel extends AmAStoredFileRelationshipTableModel\n  > extends SalesCollectionBaseModel,\n  HaveStoredFilesBaseModel<TFileModel>,\n  HaveATypeModel<TTypeModel>,\n  HaveAStatusModel,\n  HaveAStateModel {\n  Contacts?: Array<TContactModel>;\n  /** The sales items. */\n  SalesItems?: Array<SalesItemBaseModel<TItemDiscountModel>>;\n  /** The discounts */\n  Discounts?: Array<TDiscountModel>;\n  /** The Sales Events */\n  SalesEvents?: Array<TSalesEventModel>;\n}\n\nexport interface SalesCollectionBaseSearchModel\n  extends BaseSearchModel,\n  HaveATypeSearchModel,\n  HaveAStatusBaseSearchModel,\n  AmFilterableByStoreSearchModel {}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveJsonAttributesBaseModel}\n * @see {@link HaveNotesBaseModel}\n * @public\n */\nexport interface SalesItemBaseModel<TItemDiscountModel extends AppliedDiscountBaseModel>\n  extends HasInventoryObject, HasPricingObject,\n  NameableBaseModel,\n  HaveJsonAttributesBaseModel,\n  HaveNotesBaseModel {\n  // SalesItemBase Properties\n  Quantity: number;\n  QuantityBackOrdered?: number;\n  QuantityPreSold?: number;\n  TotalQuantity?: number;\n  UnitCorePrice: number;\n  UnitSoldPrice?: number;\n  UnitSoldPriceModifier?: number;\n  UnitSoldPriceModifierMode?: number;\n  ExtendedPrice?: number;\n  ExtendedShippingAmount?: number;\n  ExtendedTaxAmount?: number;\n  UnitCorePriceInSellingCurrency?: number;\n  UnitSoldPriceInSellingCurrency?: number;\n  ExtendedPriceInSellingCurrency?: number;\n  UnitOfMeasure?: string;\n  Sku?: string;\n  RestockingFeeAmount?: number;\n  ForceUniqueLineItemKey?: string;\n  // Related Objects\n  MasterID?: number;\n  SalesReturnReasonID?: number;\n  SalesReturnReasonKey?: string;\n  SalesReturnReasonName?: string;\n  SalesReturnReason?: SalesReturnReasonModel;\n  OriginalCurrencyID?: number;\n  OriginalCurrencyKey?: string;\n  OriginalCurrencyName?: string;\n  OriginalCurrency?: CurrencyModel;\n  SellingCurrencyID?: number;\n  SellingCurrencyKey?: string;\n  SellingCurrencyName?: string;\n  SellingCurrency?: CurrencyModel;\n  // Associated Objects\n  Targets?: Array<SalesItemTargetBaseModel>;\n  Discounts?: Array<TItemDiscountModel>;\n  // Convenience Properties\n  ProductDownloads?: Array<string>;\n  // Specifics (Purchase Order Items)\n  DateReceived?: Date;\n  // IAmFilterableByNullableUser Properties\n  UserID?: number;\n  UserKey?: string;\n  UserUsername?: string;\n  User?: UserModel;\n  // IAmFilterableByNullableProduct Properties\n  ProductID?: number;\n  ProductKey?: string;\n  ProductName?: string;\n  ProductSeoUrl?: string;\n  ProductTypeID?: number;\n  ProductTypeKey?: string;\n  ProductNothingToShip?: boolean;\n  ProductPrimaryImage?: string;\n  ProductAllowPreSale?: boolean;\n  ProductRepeatTypeAbbreviation?: string;\n  ProductRepeatTypePeriods?: number;\n  // Removed: ProductDescription?: string;\n  // Removed: ProductRequiresRoles?: string;\n  // Removed: ProductIsUnlimitedStock?: boolean;\n  // Removed: ProductAllowBackOrder?: boolean;\n  // Removed: ProductIsEligibleForReturn?: boolean;\n  // Removed: ProductRestockingFeePercent?: number;\n  // Removed: ProductRestockingFeeAmount?: number;\n  // Removed: ProductIsTaxable?: boolean;\n  // Removed: ProductTaxCode?: string;\n  // Removed: ProductShortDescription?: string;\n  // Removed: ProductUnitOfMeasure?: string;\n  // Removed: ProductSerializableAttributes?: SerializableAttributesDictionary;\n  // Removed: ProductIsDiscontinued?: boolean;\n  // Removed: ProductMinimumPurchaseQuantity?: number;\n  // Removed: ProductMinimumPurchaseQuantityIfPastPurchased?: number;\n  // Removed: ProductMaximumPurchaseQuantity?: number;\n  // Removed: ProductMaximumPurchaseQuantityIfPastPurchased?: number;\n  // Removed: ProductStockQuantity?: number;\n  // Removed: ProductStockQuantityAllocated?: number;\n  // Removed: ProductStockQuantityBroken?: number;\n  // Removed: ProductStockQuantityPreSold?: number;\n}\n\nexport interface AppliedDiscountBaseModel extends BaseModel {\n  MasterID?: number;\n  MasterKey?: string;\n  SlaveID?: number;\n  SlaveName?: string;\n  DiscountID: number;\n  DiscountKey?: string;\n  DiscountName?: string;\n  DiscountTotal: number;\n  ApplicationsUsed?: number;\n  DiscountTypeID: number;\n  DiscountValue: number;\n  DiscountPriority?: number;\n  DiscountValueType?: number;\n}\n\nexport interface PagedResultsBase<TResult> {\n  TotalPages: number;\n  TotalCount: number;\n  CurrentPage: number;\n  CurrentCount: number;\n  Results: Array<TResult>;\n}\n\nexport interface UserModel extends DtoClassUserModel {\n  userChecked?: boolean;\n}\n\nexport interface RoleForUserModel {\n  RoleId: number;\n  UserId: number;\n  Name?: string;\n  StartDate?: Date;\n  EndDate?: Date;\n}\n\nexport interface RoleForAccountModel {\n  RoleId: number;\n  AccountId: number;\n  Name?: string;\n  StartDate?: Date;\n  EndDate?: Date;\n}\n\nexport interface IAuthTokens {\n  AccessToken?: string;\n  AccessTokenSecret?: string;\n  // Items?: cefalt.store.Dictionary<string>;\n  Items?: any;\n  Provider: string;\n  RefreshToken?: string;\n  RefreshTokenExpiry?: Date;\n  RequestToken?: string;\n  RequestTokenSecret?: string;\n  UserId?: string;\n}\n\nexport interface DiscountModel extends NameableBaseModel {\n  DisplayValue: string;\n  DisplayDates: string;\n  DisplayCodes: string;\n}\n\nexport interface AuthUserSession {}\nexport interface AuthenticateResponse {}\nexport interface BaseSearchModel {}\n\nexport interface HaveANullableContactBaseModel {\n  ContactID?: number;\n  Contact?: ContactModel;\n  ContactFirstName?: string;\n  ContactLastName?: string;\n  ContactEmail?: string;\n  ContactPhone?: string;\n  ContactFax?: string;\n}\nexport interface HaveAContactBaseModel {\n  ContactID: number;\n  Contact?: ContactModel;\n  ContactFirstName?: string;\n  ContactLastName?: string;\n  ContactEmail?: string;\n  ContactPhone?: string;\n  ContactFax?: string;\n}\n\nexport interface IUploadResponse {\n  ID: string;\n  Upload: IUpload;\n  UploadStatus: UploadStatus;\n  UploadFiles: Array<IUploadResult>;\n}\nexport interface UploadResponse extends IUploadResponse { }\n\nexport interface IUpload {\n  UploadID: string;\n  Expires: Date;\n  EntityFileType: FileEntityType;\n  Name: string;\n  Async: boolean;\n}\n\nexport interface IUploadResult {\n  ID: number;\n  FileName: string;\n  FilePath: string;\n  FileKey: string;\n  ContentType: string;\n  ContentLength: number;\n  PercentDone: number;\n  TotalBytes: number;\n  TransferredBytes: number;\n  UploadFiles: Array<IUploadResult>;\n  UploadFileStatus: UploadStatus;\n}\n\nexport interface CalculatedInventories extends CalculatedInventory {\n  // == Inherited ==\n  // ProductID: number;\n  // IsDiscontinued: boolean;\n  // IsUnlimitedStock: boolean;\n  // IsOutOfStock: boolean;\n  // QuantityPresent?: number;\n  // QuantityAllocated?: number;\n  // QuantityOnHand?: number;\n  // MaximumPurchaseQuantity?: number;\n  // MaximumPurchaseQuantityIfPastPurchased?: number;\n  // AllowBackOrder: boolean;\n  // MaximumBackOrderPurchaseQuantity?: number;\n  // MaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\n  // MaximumBackOrderPurchaseQuantityGlobal?: number;\n  // AllowPreSale: boolean;\n  // PreSellEndDate?: Date;\n  // QuantityPreSellable?: number;\n  // QuantityPreSold?: number;\n  // MaximumPrePurchaseQuantity?: number;\n  // MaximumPrePurchaseQuantityIfPastPurchased?: number;\n  // MaximumPrePurchaseQuantityGlobal?: number;\n  // RelevantLocations?: Array<ProductInventoryLocationSectionModel>;\n  loading: boolean;\n}\nexport interface CalculatedPrices {\n  base?: number;\n  sale?: number;\n  msrp?: number;\n  reduction?: number;\n  haveBase?: boolean;\n  haveSale?: boolean;\n  haveMsrp?: boolean;\n  haveReduction?: boolean;\n  isSale?: boolean;\n  amountOff?: number;\n  percentOff?: number;\n  repeatAbbr?: string;\n  repeatPeriods?: number;\n  loading: boolean;\n}\nexport interface CalculatedRatings {\n  value: number,\n  count: number,\n  reviews: Array<ReviewModel>,\n  loading: boolean;\n}\nexport interface CalculatedSortOrder {\n  order: number,\n  loading: boolean;\n}\nexport interface HasInventoryObject extends HaveJsonAttributesBaseModel {\n  CurrentShipOption?: string;\n  readInventory?: () => CalculatedInventories;\n  \"$_rawInventory\"?: CalculatedInventories;\n}\nexport interface HasPricingObject extends HaveJsonAttributesBaseModel {\n  readPrices?: () => CalculatedPrices;\n  \"$_rawPrices\"?: CalculatedPrices;\n}\nexport interface HasRatingObject extends HaveJsonAttributesBaseModel {\n  readRatings?: () => CalculatedRatings;\n  \"$_rawRatings\"?: CalculatedRatings;\n}\nexport interface HasSortOrderObject extends HaveJsonAttributesBaseModel {\n  readSortOrder?: () => CalculatedSortOrder;\n  \"$_rawSortOrder\"?: CalculatedSortOrder;\n}\nexport interface ProductModel\n  extends HasInventoryObject,\n  HasPricingObject,\n  HasRatingObject,\n  HasSortOrderObject,\n  DtoClassProductModel {\n  PrimaryImageFileName?: string;\n  $_rawInventory?: CalculatedInventories;\n  $_rawPrices?: CalculatedPrices;\n  $_rawRatings?: CalculatedRatings;\n  $_rawSortOrder?: CalculatedSortOrder;\n  $_rawProduct?: ProductModel;\n  readInventory?: () => CalculatedInventories;\n  readPrices?: () => CalculatedPrices;\n  readRatings?: () => CalculatedRatings;\n  readSortOrder?: () => CalculatedSortOrder;\n}\n\nexport interface IPriceRuleModel extends PriceRuleModel {}\n\nexport interface AccountContactModel {\n  SlavePhone?: string;\n  SlaveFax?: string;\n  SlaveEmail?: string;\n  SlaveFirstName?: string;\n  SlaveLastName?: string;\n}\n\nexport interface GetCategoryByIDDto extends ImplementsIDOnQueryBase {}\n\nexport interface AuthProviderLoginDto {\n  Username: string;\n  Password: string;\n  RememberMe?: boolean;\n}\n\nexport interface CEFActionError {\n  ResponseStatus: CEFActionErrorResponse;\n}\n\nexport interface CEFActionErrorResponse {\n  ErrorCode?: string;\n  Message?: string;\n  Errors?: string[];\n}\n\nexport interface CategoryModel extends DtoClassCategoryModel {\n  PrimaryImageFileName?: string;\n}\n\n// Export interface ProductCatalogSearchForm extends DtoClassProductCatalogSearchForm {\n//   [key: string]: any;\n// }\n","/* eslint-disable camelcase */\n/** @format */\n// https://developers.google.com/tag-manager\n// Not implemented: impressions, promoView, promoClick\n\nimport _ from \"lodash\";\nimport cvApi from \"src/_api/cvApi\";\nimport {\n  CalculatedPrices,\n  Guid,\n  IHttpPromiseCallbackArg,\n  ProductModel,\n  SalesItemBaseModel\n} from \"src/_api/cvApi.shared\";\nimport {\n  AppliedCartItemDiscountModel,\n  CartModel,\n  CartTotals,\n  CheckoutResult,\n  SalesReturnModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport promiser from \"src/_shared/Promiser\";\n\ninterface IGoogleTagManagerCheckoutObject {\n  event: string;\n  // Required by google\n  currency: string;\n  items: object[];\n  value: number;\n  transaction_id: string;\n  // Optional\n  addShippingInfo?: object;\n  coupon?: string;\n  paymentType?: object;\n  revenue?: number;\n}\n\nexport interface IGoogleTagManagerService {\n  click(product: ProductModel, callback?: Function): void;\n  detail(product: ProductModel): void;\n  add(product: ProductModel, quantity?: number): void;\n  remove(product: ProductModel, quantity?: number, position?: number): void;\n  checkoutOption(step?: string, option?: string): void;\n  refund(refund: SalesReturnModel, refundItems?: Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>): void;\n  ga4checkoutOption(\n    cart: CartModel,\n    option: \"eec.beginCheckout\" | \"eec.addShippingInfo\" | \"eec.addPaymentInfo\",\n    extraInfo?: any\n  ): void;\n  ga4CheckoutFinalize(cart: CartModel, checkoutResult: CheckoutResult): void;\n}\n\nclass GoogleTagManagerService implements IGoogleTagManagerService {\n  async click(product: ProductModel, callback?: Function): Promise<void> {\n    if (!window.dataLayer) {\n      return;\n    }\n    const price = await this.calculateRevenue(product);\n    window.dataLayer.push({\n      event: \"eec.productClick\",\n      eventCallback: callback,\n      click: {\n        items: [ this.mapToProductFieldObjectInner(product, 1, price) ]\n      }\n    });\n  }\n\n  async detail(product: ProductModel): Promise<void> {\n    if (!window.dataLayer) {\n      return;\n    }\n    const price = await this.calculateRevenue(product);\n    window.dataLayer.push({\n      event: \"eec.detailView\",\n      currencyCode: \"USD\",\n      revenue: price,\n      value: price,\n      items: [ this.mapToProductFieldObjectInner(product, 1, price) ]\n    });\n  }\n\n  async add(product: ProductModel, quantity: number = 1): Promise<void> {\n    if (!window.dataLayer) {\n      return;\n    }\n    const price = await this.calculateRevenue(product, quantity);\n    window.dataLayer.push({\n      event: \"eec.addToCart\",\n      currencyCode: \"USD\",\n      revenue: price,\n      value: price,\n      items: [ this.mapToProductFieldObjectInner(product, quantity, price) ]\n    });\n  }\n\n  async remove(product: ProductModel, quantity: number = 1): Promise<void> {\n    if (!window.dataLayer) {\n      return;\n    }\n    const price = await this.calculateRevenue(product, quantity);\n    window.dataLayer.push({\n      event: \"eec.removeFromCart\",\n      currencyCode: \"USD\",\n      revenue: price,\n      value: price,\n      items: [ this.mapToProductFieldObjectInner(product, quantity, price) ]\n    });\n  }\n\n  checkoutOption(step?: string, option?: string): void {\n    if (!window.dataLayer) {\n      return;\n    }\n    window.dataLayer.push({\n      event: \"eec.checkoutOption\",\n      checkout_option: {\n        actionField: {\n          step,\n          option\n        }\n      }\n    });\n  }\n\n  refund(refund: SalesReturnModel, refundItems?: Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>): void {\n    if (!window.dataLayer) {\n      return;\n    }\n    if (!refundItems || !refundItems.length) {\n      this.refundInner(refund, []);\n      return;\n    }\n    const mapped = refundItems.map(refundItem => this.mapToProductFieldObject(\n      refundItem.ProductID,\n      refundItem.Quantity + (refundItem.QuantityBackOrdered || 0) + (refundItem.QuantityPreSold || 0),\n      refundItem.UnitSoldPrice || refundItem.UnitCorePrice\n    ));\n    this.refundInner(refund, mapped);\n  }\n\n  private refundInner(refund: SalesReturnModel, mapped?: object[]): void {\n    window.dataLayer.push({\n      event: \"eec.refund\",\n      refund: {\n        actionField: {\n          id: refund.ID\n        },\n        items: mapped\n      }\n    });\n  }\n\n  private mapToProductFieldObject(productID: number, quantity?: number, price?: number): Promise<object> {\n    return new Promise((resolve, reject) => {\n      const promiserKey = `cvApi.products.GetProductByID(${productID})`;\n      promiser.resolve(promiserKey, () => cvApi.products.GetProductByID(productID))\n        .then(r => {\n          if (!r?.data) {\n            reject(new Error(\"Could not get product data.\"));\n            return;\n          }\n          resolve(this.mapToProductFieldObjectInner(r.data, quantity, price));\n        })\n        .catch(reject);\n    });\n  }\n\n  ga4checkoutOption(\n    cart: CartModel,\n    option: \"eec.beginCheckout\" | \"eec.addShippingInfo\" | \"eec.addPaymentInfo\",\n    extraInfo?: object | string\n  ): void {\n    if (!window.dataLayer) {\n      return;\n    }\n    const data: Omit<IGoogleTagManagerCheckoutObject, \"transaction_id\"> = {\n      event: option,\n      currency: \"USD\",\n      items: [] as object[],\n      revenue: 0,\n      value: 0\n    };\n    // option == eec.beginCheckout\n    // option == eec.addShippingInfo\n    // option == eec.addPaymentInfo\n    Promise.all(\n      cart.SalesItems.map(salesItem => {\n        const promiserKey = `cvApi.products.GetProductByID(${salesItem.ProductID})`;\n        return promiser.resolve(promiserKey, () => cvApi.products.GetProductByID(salesItem.ProductID));\n      })\n    )\n      .then(async (result: IHttpPromiseCallbackArg<ProductModel>[]) => {\n        data.items = [];\n        result.forEach(async (item, index) => {\n          const product = item.data;\n          data.items.push(\n            this.mapToProductFieldObjectInner(\n              product,\n              cart.SalesItems[index].TotalQuantity,\n              await this.calculateRevenue(product, cart.SalesItems[index].TotalQuantity)\n            )\n          );\n        });\n        let totalPrice = 0;\n        for await (const item of result) {\n          const salesItem = cart.SalesItems[result.indexOf(item)];\n          totalPrice += await this.calculateRevenue(item.data, salesItem.TotalQuantity);\n        }\n        data.revenue = totalPrice;\n        if (_.isArray(cart.Discounts) && cart.Discounts.length) {\n          data.coupon = cart.Discounts.reduce((accu: string, discount) => {\n            let sc = accu;\n            sc += discount.DiscountName || discount.DiscountKey || discount.CustomKey;\n            return sc;\n          }, \"\");\n        }\n        switch (option) {\n          case \"eec.addShippingInfo\": {\n            // \"Ground\"\n            data.addShippingInfo = extraInfo as object;\n            break;\n          }\n          case \"eec.addPaymentInfo\": {\n            // \"Credit Card\"\n            data.paymentType = extraInfo as object;\n            break;\n          }\n          default:\n            break;\n        }\n        window.dataLayer.push(data);\n      })\n      .catch(reason2 => {\n        console.debug(reason2);\n      });\n  }\n\n  private buildTransactionId(checkoutResult: any): string {\n    if (checkoutResult?.PaymentTransactionID) {\n      return checkoutResult.PaymentTransactionID;\n    }\n    if (checkoutResult?.PaymentTransactionIDs && checkoutResult.PaymentTransactionIDs.length > 0) {\n      return checkoutResult.PaymentTransactionIDs[0];\n    }\n    let orderIdPart = \"\";\n    if (checkoutResult?.OrderID) {\n      orderIdPart = checkoutResult.OrderID;\n    } else if (checkoutResult?.OrderIDs && checkoutResult.OrderIDs.length > 0) {\n      orderIdPart = checkoutResult.OrderIDs[0];\n    }\n    return `${orderIdPart}${Guid.newGuid()}`;\n  }\n\n  ga4CheckoutFinalize(cart: CartModel, checkoutResult: CheckoutResult): void {\n    const data: IGoogleTagManagerCheckoutObject = {\n      event: \"eec.purchase\",\n      currency: \"USD\",\n      items: [] as object[],\n      revenue: (cart.Totals as CartTotals).Total,\n      value:\n        cart.Totals.SubTotal\n        ?? (cart.Totals as CartTotals).Total\n          - ((cart.Totals as CartTotals).Shipping ?? 0)\n          - ((cart.Totals as CartTotals).Tax ?? 0),\n      // Transaction ID\n      transaction_id: this.buildTransactionId(checkoutResult),\n    };\n    // Discounts\n    if (_.isArray(cart.Discounts)) {\n      data.coupon = cart.Discounts.reduce((accu: string, discount) => {\n        let sc = accu;\n        sc += discount.DiscountName || discount.DiscountKey || discount.CustomKey;\n        return sc;\n      }, \"\");\n    }\n    // Items\n    Promise.all(\n      cart.SalesItems.map(salesItem => {\n        const promiserKey = `cvApi.products.GetProductByID(${salesItem.ProductID})`;\n        return promiser.resolve(promiserKey, () => cvApi.products.GetProductByID(salesItem.ProductID));\n      })\n    )\n      .then((result: IHttpPromiseCallbackArg<ProductModel>[]) => {\n        result.forEach(async (item, index) => {\n          const product = item.data;\n          data.items.push(\n            this.mapToProductFieldObjectInner(\n              product,\n              cart.SalesItems[index].TotalQuantity,\n              await this.calculateRevenue(product, 1)\n            )\n          );\n        });\n        if (!data.currency || !data.value || !data.items || !data.transaction_id) {\n          console.error(\n            \"ERROR: Missing required properties in data object! Google will not track this purchase event.\",\n            \"Required properties: currency, value, items, transaction_id\",\n            data\n          );\n        }\n        window.dataLayer.push(data);\n      })\n      .catch(reason1 => {\n        console.debug(reason1);\n      });\n  }\n\n  private mapToProductFieldObjectInner(product: ProductModel, quantity: number, price: number): object {\n    if (!product.Name) {\n      return null;\n    }\n    let prices: CalculatedPrices = { base: null, loading: true };\n    if (_.isFunction(product.readPrices)) {\n      prices = product.readPrices();\n    }\n    const primaryCategory = _.first(product.Categories);\n    const toSend: { [key: string]: any } = {\n      // affiliation: \"Google Merchandise Store\",\n      brand: product.BrandName || product.CustomKey,\n      category: primaryCategory?.SlaveName || primaryCategory?.SlaveKey || \"\",\n      // TODO: discounts / coupons\n      // coupon: \"SUMMER_FUN\",\n      // discount: 2.22,\n      id: product.ID || product.CustomKey,\n      item_brand: \"Google\",\n      item_id: product.CustomKey,\n      item_name: product.Name || product.CustomKey,\n      // item_variant: \"green\",\n      name: product.Name || product.CustomKey,\n      price: price || (prices.isSale ? prices.sale : prices.base),\n      quantity\n    };\n    if (_.isArray(product.Categories)) {\n      for (let i = 0; i < product.Categories.length; i++) {\n        const category = product.Categories[i];\n        let propName = \"item_category\";\n        if (i > 0) {\n          propName += i;\n        }\n        toSend[propName] = category.SlaveName || category.SlaveKey || \"\";\n      }\n    }\n    return toSend;\n  }\n\n  private async calculateRevenue(product: ProductModel, quantity?: number): Promise<number> {\n    if (_.isFunction(product.readPrices)) {\n      const prices = product.readPrices();\n      let retVal = 0;\n      if (prices.isSale) {\n        retVal = prices.sale;\n      }\n      if (prices.haveBase && !prices.isSale) {\n        retVal = prices.base;\n      }\n      return retVal * (quantity || 1);\n    }\n    const prices = (await cvApi.pricing.CalculatePricesForProduct(product.ID, quantity)).data.Result;\n    if (!prices) {\n      return 0;\n    }\n    if (prices.SalePrice && prices.SalePrice < prices.BasePrice) {\n      return prices.SalePrice * (quantity || 1);\n    }\n    return prices.BasePrice * (quantity || 1);\n  }\n}\n\nconst instance = new GoogleTagManagerService();\nexport default instance;\n","/* eslint-disable sort-keys */\n/* eslint-disable arrow-body-style */\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport _ from \"lodash\";\nimport { setCartByType, setShoppingLists, useAllCarts } from \"src/_redux/slices/cartSlice\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { CEFActionResponse, CEFActionResponseT, IHttpPromise, ProductModel } from \"src/_api/cvApi.shared\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { AppliedCartItemDiscountModel, CartModel, SerializableAttributesDictionary } from \"src/_api/cvApi._DtoClasses\";\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\nimport googleTagManagerService from \"src/_shared/tracking/googleTagManagerService\";\nimport { useAuthFactory } from \"./authFactory\";\n\nexport interface ICartFactory {\n  addItemToCart: (\n    type: string,\n    productID: number,\n    quantity: number,\n    product?: ProductModel,\n    attributes?: SerializableAttributesDictionary,\n    skipRedux?: boolean\n  ) => Promise<CEFActionResponseT<number>>;\n  addAllItemsToCart: (\n    type: string,\n    items: { ProductID: number; Quantity: number }[]\n  ) => Promise<CEFActionResponseT<number[]>>;\n  addItemToStaticCart: (type: string, productID: number, quantity: number) => Promise<void>;\n  removeItemFromCart: (\n    type: string,\n    cartItemID: number,\n    product?: ProductModel,\n    quantity?: number,\n    skipRedux?: boolean\n  ) => Promise<void>;\n  removeItemFromStaticCart: (type: string, productID: number) => Promise<void>;\n  addToCompare: (productID: number) => Promise<void>;\n  removeFromCompare: (productID: number) => Promise<void>;\n  clearCompare: () => Promise<void>;\n  addDiscount: (type: string, code: string) => Promise<CEFActionResponse>;\n  removeDiscount: (type: string, discount: AppliedCartItemDiscountModel) => Promise<void>;\n  updateItemQuantity: (type: string, cartItemID: number, quantity: number) => Promise<void>;\n  createShoppingList: (name: string) => Promise<void>;\n  reloadCart: (type: string, force?: boolean, skipRedux?: boolean) => Promise<CartModel>;\n  reloadShoppingLists: () => Promise<void>;\n  reloadStaticCart: (type: string, force?: boolean) => Promise<CartModel>;\n  checkIfItemIsInStaticCart: (type: string, productID: number) => Promise<boolean>;\n  canProductBeAddedToStandardCart: (product: ProductModel) => {\n    addable: boolean;\n    errorKey?: string;\n  };\n  swapItemInCart: (newProduct: ProductModel, oldItemID: number, oldCart: CartModel) => Promise<CartModel>;\n  checkRestrictedRegions: (productID: number) => Promise<CEFActionResponse>;\n}\n\nexport const useCartFactory = (): ICartFactory | null => {\n  const [ cartFactory, setCartFactory ] = useState<ICartFactory>(null);\n\n  const dispatch = useDispatch();\n  const cefConfig = useCefConfig();\n  const allCarts = useAllCarts();\n  const inventoryFactory = useInventoryFactory();\n  const authFactory = useAuthFactory();\n  const checkIfQuantityExceedsStock = (type: string, quantity: number, product?: ProductModel): boolean => {\n    if (\n      !cefConfig.featureSet.inventory.enabled\n      || type === ServiceStrings.carts.types.quote\n      || !product?.readInventory\n    ) {\n      return false;\n    }\n    const inventory = product.readInventory();\n    if (inventory.IsUnlimitedStock) {\n      return false;\n    }\n    const cart: CartModel = allCarts[type];\n    const quantityInCart = cart?.SalesItems?.find(x => x.ProductID === product.ID)?.Quantity ?? 0;\n    const totalQuantityDesired = quantityInCart + quantity;\n    if (!inventory.AllowBackOrder && (inventory.QuantityOnHand ?? 0) < totalQuantityDesired) {\n      return true;\n    }\n    return false;\n  };\n\n  useEffect(() => {\n    if (!cefConfig || !inventoryFactory) {\n      return;\n    }\n    const factory = {\n      addItemToCart: async (\n        type: string,\n        productID: number,\n        quantity: number,\n        product?: ProductModel,\n        attributes?: SerializableAttributesDictionary,\n        skipRedux?: boolean\n      ): Promise<CEFActionResponseT<number>> => {\n        if (checkIfQuantityExceedsStock(type, quantity, product)) {\n          return Promise.reject(new Error(\"Quantity desired exceeds amount available\"));\n        }\n        await authFactory\n          .loadCurrentUser(true)\n          // eslint-disable-next-line consistent-return\n          .then(async r => {\n            if (!r) {\n              return Promise.reject(new Error(\"No User\"));\n            }\n            if (r?.GeneralMedicalCompleted) {\n              const regionRes = await factory.checkRestrictedRegions(productID);\n              if (!regionRes.ActionSucceeded) {\n                return Promise.reject(new Error(`${regionRes.Messages[0]}`));\n              }\n            }\n          });\n        return cvApi.shopping\n          .AddCartItem({ TypeName: type, ProductID: productID, Quantity: quantity, SerializableAttributes: attributes })\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Error adding product to cart\" ];\n            }\n            if (cefConfig.googleTagManager.enabled) {\n              if (_.isUndefined(product)) {\n                const promiserKey = `cvApi.products.GetProductByID(${productID})`;\n                promiser\n                  .resolve(promiserKey, () => cvApi.products.GetProductByID(productID))\n                  .then(res => {\n                    googleTagManagerService.add(res.data, quantity);\n                  })\n                  .catch(err => {\n                    if (cefConfig.debug) {\n                      console.debug(\"Failed to get product data for GTM add to cart event\", productID, err);\n                    }\n                  });\n              } else {\n                googleTagManagerService.add(product, quantity);\n              }\n            }\n            const result = r.data;\n            return factory.reloadCart(type, true, skipRedux).then(cart => {\n              if (cart.Messages) {\n                result.Messages ??= [];\n                result.Messages.push(...cart.Messages);\n              }\n              // @ts-ignore\n              result.CartActionSucceeded = cart.ActionSucceeded;\n              return result;\n            });\n          });\n      },\n\n      addAllItemsToCart: (\n        type: string,\n        items: { ProductID: number; Quantity: number; Product?: ProductModel }[]\n      ): Promise<CEFActionResponseT<number[]>> => {\n        const toSend = items.map(item => ({\n          ...item,\n          UnitCorePrice: null,\n          ExtendedPrice: null,\n          ItemType: null,\n          ID: null,\n          Active: true,\n          CreatedDate: new Date()\n        }));\n        return cvApi.shopping.AddCartItems({ TypeName: type, Items: toSend }).then(r => {\n          const result = r.data;\n          if (cefConfig.googleTagManager.enabled) {\n            for (let i = 0; i < toSend.length; i++) {\n              const item = toSend[i];\n              if (_.isUndefined(item.Product)) {\n                if (cefConfig.debug) {\n                  console.warn(\n                    `${item.ProductID} successfully added to cart, but was unable to record in google analytics.\n                      Optional Product arg undefined.`\n                  );\n                }\n              } else {\n                googleTagManagerService.add(item.Product, item.Quantity);\n              }\n            }\n          }\n          return factory.reloadCart(type, true).then(() => result);\n        });\n      },\n\n      addItemToStaticCart: (type: string, productID: number, quantity: number): Promise<void> => {\n        return cvApi.shopping\n          .AddStaticCartItem({ TypeName: type, ProductID: productID, Quantity: quantity })\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Error adding product to cart\" ];\n            }\n            return factory.reloadStaticCart(type, true);\n          })\n          .then();\n      },\n\n      removeItemFromCart: (\n        type: string,\n        cartItemID: number,\n        product?: ProductModel,\n        quantity?: number,\n        skipRedux?: boolean\n      ): Promise<void> => {\n        return cvApi.shopping\n          .RemoveCartItemByID(cartItemID)\n          .then(() => {\n            if (cefConfig.googleTagManager.enabled) {\n              if (_.isUndefined(product) || !_.isNumber(quantity)) {\n                if (cefConfig.debug) {\n                  console.warn(\n                    `Remove from cart event was successful, but could not\n                    be recorded in google analytics. Product or quantity undefined.`\n                  );\n                }\n              } else {\n                googleTagManagerService.remove(product, quantity);\n              }\n            }\n            return factory.reloadCart(type, true, skipRedux);\n          })\n          .then();\n      },\n\n      removeItemFromStaticCart: (type: string, productID: number): Promise<void> => {\n        return cvApi.shopping\n          .RemoveStaticCartItemByProductIDAndType({ TypeName: type, ProductID: productID })\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Unable to remove from static cart\" ];\n            }\n            return factory.reloadStaticCart(type, true);\n          })\n          .then();\n      },\n\n      addToCompare: (productID: number): Promise<void> => {\n        return cvApi.shopping\n          .AddCompareCartItem({ ProductID: productID })\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Unable to add to compare cart\" ];\n            }\n            return factory.reloadCart(ServiceStrings.carts.types.compare, true);\n          })\n          .then();\n      },\n\n      removeFromCompare: (productID: number): Promise<void> => {\n        return cvApi.shopping\n          .RemoveCompareCartItemByProductID(productID)\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Unable to remove from compare cart\" ];\n            }\n            return factory.reloadCart(ServiceStrings.carts.types.compare, true);\n          })\n          .then();\n      },\n\n      clearCompare: (): Promise<void> => {\n        return cvApi.shopping\n          .ClearCurrentCompareCart()\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Unable to clear current compare cart\" ];\n            }\n            return factory.reloadCart(ServiceStrings.carts.types.compare, true);\n          })\n          .then();\n      },\n\n      addDiscount: (type: string, code: string): Promise<CEFActionResponse> => {\n        return cvApi.shopping.CurrentCartAddDiscount({ TypeName: type, Code: code }).then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            return r?.data;\n          }\n          return factory.reloadCart(type, true).then(() => r?.data);\n        });\n      },\n\n      removeDiscount: (type: string, discount: AppliedCartItemDiscountModel): Promise<void> => {\n        // Normally comparing against hard-coded IDs would be a no-no, but these don't actually\n        // correspond to records in the database, they're part of an enum.\n        const discountType = discount.DiscountTypeID;\n        let removeFn: (body: { ID: number; TypeName?: string }) => IHttpPromise<CEFActionResponse>\n          = cvApi.shopping.RemoveCartItemDiscount;\n        if (discountType === 0 || discountType === 2) {\n          removeFn = cvApi.shopping.CurrentCartRemoveDiscount;\n        }\n        return removeFn({ ID: discount.ID, TypeName: type })\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Failed to remove discount from cart\" ];\n            }\n            return factory.reloadCart(type, true);\n          })\n          .then();\n      },\n\n      updateItemQuantity: (type: string, cartItemID: number, quantity: number): Promise<void> => {\n        return cvApi.shopping\n          .UpdateCartItemQuantity({\n            CartItemID: cartItemID,\n            Quantity: quantity,\n            QuantityBackOrdered: 0,\n            QuantityPreSold: 0\n          })\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Unable to update item quantity\" ];\n            }\n            return factory.reloadCart(type, true);\n          })\n          .then();\n      },\n\n      createShoppingList: (name: string): Promise<void> => {\n        return cvApi.shopping\n          .CreateCartTypeForCurrentUser({\n            Active: true,\n            CreatedDate: new Date(),\n            ID: 0,\n            Name: name\n          })\n          .then(() => {\n            return Promise.resolve();\n          })\n          .catch(err => {\n            return Promise.reject(err);\n          });\n      },\n\n      reloadSessionCart: (type: string, force?: boolean, skipRedux?: boolean): Promise<CartModel> => {\n        if (force) {\n          promiser.flush(`loadCart${type}`);\n        }\n        if (type === ServiceStrings.carts.types.compare) {\n          return promiser.resolve(`loadCart${type}`, () => cvApi.shopping.GetCurrentCompareCart().then(r => {\n            dispatch(setCartByType({ type, cart: r.data }));\n            return r.data;\n          }));\n        }\n        return promiser.resolve(\n          `loadCart${type}`,\n          () => cvApi.shopping.GetCurrentCart({ TypeName: type, Validate: true })\n            .then(async r => {\n              if (\n                !r?.data?.ActionSucceeded\n                  && !r?.data?.Messages?.includes(\"ERROR! After validation, the cart was empty.\")\n              ) {\n                // Throw whatever error message happened if it wasn't the validator emptying the cart\n                // We specifically want to handle the validator emptying the cart a different way, so we can present\n                // the error in the UI through existing means (cart messages)\n                throw r?.data?.Messages ?? [ \"Unable to retrieve updated cart\" ];\n              }\n              const resultCopy = { ...r.data.Result };\n              if (inventoryFactory && resultCopy?.SalesItems?.length) {\n                resultCopy.SalesItems = await inventoryFactory.bulkFactoryAssign(r.data.Result.SalesItems, true);\n              }\n              const messages = (r?.data?.Messages ?? []).filter(\n                x => x !== \"ERROR! After validation, the cart was empty.\"\n              );\n              const cartValue = { ...resultCopy, Loading: false, Messages: messages, ActionSucceeded: r.data.ActionSucceeded };\n              if (!skipRedux) {\n                dispatch(setCartByType({ type, cart: cartValue }));\n              }\n              return cartValue;\n            })\n        );\n      },\n\n      reloadCart: (type: string, force?: boolean, skipRedux?: boolean): Promise<CartModel> => {\n        switch (type) {\n          case ServiceStrings.carts.types.wishList:\n          case ServiceStrings.carts.types.favorites:\n          case ServiceStrings.carts.types.samples:\n          case ServiceStrings.carts.types.notifyMe:\n          case ServiceStrings.carts.types.watchList: {\n            return factory.reloadStaticCart(type, force);\n          }\n          default: {\n            return factory.reloadSessionCart(type, force, skipRedux);\n          }\n        }\n      },\n\n      reloadShoppingLists: (force?: boolean): Promise<void> => {\n        const promiserKey = \"shoppingLists\";\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        return promiser\n          .resolve(\n            promiserKey,\n            () => cvApi.shopping.GetCurrentUserCartTypes({ IncludeNotCreated: false }).then(r => {\n              if (!r?.data) {\n                throw new Error(\"Unable to load shopping list types\");\n              }\n              dispatch(setShoppingLists(r.data?.Results));\n              return r.data?.Results;\n            })\n          )\n          .then();\n      },\n\n      reloadStaticCart: (type: string, force?: boolean): Promise<CartModel> => {\n        if (force) {\n          promiser.flush(`loadStaticCart${type}`);\n        }\n        return promiser\n          .resolve(`loadStaticCart${type}`, () => cvApi.shopping.GetCurrentStaticCart({ TypeName: type }).then(r => {\n            const cartValue = { ...r.data, Loading: false };\n            dispatch(setCartByType({ type, cart: cartValue }));\n            return cartValue;\n          }))\n          .then();\n      },\n\n      checkIfItemIsInStaticCart: (type: string, productID: number): Promise<boolean> => {\n        return factory\n          .reloadStaticCart(type)\n          .then(cart => {\n            return Boolean(cart?.SalesItems?.find(item => item.ProductID === productID));\n          })\n          .catch(() => false);\n      },\n\n      canProductBeAddedToStandardCart: (\n        product: ProductModel\n      ): {\n        addable: boolean;\n        errorKey?: string;\n      } => {\n        if (!product) {\n          return null;\n        }\n        if (product.TypeName.toLowerCase() === \"variant master\") {\n          return {\n            addable: false,\n            errorKey: \"ui.storefront.cart.errors.MasterCannotBeAdded\"\n          };\n        }\n        if (product.IsDiscontinued) {\n          return {\n            addable: false,\n            errorKey: \"ui.storefront.cart.errors.DiscontinuedCannotBeAdded\"\n          };\n        }\n        if (cefConfig.featureSet.inventory.enabled) {\n          const productInventory = product.readInventory();\n          if (productInventory.IsOutOfStock && !productInventory.AllowBackOrder) {\n            return {\n              addable: false,\n              errorKey: \"ui.storefront.carts.errors.NoStockOrBackOrderCannotBeAdded\"\n            };\n          }\n        }\n        return { addable: true };\n      },\n\n      swapItemInCart: async (newProduct: ProductModel, oldItemID: number, oldCart: CartModel): Promise<CartModel> => {\n        const type = ServiceStrings.carts.types.cart;\n        try {\n          const attributes = oldCart.SalesItems.find(x => x.ID === oldItemID)?.SerializableAttributes;\n          const attributesToSend: SerializableAttributesDictionary = Object.keys(attributes ?? {})\n            .reduce((prev, cur) => cur.startsWith(\"Price\") ? prev : { ...prev, [cur]: attributes[cur] }, {});\n          await factory.removeItemFromCart(type, oldItemID, null, 1, true);\n          const newCartItemRes = await factory.addItemToCart(\n            type,\n            newProduct.ID,\n            1,\n            newProduct,\n            attributesToSend,\n            true\n          );\n          const cartData = await factory.reloadSessionCart(type, true, true);\n          const copy = _.cloneDeep(cartData);\n          const itemIDsToIndexes = oldCart.SalesItems.reduce((obj, item, curIdx) => {\n            obj[item.ID] = curIdx;\n            return obj;\n          }, {} as { [id: number]: number });\n          const newItem = copy.SalesItems?.find(item => item.ID === newCartItemRes.Result);\n          const oldCartItems = _.cloneDeep(oldCart.SalesItems);\n          oldCartItems.splice(itemIDsToIndexes[oldItemID], 1, newItem);\n          copy.SalesItems = oldCartItems;\n          dispatch(setCartByType({ type, cart: copy }));\n          return copy;\n        } catch (error) {\n          console.error(\"Error occurred while swapping item pack size:\", error);\n          throw error;\n        }\n      },\n\n      checkRestrictedRegions: async (productID: number): Promise<CEFActionResponse> => {\n        try {\n          const result = await cvApi.categories.CheckForCategoryRegionRestrictionsForCurrenUserStateOfResidence({\n            ProductID: productID\n          });\n          return result.data;\n        } catch (error) {\n          console.error(\"Error occurred while checking restricted regions:\", error);\n          throw error;\n        }\n      }\n    };\n    setCartFactory(factory);\n  }, [ cefConfig, inventoryFactory ]);\n\n  return cartFactory;\n};\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { CartModel, CartTypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RootState } from \"src/_redux/store\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\ntype ReduxCart = CartModel & { Loading?: boolean, Messages?: string[] };\n\ninterface IReduxCarts {\n  [key: string]: ReduxCart | null;\n}\n\ninterface ICartSliceState {\n  carts: IReduxCarts;\n  shoppingLists: CartTypeModel[];\n}\n\nexport const cartSlice = createSlice({\n  name: \"carts\",\n  initialState: {\n    carts: {},\n    shoppingLists: [],\n  } as ICartSliceState,\n  reducers: {\n    setCartByType: (state, action: PayloadAction<{ type: string, cart: ReduxCart }>) => {\n      state.carts[action.payload.type as keyof IReduxCarts] = action.payload.cart;\n    },\n\n    setShoppingLists: (state, action: PayloadAction<CartTypeModel[]>) => {\n      state.shoppingLists = action.payload;\n    }\n  }\n});\n\nexport const { setCartByType, setShoppingLists } = cartSlice.actions;\n\nexport const useCart = (type: string, condition: boolean = true): ReduxCart => {\n  const cart = useSelector((state: RootState) => state.carts.carts[type]);\n  const cartFactory = useCartFactory();\n\n  useEffect(() => {\n    if (!cart?.Loading && cartFactory !== null && type && condition) {\n      cartFactory.reloadCart(type);\n    }\n  }, [ cart, cartFactory, condition ]);\n\n  return cart;\n};\n\nexport const useAllCarts = (): IReduxCarts => useSelector((state: RootState) => state.carts.carts);\n\nexport const useShoppingLists = (): CartTypeModel[] => {\n  const list = useSelector((state: RootState) => state.carts.shoppingLists);\n  const currentUser = useCurrentUser();\n  const cartFactory = useCartFactory();\n\n  useEffect(() => {\n    if (currentUser?.ID > 0 && cartFactory) {\n      cartFactory.reloadShoppingLists();\n    }\n  }, [ currentUser, cartFactory ]);\n\n  return list;\n};\n\nexport default cartSlice.reducer;\n","import { Fragment, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Accordion, Button, ListGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ICompareFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\nimport { CatalogFilter } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilter\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\n\nexport const CompareFilter = (props: ICompareFilterProps): JSX.Element => {\n  const compareCart = useCart(ServiceStrings.carts.types.compare);\n  const compareCartItems = compareCart?.SalesItems;\n  const { expandedFilterName, setExpandedFilterName } = props;\n\n  const [ showClearCompareCartModal, setShowClearCompareCartModal ] = useState(false);\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const history = useHistory();\n  const cartFactory = useCartFactory();\n\n  function removeAllItemsFromCompareCart(): void {\n    setRunning();\n    cartFactory\n      .clearCompare()\n      .then(() => {\n        setShowClearCompareCartModal(false);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to remove all items from compare cart\");\n      });\n  }\n\n  function removeItemFromCompareCart(productID: number): void {\n    setRunning();\n    cartFactory\n      .removeFromCompare(productID)\n      .then(() => {\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  return (\n    <Fragment>\n      <ConfirmationModal\n        title=\"Clear Compare Cart\"\n        show={showClearCompareCartModal}\n        onConfirm={removeAllItemsFromCompareCart}\n        onCancel={() => setShowClearCompareCartModal(false)}>\n        <span className=\"d-block pb-1\">{t(\"ui.storefront.cart.AreYouSureYouWantToClearTheCart\")}</span>\n      </ConfirmationModal>\n      <CatalogFilter\n        expandedFilterName={expandedFilterName}\n        setExpandedFilterName={setExpandedFilterName}\n        title=\"Compare\"\n        icon={\"fal fa-fw fa-balance-scale\"}\n        customBodyComponent={\n          viewState.running ? (\n            <LoadingWidget />\n          ) : (\n            <>\n              <ListGroup\n                as=\"ul\"\n                className=\"collapse-filter list-unstyled mb-0\">\n                {compareCartItems && compareCartItems.length\n                  ? compareCartItems.map((salesItem): JSX.Element => {\n                    const { ProductID, ProductName, ProductSeoUrl } = salesItem;\n                    return (\n                      <Accordion.Item\n                        key={ProductID}\n                        eventKey=\"compare-collapse\"\n                        className=\"d-flex align-items-start bg-light border-0\">\n                        <Button\n                          variant=\"light\"\n                          className=\" m-0 p-0 me-1\"\n                          onClick={() => removeItemFromCompareCart(ProductID)}>\n                          <i className=\"far fa-fw fa-times text-danger small\" />\n                        </Button>\n                        <a\n                          href={corsLink(cefConfig, `/${ProductSeoUrl}`, \"productDetail\")}\n                          className=\"product-name\">\n                          <span>{ProductName}</span>\n                        </a>\n                      </Accordion.Item>\n                    );\n                  })\n                  : t(\"ui.storefront.product.widgets.compare.noItemsHaveBeenSelected\")}\n              </ListGroup>\n              <ListGroup\n                as=\"ul\"\n                className=\"collapse-filter list-unstyled mb-0 bg-light\">\n                <Accordion.Item\n                  eventKey=\"compare-collapse\"\n                  className=\"filter-item mt-3 d-flex justify-content-end border-0 bg-light\">\n                  <Button\n                    variant=\"primary\"\n                    size=\"sm\"\n                    className=\"ms-1\"\n                    disabled={(compareCartItems?.length ?? 0) < 1}\n                    onClick={() => setShowClearCompareCartModal(true)}>\n                    {t(\"ui.storefront.common.Clear\")}\n                  </Button>\n                  <Button\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    className=\"ms-1\"\n                    disabled={(compareCartItems?.length ?? 0) < 2}\n                    onClick={() => history.push(\"/catalog/compare\")}>\n                    {t(\"ui.storefront.common.Compare\")}\n                  </Button>\n                </Accordion.Item>\n              </ListGroup>\n            </>\n          )\n        }\n      />\n    </Fragment>\n  );\n};\n","import { IPriceRangesFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\nimport { CatalogFilter } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilter\";\n\nexport const PriceRangesFilter = (\n  props: IPriceRangesFilterProps\n): JSX.Element => {\n  const {\n    expandedFilterName,\n    setExpandedFilterName,\n    pricingRanges,\n    onPricingRangeClicked\n  } = props;\n\n  if (!pricingRanges) {\n    return null;\n  }\n\n  return <CatalogFilter\n    expandedFilterName={expandedFilterName}\n    setExpandedFilterName={setExpandedFilterName}\n    title={\"Price Range\"}\n    icon={\"fal fa-fw fa-dollar-sign\"}\n    list={pricingRanges.map(range => ({\n      label: range.Label,\n      count: range.DocCount\n    }))}\n    onListItemClicked={listItem => onPricingRangeClicked([ listItem.label ])}\n  />;\n};\n","/**\n * @file _api/cvApi._DtoClasses.ts\n * @author Copyright (c) 2021-2024 clarity-ventures.com. All rights reserved.\n * @desc Endpoints generated based on C# routes.\n * @remarks This file was auto-generated by cvApi.tt in 07.Portals/Storefront/React/src/_api/\n */\nimport {\n\tAmARelationshipTableModel,\n\tHaveJsonAttributesBaseModel,\n\tHaveATypeModel,\n\tPagedResultsBase,\n\tAmARelationshipTableNameableBaseModel,\n\tAmAStoredFileRelationshipTableModel,\n\tHaveSeoBaseModel,\n\tIImageBaseModel,\n\tAmFilterableByAccountBaseModel,\n\tHaveNotesBaseModel,\n\tHaveImagesBaseModel,\n\tHaveStoredFilesBaseModel,\n\tAmFilterableByBrandsBaseModel,\n\tAmFilterableByFranchisesBaseModel,\n\tAmFilterableByProductsBaseModel,\n\tAmFilterableByStoresBaseModel,\n\tAmFilterableByUsersBaseModel,\n\tAmFilterableByVendorsBaseModel,\n\tHaveAStatusModel,\n\tAmFilterableByBrandBaseSearchModel,\n\tAmFilterableByFranchiseBaseSearchModel,\n\tAmFilterableByProductBaseSearchModel,\n\tAmFilterableByStoreBaseSearchModel,\n\tAmFilterableByUserBaseSearchModel,\n\tAmFilterableByVendorBaseSearchModel,\n\tHaveAStatusSearchModel,\n\tHaveATypeSearchModel,\n\tAmFilterableByAccountsBaseModel,\n\tAppliedDiscountBaseModel,\n\tHaveANullableContactBaseModel,\n\tHaveAContactBaseSearchModel,\n\tSearchViewModelBase,\n\tAmFilterableByUserBaseModel,\n\tAmFilterableByBrandBaseModel,\n\tAmFilterableByCategoriesBaseModel,\n\tHaveOrderMinimumsBaseModel,\n\tHaveFreeShippingMinimumsBaseModel,\n\tAmFilterableByAccountBaseSearchModel,\n\tAmFilterableByCategoryBaseSearchModel,\n\tSalesCollectionBaseModelT,\n\tHaveAStateModel,\n\tAmFilterableByNullableAccountBaseModel,\n\tAmFilterableByNullableBrandBaseModel,\n\tAmFilterableByNullableFranchiseBaseModel,\n\tAmFilterableByNullableStoreBaseModel,\n\tAmFilterableByNullableUserBaseModel,\n\tAmFilterableByCategoryBaseModel,\n\tHaveAParentBaseModel,\n\tHaveRequiresRolesBaseModel,\n\tAmFilterableByManufacturersBaseModel,\n\tAmFilterableByFranchiseBaseModel,\n\tAmFilterableByManufacturerBaseSearchModel,\n\tAmFilterableByProductBaseModel,\n\tHaveDimensionsBaseModel,\n\tHaveNullableDimensionsBaseModel,\n\tHaveAStateSearchModel,\n\tDictionary,\n\tHaveAContactBaseModel,\n\tGuid,\n\tKeyValuePair,\n\tSalesItemBaseModel,\n\tIAuthTokens,\n} from \"./cvApi.shared\";\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface AccountAssociationModel extends AmARelationshipTableModel<AccountModel>, HaveATypeModel<TypeModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface AccountAssociationTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableNameableBaseModel<ContactModel>}\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface AccountContactModel extends AmARelationshipTableNameableBaseModel<ContactModel>, AmARelationshipTableModel<ContactModel> {\n\tMasterName?: string;\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n\tIsBilling?: boolean;\n\tIsPrimary?: boolean;\n\tTransmittedToERP?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CurrencyModel>}\n * @public\n */\nexport interface AccountCurrencyModel extends AmARelationshipTableModel<CurrencyModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsPrimary?: boolean;\n\tOverrideUnicodeSymbolValue?: number;\n\tOverrideDecimalPlaceAccuracy?: number;\n\tOverrideUseSeparator?: boolean;\n\tCustomName?: string;\n\tCustomTranslationKey?: string;\n\tOverrideHtmlCharacterCode?: string;\n\tOverrideHtmlDecimalCharacterCode?: string;\n\tOverrideHtmlSeparatorCharacterCode?: string;\n\tOverrideRawCharacter?: string;\n\tOverrideRawDecimalCharacter?: string;\n\tOverrideRawSeparatorCharacter?: string;\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface AccountFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link AmFilterableByAccountBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface AccountImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByAccountBaseModel, HaveATypeModel<TypeModel> {\n\tMasterName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveImagesBaseModel<AccountImageModel>}\n * @see {@link HaveStoredFilesBaseModel<AccountFileModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandAccountModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseAccountModel>}\n * @see {@link AmFilterableByProductsBaseModel<AccountProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreAccountModel>}\n * @see {@link AmFilterableByUsersBaseModel<UserModel>}\n * @see {@link AmFilterableByVendorsBaseModel<VendorAccountModel>}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\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> {\n\tAccountAssociations?: Array<AccountAssociationModel>;\n\tPrescriptionsReceivedByPatient?: Array<PrescriptionModel>;\n\tIsOnHold?: boolean;\n\tIsTaxable?: boolean;\n\tAccountContacts?: Array<AccountContactModel>;\n\tAccountCurrencies?: Array<AccountCurrencyModel>;\n\tAccountPricePoints?: Array<AccountPricePointModel>;\n\tStatesOfLicensure?: Array<DoctorRegionModel>;\n\tCredit?: number;\n\tCreditCurrencyID?: number;\n\tCreditCurrencyKey?: string;\n\tCreditCurrencyName?: string;\n\tCreditCurrency?: CurrencyModel;\n\tDEANumber?: string;\n\tLicenseNumber?: string;\n\tNPINumber?: string;\n\tSageID?: string;\n\tTaxEntityUseCode?: string;\n\tTaxExemptionNo?: string;\n\tToken?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<AccountModel>}\n * @public\n */\nexport interface AccountPagedResults extends PagedResultsBase<AccountModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<PricePointModel>}\n * @public\n */\nexport interface AccountPricePointModel extends AmARelationshipTableModel<PricePointModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tSlaveDisplayName?: string;\n\tSlaveTranslationKey?: string;\n\tSlaveSortOrder?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface AccountProductModel extends AmARelationshipTableModel<ProductModel>, HaveATypeModel<TypeModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link AmFilterableByVendorBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface AccountSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tAccessibleFromAccountID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tIsOnHold?: boolean;\n\tIsTaxable?: boolean;\n\tMinCredit?: number;\n\tMaxCredit?: number;\n\tMatchCredit?: number;\n\tMatchCreditIncludeNull?: boolean;\n\tCreditCurrencyID?: number;\n\tCreditCurrencyIDIncludeNull?: boolean;\n\tDEANumber?: string;\n\tDEANumberStrict?: boolean;\n\tDEANumberIncludeNull?: boolean;\n\tLicenseNumber?: string;\n\tLicenseNumberStrict?: boolean;\n\tLicenseNumberIncludeNull?: boolean;\n\tNPINumber?: string;\n\tNPINumberStrict?: boolean;\n\tNPINumberIncludeNull?: boolean;\n\tSageID?: string;\n\tSageIDStrict?: boolean;\n\tSageIDIncludeNull?: boolean;\n\tTaxEntityUseCode?: string;\n\tTaxEntityUseCodeStrict?: boolean;\n\tTaxEntityUseCodeIncludeNull?: boolean;\n\tTaxExemptionNo?: string;\n\tTaxExemptionNoStrict?: boolean;\n\tTaxExemptionNoIncludeNull?: boolean;\n\tToken?: string;\n\tTokenStrict?: boolean;\n\tTokenIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface AccountStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface AccountTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface AccountWebhookReturn {\n\taccount_id?: number; // Name format overridden\n\tcompany?: string; // Name format overridden\n\taddress?: string; // Name format overridden\n\tcity?: string; // Name format overridden\n\tstate?: string; // Name format overridden\n\tpostal_code?: string; // Name format overridden\n\tcountry?: string; // Name format overridden\n\tphone?: string; // Name format overridden\n\taccount_type?: string; // Name format overridden\n\turl?: string; // Name format overridden\n\tcompany_type?: string; // Name format overridden\n\tinc_country?: string; // Name format overridden\n\tinc_state?: string; // Name format overridden\n\tcreated?: Date; // Name format overridden\n\turi?: string; // Name format overridden\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @public\n */\nexport interface AdAccountModel extends AmARelationshipTableModel<AccountModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<BrandModel>}\n * @public\n */\nexport interface AdBrandModel extends AmARelationshipTableModel<BrandModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface AddressModel extends BaseModel {\n\tCountryID?: number;\n\tCountryKey?: string;\n\tCountryName?: string;\n\tCountryCode?: string;\n\tCountry?: CountryModel;\n\tLatitude?: number;\n\tLongitude?: number;\n\tRegionID?: number;\n\tRegionKey?: string;\n\tRegionName?: string;\n\tRegionCode?: string;\n\tRegion?: RegionModel;\n\tCity?: string;\n\tCompany?: string;\n\tCountryCustom?: string;\n\tPostalCode?: string;\n\tRegionCustom?: string;\n\tStreet1?: string;\n\tStreet2?: string;\n\tStreet3?: string;\n}\n\n/**\n * @public\n */\nexport interface AddressValidationResultModel {\n\tAccountContactID?: number;\n\tContactID?: number;\n\tAddressID?: number;\n\tIsValid: boolean;\n\tMessage?: string;\n\tSourceAddress?: AddressModel;\n\tMergedAddress?: AddressModel;\n\tValidatedAddress?: AddressModel;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<FranchiseModel>}\n * @public\n */\nexport interface AdFranchiseModel extends AmARelationshipTableModel<FranchiseModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface AdImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveImagesBaseModel<AdImageModel>}\n * @see {@link AmFilterableByAccountsBaseModel<AdAccountModel>}\n * @see {@link AmFilterableByBrandsBaseModel<AdBrandModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<AdFranchiseModel>}\n * @see {@link AmFilterableByStoresBaseModel<AdStoreModel>}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface AdModel extends NameableBaseModel, HaveImagesBaseModel<AdImageModel>, AmFilterableByAccountsBaseModel<AdAccountModel>, AmFilterableByBrandsBaseModel<AdBrandModel>, AmFilterableByFranchisesBaseModel<AdFranchiseModel>, AmFilterableByStoresBaseModel<AdStoreModel>, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tImpressionCounterID?: number;\n\tImpressionCounterKey?: string;\n\tImpressionCounter?: CounterModel;\n\tClickCounterID?: number;\n\tClickCounterKey?: string;\n\tClickCounter?: CounterModel;\n\tEndDate?: Date;\n\tExpirationDate?: Date;\n\tStartDate?: Date;\n\tWeight?: number;\n\tAdZones?: Array<AdZoneModel>;\n\tCampaignAds?: Array<CampaignAdModel>;\n\tCaption?: string;\n\tTargetURL?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<StoreModel>}\n * @public\n */\nexport interface AdStoreModel extends AmARelationshipTableModel<StoreModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface AdZoneAccessModel extends NameableBaseModel {\n\tExpired: boolean;\n\tUniqueAdLimitReached: boolean;\n\tImpressionLimitReached: boolean;\n\tClickLimitReached: boolean;\n\tCanAddAds: boolean;\n\tImpressionCounterID?: number;\n\tImpressionCounterKey?: string;\n\tImpressionCounter?: CounterModel;\n\tClickCounterID?: number;\n\tClickCounterKey?: string;\n\tClickCounter?: CounterModel;\n\tEndDate?: Date;\n\tStartDate?: Date;\n\tAdZones?: Array<AdZoneModel>;\n\tClickLimit?: number;\n\tImpressionLimit?: number;\n\tUniqueAdLimit?: number;\n\tSubscriptionID?: number;\n\tSubscriptionKey?: string;\n\tSubscriptionName?: string;\n\tSubscription?: SubscriptionModel;\n\tZoneID?: number;\n\tZoneKey?: string;\n\tZoneName?: string;\n\tZone?: ZoneModel;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ZoneModel>}\n * @public\n */\nexport interface AdZoneModel extends AmARelationshipTableModel<ZoneModel> {\n\tImpressionCounterID?: number;\n\tImpressionCounterKey?: string;\n\tImpressionCounter?: CounterModel;\n\tClickCounterID?: number;\n\tClickCounterKey?: string;\n\tClickCounter?: CounterModel;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tAdZoneAccessID?: number;\n\tAdZoneAccessKey?: string;\n\tAdZoneAccessName?: string;\n\tAdZoneAccess?: AdZoneAccessModel;\n}\n\n/**\n * @see {@link PagedResultsBase<AdZoneModel>}\n * @public\n */\nexport interface AdZonePagedResults extends PagedResultsBase<AdZoneModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @public\n */\nexport interface AdZoneSearchModel extends AmARelationshipTableBaseSearchModel {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tAdZoneAccessID?: number;\n\tAdZoneAccessIDIncludeNull?: boolean;\n\tClickCounterID?: number;\n\tClickCounterIDIncludeNull?: boolean;\n\tImpressionCounterID?: number;\n\tImpressionCounterIDIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AggregateRangeBase}\n * @public\n */\nexport interface AggregatePricingRange extends AggregateRangeBase {\n}\n\n/**\n * @public\n */\nexport interface AggregateRangeBase {\n\tFrom?: number;\n\tTo?: number;\n\tLabel?: string;\n\tDocCount?: number;\n}\n\n/**\n * @see {@link AggregateRangeBase}\n * @public\n */\nexport interface AggregateRatingRange extends AggregateRangeBase {\n}\n\n/**\n * @public\n */\nexport interface AggregateTree {\n\tKey?: string;\n\tDocCount?: number;\n\tDocCountErrorUpperBound?: number;\n\tHasChildren: boolean;\n\tChildren?: Array<AggregateTree>;\n\tSumOtherDocCount?: number;\n\tOriginalDocCount?: number;\n\tMergedDocCount?: number;\n\tSuspectedThisLevelDocCount?: number;\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @public\n */\nexport interface AmARelationshipTableBaseSearchModel extends BaseSearchModel {\n\tMasterID?: number;\n\tMasterIDs?: Array<number>;\n\tMasterKey?: string;\n\tSlaveID?: number;\n\tSlaveIDs?: Array<number>;\n\tSlaveKey?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableNameableBaseModel<StoredFileModel>}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface AmAStoredFileRelationshipTableBaseModel extends AmARelationshipTableNameableBaseModel<StoredFileModel>, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface AnswerModel extends BaseModel {\n\tOptionID?: number;\n\tOptionKey?: string;\n\tOption?: QuestionOptionModel;\n\tQuestionID?: number;\n\tQuestionKey?: string;\n\tQuestion?: QuestionModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUserUsername?: string;\n\tUser?: UserModel;\n\tAdditionalInformation?: string;\n}\n\n/**\n * @public\n */\nexport interface ApiKeyWebhookReturn {\n\tapi_key?: string; // Name format overridden\n\taccount_id?: string; // Name format overridden\n\tuser_id?: string; // Name format overridden\n\twebhook?: string; // Name format overridden\n\tcreated?: Date; // Name format overridden\n\turi?: string; // Name format overridden\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedCartDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedCartItemDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedPurchaseOrderDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedPurchaseOrderItemDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesInvoiceDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesInvoiceItemDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesOrderDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesOrderItemDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesQuoteDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesQuoteItemDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesReturnDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSalesReturnItemDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSampleRequestDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link AppliedDiscountBaseModel}\n * @public\n */\nexport interface AppliedSampleRequestItemDiscountModel extends AppliedDiscountBaseModel {\n\tDiscountIsAutoApplied: boolean;\n\tTargetApplicationsUsed?: number;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface AppointmentModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tCalendars?: Array<CalendarAppointmentModel>;\n\tAppointmentEnd?: Date;\n\tAppointmentStart?: Date;\n\tDoctorAccountID?: number;\n\tDoctorAccountKey?: string;\n\tDoctorAccountName?: string;\n\tDoctorAccount?: AccountModel;\n\tPatientAccountID?: number;\n\tPatientAccountKey?: string;\n\tPatientAccountName?: string;\n\tPatientAccount?: AccountModel;\n\tSalesOrderID?: number;\n\tSalesOrderKey?: string;\n\tSalesOrder?: SalesOrderModel;\n\tGoogleMeetURL?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<AppointmentModel>}\n * @public\n */\nexport interface AppointmentPagedResults extends PagedResultsBase<AppointmentModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface AppointmentSearchModel extends NameableBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tFilterStart?: Date;\n\tFilterEnd?: Date;\n\tCalendarIDs?: Array<number>;\n\tMinAppointmentEnd?: Date;\n\tMaxAppointmentEnd?: Date;\n\tMatchAppointmentEnd?: Date;\n\tMatchAppointmentEndIncludeNull?: boolean;\n\tMinAppointmentStart?: Date;\n\tMaxAppointmentStart?: Date;\n\tMatchAppointmentStart?: Date;\n\tMatchAppointmentStartIncludeNull?: boolean;\n\tDoctorAccountID?: number;\n\tDoctorAccountIDIncludeNull?: boolean;\n\tPatientAccountID?: number;\n\tPatientAccountIDIncludeNull?: boolean;\n\tSalesOrderID?: number;\n\tSalesOrderIDIncludeNull?: boolean;\n\tGoogleMeetURL?: string;\n\tGoogleMeetURLStrict?: boolean;\n\tGoogleMeetURLIncludeNull?: boolean;\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface AttributeGroupModel extends TypableBaseModel {\n}\n\n/**\n * @see {@link PagedResultsBase<AttributeGroupModel>}\n * @public\n */\nexport interface AttributeGroupPagedResults extends PagedResultsBase<AttributeGroupModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface AttributeGroupSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface AttributeTabModel extends TypableBaseModel {\n}\n\n/**\n * @see {@link PagedResultsBase<AttributeTabModel>}\n * @public\n */\nexport interface AttributeTabPagedResults extends PagedResultsBase<AttributeTabModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface AttributeTabSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface AttributeTypeModel extends TypableBaseModel {\n\tGeneralAttributes?: Array<GeneralAttributeModel>;\n}\n\n/**\n * @see {@link PagedResultsBase<AttributeTypeModel>}\n * @public\n */\nexport interface AttributeTypePagedResults extends PagedResultsBase<AttributeTypeModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface AttributeTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface AuctionCatalogSearchForm extends SearchFormBase {\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface AuctionIndexableModel extends IndexableModelBase {\n\tBidCount: number;\n\tClosesAt?: Date;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByBrandsBaseModel<BrandAuctionModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseAuctionModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreAuctionModel>}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveANullableContactBaseModel}\n * @public\n */\nexport interface AuctionModel extends NameableBaseModel, AmFilterableByBrandsBaseModel<BrandAuctionModel>, AmFilterableByFranchisesBaseModel<FranchiseAuctionModel>, AmFilterableByStoresBaseModel<StoreAuctionModel>, HaveAStatusModel, HaveATypeModel<TypeModel>, HaveANullableContactBaseModel {\n\tAccountID?: number;\n\tAccountKey?: string;\n\tAccountName?: string;\n\tAccount?: AccountModel;\n\tClosesAt?: Date;\n\tFee?: number;\n\tIncrementProfileID?: number;\n\tIncrementProfileKey?: string;\n\tIncrementProfileName?: string;\n\tIncrementProfile?: IncrementProfileModel;\n\tOpensAt?: Date;\n}\n\n/**\n * @see {@link PagedResultsBase<AuctionModel>}\n * @public\n */\nexport interface AuctionPagedResults extends PagedResultsBase<AuctionModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @see {@link HaveAContactBaseSearchModel}\n * @public\n */\nexport interface AuctionSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\n\tUserID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tContactIDIncludeNull?: boolean;\n\tContactKeyStrict?: boolean;\n\tContactKeyIncludeNull?: boolean;\n\tContactFirstNameStrict?: boolean;\n\tContactFirstNameIncludeNull?: boolean;\n\tContactLastNameStrict?: boolean;\n\tContactLastNameIncludeNull?: boolean;\n\tContactPhoneStrict?: boolean;\n\tContactPhoneIncludeNull?: boolean;\n\tContactFaxStrict?: boolean;\n\tContactFaxIncludeNull?: boolean;\n\tContactEmailStrict?: boolean;\n\tContactEmailIncludeNull?: boolean;\n\tAccountID?: number;\n\tMinClosesAt?: Date;\n\tMaxClosesAt?: Date;\n\tMatchClosesAt?: Date;\n\tMatchClosesAtIncludeNull?: boolean;\n\tMinFee?: number;\n\tMaxFee?: number;\n\tMatchFee?: number;\n\tMatchFeeIncludeNull?: boolean;\n\tIncrementProfileID?: number;\n\tIncrementProfileIDIncludeNull?: boolean;\n\tMinOpensAt?: Date;\n\tMaxOpensAt?: Date;\n\tMatchOpensAt?: Date;\n\tMatchOpensAtIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<AuctionCatalogSearchForm,AuctionIndexableModel>}\n * @public\n */\nexport interface AuctionSearchViewModel extends SearchViewModelBase<AuctionCatalogSearchForm,AuctionIndexableModel> {\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface AuctionSuggestResult extends SuggestResultBase {\n}\n\n/**\n * @public\n */\nexport interface AuthenticateResponse {\n\tUserId?: string;\n\tSessionId?: string;\n\tUserName?: string;\n\tDisplayName?: string;\n\tReferrerUrl?: string;\n\tBearerToken?: string;\n\tRefreshToken?: string;\n\tResponseStatus?: ResponseStatus;\n\tMeta?: Dictionary<string>;\n}\n\n/**\n * @public\n */\nexport interface AuthUserSession {\n\tReferrerUrl?: string;\n\tId?: string;\n\tUserAuthId?: string;\n\tUserAuthName?: string;\n\tUserName?: string;\n\tTwitterUserId?: string;\n\tTwitterScreenName?: string;\n\tFacebookUserId?: string;\n\tFacebookUserName?: string;\n\tFirstName?: string;\n\tLastName?: string;\n\tDisplayName?: string;\n\tCompany?: string;\n\tEmail?: string;\n\tPrimaryEmail?: string;\n\tPhoneNumber?: string;\n\tBirthDate?: Date;\n\tBirthDateRaw?: string;\n\tAddress?: string;\n\tAddress2?: string;\n\tCity?: string;\n\tState?: string;\n\tCountry?: string;\n\tCulture?: string;\n\tFullName?: string;\n\tGender?: string;\n\tLanguage?: string;\n\tMailAddress?: string;\n\tNickname?: string;\n\tPostalCode?: string;\n\tTimeZone?: string;\n\tRequestTokenSecret?: string;\n\tCreatedAt: Date;\n\tLastModified: Date;\n\tRoles?: Array<string>;\n\tPermissions?: Array<string>;\n\tIsAuthenticated: boolean;\n\tFromToken: boolean;\n\tProfileUrl?: string;\n\tSequence?: string;\n\tTag: number;\n\tAuthProvider?: string;\n\tProviderOAuthAccess?: Array<IAuthTokens>;\n\tMeta?: Dictionary<string>;\n}\n\n/**\n * @public\n */\nexport interface AvailableOrdersModel {\n\tPatient?: ContactModel;\n\tSalesOrder?: SalesOrderModel;\n\tProducts?: Array<ProductModel>;\n\tStateOfResidence?: RegionModel;\n\tWhenToContact?: string;\n\tTimeOfDay?: string;\n\tPreferredPhone?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<AvailableOrdersModel>}\n * @public\n */\nexport interface AvailableOrdersPagedResults extends PagedResultsBase<AvailableOrdersModel> {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface BadgeImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveImagesBaseModel<BadgeImageModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface BadgeModel extends NameableBaseModel, HaveImagesBaseModel<BadgeImageModel>, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link HaveJsonAttributesBaseModel}\n * @public\n */\nexport interface BaseModel extends HaveJsonAttributesBaseModel {\n\tID: number;\n\tCustomKey?: string;\n\tActive: boolean;\n\tCreatedDate: Date;\n\tUpdatedDate?: Date;\n\tHash?: number;\n}\n\n/**\n * @public\n */\nexport interface BaseSearchModel {\n\tID?: number;\n\tIDs?: Array<number>;\n\tExcludedID?: number;\n\tNotIDs?: Array<number>;\n\tActive?: boolean;\n\tCustomKey?: string;\n\tCustomKeyStrict?: boolean;\n\tCustomKeyIncludeNull?: boolean;\n\tCustomKeys?: Array<string>;\n\tCustomKeysStrict?: boolean;\n\tIDOrCustomKey?: string;\n\tModifiedSince?: Date;\n\tMinUpdatedOrCreatedDate?: Date;\n\tMaxUpdatedOrCreatedDate?: Date;\n\tMinCreatedDate?: Date;\n\tMaxCreatedDate?: Date;\n\tPaging?: Paging;\n\tGroupings?: Array<Grouping>;\n\tSorts?: Array<Sort>;\n\tJsonAttributes?: Dictionary<Array<string>>;\n\tAsListing?: boolean;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link AmFilterableByUserBaseModel}\n * @public\n */\nexport interface BidModel extends BaseModel, AmFilterableByUserBaseModel {\n\tUserUsername?: string;\n\tCurrentBid?: number;\n\tLotID?: number;\n\tLotKey?: string;\n\tLotName?: string;\n\tLot?: LotModel;\n\tMaxBid?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<BidModel>}\n * @public\n */\nexport interface BidPagedResults extends PagedResultsBase<BidModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @public\n */\nexport interface BidSearchModel extends BaseSearchModel, AmFilterableByUserBaseSearchModel {\n\tMinCurrentBid?: number;\n\tMaxCurrentBid?: number;\n\tMatchCurrentBid?: number;\n\tMatchCurrentBidIncludeNull?: boolean;\n\tLotID?: number;\n\tLotIDIncludeNull?: boolean;\n\tMinMaxBid?: number;\n\tMaxMaxBid?: number;\n\tMatchMaxBid?: number;\n\tMatchMaxBidIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @public\n */\nexport interface BrandAccountModel extends AmARelationshipTableModel<AccountModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n\tPricePointID?: number;\n\tPricePointKey?: string;\n\tPricePointName?: string;\n\tPricePointDisplayName?: string;\n\tPricePointTranslationKey?: string;\n\tPricePointSortOrder?: number;\n\tPricePoint?: PricePointModel;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AuctionModel>}\n * @public\n */\nexport interface BrandAuctionModel extends AmARelationshipTableModel<AuctionModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CategoryModel>}\n * @public\n */\nexport interface BrandCategoryModel extends AmARelationshipTableModel<CategoryModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CurrencyModel>}\n * @public\n */\nexport interface BrandCurrencyModel extends AmARelationshipTableModel<CurrencyModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsPrimary?: boolean;\n\tOverrideUnicodeSymbolValue?: number;\n\tOverrideDecimalPlaceAccuracy?: number;\n\tOverrideUseSeparator?: boolean;\n\tCustomName?: string;\n\tCustomTranslationKey?: string;\n\tOverrideHtmlCharacterCode?: string;\n\tOverrideHtmlDecimalCharacterCode?: string;\n\tOverrideHtmlSeparatorCharacterCode?: string;\n\tOverrideRawCharacter?: string;\n\tOverrideRawDecimalCharacter?: string;\n\tOverrideRawSeparatorCharacter?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<BrandCurrencyModel>}\n * @public\n */\nexport interface BrandCurrencyPagedResults extends PagedResultsBase<BrandCurrencyModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @public\n */\nexport interface BrandCurrencySearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByBrandBaseSearchModel {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tIsPrimary?: boolean;\n\tMinOverrideUnicodeSymbolValue?: number;\n\tMaxOverrideUnicodeSymbolValue?: number;\n\tMatchOverrideUnicodeSymbolValue?: number;\n\tMinOverrideDecimalPlaceAccuracy?: number;\n\tMaxOverrideDecimalPlaceAccuracy?: number;\n\tMatchOverrideDecimalPlaceAccuracy?: number;\n\tMatchOverrideDecimalPlaceAccuracyIncludeNull?: boolean;\n\tOverrideUseSeparator?: boolean;\n\tOverrideUseSeparatorIncludeNull?: boolean;\n\tCustomName?: string;\n\tCustomNameStrict?: boolean;\n\tCustomNameIncludeNull?: boolean;\n\tCustomTranslationKey?: string;\n\tCustomTranslationKeyStrict?: boolean;\n\tCustomTranslationKeyIncludeNull?: boolean;\n\tOverrideHtmlCharacterCode?: string;\n\tOverrideHtmlCharacterCodeStrict?: boolean;\n\tOverrideHtmlCharacterCodeIncludeNull?: boolean;\n\tOverrideHtmlDecimalCharacterCode?: string;\n\tOverrideHtmlDecimalCharacterCodeStrict?: boolean;\n\tOverrideHtmlDecimalCharacterCodeIncludeNull?: boolean;\n\tOverrideHtmlSeparatorCharacterCode?: string;\n\tOverrideHtmlSeparatorCharacterCodeStrict?: boolean;\n\tOverrideHtmlSeparatorCharacterCodeIncludeNull?: boolean;\n\tOverrideRawCharacter?: string;\n\tOverrideRawCharacterStrict?: boolean;\n\tOverrideRawCharacterIncludeNull?: boolean;\n\tOverrideRawDecimalCharacter?: string;\n\tOverrideRawDecimalCharacterStrict?: boolean;\n\tOverrideRawDecimalCharacterIncludeNull?: boolean;\n\tOverrideRawSeparatorCharacter?: string;\n\tOverrideRawSeparatorCharacterStrict?: boolean;\n\tOverrideRawSeparatorCharacterIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<FranchiseModel>}\n * @public\n */\nexport interface BrandFranchiseModel extends AmARelationshipTableModel<FranchiseModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link AmFilterableByBrandBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface BrandImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByBrandBaseModel, HaveATypeModel<TypeModel> {\n\tMasterName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<InventoryLocationModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface BrandInventoryLocationModel extends AmARelationshipTableModel<InventoryLocationModel>, HaveATypeModel<TypeModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<LanguageModel>}\n * @public\n */\nexport interface BrandLanguageModel extends AmARelationshipTableModel<LanguageModel> {\n\tMasterName?: string;\n\tOverrideISO639_1_2002?: string;\n\tOverrideISO639_2_1998?: string;\n\tOverrideISO639_3_2007?: string;\n\tOverrideISO639_5_2008?: string;\n\tOverrideLocale?: string;\n\tOverrideUnicodeName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<BrandLanguageModel>}\n * @public\n */\nexport interface BrandLanguagePagedResults extends PagedResultsBase<BrandLanguageModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @public\n */\nexport interface BrandLanguageSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByBrandBaseSearchModel {\n\tMasterName?: string;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tOverrideISO639_1_2002?: string;\n\tOverrideISO639_1_2002Strict?: boolean;\n\tOverrideISO639_1_2002IncludeNull?: boolean;\n\tOverrideISO639_2_1998?: string;\n\tOverrideISO639_2_1998Strict?: boolean;\n\tOverrideISO639_2_1998IncludeNull?: boolean;\n\tOverrideISO639_3_2007?: string;\n\tOverrideISO639_3_2007Strict?: boolean;\n\tOverrideISO639_3_2007IncludeNull?: boolean;\n\tOverrideISO639_5_2008?: string;\n\tOverrideISO639_5_2008Strict?: boolean;\n\tOverrideISO639_5_2008IncludeNull?: boolean;\n\tOverrideLocale?: string;\n\tOverrideLocaleStrict?: boolean;\n\tOverrideLocaleIncludeNull?: boolean;\n\tOverrideUnicodeName?: string;\n\tOverrideUnicodeNameStrict?: boolean;\n\tOverrideUnicodeNameIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ManufacturerModel>}\n * @public\n */\nexport interface BrandManufacturerModel extends AmARelationshipTableModel<ManufacturerModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveImagesBaseModel<BrandImageModel>}\n * @see {@link AmFilterableByAccountsBaseModel<BrandAccountModel>}\n * @see {@link AmFilterableByCategoriesBaseModel<BrandCategoryModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<BrandFranchiseModel>}\n * @see {@link AmFilterableByProductsBaseModel<BrandProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<BrandStoreModel>}\n * @see {@link AmFilterableByUsersBaseModel<BrandUserModel>}\n * @see {@link HaveOrderMinimumsBaseModel}\n * @see {@link HaveFreeShippingMinimumsBaseModel}\n * @public\n */\nexport interface BrandModel extends NameableBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<BrandImageModel>, AmFilterableByAccountsBaseModel<BrandAccountModel>, AmFilterableByCategoriesBaseModel<BrandCategoryModel>, AmFilterableByFranchisesBaseModel<BrandFranchiseModel>, AmFilterableByProductsBaseModel<BrandProductModel>, AmFilterableByStoresBaseModel<BrandStoreModel>, AmFilterableByUsersBaseModel<BrandUserModel>, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\n\tBrandCurrencies?: Array<BrandCurrencyModel>;\n\tBrandInventoryLocations?: Array<BrandInventoryLocationModel>;\n\tBrandLanguages?: Array<BrandLanguageModel>;\n\tBrandSiteDomains?: Array<BrandSiteDomainModel>;\n}\n\n/**\n * @see {@link PagedResultsBase<BrandModel>}\n * @public\n */\nexport interface BrandPagedResults extends PagedResultsBase<BrandModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @public\n */\nexport interface BrandProductModel extends AmARelationshipTableModel<ProductModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n\tPriceBase?: number;\n\tPriceMsrp?: number;\n\tPriceReduction?: number;\n\tPriceSale?: number;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByCategoryBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @public\n */\nexport interface BrandSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel {\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\n\tMinMinimumForFreeShippingDollarAmount?: number;\n\tMaxMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmount?: number;\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmount?: number;\n\tMaxMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountAfter?: number;\n\tMaxMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferProductID?: number;\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmount?: number;\n\tMaxMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountAfter?: number;\n\tMaxMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferProductID?: number;\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountWarningMessage?: string;\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountWarningMessage?: string;\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<SiteDomainModel>}\n * @public\n */\nexport interface BrandSiteDomainModel extends AmARelationshipTableModel<SiteDomainModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<BrandSiteDomainModel>}\n * @public\n */\nexport interface BrandSiteDomainPagedResults extends PagedResultsBase<BrandSiteDomainModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @public\n */\nexport interface BrandSiteDomainSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByBrandBaseSearchModel {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<StoreModel>}\n * @public\n */\nexport interface BrandStoreModel extends AmARelationshipTableModel<StoreModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @public\n */\nexport interface BrandUserModel extends AmARelationshipTableModel<UserModel> {\n\tSlaveUsername?: string;\n\tMasterName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<VendorModel>}\n * @public\n */\nexport interface BrandVendorModel extends AmARelationshipTableModel<VendorModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @public\n */\nexport interface CalculatedInventory {\n\tProductID: number;\n\tIsDiscontinued: boolean;\n\tIsUnlimitedStock: boolean;\n\tIsOutOfStock: boolean;\n\tQuantityPresent?: number;\n\tQuantityAllocated?: number;\n\tQuantityOnHand?: number;\n\tMaximumPurchaseQuantity?: number;\n\tMaximumPurchaseQuantityIfPastPurchased?: number;\n\tAllowBackOrder: boolean;\n\tMaximumBackOrderPurchaseQuantity?: number;\n\tMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\n\tMaximumBackOrderPurchaseQuantityGlobal?: number;\n\tAllowPreSale: boolean;\n\tPreSellEndDate?: Date;\n\tQuantityPreSellable?: number;\n\tQuantityPreSold?: number;\n\tMaximumPrePurchaseQuantity?: number;\n\tMaximumPrePurchaseQuantityIfPastPurchased?: number;\n\tMaximumPrePurchaseQuantityGlobal?: number;\n\tRelevantLocations?: Array<ProductInventoryLocationSectionModel>;\n}\n\n/**\n * @public\n */\nexport interface CalculatedPrice {\n\tBasePrice: number;\n\tSalePrice?: number;\n\tMsrpPrice?: number;\n\tReductionPrice?: number;\n\tPricingProvider?: string;\n\tPriceKey?: string;\n\tPriceKeyAlt?: string;\n\tRepeatTypeID?: number;\n\tRepeatTypeKey?: string;\n\tRepeatTypeName?: string;\n\tRepeatTypeAbbreviation?: string;\n\tRepeatTypePeriods?: number;\n\tRelevantRules?: Array<PriceRuleModel>;\n\tUsedRules?: Array<PriceRuleModel>;\n\tIsValid: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AppointmentModel>}\n * @public\n */\nexport interface CalendarAppointmentModel extends AmARelationshipTableModel<AppointmentModel> {\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface CalendarModel extends BaseModel {\n\tAppointments?: Array<CalendarAppointmentModel>;\n\tAccountID?: number;\n\tAccountKey?: string;\n\tAccountName?: string;\n\tAccount?: AccountModel;\n\tFridayHoursEnd?: number;\n\tFridayHoursStart?: number;\n\tMondayHoursEnd?: number;\n\tMondayHoursStart?: number;\n\tSaturdayHoursEnd?: number;\n\tSaturdayHoursStart?: number;\n\tSundayHoursEnd?: number;\n\tSundayHoursStart?: number;\n\tThursdayHoursEnd?: number;\n\tThursdayHoursStart?: number;\n\tTuesdayHoursEnd?: number;\n\tTuesdayHoursStart?: number;\n\tWednesdayHoursEnd?: number;\n\tWednesdayHoursStart?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AdModel>}\n * @public\n */\nexport interface CampaignAdModel extends AmARelationshipTableModel<AdModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CampaignModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tCampaignAds?: Array<CampaignAdModel>;\n\tActualEnd?: Date;\n\tActualStart?: Date;\n\tBudgetedCost?: number;\n\tCreatedByUserID?: number;\n\tCreatedByUserKey?: string;\n\tCreatedByUserUsername?: string;\n\tCreatedByUser?: UserModel;\n\tExchangeRate?: number;\n\tExpectedResponse?: number;\n\tExpectedRevenue?: number;\n\tIsTemplate?: boolean;\n\tOtherCost?: number;\n\tProposedEnd?: Date;\n\tProposedStart?: Date;\n\tTotalActualCost?: number;\n\tTotalCampaignActivityActualCost?: number;\n\tUTCConversionTimeZoneCode?: number;\n\tCodeName?: string;\n\tMessage?: string;\n\tObjective?: string;\n\tPromotionCodeName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface CartContactModel extends AmARelationshipTableModel<ContactModel> {\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link SalesEventBaseModel}\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CartEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface CartFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link PagedResultsBase<SalesItemBaseModel<AppliedCartItemDiscountModel>>}\n * @public\n */\nexport interface CartItemPagedResults extends PagedResultsBase<SalesItemBaseModel<AppliedCartItemDiscountModel>> {\n}\n\n/**\n * @see {@link SalesCollectionBaseModelT<CartTypeModel,CartContactModel,CartEventModel,AppliedCartDiscountModel,AppliedCartItemDiscountModel,CartFileModel>}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveStoredFilesBaseModel<CartFileModel>}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface CartModel extends SalesCollectionBaseModelT<CartTypeModel,CartContactModel,CartEventModel,AppliedCartDiscountModel,AppliedCartItemDiscountModel,CartFileModel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<CartFileModel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tNothingToShip: boolean;\n\tRequestedShipDate?: Date;\n\tSubtotalDiscountsModifier?: number;\n\tSubtotalDiscountsModifierMode?: number;\n\tSubtotalFeesModifier?: number;\n\tSubtotalFeesModifierMode?: number;\n\tSubtotalHandlingModifier?: number;\n\tSubtotalHandlingModifierMode?: number;\n\tSubtotalShippingModifier?: number;\n\tSubtotalShippingModifierMode?: number;\n\tSubtotalTaxesModifier?: number;\n\tSubtotalTaxesModifierMode?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<StateModel>}\n * @public\n */\nexport interface CartStatePagedResults extends PagedResultsBase<StateModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface CartStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @public\n */\nexport interface CartTotals {\n\tSubTotal?: number;\n\tShipping?: number;\n\tHandling?: number;\n\tFees?: number;\n\tDiscounts?: number;\n\tTax?: number;\n\tTotal: number;\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @public\n */\nexport interface CartTypeModel extends TypableBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\n\tCreatedByUserID?: number;\n\tCreatedByUserKey?: string;\n\tCreatedByUserUsername?: string;\n\tCreatedByUser?: UserModel;\n}\n\n/**\n * @see {@link PagedResultsBase<CartTypeModel>}\n * @public\n */\nexport interface CartTypePagedResults extends PagedResultsBase<CartTypeModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface CartTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n\tCreatedByUserID?: number;\n\tCreatedByUserIDIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface CategoryCatalogSearchForm extends SearchFormBase {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface CategoryFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n\tMasterSeoUrl?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link AmFilterableByCategoryBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CategoryImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByCategoryBaseModel, HaveATypeModel<TypeModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<CategoryImageModel>}\n * @public\n */\nexport interface CategoryImagePagedResults extends PagedResultsBase<CategoryImageModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByCategoryBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface CategoryImageSearchModel extends NameableBaseSearchModel, AmFilterableByCategoryBaseSearchModel, HaveATypeSearchModel {\n\tIsPrimary?: boolean;\n\tOriginalIsStoredInDB?: boolean;\n\tThumbnailIsStoredInDB?: boolean;\n\tMinLatitude?: number;\n\tMaxLatitude?: number;\n\tMatchLatitude?: number;\n\tMatchLatitudeIncludeNull?: boolean;\n\tMinLongitude?: number;\n\tMaxLongitude?: number;\n\tMatchLongitude?: number;\n\tMatchLongitudeIncludeNull?: boolean;\n\tMasterID?: number;\n\tMasterIDIncludeNull?: boolean;\n\tMinMediaDate?: Date;\n\tMaxMediaDate?: Date;\n\tMatchMediaDate?: Date;\n\tMatchMediaDateIncludeNull?: boolean;\n\tMinOriginalHeight?: number;\n\tMaxOriginalHeight?: number;\n\tMatchOriginalHeight?: number;\n\tMatchOriginalHeightIncludeNull?: boolean;\n\tMinOriginalWidth?: number;\n\tMaxOriginalWidth?: number;\n\tMatchOriginalWidth?: number;\n\tMatchOriginalWidthIncludeNull?: boolean;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tMinThumbnailHeight?: number;\n\tMaxThumbnailHeight?: number;\n\tMatchThumbnailHeight?: number;\n\tMatchThumbnailHeightIncludeNull?: boolean;\n\tMinThumbnailWidth?: number;\n\tMaxThumbnailWidth?: number;\n\tMatchThumbnailWidth?: number;\n\tMatchThumbnailWidthIncludeNull?: boolean;\n\tAuthor?: string;\n\tAuthorStrict?: boolean;\n\tAuthorIncludeNull?: boolean;\n\tCopyright?: string;\n\tCopyrightStrict?: boolean;\n\tCopyrightIncludeNull?: boolean;\n\tDisplayName?: string;\n\tDisplayNameStrict?: boolean;\n\tDisplayNameIncludeNull?: boolean;\n\tLocation?: string;\n\tLocationStrict?: boolean;\n\tLocationIncludeNull?: boolean;\n\tOriginalFileFormat?: string;\n\tOriginalFileFormatStrict?: boolean;\n\tOriginalFileFormatIncludeNull?: boolean;\n\tOriginalFileName?: string;\n\tOriginalFileNameStrict?: boolean;\n\tOriginalFileNameIncludeNull?: boolean;\n\tSeoTitle?: string;\n\tSeoTitleStrict?: boolean;\n\tSeoTitleIncludeNull?: boolean;\n\tThumbnailFileFormat?: string;\n\tThumbnailFileFormatStrict?: boolean;\n\tThumbnailFileFormatIncludeNull?: boolean;\n\tThumbnailFileName?: string;\n\tThumbnailFileNameStrict?: boolean;\n\tThumbnailFileNameIncludeNull?: boolean;\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface CategoryIndexableModel extends IndexableModelBase {\n\tCategory?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAParentBaseModel<CategoryModel>}\n * @see {@link HaveSeoBaseModel}\n * @see {@link HaveImagesBaseModel<CategoryImageModel>}\n * @see {@link HaveStoredFilesBaseModel<CategoryFileModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandCategoryModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseCategoryModel>}\n * @see {@link AmFilterableByProductsBaseModel<ProductCategoryModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreCategoryModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveOrderMinimumsBaseModel}\n * @see {@link HaveFreeShippingMinimumsBaseModel}\n * @see {@link HaveRequiresRolesBaseModel}\n * @public\n */\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 {\n\tReviews?: Array<ReviewModel>;\n\tParentName?: string;\n\tParentSeoUrl?: string;\n\tIncludeInMenu?: boolean;\n\tIsVisible?: boolean;\n\tRestrictions?: Array<CategoryRegionRestrictionModel>;\n\tHandlingCharge?: number;\n\tQuestionnaireID?: number;\n\tQuestionnaireKey?: string;\n\tQuestionnaireName?: string;\n\tQuestionnaire?: QuestionnaireModel;\n\tRestockingFeeAmount?: number;\n\tRestockingFeeAmountCurrencyID?: number;\n\tRestockingFeeAmountCurrencyKey?: string;\n\tRestockingFeeAmountCurrencyName?: string;\n\tRestockingFeeAmountCurrency?: CurrencyModel;\n\tRestockingFeePercent?: number;\n\tSortOrder?: number;\n\tDisplayName?: string;\n\tFooterContent?: string;\n\tHeaderContent?: string;\n\tSidebarContent?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<CategoryModel>}\n * @public\n */\nexport interface CategoryPagedResults extends PagedResultsBase<CategoryModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<RegionModel>}\n * @public\n */\nexport interface CategoryRegionRestrictionModel extends AmARelationshipTableModel<RegionModel> {\n\tMasterName?: string;\n\tMasterSeoUrl?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface CategorySearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveATypeSearchModel {\n\tExcludeProductCategories?: boolean;\n\tParentSEOURL?: string;\n\tChildJsonAttributes?: Dictionary<Array<string>>;\n\tHasProductsUnderAnotherCategoryID?: number;\n\tHasProductsUnderAnotherCategoryKey?: string;\n\tHasProductsUnderAnotherCategoryName?: string;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tSeoKeywords?: string;\n\tSeoKeywordsStrict?: boolean;\n\tSeoKeywordsIncludeNull?: boolean;\n\tSeoUrl?: string;\n\tSeoUrlStrict?: boolean;\n\tSeoUrlIncludeNull?: boolean;\n\tSeoDescription?: string;\n\tSeoDescriptionStrict?: boolean;\n\tSeoDescriptionIncludeNull?: boolean;\n\tSeoMetaData?: string;\n\tSeoMetaDataStrict?: boolean;\n\tSeoMetaDataIncludeNull?: boolean;\n\tSeoPageTitle?: string;\n\tSeoPageTitleStrict?: boolean;\n\tSeoPageTitleIncludeNull?: boolean;\n\tParentID?: number;\n\tParentIDIncludeNull?: boolean;\n\tParentKey?: string;\n\tDisregardParents?: boolean;\n\tHasChildren?: boolean;\n\tIncludeChildrenInResults: boolean;\n\tChildID?: number;\n\tChildKey?: string;\n\tIncludeInMenu?: boolean;\n\tIsVisible?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\n\tMinHandlingCharge?: number;\n\tMaxHandlingCharge?: number;\n\tMatchHandlingCharge?: number;\n\tMatchHandlingChargeIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmount?: number;\n\tMaxMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmount?: number;\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmount?: number;\n\tMaxMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountAfter?: number;\n\tMaxMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferProductID?: number;\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmount?: number;\n\tMaxMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountAfter?: number;\n\tMaxMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferProductID?: number;\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\n\tQuestionnaireID?: number;\n\tQuestionnaireIDIncludeNull?: boolean;\n\tMinRestockingFeeAmount?: number;\n\tMaxRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\n\tRestockingFeeAmountCurrencyID?: number;\n\tRestockingFeeAmountCurrencyIDIncludeNull?: boolean;\n\tMinRestockingFeePercent?: number;\n\tMaxRestockingFeePercent?: number;\n\tMatchRestockingFeePercent?: number;\n\tMatchRestockingFeePercentIncludeNull?: boolean;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tDisplayName?: string;\n\tDisplayNameStrict?: boolean;\n\tDisplayNameIncludeNull?: boolean;\n\tFooterContent?: string;\n\tFooterContentStrict?: boolean;\n\tFooterContentIncludeNull?: boolean;\n\tHeaderContent?: string;\n\tHeaderContentStrict?: boolean;\n\tHeaderContentIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountWarningMessage?: string;\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountWarningMessage?: string;\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\n\tRequiresRoles?: string;\n\tRequiresRolesStrict?: boolean;\n\tRequiresRolesIncludeNull?: boolean;\n\tRequiresRolesAlt?: string;\n\tRequiresRolesAltStrict?: boolean;\n\tRequiresRolesAltIncludeNull?: boolean;\n\tSidebarContent?: string;\n\tSidebarContentStrict?: boolean;\n\tSidebarContentIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<CategoryCatalogSearchForm,CategoryIndexableModel>}\n * @public\n */\nexport interface CategorySearchViewModel extends SearchViewModelBase<CategoryCatalogSearchForm,CategoryIndexableModel> {\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface CategorySuggestResult extends SuggestResultBase {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface CategoryTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface CEFActionResponse {\n\tActionSucceeded: boolean;\n\tMessages?: Array<string>;\n}\n\n/**\n * @public\n */\nexport interface CheckoutModel {\n\tWithTaxes?: CheckoutWithTaxes;\n\tWithCartInfo?: CheckoutWithCartInfo;\n\tWithUserInfo?: CheckoutWithUserInfo;\n\tPayByWalletEntry?: CheckoutPayByWalletEntry;\n\tPayByCreditCard?: CheckoutPayByCreditCard;\n\tPayByECheck?: CheckoutPayByECheck;\n\tPayByBillMeLater?: CheckoutPayByBillMeLater;\n\tPayByPayPal?: CheckoutPayByPayPal;\n\tPayByPayoneer?: CheckoutPayByPayoneer;\n\tReferringStoreID?: number;\n\tReferringBrandID?: number;\n\tAffiliateAccountKey?: string;\n\tSalesOrderID?: number;\n\tShipping?: ContactModel;\n\tSpecialInstructions?: string;\n\tIsSameAsBilling?: boolean;\n\tBilling?: ContactModel;\n\tPaymentStyle?: string;\n\tIsPartialPayment?: boolean;\n\tAmount?: number;\n\tCurrencyKey?: string;\n\tCategoryIDs?: Array<number>;\n\tFileNames?: Array<string>;\n\tSerializableAttributes?: SerializableAttributesDictionary;\n}\n\n/**\n * @public\n */\nexport interface CheckoutPayByBillMeLater {\n\tCustomerPurchaseOrderNumber?: string;\n}\n\n/**\n * @public\n */\nexport interface CheckoutPayByCreditCard {\n\tCardType?: string;\n\tCardReferenceName?: string;\n\tCardHolderName?: string;\n\tCardNumber?: string;\n\tCVV?: string;\n\tExpirationMonth?: number;\n\tExpirationYear?: number;\n\tCardToken?: string;\n}\n\n/**\n * @public\n */\nexport interface CheckoutPayByECheck {\n\tAccountReferenceName?: string;\n\tAccountHolderName?: string;\n\tAccountNumber?: string;\n\tRoutingNumber?: string;\n\tBankName?: string;\n\tAccountType?: string;\n}\n\n/**\n * @public\n */\nexport interface CheckoutPayByPayoneer {\n\tPayoneerAccountID?: number;\n\tPayoneerCustomerID?: number;\n}\n\n/**\n * @public\n */\nexport interface CheckoutPayByPayPal {\n\tCancelUrl?: string;\n\tReturnUrl?: string;\n\tPayerID?: string;\n\tPayPalToken?: string;\n}\n\n/**\n * @public\n */\nexport interface CheckoutPayByWalletEntry {\n\tWalletID?: number;\n\tWalletToken?: string;\n\tWalletCVV?: string;\n}\n\n/**\n * @public\n */\nexport interface CheckoutResult {\n\tSucceeded: boolean;\n\tWarningMessage?: string;\n\tErrorMessage?: string;\n\tOrderID?: number;\n\tQuoteID?: number;\n\tPaymentTransactionID?: string;\n\tToken?: string;\n\tWarningMessages?: Array<string>;\n\tErrorMessages?: Array<string>;\n\tOrderIDs?: Array<number>;\n\tQuoteIDs?: Array<number>;\n\tPaymentTransactionIDs?: Array<string>;\n\tTokens?: Array<string>;\n}\n\n/**\n * @public\n */\nexport interface CheckoutWithCartInfo {\n\tCartID?: number;\n\tCartTypeName?: string;\n\tCartSessionID?: Guid;\n}\n\n/**\n * @public\n */\nexport interface CheckoutWithTaxes {\n\tVatID?: string;\n\tTaxExemptionNumber?: string;\n}\n\n/**\n * @public\n */\nexport interface CheckoutWithUserInfo {\n\tUserID?: number;\n\tIsNewAccount?: boolean;\n\tUserName?: string;\n\tPassword?: string;\n\tExternalUserID?: string;\n}\n\nexport enum CompareOperator {\n\tUndefined,\n\tLessThan,\n\tLessThanOrEqualTo,\n\tGreaterThan,\n\tGreaterThanOrEqualTo,\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ContactImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveImagesBaseModel<ContactImageModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ContactModel extends BaseModel, HaveImagesBaseModel<ContactImageModel>, HaveATypeModel<TypeModel> {\n\tAddressID?: number;\n\tAddressKey?: string;\n\tAddress?: AddressModel;\n\tEmail1?: string;\n\tFax1?: string;\n\tFirstName?: string;\n\tFullName?: string;\n\tLastName?: string;\n\tMiddleName?: string;\n\tPhone1?: string;\n\tPhone2?: string;\n\tPhone3?: string;\n\tWebsite1?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface ContactTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link AmFilterableByUsersBaseModel<ConversationUserModel>}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @public\n */\nexport interface ConversationModel extends BaseModel, AmFilterableByUsersBaseModel<ConversationUserModel>, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\n\tMessagesCount?: number;\n\tConversationUsersCount?: number;\n\tConversationUserUsernames?: Array<string>;\n\tMessages?: Array<MessageModel>;\n\tCopyUserWhenEnded?: boolean;\n\tHasEnded?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<ConversationModel>}\n * @public\n */\nexport interface ConversationPagedResults extends PagedResultsBase<ConversationModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @public\n */\nexport interface ConversationSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel {\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tCopyUserWhenEnded?: boolean;\n\tCopyUserWhenEndedIncludeNull?: boolean;\n\tHasEnded?: boolean;\n\tHasEndedIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @public\n */\nexport interface ConversationUserModel extends AmARelationshipTableModel<UserModel> {\n\tSlaveUsername?: string;\n\tIsTyping?: boolean;\n\tLastHeartbeat?: Date;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CounterLogModel extends BaseModel, HaveATypeModel<TypeModel> {\n\tCounterID?: number;\n\tCounterKey?: string;\n\tCounter?: CounterModel;\n\tValue?: number;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CounterModel extends BaseModel, HaveATypeModel<TypeModel> {\n\tCounterLogs?: Array<CounterLogModel>;\n\tValue?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CurrencyModel>}\n * @public\n */\nexport interface CountryCurrencyModel extends AmARelationshipTableModel<CurrencyModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CountryImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<LanguageModel>}\n * @public\n */\nexport interface CountryLanguageModel extends AmARelationshipTableModel<LanguageModel> {\n\tMasterName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveImagesBaseModel<CountryImageModel>}\n * @public\n */\nexport interface CountryModel extends NameableBaseModel, HaveImagesBaseModel<CountryImageModel> {\n\tCurrencies?: Array<CountryCurrencyModel>;\n\tLanguages?: Array<CountryLanguageModel>;\n\tISO3166Numeric?: number;\n\tCode?: string;\n\tISO3166Alpha2?: string;\n\tISO3166Alpha3?: string;\n\tPhonePrefix?: string;\n\tPhoneRegEx?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<CountryModel>}\n * @public\n */\nexport interface CountryPagedResults extends PagedResultsBase<CountryModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface CountrySearchModel extends NameableBaseSearchModel {\n\tMinISO3166Numeric?: number;\n\tMaxISO3166Numeric?: number;\n\tMatchISO3166Numeric?: number;\n\tMatchISO3166NumericIncludeNull?: boolean;\n\tCode?: string;\n\tCodeStrict?: boolean;\n\tCodeIncludeNull?: boolean;\n\tISO3166Alpha2?: string;\n\tISO3166Alpha2Strict?: boolean;\n\tISO3166Alpha2IncludeNull?: boolean;\n\tISO3166Alpha3?: string;\n\tISO3166Alpha3Strict?: boolean;\n\tISO3166Alpha3IncludeNull?: boolean;\n\tPhonePrefix?: string;\n\tPhonePrefixStrict?: boolean;\n\tPhonePrefixIncludeNull?: boolean;\n\tPhoneRegEx?: string;\n\tPhoneRegExStrict?: boolean;\n\tPhoneRegExIncludeNull?: boolean;\n}\n\n/**\n * @public\n */\nexport interface CreateLotAsSellerResponse {\n\tLotID?: number;\n\tProductID?: number;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CreditModel extends NameableBaseModel, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableUserBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tUserUsername?: string;\n\tCreditPayments?: Array<CreditPaymentModel>;\n\tAmountRemaining?: number;\n\tCurrencyID?: number;\n\tCurrencyKey?: string;\n\tCurrencyName?: string;\n\tCurrency?: CurrencyModel;\n\tOriginalAmount?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<CreditModel>}\n * @public\n */\nexport interface CreditPagedResults extends PagedResultsBase<CreditModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CreditModel>}\n * @public\n */\nexport interface CreditPaymentModel extends AmARelationshipTableModel<CreditModel> {\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface CreditSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tMinAmountRemaining?: number;\n\tMaxAmountRemaining?: number;\n\tMatchAmountRemaining?: number;\n\tMatchAmountRemainingIncludeNull?: boolean;\n\tCurrencyID?: number;\n\tCurrencyIDIncludeNull?: boolean;\n\tMinOriginalAmount?: number;\n\tMaxOriginalAmount?: number;\n\tMatchOriginalAmount?: number;\n\tMatchOriginalAmountIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface CreditStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface CurrencyImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveImagesBaseModel<CurrencyImageModel>}\n * @public\n */\nexport interface CurrencyModel extends NameableBaseModel, HaveImagesBaseModel<CurrencyImageModel> {\n\tUnicodeSymbolValue?: number;\n\tDecimalPlaceAccuracy?: number;\n\tISO4217Numeric?: number;\n\tUseSeparator?: boolean;\n\tHtmlCharacterCode?: string;\n\tHtmlDecimalCharacterCode?: string;\n\tHtmlSeparatorCharacterCode?: string;\n\tISO4217Alpha?: string;\n\tRawCharacter?: string;\n\tRawDecimalCharacter?: string;\n\tRawSeparatorCharacter?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<CurrencyModel>}\n * @public\n */\nexport interface CurrencyPagedResults extends PagedResultsBase<CurrencyModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface CurrencySearchModel extends NameableBaseSearchModel {\n\tMinUnicodeSymbolValue?: number;\n\tMaxUnicodeSymbolValue?: number;\n\tMatchUnicodeSymbolValue?: number;\n\tMinDecimalPlaceAccuracy?: number;\n\tMaxDecimalPlaceAccuracy?: number;\n\tMatchDecimalPlaceAccuracy?: number;\n\tMatchDecimalPlaceAccuracyIncludeNull?: boolean;\n\tMinISO4217Numeric?: number;\n\tMaxISO4217Numeric?: number;\n\tMatchISO4217Numeric?: number;\n\tMatchISO4217NumericIncludeNull?: boolean;\n\tUseSeparator?: boolean;\n\tUseSeparatorIncludeNull?: boolean;\n\tHtmlCharacterCode?: string;\n\tHtmlCharacterCodeStrict?: boolean;\n\tHtmlCharacterCodeIncludeNull?: boolean;\n\tHtmlDecimalCharacterCode?: string;\n\tHtmlDecimalCharacterCodeStrict?: boolean;\n\tHtmlDecimalCharacterCodeIncludeNull?: boolean;\n\tHtmlSeparatorCharacterCode?: string;\n\tHtmlSeparatorCharacterCodeStrict?: boolean;\n\tHtmlSeparatorCharacterCodeIncludeNull?: boolean;\n\tISO4217Alpha?: string;\n\tISO4217AlphaStrict?: boolean;\n\tISO4217AlphaIncludeNull?: boolean;\n\tRawCharacter?: string;\n\tRawCharacterStrict?: boolean;\n\tRawCharacterIncludeNull?: boolean;\n\tRawDecimalCharacter?: string;\n\tRawDecimalCharacterStrict?: boolean;\n\tRawDecimalCharacterIncludeNull?: boolean;\n\tRawSeparatorCharacter?: string;\n\tRawSeparatorCharacterStrict?: boolean;\n\tRawSeparatorCharacterIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @public\n */\nexport interface DiscountAccountModel extends AmARelationshipTableModel<AccountModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<TypeModel>}\n * @public\n */\nexport interface DiscountAccountTypeModel extends AmARelationshipTableModel<TypeModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tSlaveDisplayName?: string;\n\tSlaveTranslationKey?: string;\n\tSlaveSortOrder?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<BrandModel>}\n * @public\n */\nexport interface DiscountBrandModel extends AmARelationshipTableModel<BrandModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CategoryModel>}\n * @public\n */\nexport interface DiscountCategoryModel extends AmARelationshipTableModel<CategoryModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface DiscountCodeModel extends BaseModel {\n\tDiscountID?: number;\n\tDiscountKey?: string;\n\tDiscountName?: string;\n\tDiscount?: DiscountModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUserUsername?: string;\n\tUser?: UserModel;\n\tCode?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CountryModel>}\n * @public\n */\nexport interface DiscountCountryModel extends AmARelationshipTableModel<CountryModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<FranchiseModel>}\n * @public\n */\nexport interface DiscountFranchiseModel extends AmARelationshipTableModel<FranchiseModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ManufacturerModel>}\n * @public\n */\nexport interface DiscountManufacturerModel extends AmARelationshipTableModel<ManufacturerModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByAccountsBaseModel<DiscountAccountModel>}\n * @see {@link AmFilterableByBrandsBaseModel<DiscountBrandModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<DiscountFranchiseModel>}\n * @see {@link AmFilterableByManufacturersBaseModel<DiscountManufacturerModel>}\n * @see {@link AmFilterableByProductsBaseModel<DiscountProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<DiscountStoreModel>}\n * @see {@link AmFilterableByUsersBaseModel<DiscountUserModel>}\n * @see {@link AmFilterableByVendorsBaseModel<DiscountVendorModel>}\n * @public\n */\nexport interface DiscountModel extends NameableBaseModel, AmFilterableByAccountsBaseModel<DiscountAccountModel>, AmFilterableByBrandsBaseModel<DiscountBrandModel>, AmFilterableByFranchisesBaseModel<DiscountFranchiseModel>, AmFilterableByManufacturersBaseModel<DiscountManufacturerModel>, AmFilterableByProductsBaseModel<DiscountProductModel>, AmFilterableByStoresBaseModel<DiscountStoreModel>, AmFilterableByUsersBaseModel<DiscountUserModel>, AmFilterableByVendorsBaseModel<DiscountVendorModel> {\n\tDiscountCompareOperator: CompareOperator;\n\tDiscountTypeID: number;\n\tDiscountTotal: number;\n\tCanCombine?: boolean;\n\tIsAutoApplied?: boolean;\n\tThresholdAmount?: number;\n\tValue?: number;\n\tAccountTypes?: Array<DiscountAccountTypeModel>;\n\tCategories?: Array<DiscountCategoryModel>;\n\tCodes?: Array<DiscountCodeModel>;\n\tCountries?: Array<DiscountCountryModel>;\n\tProductTypes?: Array<DiscountProductTypeModel>;\n\tShipCarrierMethods?: Array<DiscountShipCarrierMethodModel>;\n\tUserRoles?: Array<DiscountUserRoleModel>;\n\tRoundingOperation?: number;\n\tValueType?: number;\n\tBuyXValue?: number;\n\tEndDate?: Date;\n\tGetYValue?: number;\n\tPriority?: number;\n\tRoundingType?: number;\n\tStartDate?: Date;\n\tUsageLimitGlobally?: number;\n\tUsageLimitPerAccount?: number;\n\tUsageLimitPerCart?: number;\n\tUsageLimitPerUser?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @public\n */\nexport interface DiscountProductModel extends AmARelationshipTableModel<ProductModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<TypeModel>}\n * @public\n */\nexport interface DiscountProductTypeModel extends AmARelationshipTableModel<TypeModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tSlaveDisplayName?: string;\n\tSlaveTranslationKey?: string;\n\tSlaveSortOrder?: number;\n}\n\n/**\n * @public\n */\nexport interface DiscountsForInvoice {\n\tDiscounts?: Array<AppliedSalesInvoiceDiscountModel>;\n\tItemDiscounts?: Array<AppliedSalesInvoiceItemDiscountModel>;\n}\n\n/**\n * @public\n */\nexport interface DiscountsForOrderResponse {\n\tDiscounts?: Array<AppliedSalesOrderDiscountModel>;\n\tItemDiscounts?: Array<AppliedSalesOrderItemDiscountModel>;\n}\n\n/**\n * @public\n */\nexport interface DiscountsForQuote {\n\tDiscounts?: Array<AppliedSalesQuoteDiscountModel>;\n\tItemDiscounts?: Array<AppliedSalesQuoteItemDiscountModel>;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ShipCarrierMethodModel>}\n * @public\n */\nexport interface DiscountShipCarrierMethodModel extends AmARelationshipTableModel<ShipCarrierMethodModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<StoreModel>}\n * @public\n */\nexport interface DiscountStoreModel extends AmARelationshipTableModel<StoreModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @public\n */\nexport interface DiscountUserModel extends AmARelationshipTableModel<UserModel> {\n\tSlaveUsername?: string;\n\tMasterName?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface DiscountUserRoleModel extends BaseModel {\n\tMasterID?: number;\n\tMasterKey?: string;\n\tMasterName?: string;\n\tMaster?: DiscountModel;\n\tRoleName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<VendorModel>}\n * @public\n */\nexport interface DiscountVendorModel extends AmARelationshipTableModel<VendorModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface DisplayableBaseModel extends NameableBaseModel {\n\tDisplayName?: string;\n\tSortOrder?: number;\n\tTranslationKey?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface DisplayableBaseSearchModel extends NameableBaseSearchModel {\n\tDisplayName?: string;\n\tDisplayNameStrict?: boolean;\n\tDisplayNameIncludeNull?: boolean;\n\tTranslationKey?: string;\n\tTranslationKeyStrict?: boolean;\n\tTranslationKeyIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CurrencyModel>}\n * @public\n */\nexport interface DistrictCurrencyModel extends AmARelationshipTableModel<CurrencyModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface DistrictImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<LanguageModel>}\n * @public\n */\nexport interface DistrictLanguageModel extends AmARelationshipTableModel<LanguageModel> {\n\tMasterName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveImagesBaseModel<DistrictImageModel>}\n * @public\n */\nexport interface DistrictModel extends NameableBaseModel, HaveImagesBaseModel<DistrictImageModel> {\n\tCurrencies?: Array<DistrictCurrencyModel>;\n\tLanguages?: Array<DistrictLanguageModel>;\n\tCountryID?: number;\n\tCountryKey?: string;\n\tCountryName?: string;\n\tCountryCode?: string;\n\tCountry?: CountryModel;\n\tRegionID?: number;\n\tRegionKey?: string;\n\tRegionName?: string;\n\tRegionCode?: string;\n\tRegion?: RegionModel;\n\tCode?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<DistrictModel>}\n * @public\n */\nexport interface DistrictPagedResults extends PagedResultsBase<DistrictModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface DistrictSearchModel extends NameableBaseSearchModel {\n\tCountryID?: number;\n\tRegionID?: number;\n\tRegionIDIncludeNull?: boolean;\n\tCode?: string;\n\tCodeStrict?: boolean;\n\tCodeIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<RegionModel>}\n * @public\n */\nexport interface DoctorRegionModel extends AmARelationshipTableModel<RegionModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @public\n */\nexport interface DoseSpotCreatePatientResponseDto {\n\tdoseSpotPatientId?: number;\n\tbillingContactId?: number;\n}\n\n/**\n * @public\n */\nexport interface EndUserEventRequest {\n\tVisitorID?: number;\n\tVisitorKey?: string;\n\tVisitorName?: string;\n\tVisitor?: VisitorModel;\n\tVisitID?: number;\n\tVisitKey?: string;\n\tVisitName?: string;\n\tVisit?: VisitModel;\n\tEventID?: number;\n\tEventKey?: string;\n\tEventName?: string;\n\tEvent?: EventModel;\n\tPageViewID?: number;\n\tPageViewKey?: string;\n\tPageViewName?: string;\n\tPageView?: PageViewModel;\n\tPageViewEventID?: number;\n\tPageViewEventKey?: string;\n\tPageViewEvent?: PageViewEventModel;\n}\n\n/**\n * @public\n */\nexport interface EndUserEventResponse {\n\tVisitorID?: number;\n\tVisitID?: number;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveANullableContactBaseModel}\n * @public\n */\nexport interface EventModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel>, HaveANullableContactBaseModel {\n\tAddressID?: number;\n\tAddressKey?: string;\n\tAddress?: AddressModel;\n\tIPOrganizationID?: number;\n\tIPOrganizationKey?: string;\n\tIPOrganizationName?: string;\n\tIPOrganization?: IPOrganizationModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUser?: UserModel;\n\tCampaignID?: number;\n\tCampaign?: CampaignModel;\n\tCampaignKey?: string;\n\tCampaignName?: string;\n\tSiteDomainID?: number;\n\tSiteDomain?: SiteDomainModel;\n\tSiteDomainKey?: string;\n\tSiteDomainName?: string;\n\tVisitorID?: number;\n\tVisitor?: VisitorModel;\n\tVisitorKey?: string;\n\tVisitorName?: string;\n\tContainsSocialProfile?: boolean;\n\tDelta?: number;\n\tDidBounce?: boolean;\n\tDuration?: number;\n\tEndedOn?: Date;\n\tIsFirstTrigger?: boolean;\n\tScore?: number;\n\tSource?: number;\n\tStartedOn?: Date;\n\tTotalTriggers?: number;\n\tVisitID?: number;\n\tVisitKey?: string;\n\tVisitName?: string;\n\tVisit?: VisitModel;\n\tBrowser?: string;\n\tEntryPage?: string;\n\tExitPage?: string;\n\tFlash?: string;\n\tIPAddress?: string;\n\tKeywords?: string;\n\tLanguage?: string;\n\tOperatingSystem?: string;\n\tPartitionKey?: string;\n\tReferrer?: string;\n\tReferringHost?: string;\n\tRowKey?: string;\n\tTime?: string;\n}\n\nexport enum FileEntityType {\n\tImageAccount,\n\tImageAd,\n\tImageBrand,\n\tImageFranchise,\n\tImageCalendarEvent,\n\tImageCategory,\n\tImageCountry,\n\tImageCurrency,\n\tImageLanguage,\n\tImageManufacturer,\n\tImageProduct,\n\tImageRegion,\n\tImageStore,\n\tImageUser,\n\tImageVendor,\n\tStoredFileAccount,\n\tStoredFileCalendarEvent,\n\tStoredFileCart,\n\tStoredFileCategory,\n\tStoredFileEmailQueueAttachment,\n\tStoredFileMessageAttachment,\n\tStoredFileProduct,\n\tStoredFilePurchaseOrder,\n\tStoredFileResult,\n\tStoredFileSalesInvoice,\n\tStoredFileSalesOrder,\n\tStoredFileSalesQuote,\n\tStoredFileSalesReturn,\n\tStoredFileSampleRequest,\n\tStoredFileUser,\n\tStoredFileStore,\n\tImportExcel,\n\tImportProduct,\n\tImportProductPricePoint,\n\tImportSalesQuote,\n\tImportUser,\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @public\n */\nexport interface FranchiseAccountModel extends AmARelationshipTableModel<AccountModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tHasAccessToFranchise?: boolean;\n\tPricePointID?: number;\n\tPricePointKey?: string;\n\tPricePointName?: string;\n\tPricePointDisplayName?: string;\n\tPricePointTranslationKey?: string;\n\tPricePointSortOrder?: number;\n\tPricePoint?: PricePointModel;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AuctionModel>}\n * @public\n */\nexport interface FranchiseAuctionModel extends AmARelationshipTableModel<AuctionModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface FranchiseCatalogSearchForm extends SearchFormBase {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CategoryModel>}\n * @public\n */\nexport interface FranchiseCategoryModel extends AmARelationshipTableModel<CategoryModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<FranchiseCategoryModel>}\n * @public\n */\nexport interface FranchiseCategoryPagedResults extends PagedResultsBase<FranchiseCategoryModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @see {@link AmFilterableByCategoryBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @public\n */\nexport interface FranchiseCategorySearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CountryModel>}\n * @public\n */\nexport interface FranchiseCountryModel extends AmARelationshipTableModel<CountryModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CurrencyModel>}\n * @public\n */\nexport interface FranchiseCurrencyModel extends AmARelationshipTableModel<CurrencyModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsPrimary?: boolean;\n\tOverrideUnicodeSymbolValue?: number;\n\tOverrideDecimalPlaceAccuracy?: number;\n\tOverrideUseSeparator?: boolean;\n\tCustomName?: string;\n\tCustomTranslationKey?: string;\n\tOverrideHtmlCharacterCode?: string;\n\tOverrideHtmlDecimalCharacterCode?: string;\n\tOverrideHtmlSeparatorCharacterCode?: string;\n\tOverrideRawCharacter?: string;\n\tOverrideRawDecimalCharacter?: string;\n\tOverrideRawSeparatorCharacter?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<DistrictModel>}\n * @public\n */\nexport interface FranchiseDistrictModel extends AmARelationshipTableModel<DistrictModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link AmFilterableByFranchiseBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface FranchiseImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByFranchiseBaseModel, HaveATypeModel<TypeModel> {\n\tMasterName?: string;\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface FranchiseIndexableModel extends IndexableModelBase {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<InventoryLocationModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface FranchiseInventoryLocationModel extends AmARelationshipTableModel<InventoryLocationModel>, HaveATypeModel<TypeModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<LanguageModel>}\n * @public\n */\nexport interface FranchiseLanguageModel extends AmARelationshipTableModel<LanguageModel> {\n\tMasterName?: string;\n\tOverrideISO639_1_2002?: string;\n\tOverrideISO639_2_1998?: string;\n\tOverrideISO639_3_2007?: string;\n\tOverrideISO639_5_2008?: string;\n\tOverrideLocale?: string;\n\tOverrideUnicodeName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ManufacturerModel>}\n * @public\n */\nexport interface FranchiseManufacturerModel extends AmARelationshipTableModel<ManufacturerModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveImagesBaseModel<FranchiseImageModel>}\n * @see {@link AmFilterableByAccountsBaseModel<FranchiseAccountModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandFranchiseModel>}\n * @see {@link AmFilterableByCategoriesBaseModel<FranchiseCategoryModel>}\n * @see {@link AmFilterableByManufacturersBaseModel<FranchiseManufacturerModel>}\n * @see {@link AmFilterableByProductsBaseModel<FranchiseProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<FranchiseStoreModel>}\n * @see {@link AmFilterableByUsersBaseModel<FranchiseUserModel>}\n * @see {@link AmFilterableByVendorsBaseModel<FranchiseVendorModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveOrderMinimumsBaseModel}\n * @see {@link HaveFreeShippingMinimumsBaseModel}\n * @public\n */\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 {\n\tFranchiseCountries?: Array<FranchiseCountryModel>;\n\tFranchiseCurrencies?: Array<FranchiseCurrencyModel>;\n\tFranchiseDistricts?: Array<FranchiseDistrictModel>;\n\tFranchiseInventoryLocations?: Array<FranchiseInventoryLocationModel>;\n\tFranchiseLanguages?: Array<FranchiseLanguageModel>;\n\tFranchiseRegions?: Array<FranchiseRegionModel>;\n\tFranchiseSiteDomains?: Array<FranchiseSiteDomainModel>;\n}\n\n/**\n * @see {@link PagedResultsBase<FranchiseModel>}\n * @public\n */\nexport interface FranchisePagedResults extends PagedResultsBase<FranchiseModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @public\n */\nexport interface FranchiseProductModel extends AmARelationshipTableModel<ProductModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n\tPriceBase?: number;\n\tPriceMsrp?: number;\n\tPriceReduction?: number;\n\tPriceSale?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<RegionModel>}\n * @public\n */\nexport interface FranchiseRegionModel extends AmARelationshipTableModel<RegionModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByCategoryBaseSearchModel}\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link AmFilterableByVendorBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface FranchiseSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveATypeSearchModel {\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\n\tMinMinimumForFreeShippingDollarAmount?: number;\n\tMaxMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmount?: number;\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmount?: number;\n\tMaxMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountAfter?: number;\n\tMaxMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferProductID?: number;\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmount?: number;\n\tMaxMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountAfter?: number;\n\tMaxMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferProductID?: number;\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountWarningMessage?: string;\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountWarningMessage?: string;\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<FranchiseCatalogSearchForm,FranchiseIndexableModel>}\n * @public\n */\nexport interface FranchiseSearchViewModel extends SearchViewModelBase<FranchiseCatalogSearchForm,FranchiseIndexableModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<SiteDomainModel>}\n * @public\n */\nexport interface FranchiseSiteDomainModel extends AmARelationshipTableModel<SiteDomainModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<StoreModel>}\n * @public\n */\nexport interface FranchiseStoreModel extends AmARelationshipTableModel<StoreModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface FranchiseSuggestResult extends SuggestResultBase {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @public\n */\nexport interface FranchiseUserModel extends AmARelationshipTableModel<UserModel> {\n\tSlaveUsername?: string;\n\tMasterName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<VendorModel>}\n * @public\n */\nexport interface FranchiseVendorModel extends AmARelationshipTableModel<VendorModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @see {@link HaveATypeModel<AttributeTypeModel>}\n * @public\n */\nexport interface GeneralAttributeModel extends TypableBaseModel, HaveATypeModel<AttributeTypeModel> {\n\tCanBeTableColumn?: boolean;\n\tHideFromCatalogViews?: boolean;\n\tHideFromProductDetailView?: boolean;\n\tHideFromStorefront?: boolean;\n\tHideFromSuppliers?: boolean;\n\tIsComparable?: boolean;\n\tIsFilter?: boolean;\n\tIsMarkup?: boolean;\n\tIsPredefined?: boolean;\n\tIsTab?: boolean;\n\tAttributeGroupID?: number;\n\tAttributeGroupKey?: string;\n\tAttributeGroupName?: string;\n\tAttributeGroupDisplayName?: string;\n\tAttributeGroupTranslationKey?: string;\n\tAttributeGroupSortOrder?: number;\n\tAttributeGroup?: AttributeGroupModel;\n\tAttributeTabID?: number;\n\tAttributeTabKey?: string;\n\tAttributeTabName?: string;\n\tAttributeTabDisplayName?: string;\n\tAttributeTabTranslationKey?: string;\n\tAttributeTabSortOrder?: number;\n\tAttributeTab?: AttributeTabModel;\n}\n\n/**\n * @see {@link PagedResultsBase<GeneralAttributeModel>}\n * @public\n */\nexport interface GeneralAttributePagedResults extends PagedResultsBase<GeneralAttributeModel> {\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface GeneralAttributePredefinedOptionModel extends BaseModel {\n\tAttributeID?: number;\n\tAttributeKey?: string;\n\tAttributeName?: string;\n\tAttributeDisplayName?: string;\n\tAttributeTranslationKey?: string;\n\tAttributeSortOrder?: number;\n\tAttribute?: GeneralAttributeModel;\n\tSortOrder?: number;\n\tUofM?: string;\n\tValue?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<GeneralAttributePredefinedOptionModel>}\n * @public\n */\nexport interface GeneralAttributePredefinedOptionPagedResults extends PagedResultsBase<GeneralAttributePredefinedOptionModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @public\n */\nexport interface GeneralAttributePredefinedOptionSearchModel extends BaseSearchModel {\n\tAttributeID?: number;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tUofM?: string;\n\tUofMStrict?: boolean;\n\tUofMIncludeNull?: boolean;\n\tValue?: string;\n\tValueStrict?: boolean;\n\tValueIncludeNull?: boolean;\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface GeneralAttributeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveATypeSearchModel {\n\tIncludeGeneralWithTypeName?: boolean;\n\tGroup?: string;\n\tAttributeGroupKey?: string;\n\tAttributeGroupName?: string;\n\tAttributeGroupDisplayName?: string;\n\tAttributeTabKey?: string;\n\tAttributeTabName?: string;\n\tAttributeTabDisplayName?: string;\n\tCanBeTableColumn?: boolean;\n\tHideFromCatalogViews?: boolean;\n\tHideFromProductDetailView?: boolean;\n\tHideFromStorefront?: boolean;\n\tHideFromSuppliers?: boolean;\n\tIsComparable?: boolean;\n\tIsFilter?: boolean;\n\tIsMarkup?: boolean;\n\tIsPredefined?: boolean;\n\tIsTab?: boolean;\n\tAttributeGroupID?: number;\n\tAttributeGroupIDIncludeNull?: boolean;\n\tAttributeTabID?: number;\n\tAttributeTabIDIncludeNull?: boolean;\n}\n\n/**\n * @public\n */\nexport interface GetPackSizesPurchaseOptionsDTO {\n\tName?: string;\n\tType?: string;\n\tTypeID?: number;\n\tID?: number;\n\tSerializableAttributes?: SerializableAttributesDictionary;\n}\n\n/**\n * @public\n */\nexport interface GetPackSizesVariantDTO {\n\tName?: string;\n\tType?: string;\n\tTypeID?: number;\n\tID?: number;\n\tSerializableAttributes?: SerializableAttributesDictionary;\n\tPurchaseOptions?: Array<GetPackSizesPurchaseOptionsDTO>;\n}\n\n/**\n * @public\n */\nexport interface Grouping {\n\tfield?: string; // Name format overridden\n\tserverField?: string; // Name format overridden\n\torder?: number; // Name format overridden\n\tsortOrder?: number; // Name format overridden\n\tdir?: string; // Name format overridden\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAParentBaseModel<GroupModel>}\n * @see {@link AmFilterableByUsersBaseModel<GroupUserModel>}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface GroupModel extends NameableBaseModel, HaveAParentBaseModel<GroupModel>, AmFilterableByUsersBaseModel<GroupUserModel>, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tParentName?: string;\n\tGroupOwnerID?: number;\n\tGroupOwnerKey?: string;\n\tGroupOwnerUsername?: string;\n\tGroupOwner?: UserModel;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @public\n */\nexport interface GroupUserModel extends AmARelationshipTableModel<UserModel> {\n\tSlaveUsername?: string;\n\tMasterName?: string;\n}\n\n/**\n * @public\n */\nexport interface ImplementsCartLookupBase {\n\tStoreID?: number;\n\tFranchiseID?: number;\n\tBrandID?: number;\n}\n\n/**\n * @see {@link ImplementsCartLookupBase}\n * @public\n */\nexport interface ImplementsCartLookupForStorefrontBase extends ImplementsCartLookupBase {\n\tTypeName?: string;\n}\n\n/**\n * @public\n */\nexport interface ImplementsDisplayNameBase {\n\tDisplayName?: string;\n}\n\n/**\n * @public\n */\nexport interface ImplementsIDBase {\n\tID?: number;\n}\n\n/**\n * @public\n */\nexport interface ImplementsIDOnBodyBase {\n\tID?: number;\n}\n\n/**\n * @public\n */\nexport interface ImplementsKeyBase {\n\tKey?: string;\n}\n\n/**\n * @public\n */\nexport interface ImplementsKeyOnQueryBase {\n\tKey?: string;\n}\n\n/**\n * @public\n */\nexport interface ImplementsNameBase {\n\tName?: string;\n}\n\n/**\n * @public\n */\nexport interface ImplementsSeoUrlBase {\n\tSeoUrl?: string;\n}\n\n/**\n * @public\n */\nexport interface ImplementsTypeNameBase {\n\tTypeName?: string;\n}\n\n/**\n * @see {@link ImplementsCartLookupForStorefrontBase}\n * @public\n */\nexport interface ImplementsTypeNameForStorefrontBase extends ImplementsCartLookupForStorefrontBase {\n}\n\n/**\n * @public\n */\nexport interface ImportResponse {\n\tType?: string;\n\tID?: number;\n\tCustomKey?: string;\n\tMessages?: Array<string>;\n}\n\n/**\n * @public\n */\nexport interface ImportSheet {\n\tColumnNames?: Array<string>;\n\tRows?: Array<Dictionary<string>>;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface IncrementProfileModel extends NameableBaseModel {\n\tIncrementSteps?: Array<IncrementStepModel>;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface IncrementStepModel extends BaseModel {\n\tIncrement?: number;\n\tStart?: number;\n\tIncrementProfileID?: number;\n\tIncrementProfileKey?: string;\n\tIncrementProfileName?: string;\n\tIncrementProfile?: IncrementProfileModel;\n}\n\n/**\n * @public\n */\nexport interface IndexableAttributeObjectFilter {\n\tID: number;\n\tKey?: string;\n\tValue?: string;\n\tUofM?: string;\n\tSortOrder?: number;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableBadgeFilter extends IndexableFilterBase {\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableBrandFilter extends IndexableFilterBase {\n}\n\n/**\n * @public\n */\nexport interface IndexableCategoryFilter {\n\tCategorySeoUrl?: string;\n\tCategoryName?: string;\n\tCategoryDisplayName?: string;\n\tCategoryParent1Name?: string;\n\tCategoryParent1SeoUrl?: string;\n\tCategoryParent2Name?: string;\n\tCategoryParent2SeoUrl?: string;\n\tCategoryParent3Name?: string;\n\tCategoryParent3SeoUrl?: string;\n\tCategoryParent4Name?: string;\n\tCategoryParent4SeoUrl?: string;\n\tCategoryParent5Name?: string;\n\tCategoryParent5SeoUrl?: string;\n\tCategoryParent6Name?: string;\n\tCategoryParent6SeoUrl?: string;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableDistrictFilter extends IndexableFilterBase {\n\tDocCount?: number;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableDistrictModel extends IndexableFilterBase {\n\tDocCount?: number;\n}\n\n/**\n * @public\n */\nexport interface IndexableFilterBase {\n\tID: number;\n\tKey?: string;\n\tName?: string;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableFranchiseFilter extends IndexableFilterBase {\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableLotData extends IndexableFilterBase {\n\tClosesAt?: Date;\n\tStartingPrice?: number;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableManufacturerFilter extends IndexableFilterBase {\n}\n\n/**\n * @public\n */\nexport interface IndexableModelBase {\n\tSuggest?: any;\n\tSuggestedByName?: any;\n\tSuggestedByDescription?: any;\n\tSuggestedByCustomKey?: any;\n\tSuggestedByQueryableSerializableAttributes?: any;\n\tSuggestedByBrand?: any;\n\tSuggestedByCategory?: any;\n\tSuggestedByFranchise?: any;\n\tSuggestedByManufacturer?: any;\n\tSuggestedByProduct?: any;\n\tSuggestedByStore?: any;\n\tSuggestedByVendor?: any;\n\tID: number;\n\tCustomKey?: string;\n\tActive: boolean;\n\tCreatedDate: Date;\n\tUpdatedDate?: Date;\n\tName?: string;\n\tDescription?: string;\n\tFilterableJsonAttributes?: string;\n\tQueryableJsonAttributes?: string;\n\tFilterableAttributes?: Array<IndexableAttributeObjectFilter>;\n\tQueryableAttributes?: Array<IndexableAttributeObjectFilter>;\n\tQueryableSerializableAttributeValuesAggregate?: string;\n\tHasBrands: boolean;\n\tBrands?: Array<IndexableBrandFilter>;\n\tHasCategories: boolean;\n\tCategoryNamePrimary?: string;\n\tCategoryNameSecondary?: string;\n\tCategoryNameTertiary?: string;\n\tCategories?: Array<IndexableCategoryFilter>;\n\tHasFranchises: boolean;\n\tFranchises?: Array<IndexableFranchiseFilter>;\n\tContactID?: number;\n\tContactKey?: string;\n\tContactPhone?: string;\n\tContactFax?: string;\n\tContactEmail?: string;\n\tContactFirstName?: string;\n\tContactLastName?: string;\n\tContactCity?: string;\n\tContactCountryID?: number;\n\tContactRegionID?: number;\n\tContactRegionName?: string;\n\tHasDistricts: boolean;\n\tDistricts?: Array<IndexableDistrictFilter>;\n\tContactDistrictID?: number;\n\tLatitude?: number;\n\tLongitude?: number;\n\tHasManufacturers: boolean;\n\tManufacturers?: Array<IndexableManufacturerFilter>;\n\tPricingToIndexAs: number;\n\tStartingPrice?: number;\n\tHasProducts: boolean;\n\tProducts?: Array<IndexableProductFilter>;\n\tRatingToIndexAs: number;\n\tRequiresRoles?: string;\n\tRequiresRolesList?: Array<IndexableRoleFilter>;\n\tRequiresRolesAlt?: string;\n\tRequiresRolesListAlt?: Array<IndexableRoleFilter>;\n\tSeoKeywords?: string;\n\tSeoUrl?: string;\n\tSeoDescription?: string;\n\tSeoMetaData?: string;\n\tSeoPageTitle?: string;\n\tHasStores: boolean;\n\tStores?: Array<IndexableStoreFilter>;\n\tTypeID?: number;\n\tTypeKey?: string;\n\tTypeName?: string;\n\tTypeSortOrder: number;\n\tHasVendors: boolean;\n\tVendors?: Array<IndexableVendorFilter>;\n\tSortOrder?: number;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableProductFilter extends IndexableFilterBase {\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableRegionModel extends IndexableFilterBase {\n\tDocCount?: number;\n}\n\n/**\n * @public\n */\nexport interface IndexableRoleFilter {\n\tRoleName?: string;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableStoreFilter extends IndexableFilterBase {\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableTypeModel extends IndexableFilterBase {\n\tSortOrder: number;\n\tCount: number;\n}\n\n/**\n * @public\n */\nexport interface IndexableVariantAttributesFilter {\n\tID: number;\n\tJsonAttributes?: string;\n}\n\n/**\n * @see {@link IndexableFilterBase}\n * @public\n */\nexport interface IndexableVendorFilter extends IndexableFilterBase {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByBrandsBaseModel<BrandInventoryLocationModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseInventoryLocationModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreInventoryLocationModel>}\n * @see {@link HaveANullableContactBaseModel}\n * @public\n */\nexport interface InventoryLocationModel extends NameableBaseModel, AmFilterableByBrandsBaseModel<BrandInventoryLocationModel>, AmFilterableByFranchisesBaseModel<FranchiseInventoryLocationModel>, AmFilterableByStoresBaseModel<StoreInventoryLocationModel>, HaveANullableContactBaseModel {\n\tRegions?: Array<InventoryLocationRegionModel>;\n\tSections?: Array<InventoryLocationSectionModel>;\n\tUsers?: Array<InventoryLocationUserModel>;\n}\n\n/**\n * @see {@link PagedResultsBase<InventoryLocationModel>}\n * @public\n */\nexport interface InventoryLocationPagedResults extends PagedResultsBase<InventoryLocationModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<RegionModel>}\n * @public\n */\nexport interface InventoryLocationRegionModel extends AmARelationshipTableModel<RegionModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<InventoryLocationRegionModel>}\n * @public\n */\nexport interface InventoryLocationRegionPagedResults extends PagedResultsBase<InventoryLocationRegionModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @public\n */\nexport interface InventoryLocationRegionSearchModel extends AmARelationshipTableBaseSearchModel {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link HaveAContactBaseSearchModel}\n * @public\n */\nexport interface InventoryLocationSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveAContactBaseSearchModel {\n\tCountryName?: string;\n\tStateName?: string;\n\tPostalCode?: string;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tContactIDIncludeNull?: boolean;\n\tContactKeyStrict?: boolean;\n\tContactKeyIncludeNull?: boolean;\n\tContactFirstNameStrict?: boolean;\n\tContactFirstNameIncludeNull?: boolean;\n\tContactLastNameStrict?: boolean;\n\tContactLastNameIncludeNull?: boolean;\n\tContactPhoneStrict?: boolean;\n\tContactPhoneIncludeNull?: boolean;\n\tContactFaxStrict?: boolean;\n\tContactFaxIncludeNull?: boolean;\n\tContactEmailStrict?: boolean;\n\tContactEmailIncludeNull?: boolean;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface InventoryLocationSectionModel extends NameableBaseModel {\n\tProductInventoryLocationSections?: Array<ProductInventoryLocationSectionModel>;\n\tInventoryLocationID?: number;\n\tInventoryLocationKey?: string;\n\tInventoryLocationName?: string;\n\tInventoryLocation?: InventoryLocationModel;\n}\n\n/**\n * @see {@link PagedResultsBase<InventoryLocationSectionModel>}\n * @public\n */\nexport interface InventoryLocationSectionPagedResults extends PagedResultsBase<InventoryLocationSectionModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface InventoryLocationSectionSearchModel extends NameableBaseSearchModel {\n\tInventoryLocationName?: string;\n\tInventoryLocationID?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @public\n */\nexport interface InventoryLocationUserModel extends AmARelationshipTableModel<UserModel> {\n\tMasterName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @public\n */\nexport interface IPOrganizationModel extends NameableBaseModel, HaveAStatusModel {\n\tAddressID?: number;\n\tAddressKey?: string;\n\tAddress?: AddressModel;\n\tPrimaryUserID?: number;\n\tPrimaryUserKey?: string;\n\tPrimaryUserUsername?: string;\n\tPrimaryUser?: UserModel;\n\tScore?: number;\n\tIPAddress?: string;\n\tVisitorKey?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface LanguageImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveImagesBaseModel<LanguageImageModel>}\n * @public\n */\nexport interface LanguageModel extends BaseModel, HaveImagesBaseModel<LanguageImageModel> {\n\tISO639_1_2002?: string;\n\tISO639_2_1998?: string;\n\tISO639_3_2007?: string;\n\tISO639_5_2008?: string;\n\tLocale?: string;\n\tUnicodeName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<LanguageModel>}\n * @public\n */\nexport interface LanguagePagedResults extends PagedResultsBase<LanguageModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @public\n */\nexport interface LanguageSearchModel extends BaseSearchModel {\n\tISO639_1_2002?: string;\n\tISO639_1_2002Strict?: boolean;\n\tISO639_1_2002IncludeNull?: boolean;\n\tISO639_2_1998?: string;\n\tISO639_2_1998Strict?: boolean;\n\tISO639_2_1998IncludeNull?: boolean;\n\tISO639_3_2007?: string;\n\tISO639_3_2007Strict?: boolean;\n\tISO639_3_2007IncludeNull?: boolean;\n\tISO639_5_2008?: string;\n\tISO639_5_2008Strict?: boolean;\n\tISO639_5_2008IncludeNull?: boolean;\n\tLocale?: string;\n\tLocaleStrict?: boolean;\n\tLocaleIncludeNull?: boolean;\n\tUnicodeName?: string;\n\tUnicodeNameStrict?: boolean;\n\tUnicodeNameIncludeNull?: boolean;\n}\n\nexport enum LocatorUnits {\n\tMiles,\n\tKilometers,\n\tMeters,\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface LotCatalogSearchForm extends SearchFormBase {\n}\n\n/**\n * @public\n */\nexport interface LotCategories {\n\tLotID?: number;\n\tCategories?: Array<string>;\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface LotIndexableModel extends IndexableModelBase {\n\tBidCount: number;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByProductBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface LotModel extends NameableBaseModel, AmFilterableByProductBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tHighestBid?: BidModel;\n\tBuyNowAvailable?: boolean;\n\tAccountID?: number;\n\tAccountKey?: string;\n\tAccountName?: string;\n\tAccount?: AccountModel;\n\tAuctionID?: number;\n\tAuctionKey?: string;\n\tAuctionName?: string;\n\tAuction?: AuctionModel;\n\tClosesAt?: Date;\n\tFee?: number;\n\tIncrementProfileID?: number;\n\tIncrementProfileKey?: string;\n\tIncrementProfileName?: string;\n\tIncrementProfile?: IncrementProfileModel;\n\tOpensAt?: Date;\n\tReservePrice?: number;\n\tStartingPrice?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<LotModel>}\n * @public\n */\nexport interface LotPagedResults extends PagedResultsBase<LotModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface LotSearchModel extends NameableBaseSearchModel, AmFilterableByProductBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tBuyNowAvailable?: boolean;\n\tAccountID?: number;\n\tAuctionID?: number;\n\tAuctionIDIncludeNull?: boolean;\n\tMinClosesAt?: Date;\n\tMaxClosesAt?: Date;\n\tMatchClosesAt?: Date;\n\tMatchClosesAtIncludeNull?: boolean;\n\tMinFee?: number;\n\tMaxFee?: number;\n\tMatchFee?: number;\n\tMatchFeeIncludeNull?: boolean;\n\tIncrementProfileID?: number;\n\tIncrementProfileIDIncludeNull?: boolean;\n\tMinOpensAt?: Date;\n\tMaxOpensAt?: Date;\n\tMatchOpensAt?: Date;\n\tMatchOpensAtIncludeNull?: boolean;\n\tMinReservePrice?: number;\n\tMaxReservePrice?: number;\n\tMatchReservePrice?: number;\n\tMatchReservePriceIncludeNull?: boolean;\n\tMinStartingPrice?: number;\n\tMaxStartingPrice?: number;\n\tMatchStartingPrice?: number;\n\tMatchStartingPriceIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<LotCatalogSearchForm,LotIndexableModel>}\n * @public\n */\nexport interface LotSearchViewModel extends SearchViewModelBase<LotCatalogSearchForm,LotIndexableModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface LotStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface LotSuggestResult extends SuggestResultBase {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface LotTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface ManufacturerCatalogSearchForm extends SearchFormBase {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ManufacturerImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface ManufacturerIndexableModel extends IndexableModelBase {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveImagesBaseModel<ManufacturerImageModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandManufacturerModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseManufacturerModel>}\n * @see {@link AmFilterableByProductsBaseModel<ManufacturerProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreManufacturerModel>}\n * @see {@link AmFilterableByVendorsBaseModel<VendorManufacturerModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveANullableContactBaseModel}\n * @see {@link HaveOrderMinimumsBaseModel}\n * @see {@link HaveFreeShippingMinimumsBaseModel}\n * @public\n */\nexport interface ManufacturerModel extends NameableBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<ManufacturerImageModel>, AmFilterableByBrandsBaseModel<BrandManufacturerModel>, AmFilterableByFranchisesBaseModel<FranchiseManufacturerModel>, AmFilterableByProductsBaseModel<ManufacturerProductModel>, AmFilterableByStoresBaseModel<StoreManufacturerModel>, AmFilterableByVendorsBaseModel<VendorManufacturerModel>, HaveATypeModel<TypeModel>, HaveANullableContactBaseModel, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\n\tReviews?: Array<ReviewModel>;\n}\n\n/**\n * @see {@link PagedResultsBase<ManufacturerModel>}\n * @public\n */\nexport interface ManufacturerPagedResults extends PagedResultsBase<ManufacturerModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @public\n */\nexport interface ManufacturerProductModel extends AmARelationshipTableModel<ProductModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByVendorBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @see {@link HaveAContactBaseSearchModel}\n * @public\n */\nexport interface ManufacturerSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\n\tAddressID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tContactIDIncludeNull?: boolean;\n\tContactKeyStrict?: boolean;\n\tContactKeyIncludeNull?: boolean;\n\tContactFirstNameStrict?: boolean;\n\tContactFirstNameIncludeNull?: boolean;\n\tContactLastNameStrict?: boolean;\n\tContactLastNameIncludeNull?: boolean;\n\tContactPhoneStrict?: boolean;\n\tContactPhoneIncludeNull?: boolean;\n\tContactFaxStrict?: boolean;\n\tContactFaxIncludeNull?: boolean;\n\tContactEmailStrict?: boolean;\n\tContactEmailIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\n\tMinMinimumForFreeShippingDollarAmount?: number;\n\tMaxMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmount?: number;\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmount?: number;\n\tMaxMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountAfter?: number;\n\tMaxMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferProductID?: number;\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmount?: number;\n\tMaxMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountAfter?: number;\n\tMaxMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferProductID?: number;\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountWarningMessage?: string;\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountWarningMessage?: string;\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<ManufacturerCatalogSearchForm,ManufacturerIndexableModel>}\n * @public\n */\nexport interface ManufacturerSearchViewModel extends SearchViewModelBase<ManufacturerCatalogSearchForm,ManufacturerIndexableModel> {\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface ManufacturerSuggestResult extends SuggestResultBase {\n}\n\n/**\n * @public\n */\nexport interface MenuCategoryModel {\n\tID?: number;\n\tCustomKey?: string;\n\tName?: string;\n\tDisplayName?: string;\n\tSeoUrl?: string;\n\tSortOrder?: number;\n\tPrimaryImageFileName?: string;\n\tDescription?: string;\n\tHasChildren: boolean;\n\tChildren?: Array<MenuCategoryModel>;\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface MessageAttachmentModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n\tCreatedByUserID?: number;\n\tCreatedByUserKey?: string;\n\tCreatedByUserUsername?: string;\n\tCreatedByUser?: UserModel;\n\tUpdatedByUserID?: number;\n\tUpdatedByUserKey?: string;\n\tUpdatedByUserUsername?: string;\n\tUpdatedByUser?: UserModel;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @public\n */\nexport interface MessageModel extends BaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\n\tSentByUserContactFirstName?: string;\n\tSentByUserContactLastName?: string;\n\tIsReplyAllAllowed?: boolean;\n\tMessageAttachments?: Array<MessageAttachmentModel>;\n\tMessageRecipients?: Array<MessageRecipientModel>;\n\tConversationID?: number;\n\tConversationKey?: string;\n\tConversation?: ConversationModel;\n\tSentByUserID?: number;\n\tSentByUserKey?: string;\n\tSentByUserUsername?: string;\n\tSentByUser?: UserModel;\n\tBody?: string;\n\tContext?: string;\n\tSubject?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<MessageModel>}\n * @public\n */\nexport interface MessagePagedResults extends PagedResultsBase<MessageModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @public\n */\nexport interface MessageRecipientModel extends AmARelationshipTableModel<UserModel> {\n\tSlaveUsername?: string;\n\tHasSentAnEmail?: boolean;\n\tIsArchived?: boolean;\n\tIsRead?: boolean;\n\tArchivedAt?: Date;\n\tEmailSentAt?: Date;\n\tGroupID?: number;\n\tGroupKey?: string;\n\tGroupName?: string;\n\tGroup?: GroupModel;\n\tReadAt?: Date;\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface MessageSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n\tSentFromOrToUserID?: number;\n\tSentFromUserID?: number;\n\tSentToUserID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tIsReplyAllAllowed?: boolean;\n\tConversationID?: number;\n\tConversationIDIncludeNull?: boolean;\n\tSentByUserID?: number;\n\tSentByUserIDIncludeNull?: boolean;\n\tBody?: string;\n\tBodyStrict?: boolean;\n\tBodyIncludeNull?: boolean;\n\tContext?: string;\n\tContextStrict?: boolean;\n\tContextIncludeNull?: boolean;\n\tSubject?: string;\n\tSubjectStrict?: boolean;\n\tSubjectIncludeNull?: boolean;\n}\n\n/**\n * @public\n */\nexport interface MFARequirementsModel {\n\tPhone: boolean;\n\tEmail: boolean;\n\tPhoneLastFour?: string;\n\tEmailFirstAndLastFour?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface NameableBaseModel extends BaseModel {\n\tName?: string;\n\tDescription?: string;\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @public\n */\nexport interface NameableBaseSearchModel extends BaseSearchModel {\n\tName?: string;\n\tNameStrict?: boolean;\n\tNameIncludeNull?: boolean;\n\tDescription?: string;\n\tCustomKeyOrName?: string;\n\tCustomKeyOrNameOrDescription?: string;\n\tIDOrCustomKeyOrName?: string;\n\tIDOrCustomKeyOrNameOrDescription?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveATypeModel<NoteTypeModel>}\n * @public\n */\nexport interface NoteModel extends BaseModel, HaveATypeModel<NoteTypeModel> {\n\tCreatedByUserContactFirstName?: string;\n\tCreatedByUserContactLastName?: string;\n\tAccountID?: number;\n\tAccountKey?: string;\n\tAccountName?: string;\n\tBrandID?: number;\n\tBrandKey?: string;\n\tBrandName?: string;\n\tCartID?: number;\n\tCartKey?: string;\n\tCartItemID?: number;\n\tCartItemKey?: string;\n\tCartItemName?: string;\n\tCreatedByUserID?: number;\n\tCreatedByUserKey?: string;\n\tCreatedByUserUsername?: string;\n\tCreatedByUser?: UserModel;\n\tFranchiseID?: number;\n\tFranchiseKey?: string;\n\tFranchiseName?: string;\n\tManufacturerID?: number;\n\tManufacturerKey?: string;\n\tManufacturerName?: string;\n\tPurchaseOrderID?: number;\n\tPurchaseOrderKey?: string;\n\tPurchaseOrderItemID?: number;\n\tPurchaseOrderItemKey?: string;\n\tPurchaseOrderItemName?: string;\n\tSalesGroupID?: number;\n\tSalesGroupKey?: string;\n\tSalesInvoiceID?: number;\n\tSalesInvoiceKey?: string;\n\tSalesInvoiceItemID?: number;\n\tSalesInvoiceItemKey?: string;\n\tSalesInvoiceItemName?: string;\n\tSalesOrderID?: number;\n\tSalesOrderKey?: string;\n\tSalesOrderItemID?: number;\n\tSalesOrderItemKey?: string;\n\tSalesOrderItemName?: string;\n\tSalesQuoteID?: number;\n\tSalesQuoteKey?: string;\n\tSalesQuoteItemID?: number;\n\tSalesQuoteItemKey?: string;\n\tSalesQuoteItemName?: string;\n\tSalesReturnID?: number;\n\tSalesReturnKey?: string;\n\tSalesReturnItemID?: number;\n\tSalesReturnItemKey?: string;\n\tSalesReturnItemName?: string;\n\tSampleRequestID?: number;\n\tSampleRequestKey?: string;\n\tSampleRequestItemID?: number;\n\tSampleRequestItemKey?: string;\n\tSampleRequestItemName?: string;\n\tStoreID?: number;\n\tStoreKey?: string;\n\tStoreName?: string;\n\tStoreSeoUrl?: string;\n\tUpdatedByUserID?: number;\n\tUpdatedByUserKey?: string;\n\tUpdatedByUserUsername?: string;\n\tUpdatedByUser?: UserModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUserUsername?: string;\n\tVendorID?: number;\n\tVendorKey?: string;\n\tVendorName?: string;\n\tNote1?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<NoteModel>}\n * @public\n */\nexport interface NotePagedResults extends PagedResultsBase<NoteModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface NoteSearchModel extends BaseSearchModel, HaveATypeSearchModel {\n\tAccountID?: number;\n\tAccountIDIncludeNull?: boolean;\n\tBrandID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tCartID?: number;\n\tCartIDIncludeNull?: boolean;\n\tCartItemID?: number;\n\tCartItemIDIncludeNull?: boolean;\n\tCreatedByUserID?: number;\n\tCreatedByUserIDIncludeNull?: boolean;\n\tFranchiseID?: number;\n\tFranchiseIDIncludeNull?: boolean;\n\tManufacturerID?: number;\n\tManufacturerIDIncludeNull?: boolean;\n\tPurchaseOrderID?: number;\n\tPurchaseOrderIDIncludeNull?: boolean;\n\tPurchaseOrderItemID?: number;\n\tPurchaseOrderItemIDIncludeNull?: boolean;\n\tSalesGroupID?: number;\n\tSalesGroupIDIncludeNull?: boolean;\n\tSalesInvoiceID?: number;\n\tSalesInvoiceIDIncludeNull?: boolean;\n\tSalesInvoiceItemID?: number;\n\tSalesInvoiceItemIDIncludeNull?: boolean;\n\tSalesOrderID?: number;\n\tSalesOrderIDIncludeNull?: boolean;\n\tSalesOrderItemID?: number;\n\tSalesOrderItemIDIncludeNull?: boolean;\n\tSalesQuoteID?: number;\n\tSalesQuoteIDIncludeNull?: boolean;\n\tSalesQuoteItemID?: number;\n\tSalesQuoteItemIDIncludeNull?: boolean;\n\tSalesReturnID?: number;\n\tSalesReturnIDIncludeNull?: boolean;\n\tSalesReturnItemID?: number;\n\tSalesReturnItemIDIncludeNull?: boolean;\n\tSampleRequestID?: number;\n\tSampleRequestIDIncludeNull?: boolean;\n\tSampleRequestItemID?: number;\n\tSampleRequestItemIDIncludeNull?: boolean;\n\tStoreID?: number;\n\tStoreIDIncludeNull?: boolean;\n\tUpdatedByUserID?: number;\n\tUpdatedByUserIDIncludeNull?: boolean;\n\tUserID?: number;\n\tUserIDIncludeNull?: boolean;\n\tVendorID?: number;\n\tVendorIDIncludeNull?: boolean;\n\tNote1?: string;\n\tNote1Strict?: boolean;\n\tNote1IncludeNull?: boolean;\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface NoteTypeModel extends TypableBaseModel {\n\tIsCustomer?: boolean;\n\tIsPublic?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<NoteTypeModel>}\n * @public\n */\nexport interface NoteTypePagedResults extends PagedResultsBase<NoteTypeModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface NoteTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n\tIsCustomer?: boolean;\n\tIsPublic?: boolean;\n}\n\n/**\n * @public\n */\nexport interface OrderEventWebhookReturn {\n\tevent_id: number; // Name format overridden\n\torder_id: number; // Name format overridden\n\taccount_id: number; // Name format overridden\n\tuser_id: number; // Name format overridden\n\ttype: number; // Name format overridden\n\tentity_id?: string; // Name format overridden\n\tdescription?: string; // Name format overridden\n\tcreated: Date; // Name format overridden\n\turi?: string; // Name format overridden\n}\n\n/**\n * @public\n */\nexport interface OrderWebhookReturn {\n\torder_id?: number; // Name format overridden\n\taccount_id?: number; // Name format overridden\n\tbuyer_account_id?: number; // Name format overridden\n\tbuyer_id?: number; // Name format overridden\n\tcurrency?: string; // Name format overridden\n\ttype?: number; // Name format overridden\n\tstatus?: number; // Name format overridden\n\tstatus_name?: string; // Name format overridden\n\tamount?: number; // Name format overridden\n\tbalance?: number; // Name format overridden\n\tavailable_balance?: number; // Name format overridden\n\tsummary?: string; // Name format overridden\n\tdescription?: string; // Name format overridden\n\tinvoice_num?: string; // Name format overridden\n\tpurchase_order_num?: string; // Name format overridden\n\tstatus_change?: Date; // Name format overridden\n\tcreated?: Date; // Name format overridden\n\turi?: string; // Name format overridden\n\tparent_order_id?: string; // Name format overridden\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveDimensionsBaseModel}\n * @public\n */\nexport interface PackageModel extends NameableBaseModel, HaveATypeModel<TypeModel>, HaveDimensionsBaseModel {\n\tIsCustom?: boolean;\n\tDimensionalWeight?: number;\n\tDimensionalWeightUnitOfMeasure?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface PackageTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<EventModel>}\n * @public\n */\nexport interface PageViewEventModel extends AmARelationshipTableModel<EventModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveANullableContactBaseModel}\n * @public\n */\nexport interface PageViewModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel>, HaveANullableContactBaseModel {\n\tAddressID?: number;\n\tAddressKey?: string;\n\tAddress?: AddressModel;\n\tIPOrganizationID?: number;\n\tIPOrganizationKey?: string;\n\tIPOrganizationName?: string;\n\tIPOrganization?: IPOrganizationModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUser?: UserModel;\n\tCampaignID?: number;\n\tCampaign?: CampaignModel;\n\tCampaignKey?: string;\n\tCampaignName?: string;\n\tSiteDomainID?: number;\n\tSiteDomain?: SiteDomainModel;\n\tSiteDomainKey?: string;\n\tSiteDomainName?: string;\n\tVisitorID?: number;\n\tVisitor?: VisitorModel;\n\tVisitorKey?: string;\n\tVisitorName?: string;\n\tCategoryID?: number;\n\tCategoryKey?: string;\n\tCategoryName?: string;\n\tCategorySeoUrl?: string;\n\tCategory?: CategoryModel;\n\tContainsSocialProfile?: boolean;\n\tDelta?: number;\n\tDidBounce?: boolean;\n\tDuration?: number;\n\tEndedOn?: Date;\n\tIsFirstTrigger?: boolean;\n\tProductID?: number;\n\tProductKey?: string;\n\tProductName?: string;\n\tProductSeoUrl?: string;\n\tProduct?: ProductModel;\n\tScore?: number;\n\tSource?: number;\n\tStartedOn?: Date;\n\tTotalTriggers?: number;\n\tViewedOn?: Date;\n\tBrowser?: string;\n\tEntryPage?: string;\n\tExitPage?: string;\n\tFlash?: string;\n\tIPAddress?: string;\n\tKeywords?: string;\n\tLanguage?: string;\n\tOperatingSystem?: string;\n\tPartitionKey?: string;\n\tReferrer?: string;\n\tReferringHost?: string;\n\tRowKey?: string;\n\tTime?: string;\n\tTitle?: string;\n\tURI?: string;\n\tVisitKey?: string;\n}\n\n/**\n * @public\n */\nexport interface Paging {\n\tSize?: number;\n\tStartIndex?: number;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface PaymentMethodModel extends NameableBaseModel {\n}\n\n/**\n * @see {@link PagedResultsBase<PaymentMethodModel>}\n * @public\n */\nexport interface PaymentMethodPagedResults extends PagedResultsBase<PaymentMethodModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface PaymentMethodSearchModel extends NameableBaseSearchModel {\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface PaymentModel extends BaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tRoutingNumber?: string;\n\tAccountNumber?: string;\n\tCardNumber?: string;\n\tCVV?: string;\n\tCardType?: string;\n\tCardHolderName?: string;\n\tFirstName?: string;\n\tLastName?: string;\n\tZip?: string;\n\tToken?: string;\n\tInvoiceNumber?: string;\n\tPurchaseOrderNumber?: string;\n\tTransactionID?: string;\n\tReference1?: string;\n\tReference2?: string;\n\tReference3?: string;\n\tPayerIP?: string;\n\tPayerUserAgent?: string;\n\tPaymentDate?: Date;\n\tPayoneerAccountID?: number;\n\tPayoneerCustomerID?: number;\n\tCardTypeID?: number;\n\tReferenceName?: string;\n\tAmount?: number;\n\tAuthDate?: Date;\n\tAuthorized?: boolean;\n\tBillingContactID?: number;\n\tBillingContactKey?: string;\n\tBillingContact?: ContactModel;\n\tCurrencyID?: number;\n\tCurrencyKey?: string;\n\tCurrencyName?: string;\n\tCurrency?: CurrencyModel;\n\tExpirationMonth?: number;\n\tExpirationYear?: number;\n\tPaymentMethodID?: number;\n\tPaymentMethodKey?: string;\n\tPaymentMethodName?: string;\n\tPaymentMethod?: PaymentMethodModel;\n\tReceived?: boolean;\n\tReceivedDate?: Date;\n\tStatusDate?: Date;\n\tWalletID?: number;\n\tWalletKey?: string;\n\tWalletName?: string;\n\tWallet?: WalletModel;\n\tAccountNumberLast4?: string;\n\tAuthCode?: string;\n\tBankName?: string;\n\tCardMask?: string;\n\tCheckNumber?: string;\n\tExternalCustomerID?: string;\n\tExternalPaymentID?: string;\n\tLast4CardDigits?: string;\n\tPaymentData?: string;\n\tReferenceNo?: string;\n\tResponse?: string;\n\tRoutingNumberLast4?: string;\n\tTransactionNumber?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<PaymentModel>}\n * @public\n */\nexport interface PaymentPagedResults extends PagedResultsBase<PaymentModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface PaymentStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface PaymentTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface PayMultipleInvoicesResponse {\n\tTransactionNumber?: string;\n\tPaymentStatusKey?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface PhonePrefixLookupModel extends BaseModel {\n\tCountryID?: number;\n\tCountryKey?: string;\n\tCountryName?: string;\n\tCountryCode?: string;\n\tCountry?: CountryModel;\n\tRegionID?: number;\n\tRegionKey?: string;\n\tRegionName?: string;\n\tRegionCode?: string;\n\tRegion?: RegionModel;\n\tCityName?: string;\n\tPrefix?: string;\n\tTimeZone?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<PhonePrefixLookupModel>}\n * @public\n */\nexport interface PhonePrefixLookupPagedResults extends PagedResultsBase<PhonePrefixLookupModel> {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface PrescriptionModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tWrittenDate?: Date;\n\tDaysSupply?: number;\n\tProductID?: number;\n\tProductKey?: string;\n\tProductName?: string;\n\tProductSeoUrl?: string;\n\tProduct?: ProductModel;\n\tQuantityFilled?: number;\n\tQuantityOrdered?: number;\n\tRefillNumber?: number;\n\tRefillsRemaining?: number;\n\tDoctorID?: number;\n\tDoctorKey?: string;\n\tDoctorName?: string;\n\tDoctor?: AccountModel;\n\tDoseSpotPrescriptionID?: number;\n\tExpirationDate?: Date;\n\tPatientID?: number;\n\tPatientKey?: string;\n\tPatientName?: string;\n\tPatient?: AccountModel;\n\tDosage?: string;\n\tNDCNumber?: string;\n\tRXNumber?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<PrescriptionModel>}\n * @public\n */\nexport interface PrescriptionPagedResults extends PagedResultsBase<PrescriptionModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface PrescriptionSearchModel extends NameableBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tMinWrittenDate?: Date;\n\tMaxWrittenDate?: Date;\n\tMatchWrittenDate?: Date;\n\tMinDaysSupply?: number;\n\tMaxDaysSupply?: number;\n\tMatchDaysSupply?: number;\n\tProductID?: number;\n\tMinQuantityFilled?: number;\n\tMaxQuantityFilled?: number;\n\tMatchQuantityFilled?: number;\n\tMinQuantityOrdered?: number;\n\tMaxQuantityOrdered?: number;\n\tMatchQuantityOrdered?: number;\n\tMinRefillNumber?: number;\n\tMaxRefillNumber?: number;\n\tMatchRefillNumber?: number;\n\tMinRefillsRemaining?: number;\n\tMaxRefillsRemaining?: number;\n\tMatchRefillsRemaining?: number;\n\tDoctorID?: number;\n\tDoctorIDIncludeNull?: boolean;\n\tMinDoseSpotPrescriptionID?: number;\n\tMaxDoseSpotPrescriptionID?: number;\n\tMatchDoseSpotPrescriptionID?: number;\n\tMatchDoseSpotPrescriptionIDIncludeNull?: boolean;\n\tMinExpirationDate?: Date;\n\tMaxExpirationDate?: Date;\n\tMatchExpirationDate?: Date;\n\tMatchExpirationDateIncludeNull?: boolean;\n\tPatientID?: number;\n\tPatientIDIncludeNull?: boolean;\n\tDosage?: string;\n\tDosageStrict?: boolean;\n\tDosageIncludeNull?: boolean;\n\tNDCNumber?: string;\n\tNDCNumberStrict?: boolean;\n\tNDCNumberIncludeNull?: boolean;\n\tRXNumber?: string;\n\tRXNumberStrict?: boolean;\n\tRXNumberIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<ProductModel>}\n * @public\n */\nexport interface PreviouslyOrderedProductPagedResults extends PagedResultsBase<ProductModel> {\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface PricePointModel extends TypableBaseModel {\n}\n\n/**\n * @see {@link PagedResultsBase<PricePointModel>}\n * @public\n */\nexport interface PricePointPagedResults extends PagedResultsBase<PricePointModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface PricePointSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @public\n */\nexport interface PriceRuleAccountModel extends AmARelationshipTableModel<AccountModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<TypeModel>}\n * @public\n */\nexport interface PriceRuleAccountTypeModel extends AmARelationshipTableModel<TypeModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tSlaveDisplayName?: string;\n\tSlaveTranslationKey?: string;\n\tSlaveSortOrder?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<BrandModel>}\n * @public\n */\nexport interface PriceRuleBrandModel extends AmARelationshipTableModel<BrandModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CategoryModel>}\n * @public\n */\nexport interface PriceRuleCategoryModel extends AmARelationshipTableModel<CategoryModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CountryModel>}\n * @public\n */\nexport interface PriceRuleCountryModel extends AmARelationshipTableModel<CountryModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<FranchiseModel>}\n * @public\n */\nexport interface PriceRuleFranchiseModel extends AmARelationshipTableModel<FranchiseModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ManufacturerModel>}\n * @public\n */\nexport interface PriceRuleManufacturerModel extends AmARelationshipTableModel<ManufacturerModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByAccountsBaseModel<PriceRuleAccountModel>}\n * @see {@link AmFilterableByBrandsBaseModel<PriceRuleBrandModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<PriceRuleFranchiseModel>}\n * @see {@link AmFilterableByManufacturersBaseModel<PriceRuleManufacturerModel>}\n * @see {@link AmFilterableByProductsBaseModel<PriceRuleProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<PriceRuleStoreModel>}\n * @see {@link AmFilterableByVendorsBaseModel<PriceRuleVendorModel>}\n * @public\n */\nexport interface PriceRuleModel extends NameableBaseModel, AmFilterableByAccountsBaseModel<PriceRuleAccountModel>, AmFilterableByBrandsBaseModel<PriceRuleBrandModel>, AmFilterableByFranchisesBaseModel<PriceRuleFranchiseModel>, AmFilterableByManufacturersBaseModel<PriceRuleManufacturerModel>, AmFilterableByProductsBaseModel<PriceRuleProductModel>, AmFilterableByStoresBaseModel<PriceRuleStoreModel>, AmFilterableByVendorsBaseModel<PriceRuleVendorModel> {\n\tIsExclusive?: boolean;\n\tIsMarkup?: boolean;\n\tIsOnlyForAnonymousUsers?: boolean;\n\tIsPercentage?: boolean;\n\tUsePriceBase?: boolean;\n\tPriceAdjustment?: number;\n\tPriceRuleAccountTypes?: Array<PriceRuleAccountTypeModel>;\n\tPriceRuleCategories?: Array<PriceRuleCategoryModel>;\n\tPriceRuleCountries?: Array<PriceRuleCountryModel>;\n\tPriceRuleProductTypes?: Array<PriceRuleProductTypeModel>;\n\tPriceRuleUserRoles?: Array<PriceRuleUserRoleModel>;\n\tCurrencyID?: number;\n\tCurrencyKey?: string;\n\tCurrencyName?: string;\n\tCurrency?: CurrencyModel;\n\tEndDate?: Date;\n\tMaxQuantity?: number;\n\tMinQuantity?: number;\n\tPriority?: number;\n\tStartDate?: Date;\n\tUnitOfMeasure?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<PriceRuleModel>}\n * @public\n */\nexport interface PriceRulePagedResults extends PagedResultsBase<PriceRuleModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @public\n */\nexport interface PriceRuleProductModel extends AmARelationshipTableModel<ProductModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tOverridePrice?: boolean;\n\tOverrideBasePrice?: number;\n\tOverrideSalePrice?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<TypeModel>}\n * @public\n */\nexport interface PriceRuleProductTypeModel extends AmARelationshipTableModel<TypeModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tSlaveDisplayName?: string;\n\tSlaveTranslationKey?: string;\n\tSlaveSortOrder?: number;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByVendorBaseSearchModel}\n * @public\n */\nexport interface PriceRuleSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByVendorBaseSearchModel {\n\tPriority?: number;\n\tMinQuantityMin?: number;\n\tMinQuantityMax?: number;\n\tMaxQuantityMin?: number;\n\tMaxQuantityMax?: number;\n\tStartDateMin?: Date;\n\tStartDateMax?: Date;\n\tEndDateMin?: Date;\n\tEndDateMax?: Date;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tIsExclusive?: boolean;\n\tIsMarkup?: boolean;\n\tIsOnlyForAnonymousUsers?: boolean;\n\tIsPercentage?: boolean;\n\tUsePriceBase?: boolean;\n\tMinPriceAdjustment?: number;\n\tMaxPriceAdjustment?: number;\n\tMatchPriceAdjustment?: number;\n\tCurrencyID?: number;\n\tCurrencyIDIncludeNull?: boolean;\n\tMinEndDate?: Date;\n\tMaxEndDate?: Date;\n\tMatchEndDate?: Date;\n\tMatchEndDateIncludeNull?: boolean;\n\tMinMaxQuantity?: number;\n\tMaxMaxQuantity?: number;\n\tMatchMaxQuantity?: number;\n\tMatchMaxQuantityIncludeNull?: boolean;\n\tMinMinQuantity?: number;\n\tMaxMinQuantity?: number;\n\tMatchMinQuantity?: number;\n\tMatchMinQuantityIncludeNull?: boolean;\n\tMinPriority?: number;\n\tMaxPriority?: number;\n\tMatchPriority?: number;\n\tMatchPriorityIncludeNull?: boolean;\n\tMinStartDate?: Date;\n\tMaxStartDate?: Date;\n\tMatchStartDate?: Date;\n\tMatchStartDateIncludeNull?: boolean;\n\tUnitOfMeasure?: string;\n\tUnitOfMeasureStrict?: boolean;\n\tUnitOfMeasureIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<StoreModel>}\n * @public\n */\nexport interface PriceRuleStoreModel extends AmARelationshipTableModel<StoreModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface PriceRuleUserRoleModel extends BaseModel {\n\tPriceRuleID?: number;\n\tPriceRuleKey?: string;\n\tPriceRuleName?: string;\n\tPriceRule?: PriceRuleModel;\n\tRoleName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<VendorModel>}\n * @public\n */\nexport interface PriceRuleVendorModel extends AmARelationshipTableModel<VendorModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ProductAssociationModel extends AmARelationshipTableModel<ProductModel>, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel, HaveATypeModel<TypeModel> {\n\tMasterPrimaryImageFileName?: string;\n\tMasterIsVisible: boolean;\n\tMasterSerializableAttributes?: SerializableAttributesDictionary;\n\tSlavePrimaryImageFileName?: string;\n\tSlaveIsVisible: boolean;\n\tSlaveSerializableAttributes?: SerializableAttributesDictionary;\n\tMasterName?: string;\n\tMasterSeoUrl?: string;\n\tSlaveName?: string;\n\tSlaveSeoUrl?: string;\n\tQuantity?: number;\n\tSortOrder?: number;\n\tUnitOfMeasure?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface ProductAssociationTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface ProductByCategoryModel {\n\tCategoryID?: number;\n\tCategoryName?: string;\n\tSortOrder?: number;\n\tProducts?: Array<ProductModel>;\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface ProductCatalogSearchForm extends SearchFormBase {\n\tBrandName?: string;\n\tWithLots?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CategoryModel>}\n * @public\n */\nexport interface ProductCategoryModel extends AmARelationshipTableModel<CategoryModel> {\n\tSlaveSeoUrl?: string;\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tSortOrder?: number;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface ProductCategorySelectorModel extends NameableBaseModel {\n\tSeoUrl?: string;\n\tParentID?: number;\n\tSortOrder?: number;\n\tHasChildren?: boolean;\n\tIsSelfSelected: boolean;\n\tIsChildSelected: boolean;\n\tChildren?: Array<ProductCategorySelectorModel>;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByProductBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ProductDownloadModel extends NameableBaseModel, AmFilterableByProductBaseModel, HaveATypeModel<TypeModel> {\n\tIsAbsoluteUrl?: boolean;\n\tAbsoluteUrl?: string;\n\tRelativeUrl?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface ProductDownloadTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface ProductFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n\tMasterSeoUrl?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ProductImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<ProductImageModel>}\n * @public\n */\nexport interface ProductImagePagedResults extends PagedResultsBase<ProductImageModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface ProductImageSearchModel extends NameableBaseSearchModel, HaveATypeSearchModel {\n\tIsPrimary?: boolean;\n\tOriginalIsStoredInDB?: boolean;\n\tThumbnailIsStoredInDB?: boolean;\n\tMinLatitude?: number;\n\tMaxLatitude?: number;\n\tMatchLatitude?: number;\n\tMatchLatitudeIncludeNull?: boolean;\n\tMinLongitude?: number;\n\tMaxLongitude?: number;\n\tMatchLongitude?: number;\n\tMatchLongitudeIncludeNull?: boolean;\n\tMasterID?: number;\n\tMasterIDIncludeNull?: boolean;\n\tMinMediaDate?: Date;\n\tMaxMediaDate?: Date;\n\tMatchMediaDate?: Date;\n\tMatchMediaDateIncludeNull?: boolean;\n\tMinOriginalHeight?: number;\n\tMaxOriginalHeight?: number;\n\tMatchOriginalHeight?: number;\n\tMatchOriginalHeightIncludeNull?: boolean;\n\tMinOriginalWidth?: number;\n\tMaxOriginalWidth?: number;\n\tMatchOriginalWidth?: number;\n\tMatchOriginalWidthIncludeNull?: boolean;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tMinThumbnailHeight?: number;\n\tMaxThumbnailHeight?: number;\n\tMatchThumbnailHeight?: number;\n\tMatchThumbnailHeightIncludeNull?: boolean;\n\tMinThumbnailWidth?: number;\n\tMaxThumbnailWidth?: number;\n\tMatchThumbnailWidth?: number;\n\tMatchThumbnailWidthIncludeNull?: boolean;\n\tAuthor?: string;\n\tAuthorStrict?: boolean;\n\tAuthorIncludeNull?: boolean;\n\tCopyright?: string;\n\tCopyrightStrict?: boolean;\n\tCopyrightIncludeNull?: boolean;\n\tDisplayName?: string;\n\tDisplayNameStrict?: boolean;\n\tDisplayNameIncludeNull?: boolean;\n\tLocation?: string;\n\tLocationStrict?: boolean;\n\tLocationIncludeNull?: boolean;\n\tOriginalFileFormat?: string;\n\tOriginalFileFormatStrict?: boolean;\n\tOriginalFileFormatIncludeNull?: boolean;\n\tOriginalFileName?: string;\n\tOriginalFileNameStrict?: boolean;\n\tOriginalFileNameIncludeNull?: boolean;\n\tSeoTitle?: string;\n\tSeoTitleStrict?: boolean;\n\tSeoTitleIncludeNull?: boolean;\n\tThumbnailFileFormat?: string;\n\tThumbnailFileFormatStrict?: boolean;\n\tThumbnailFileFormatIncludeNull?: boolean;\n\tThumbnailFileName?: string;\n\tThumbnailFileNameStrict?: boolean;\n\tThumbnailFileNameIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface ProductImageTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface ProductIndexableModel extends IndexableModelBase {\n\tSuggestedByBrandName?: any;\n\tSuggestedByManufacturerPartNumber?: any;\n\tSuggestedByShortDescription?: any;\n\tManufacturerPartNumber?: string;\n\tShortDescription?: string;\n\tBrandName?: string;\n\tBrandNameAgg?: string;\n\tIsVisible: boolean;\n\tIsQuotable?: boolean;\n\tIsTaxable?: boolean;\n\tIsSale?: boolean;\n\tIsFreeShipping?: boolean;\n\tUnitOfMeasure?: string;\n\tAvailableStartDate?: Date;\n\tAvailableEndDate?: Date;\n\tWeight?: number;\n\tWeightUnitOfMeasure?: string;\n\tWidth?: number;\n\tWidthUnitOfMeasure?: string;\n\tDepth?: number;\n\tDepthUnitOfMeasure?: string;\n\tHeight?: number;\n\tHeightUnitOfMeasure?: string;\n\tTotalPurchasedAmount?: number;\n\tTotalPurchasedAmountCurrencyID?: number;\n\tTotalPurchasedQuantity?: number;\n\tProductVariantAttributes?: Array<IndexableVariantAttributesFilter>;\n\tHasLot: boolean;\n\tLotData?: IndexableLotData;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<InventoryLocationSectionModel>}\n * @public\n */\nexport interface ProductInventoryLocationSectionModel extends AmARelationshipTableModel<InventoryLocationSectionModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tQuantity?: number;\n\tQuantityAllocated?: number;\n\tQuantityBroken?: number;\n\tQuantityPreSold?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<ProductInventoryLocationSectionModel>}\n * @public\n */\nexport interface ProductInventoryLocationSectionPagedResults extends PagedResultsBase<ProductInventoryLocationSectionModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @public\n */\nexport interface ProductInventoryLocationSectionSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByProductBaseSearchModel {\n\tInventoryLocationID?: number;\n\tInventoryLocationKey?: string;\n\tInventoryLocationName?: string;\n\tHasBrokenQuantity?: boolean;\n\tHasPreSoldQuantity?: boolean;\n\tStoreID?: number;\n\tStoreIDs?: Array<number>;\n\tProductIDs?: Array<number>;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tMinQuantity?: number;\n\tMaxQuantity?: number;\n\tMatchQuantity?: number;\n\tMatchQuantityIncludeNull?: boolean;\n\tMinQuantityAllocated?: number;\n\tMaxQuantityAllocated?: number;\n\tMatchQuantityAllocated?: number;\n\tMatchQuantityAllocatedIncludeNull?: boolean;\n\tMinQuantityBroken?: number;\n\tMaxQuantityBroken?: number;\n\tMatchQuantityBroken?: number;\n\tMatchQuantityBrokenIncludeNull?: boolean;\n\tMinQuantityPreSold?: number;\n\tMaxQuantityPreSold?: number;\n\tMatchQuantityPreSold?: number;\n\tMatchQuantityPreSoldIncludeNull?: boolean;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveSeoBaseModel}\n * @see {@link HaveImagesBaseModel<ProductImageModel>}\n * @see {@link HaveStoredFilesBaseModel<ProductFileModel>}\n * @see {@link AmFilterableByAccountsBaseModel<AccountProductModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandProductModel>}\n * @see {@link AmFilterableByCategoriesBaseModel<ProductCategoryModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseProductModel>}\n * @see {@link AmFilterableByManufacturersBaseModel<ManufacturerProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreProductModel>}\n * @see {@link AmFilterableByVendorsBaseModel<VendorProductModel>}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveNullableDimensionsBaseModel}\n * @see {@link HaveRequiresRolesBaseModel}\n * @public\n */\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 {\n\tProductsAssociatedWith?: Array<ProductAssociationModel>;\n\tIsVendorAdmin?: boolean;\n\tVendorAdminID?: number;\n\tIsManufacturerAdmin?: boolean;\n\tManufacturerAdminID?: number;\n\tLotID?: number;\n\tLotKey?: string;\n\tLotName?: string;\n\tLot?: LotModel;\n\tRepeatTypeAbbreviation?: string;\n\tRepeatTypePeriods?: number;\n\tReviews?: Array<ReviewModel>;\n\tAllowBackOrder?: boolean;\n\tAllowPreSale?: boolean;\n\tDocumentRequiredForPurchaseOverrideFeeIsPercent?: boolean;\n\tDropShipOnly?: boolean;\n\tIsDiscontinued?: boolean;\n\tIsEligibleForReturn?: boolean;\n\tIsFreeShipping?: boolean;\n\tIsTaxable?: boolean;\n\tIsUnlimitedStock?: boolean;\n\tIsVisible?: boolean;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeIsPercent?: boolean;\n\tNothingToShip?: boolean;\n\tRequiresBloodwork?: boolean;\n\tShippingLeadTimeIsCalendarDays?: boolean;\n\tProductAssociations?: Array<ProductAssociationModel>;\n\tProductDownloads?: Array<ProductDownloadModel>;\n\tProductNotifications?: Array<ProductNotificationModel>;\n\tProductRestrictions?: Array<ProductRestrictionModel>;\n\tProductShipCarrierMethods?: Array<ProductShipCarrierMethodModel>;\n\tRegions?: Array<ProductRegionModel>;\n\tAvailableEndDate?: Date;\n\tAvailableStartDate?: Date;\n\tDocumentRequiredForPurchaseOverrideFee?: number;\n\tFlatShippingCharge?: number;\n\tHandlingCharge?: number;\n\tKitBaseQuantityPriceMultiplier?: number;\n\tMasterPackID?: number;\n\tMasterPackKey?: string;\n\tMasterPackName?: string;\n\tMasterPack?: PackageModel;\n\tMaximumBackOrderPurchaseQuantity?: number;\n\tMaximumBackOrderPurchaseQuantityGlobal?: number;\n\tMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\n\tMaximumPrePurchaseQuantity?: number;\n\tMaximumPrePurchaseQuantityGlobal?: number;\n\tMaximumPrePurchaseQuantityIfPastPurchased?: number;\n\tMaximumPurchaseQuantity?: number;\n\tMaximumPurchaseQuantityIfPastPurchased?: number;\n\tMinimumPurchaseQuantity?: number;\n\tMinimumPurchaseQuantityIfPastPurchased?: number;\n\tMustPurchaseInMultiplesOfAmount?: number;\n\tMustPurchaseInMultiplesOfAmountOverrideFee?: number;\n\tPackageID?: number;\n\tPackageKey?: string;\n\tPackageName?: string;\n\tPackage?: PackageModel;\n\tPalletID?: number;\n\tPalletKey?: string;\n\tPalletName?: string;\n\tPallet?: PackageModel;\n\tPreSellEndDate?: Date;\n\tQuantityLayersPerPallet?: number;\n\tQuantityMasterPackLayersPerPallet?: number;\n\tQuantityMasterPackPerLayer?: number;\n\tQuantityMasterPackPerPallet?: number;\n\tQuantityPerLayer?: number;\n\tQuantityPerMasterPack?: number;\n\tQuantityPerPallet?: number;\n\tRepeatTypeID?: number;\n\tRepeatTypeKey?: string;\n\tRepeatTypeName?: string;\n\tRepeatType?: RepeatTypeModel;\n\tRestockingFeeAmount?: number;\n\tRestockingFeeAmountCurrencyID?: number;\n\tRestockingFeeAmountCurrencyKey?: string;\n\tRestockingFeeAmountCurrencyName?: string;\n\tRestockingFeeAmountCurrency?: CurrencyModel;\n\tRestockingFeePercent?: number;\n\tShippingLeadTimeDays?: number;\n\tSortOrder?: number;\n\tTotalPurchasedAmount?: number;\n\tTotalPurchasedAmountCurrencyID?: number;\n\tTotalPurchasedAmountCurrencyKey?: string;\n\tTotalPurchasedAmountCurrencyName?: string;\n\tTotalPurchasedAmountCurrency?: CurrencyModel;\n\tTotalPurchasedQuantity?: number;\n\tBrandName?: string;\n\tDocumentRequiredForPurchase?: string;\n\tDocumentRequiredForPurchaseExpiredWarningMessage?: string;\n\tDocumentRequiredForPurchaseMissingWarningMessage?: string;\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessage?: string;\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessage?: string;\n\tIndexSynonyms?: string;\n\tManufacturerPartNumber?: string;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessage?: string;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessage?: string;\n\tMustPurchaseInMultiplesOfAmountWarningMessage?: string;\n\tNDCNumber?: string;\n\tSeoClientScript?: string;\n\tShortDescription?: string;\n\tTaxCode?: string;\n\tUnitOfMeasure?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByProductBaseModel}\n * @public\n */\nexport interface ProductNotificationModel extends NameableBaseModel, AmFilterableByProductBaseModel {\n}\n\n/**\n * @see {@link PagedResultsBase<ProductModel>}\n * @public\n */\nexport interface ProductPagedResults extends PagedResultsBase<ProductModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<RegionModel>}\n * @public\n */\nexport interface ProductRegionModel extends AmARelationshipTableModel<RegionModel> {\n\tMasterName?: string;\n\tMasterSeoUrl?: string;\n\tSlaveName?: string;\n\tRequiresTelehealth?: boolean;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link AmFilterableByProductBaseModel}\n * @public\n */\nexport interface ProductRestrictionModel extends BaseModel, AmFilterableByProductBaseModel {\n\tCanPurchaseDomestically?: boolean;\n\tCanPurchaseInternationally?: boolean;\n\tCanPurchaseIntraRegion?: boolean;\n\tCanShipDomestically?: boolean;\n\tCanShipInternationally?: boolean;\n\tCanShipIntraRegion?: boolean;\n\tOverrideWithAccountTypeID?: number;\n\tOverrideWithAccountTypeKey?: string;\n\tOverrideWithAccountTypeName?: string;\n\tOverrideWithAccountTypeDisplayName?: string;\n\tOverrideWithAccountTypeTranslationKey?: string;\n\tOverrideWithAccountTypeSortOrder?: number;\n\tOverrideWithAccountType?: TypeModel;\n\tRestrictionsApplyToCountryID?: number;\n\tRestrictionsApplyToCountryKey?: string;\n\tRestrictionsApplyToCountryName?: string;\n\tRestrictionsApplyToCountryCode?: string;\n\tRestrictionsApplyToCountry?: CountryModel;\n\tRestrictionsApplyToRegionID?: number;\n\tRestrictionsApplyToRegionKey?: string;\n\tRestrictionsApplyToRegionName?: string;\n\tRestrictionsApplyToRegionCode?: string;\n\tRestrictionsApplyToRegion?: RegionModel;\n\tOverrideWithRoles?: string;\n\tRestrictionsApplyToCity?: string;\n\tRestrictionsApplyToPostalCode?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface ProductReviewInformationModel extends BaseModel {\n\tProductID: number;\n\tReviewTypeID?: number;\n\tValue?: number;\n\tCount: number;\n\tReviews?: Array<ReviewModel>;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByCategoryBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByVendorBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface ProductSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tHasAnyAncestorCategoryID?: number;\n\tParentCategories?: Array<number>;\n\tSearchTerm?: string;\n\tPrice?: number;\n\tWeight?: number;\n\tCategoryTypeName?: string;\n\tKeywords?: string;\n\tComparisonIDs?: Array<number>;\n\tProductIDs?: Array<number>;\n\tBrandCategoryIDs?: Array<number>;\n\tCategoryJsonAttributes?: Dictionary<Array<string>>;\n\tIsVendorAdmin?: boolean;\n\tVendorAdminID?: number;\n\tIsManufacturerAdmin?: boolean;\n\tManufacturerAdminID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tSeoKeywords?: string;\n\tSeoKeywordsStrict?: boolean;\n\tSeoKeywordsIncludeNull?: boolean;\n\tSeoUrl?: string;\n\tSeoUrlStrict?: boolean;\n\tSeoUrlIncludeNull?: boolean;\n\tSeoDescription?: string;\n\tSeoDescriptionStrict?: boolean;\n\tSeoDescriptionIncludeNull?: boolean;\n\tSeoMetaData?: string;\n\tSeoMetaDataStrict?: boolean;\n\tSeoMetaDataIncludeNull?: boolean;\n\tSeoPageTitle?: string;\n\tSeoPageTitleStrict?: boolean;\n\tSeoPageTitleIncludeNull?: boolean;\n\tAllowBackOrder?: boolean;\n\tAllowPreSale?: boolean;\n\tDocumentRequiredForPurchaseOverrideFeeIsPercent?: boolean;\n\tDropShipOnly?: boolean;\n\tIsDiscontinued?: boolean;\n\tIsEligibleForReturn?: boolean;\n\tIsFreeShipping?: boolean;\n\tIsTaxable?: boolean;\n\tIsUnlimitedStock?: boolean;\n\tIsVisible?: boolean;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeIsPercent?: boolean;\n\tNothingToShip?: boolean;\n\tRequiresBloodwork?: boolean;\n\tShippingLeadTimeIsCalendarDays?: boolean;\n\tMinAvailableEndDate?: Date;\n\tMaxAvailableEndDate?: Date;\n\tMatchAvailableEndDate?: Date;\n\tMatchAvailableEndDateIncludeNull?: boolean;\n\tMinAvailableStartDate?: Date;\n\tMaxAvailableStartDate?: Date;\n\tMatchAvailableStartDate?: Date;\n\tMatchAvailableStartDateIncludeNull?: boolean;\n\tMinDepth?: number;\n\tMaxDepth?: number;\n\tMatchDepth?: number;\n\tMatchDepthIncludeNull?: boolean;\n\tMinDocumentRequiredForPurchaseOverrideFee?: number;\n\tMaxDocumentRequiredForPurchaseOverrideFee?: number;\n\tMatchDocumentRequiredForPurchaseOverrideFee?: number;\n\tMatchDocumentRequiredForPurchaseOverrideFeeIncludeNull?: boolean;\n\tMinFlatShippingCharge?: number;\n\tMaxFlatShippingCharge?: number;\n\tMatchFlatShippingCharge?: number;\n\tMatchFlatShippingChargeIncludeNull?: boolean;\n\tMinHandlingCharge?: number;\n\tMaxHandlingCharge?: number;\n\tMatchHandlingCharge?: number;\n\tMatchHandlingChargeIncludeNull?: boolean;\n\tMinHeight?: number;\n\tMaxHeight?: number;\n\tMatchHeight?: number;\n\tMatchHeightIncludeNull?: boolean;\n\tMinKitBaseQuantityPriceMultiplier?: number;\n\tMaxKitBaseQuantityPriceMultiplier?: number;\n\tMatchKitBaseQuantityPriceMultiplier?: number;\n\tMatchKitBaseQuantityPriceMultiplierIncludeNull?: boolean;\n\tMasterPackID?: number;\n\tMasterPackIDIncludeNull?: boolean;\n\tMinMaximumBackOrderPurchaseQuantity?: number;\n\tMaxMaximumBackOrderPurchaseQuantity?: number;\n\tMatchMaximumBackOrderPurchaseQuantity?: number;\n\tMatchMaximumBackOrderPurchaseQuantityIncludeNull?: boolean;\n\tMinMaximumBackOrderPurchaseQuantityGlobal?: number;\n\tMaxMaximumBackOrderPurchaseQuantityGlobal?: number;\n\tMatchMaximumBackOrderPurchaseQuantityGlobal?: number;\n\tMatchMaximumBackOrderPurchaseQuantityGlobalIncludeNull?: boolean;\n\tMinMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\n\tMaxMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\n\tMatchMaximumBackOrderPurchaseQuantityIfPastPurchased?: number;\n\tMatchMaximumBackOrderPurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\n\tMinMaximumPrePurchaseQuantity?: number;\n\tMaxMaximumPrePurchaseQuantity?: number;\n\tMatchMaximumPrePurchaseQuantity?: number;\n\tMatchMaximumPrePurchaseQuantityIncludeNull?: boolean;\n\tMinMaximumPrePurchaseQuantityGlobal?: number;\n\tMaxMaximumPrePurchaseQuantityGlobal?: number;\n\tMatchMaximumPrePurchaseQuantityGlobal?: number;\n\tMatchMaximumPrePurchaseQuantityGlobalIncludeNull?: boolean;\n\tMinMaximumPrePurchaseQuantityIfPastPurchased?: number;\n\tMaxMaximumPrePurchaseQuantityIfPastPurchased?: number;\n\tMatchMaximumPrePurchaseQuantityIfPastPurchased?: number;\n\tMatchMaximumPrePurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\n\tMinMaximumPurchaseQuantity?: number;\n\tMaxMaximumPurchaseQuantity?: number;\n\tMatchMaximumPurchaseQuantity?: number;\n\tMatchMaximumPurchaseQuantityIncludeNull?: boolean;\n\tMinMaximumPurchaseQuantityIfPastPurchased?: number;\n\tMaxMaximumPurchaseQuantityIfPastPurchased?: number;\n\tMatchMaximumPurchaseQuantityIfPastPurchased?: number;\n\tMatchMaximumPurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\n\tMinMinimumPurchaseQuantity?: number;\n\tMaxMinimumPurchaseQuantity?: number;\n\tMatchMinimumPurchaseQuantity?: number;\n\tMatchMinimumPurchaseQuantityIncludeNull?: boolean;\n\tMinMinimumPurchaseQuantityIfPastPurchased?: number;\n\tMaxMinimumPurchaseQuantityIfPastPurchased?: number;\n\tMatchMinimumPurchaseQuantityIfPastPurchased?: number;\n\tMatchMinimumPurchaseQuantityIfPastPurchasedIncludeNull?: boolean;\n\tMinMustPurchaseInMultiplesOfAmount?: number;\n\tMaxMustPurchaseInMultiplesOfAmount?: number;\n\tMatchMustPurchaseInMultiplesOfAmount?: number;\n\tMatchMustPurchaseInMultiplesOfAmountIncludeNull?: boolean;\n\tMinMustPurchaseInMultiplesOfAmountOverrideFee?: number;\n\tMaxMustPurchaseInMultiplesOfAmountOverrideFee?: number;\n\tMatchMustPurchaseInMultiplesOfAmountOverrideFee?: number;\n\tMatchMustPurchaseInMultiplesOfAmountOverrideFeeIncludeNull?: boolean;\n\tPackageID?: number;\n\tPackageIDIncludeNull?: boolean;\n\tPalletID?: number;\n\tPalletIDIncludeNull?: boolean;\n\tMinPreSellEndDate?: Date;\n\tMaxPreSellEndDate?: Date;\n\tMatchPreSellEndDate?: Date;\n\tMatchPreSellEndDateIncludeNull?: boolean;\n\tMinPriceBase?: number;\n\tMaxPriceBase?: number;\n\tMatchPriceBase?: number;\n\tMatchPriceBaseIncludeNull?: boolean;\n\tMinPriceMsrp?: number;\n\tMaxPriceMsrp?: number;\n\tMatchPriceMsrp?: number;\n\tMatchPriceMsrpIncludeNull?: boolean;\n\tMinPriceReduction?: number;\n\tMaxPriceReduction?: number;\n\tMatchPriceReduction?: number;\n\tMatchPriceReductionIncludeNull?: boolean;\n\tMinPriceSale?: number;\n\tMaxPriceSale?: number;\n\tMatchPriceSale?: number;\n\tMatchPriceSaleIncludeNull?: boolean;\n\tMinQuantityLayersPerPallet?: number;\n\tMaxQuantityLayersPerPallet?: number;\n\tMatchQuantityLayersPerPallet?: number;\n\tMatchQuantityLayersPerPalletIncludeNull?: boolean;\n\tMinQuantityMasterPackLayersPerPallet?: number;\n\tMaxQuantityMasterPackLayersPerPallet?: number;\n\tMatchQuantityMasterPackLayersPerPallet?: number;\n\tMatchQuantityMasterPackLayersPerPalletIncludeNull?: boolean;\n\tMinQuantityMasterPackPerLayer?: number;\n\tMaxQuantityMasterPackPerLayer?: number;\n\tMatchQuantityMasterPackPerLayer?: number;\n\tMatchQuantityMasterPackPerLayerIncludeNull?: boolean;\n\tMinQuantityMasterPackPerPallet?: number;\n\tMaxQuantityMasterPackPerPallet?: number;\n\tMatchQuantityMasterPackPerPallet?: number;\n\tMatchQuantityMasterPackPerPalletIncludeNull?: boolean;\n\tMinQuantityPerLayer?: number;\n\tMaxQuantityPerLayer?: number;\n\tMatchQuantityPerLayer?: number;\n\tMatchQuantityPerLayerIncludeNull?: boolean;\n\tMinQuantityPerMasterPack?: number;\n\tMaxQuantityPerMasterPack?: number;\n\tMatchQuantityPerMasterPack?: number;\n\tMatchQuantityPerMasterPackIncludeNull?: boolean;\n\tMinQuantityPerPallet?: number;\n\tMaxQuantityPerPallet?: number;\n\tMatchQuantityPerPallet?: number;\n\tMatchQuantityPerPalletIncludeNull?: boolean;\n\tRepeatTypeID?: number;\n\tRepeatTypeIDIncludeNull?: boolean;\n\tMinRestockingFeeAmount?: number;\n\tMaxRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\n\tRestockingFeeAmountCurrencyID?: number;\n\tRestockingFeeAmountCurrencyIDIncludeNull?: boolean;\n\tMinRestockingFeePercent?: number;\n\tMaxRestockingFeePercent?: number;\n\tMatchRestockingFeePercent?: number;\n\tMatchRestockingFeePercentIncludeNull?: boolean;\n\tMinShippingLeadTimeDays?: number;\n\tMaxShippingLeadTimeDays?: number;\n\tMatchShippingLeadTimeDays?: number;\n\tMatchShippingLeadTimeDaysIncludeNull?: boolean;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tMinStockQuantity?: number;\n\tMaxStockQuantity?: number;\n\tMatchStockQuantity?: number;\n\tMatchStockQuantityIncludeNull?: boolean;\n\tMinStockQuantityAllocated?: number;\n\tMaxStockQuantityAllocated?: number;\n\tMatchStockQuantityAllocated?: number;\n\tMatchStockQuantityAllocatedIncludeNull?: boolean;\n\tMinStockQuantityPreSold?: number;\n\tMaxStockQuantityPreSold?: number;\n\tMatchStockQuantityPreSold?: number;\n\tMatchStockQuantityPreSoldIncludeNull?: boolean;\n\tMinTotalPurchasedAmount?: number;\n\tMaxTotalPurchasedAmount?: number;\n\tMatchTotalPurchasedAmount?: number;\n\tMatchTotalPurchasedAmountIncludeNull?: boolean;\n\tTotalPurchasedAmountCurrencyID?: number;\n\tTotalPurchasedAmountCurrencyIDIncludeNull?: boolean;\n\tMinTotalPurchasedQuantity?: number;\n\tMaxTotalPurchasedQuantity?: number;\n\tMatchTotalPurchasedQuantity?: number;\n\tMatchTotalPurchasedQuantityIncludeNull?: boolean;\n\tMinWeight?: number;\n\tMaxWeight?: number;\n\tMatchWeight?: number;\n\tMatchWeightIncludeNull?: boolean;\n\tMinWidth?: number;\n\tMaxWidth?: number;\n\tMatchWidth?: number;\n\tMatchWidthIncludeNull?: boolean;\n\tDepthUnitOfMeasure?: string;\n\tDepthUnitOfMeasureStrict?: boolean;\n\tDepthUnitOfMeasureIncludeNull?: boolean;\n\tDocumentRequiredForPurchase?: string;\n\tDocumentRequiredForPurchaseStrict?: boolean;\n\tDocumentRequiredForPurchaseIncludeNull?: boolean;\n\tDocumentRequiredForPurchaseExpiredWarningMessage?: string;\n\tDocumentRequiredForPurchaseExpiredWarningMessageStrict?: boolean;\n\tDocumentRequiredForPurchaseExpiredWarningMessageIncludeNull?: boolean;\n\tDocumentRequiredForPurchaseMissingWarningMessage?: string;\n\tDocumentRequiredForPurchaseMissingWarningMessageStrict?: boolean;\n\tDocumentRequiredForPurchaseMissingWarningMessageIncludeNull?: boolean;\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessage?: string;\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessageStrict?: boolean;\n\tDocumentRequiredForPurchaseOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessage?: string;\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessageStrict?: boolean;\n\tDocumentRequiredForPurchaseOverrideFeeWarningMessageIncludeNull?: boolean;\n\tHeightUnitOfMeasure?: string;\n\tHeightUnitOfMeasureStrict?: boolean;\n\tHeightUnitOfMeasureIncludeNull?: boolean;\n\tIndexSynonyms?: string;\n\tIndexSynonymsStrict?: boolean;\n\tIndexSynonymsIncludeNull?: boolean;\n\tManufacturerPartNumber?: string;\n\tManufacturerPartNumberStrict?: boolean;\n\tManufacturerPartNumberIncludeNull?: boolean;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessage?: string;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessage?: string;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMustPurchaseInMultiplesOfAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMustPurchaseInMultiplesOfAmountWarningMessage?: string;\n\tMustPurchaseInMultiplesOfAmountWarningMessageStrict?: boolean;\n\tMustPurchaseInMultiplesOfAmountWarningMessageIncludeNull?: boolean;\n\tNDCNumber?: string;\n\tNDCNumberStrict?: boolean;\n\tNDCNumberIncludeNull?: boolean;\n\tRequiresRoles?: string;\n\tRequiresRolesStrict?: boolean;\n\tRequiresRolesIncludeNull?: boolean;\n\tRequiresRolesAlt?: string;\n\tRequiresRolesAltStrict?: boolean;\n\tRequiresRolesAltIncludeNull?: boolean;\n\tSeoClientScript?: string;\n\tSeoClientScriptStrict?: boolean;\n\tSeoClientScriptIncludeNull?: boolean;\n\tShortDescription?: string;\n\tShortDescriptionStrict?: boolean;\n\tShortDescriptionIncludeNull?: boolean;\n\tTaxCode?: string;\n\tTaxCodeStrict?: boolean;\n\tTaxCodeIncludeNull?: boolean;\n\tUnitOfMeasure?: string;\n\tUnitOfMeasureStrict?: boolean;\n\tUnitOfMeasureIncludeNull?: boolean;\n\tWeightUnitOfMeasure?: string;\n\tWeightUnitOfMeasureStrict?: boolean;\n\tWeightUnitOfMeasureIncludeNull?: boolean;\n\tWidthUnitOfMeasure?: string;\n\tWidthUnitOfMeasureStrict?: boolean;\n\tWidthUnitOfMeasureIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<ProductCatalogSearchForm,ProductIndexableModel>}\n * @public\n */\nexport interface ProductSearchViewModel extends SearchViewModelBase<ProductCatalogSearchForm,ProductIndexableModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ShipCarrierMethodModel>}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @public\n */\nexport interface ProductShipCarrierMethodModel extends AmARelationshipTableModel<ShipCarrierMethodModel>, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableStoreBaseModel {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tPrice?: number;\n\tCurrencyID?: number;\n\tCurrencyKey?: string;\n\tCurrencyName?: string;\n\tCurrency?: CurrencyModel;\n\tFrom?: Date;\n\tMaxQuantity?: number;\n\tMinQuantity?: number;\n\tTo?: Date;\n\tUnitOfMeasure?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface ProductStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface ProductSuggestResult extends SuggestResultBase {\n\tBrandName?: string;\n\tManufacturerPartNumber?: string;\n\tTotalPurchasedQuantity?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface ProductTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface PurchaseOrderContactModel extends AmARelationshipTableModel<ContactModel> {\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link SalesEventBaseModel}\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface PurchaseOrderEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface PurchaseOrderFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link SalesCollectionBaseModelT<TypeModel,PurchaseOrderContactModel,PurchaseOrderEventModel,AppliedPurchaseOrderDiscountModel,AppliedPurchaseOrderItemDiscountModel,PurchaseOrderFileModel>}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveStoredFilesBaseModel<PurchaseOrderFileModel>}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface PurchaseOrderModel extends SalesCollectionBaseModelT<TypeModel,PurchaseOrderContactModel,PurchaseOrderEventModel,AppliedPurchaseOrderDiscountModel,AppliedPurchaseOrderItemDiscountModel,PurchaseOrderFileModel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<PurchaseOrderFileModel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tSalesOrderIDs?: Array<number>;\n\tAssociatedSalesOrders?: Array<SalesOrderPurchaseOrderModel>;\n\tActualReceiptDate?: Date;\n\tEstimatedReceiptDate?: Date;\n\tInventoryLocationID?: number;\n\tInventoryLocationKey?: string;\n\tInventoryLocationName?: string;\n\tInventoryLocation?: InventoryLocationModel;\n\tReleaseDate?: Date;\n\tSalesGroupID?: number;\n\tSalesGroupKey?: string;\n\tSalesGroup?: SalesGroupModel;\n\tShipCarrierID?: number;\n\tShipCarrierKey?: string;\n\tShipCarrierName?: string;\n\tShipCarrier?: ShipCarrierModel;\n\tVendorID?: number;\n\tVendorKey?: string;\n\tVendorName?: string;\n\tVendor?: VendorModel;\n\tTrackingNumber?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface QuestionModel extends BaseModel, AmFilterableByNullableBrandBaseModel, HaveATypeModel<TypeModel> {\n\tOptions?: Array<QuestionOptionModel>;\n\tNextQuestionID?: number;\n\tNextQuestionKey?: string;\n\tNextQuestion?: QuestionModel;\n\tQuestionnaireID?: number;\n\tQuestionnaireKey?: string;\n\tQuestionnaireName?: string;\n\tQuestionnaire?: QuestionnaireModel;\n\tSortOrder?: number;\n\tQuestionTranslationKey?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface QuestionnaireModel extends NameableBaseModel {\n\tQuestions?: Array<QuestionModel>;\n}\n\n/**\n * @see {@link PagedResultsBase<QuestionnaireModel>}\n * @public\n */\nexport interface QuestionnairePagedResults extends PagedResultsBase<QuestionnaireModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface QuestionnaireSearchModel extends NameableBaseSearchModel {\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface QuestionOptionModel extends BaseModel {\n\tPreventsContinuing?: boolean;\n\tRequiresAdditionalInformation?: boolean;\n\tQuestionID?: number;\n\tQuestionKey?: string;\n\tQuestion?: QuestionModel;\n\tFollowUpQuestionID?: number;\n\tFollowUpQuestionKey?: string;\n\tFollowUpQuestion?: QuestionModel;\n\tSortOrder?: number;\n\tMessageIfSelected?: string;\n\tOptionTranslationKey?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<QuestionModel>}\n * @public\n */\nexport interface QuestionPagedResults extends PagedResultsBase<QuestionModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface QuestionSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, HaveATypeSearchModel {\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tNextQuestionID?: number;\n\tNextQuestionIDIncludeNull?: boolean;\n\tQuestionnaireID?: number;\n\tQuestionnaireIDIncludeNull?: boolean;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tQuestionTranslationKey?: string;\n\tQuestionTranslationKeyStrict?: boolean;\n\tQuestionTranslationKeyIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface QuestionTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface QuickOrderFormProductsModel {\n\tHeaders?: Array<string>;\n\tProductsByCategory?: Array<ProductByCategoryModel>;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface RateQuoteModel extends NameableBaseModel {\n\tShipCarrierID: number;\n\tShipCarrierKey?: string;\n\tShipCarrierName?: string;\n\tSelected?: boolean;\n\tShipCarrierMethodID?: number;\n\tShipCarrierMethodKey?: string;\n\tShipCarrierMethodName?: string;\n\tShipCarrierMethod?: ShipCarrierMethodModel;\n\tCartHash?: number;\n\tCartID?: number;\n\tCartKey?: string;\n\tEstimatedDeliveryDate?: Date;\n\tPurchaseOrderID?: number;\n\tPurchaseOrderKey?: string;\n\tRate?: number;\n\tRateTimestamp?: Date;\n\tSalesInvoiceID?: number;\n\tSalesInvoiceKey?: string;\n\tSalesOrderID?: number;\n\tSalesOrderKey?: string;\n\tSalesQuoteID?: number;\n\tSalesQuoteKey?: string;\n\tSalesReturnID?: number;\n\tSalesReturnKey?: string;\n\tSampleRequestID?: number;\n\tSampleRequestKey?: string;\n\tTargetShippingDate?: Date;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CurrencyModel>}\n * @public\n */\nexport interface RegionCurrencyModel extends AmARelationshipTableModel<CurrencyModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface RegionImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<LanguageModel>}\n * @public\n */\nexport interface RegionLanguageModel extends AmARelationshipTableModel<LanguageModel> {\n\tMasterName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveImagesBaseModel<RegionImageModel>}\n * @public\n */\nexport interface RegionModel extends NameableBaseModel, HaveImagesBaseModel<RegionImageModel> {\n\tCurrencies?: Array<RegionCurrencyModel>;\n\tLanguages?: Array<RegionLanguageModel>;\n\tCountryID?: number;\n\tCountryKey?: string;\n\tCountryName?: string;\n\tCountryCode?: string;\n\tCountry?: CountryModel;\n\tCode?: string;\n\tISO31661?: string;\n\tISO31662?: string;\n\tISO3166Alpha2?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<RegionModel>}\n * @public\n */\nexport interface RegionPagedResults extends PagedResultsBase<RegionModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface RegionSearchModel extends NameableBaseSearchModel {\n\tRegionID?: number;\n\tCountryID?: number;\n\tCode?: string;\n\tCodeStrict?: boolean;\n\tCodeIncludeNull?: boolean;\n\tISO31661?: string;\n\tISO31661Strict?: boolean;\n\tISO31661IncludeNull?: boolean;\n\tISO31662?: string;\n\tISO31662Strict?: boolean;\n\tISO31662IncludeNull?: boolean;\n\tISO3166Alpha2?: string;\n\tISO3166Alpha2Strict?: boolean;\n\tISO3166Alpha2IncludeNull?: boolean;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface RepeatTypeModel extends NameableBaseModel {\n\tRenewalPeriodDays?: number;\n\tRenewalPeriodMonths?: number;\n\tRenewalPeriodYears?: number;\n\tAllowedBillingPeriods?: number;\n\tAbbreviation?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<RepeatTypeModel>}\n * @public\n */\nexport interface RepeatTypePagedResults extends PagedResultsBase<RepeatTypeModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @public\n */\nexport interface RepeatTypeSearchModel extends NameableBaseSearchModel {\n\tMinRenewalPeriodDays?: number;\n\tMaxRenewalPeriodDays?: number;\n\tMatchRenewalPeriodDays?: number;\n\tMinRenewalPeriodMonths?: number;\n\tMaxRenewalPeriodMonths?: number;\n\tMatchRenewalPeriodMonths?: number;\n\tMinRenewalPeriodYears?: number;\n\tMaxRenewalPeriodYears?: number;\n\tMatchRenewalPeriodYears?: number;\n\tMinAllowedBillingPeriods?: number;\n\tMaxAllowedBillingPeriods?: number;\n\tMatchAllowedBillingPeriods?: number;\n\tMatchAllowedBillingPeriodsIncludeNull?: boolean;\n\tAbbreviation?: string;\n\tAbbreviationStrict?: boolean;\n\tAbbreviationIncludeNull?: boolean;\n}\n\n/**\n * @public\n */\nexport interface Response {\n\tLinkToken?: string;\n}\n\n/**\n * @public\n */\nexport interface ResponseError {\n\tErrorCode?: string;\n\tFieldName?: string;\n\tMessage?: string;\n\tMeta?: Dictionary<string>;\n}\n\n/**\n * @public\n */\nexport interface ResponseStatus {\n\tErrorCode?: string;\n\tMessage?: string;\n\tStackTrace?: string;\n\tErrors?: Array<ResponseError>;\n\tMeta?: Dictionary<string>;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ReviewModel extends NameableBaseModel, HaveATypeModel<TypeModel> {\n\tApproved?: boolean;\n\tValue?: number;\n\tSubmittedByUserID?: number;\n\tSubmittedByUserKey?: string;\n\tSubmittedByUserUsername?: string;\n\tSubmittedByUser?: UserModel;\n\tApprovedByUserID?: number;\n\tApprovedByUserKey?: string;\n\tApprovedByUserUsername?: string;\n\tApprovedByUser?: UserModel;\n\tApprovedDate?: Date;\n\tCategoryID?: number;\n\tCategoryKey?: string;\n\tCategoryName?: string;\n\tCategorySeoUrl?: string;\n\tCategory?: CategoryModel;\n\tManufacturerID?: number;\n\tManufacturerKey?: string;\n\tManufacturerName?: string;\n\tManufacturer?: ManufacturerModel;\n\tProductID?: number;\n\tProductKey?: string;\n\tProductName?: string;\n\tProductSeoUrl?: string;\n\tProduct?: ProductModel;\n\tSortOrder?: number;\n\tStoreID?: number;\n\tStoreKey?: string;\n\tStoreName?: string;\n\tStoreSeoUrl?: string;\n\tStore?: StoreModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUserUsername?: string;\n\tUser?: UserModel;\n\tVendorID?: number;\n\tVendorKey?: string;\n\tVendorName?: string;\n\tVendor?: VendorModel;\n\tComment?: string;\n\tLocation?: string;\n\tTitle?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface ReviewTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface SalesCollectionBaseModel extends BaseModel, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tTotals?: CartTotals;\n\tBillingContactPhone?: string;\n\tBillingContactFax?: string;\n\tBillingContactEmail?: string;\n\tBillingContactFirstName?: string;\n\tBillingContactLastName?: string;\n\tShippingContactPhone?: string;\n\tShippingContactFax?: string;\n\tShippingContactEmail?: string;\n\tShippingContactFirstName?: string;\n\tShippingContactLastName?: string;\n\tRateQuotes?: Array<RateQuoteModel>;\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveAStateSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesCollectionBaseSearchModel extends BaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\n\tStateID?: number;\n\tStateIDs?: Array<number>;\n\tExcludedStateID?: number;\n\tExcludedStateIDs?: Array<number>;\n\tStateKey?: string;\n\tStateKeys?: Array<string>;\n\tExcludedStateKey?: string;\n\tExcludedStateKeys?: Array<string>;\n\tStateName?: string;\n\tStateNames?: Array<string>;\n\tExcludedStateName?: string;\n\tExcludedStateNames?: Array<string>;\n\tStateDisplayName?: string;\n\tStateDisplayNames?: Array<string>;\n\tExcludedStateDisplayName?: string;\n\tExcludedStateDisplayNames?: Array<string>;\n\tStateTranslationKey?: string;\n\tUserExternalID?: string;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tMinDate?: Date;\n\tMaxDate?: Date;\n\tPhone?: string;\n\tFirstName?: string;\n\tLastName?: string;\n\tEmail?: string;\n\tPostalCode?: string;\n\tProductKey?: string;\n\tProductIDs?: Array<number>;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface SalesEventBaseModel extends NameableBaseModel, HaveATypeModel<TypeModel> {\n\tOldStateID?: number;\n\tNewStateID?: number;\n\tOldStatusID?: number;\n\tNewStatusID?: number;\n\tOldTypeID?: number;\n\tNewTypeID?: number;\n\tOldHash?: number;\n\tNewHash?: number;\n\tOldRecordSerialized?: string;\n\tNewRecordSerialized?: string;\n\tMasterID: number;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesEventBaseSearchModel extends NameableBaseSearchModel, HaveATypeSearchModel {\n\tMasterID?: number;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @public\n */\nexport interface SalesGroupModel extends BaseModel, HaveNotesBaseModel, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel {\n\tPurchaseOrders?: Array<PurchaseOrderModel>;\n\tSalesInvoices?: Array<SalesInvoiceModel>;\n\tSalesOrderMasters?: Array<SalesOrderModel>;\n\tSalesQuoteRequestMasters?: Array<SalesQuoteModel>;\n\tSalesQuoteRequestSubs?: Array<SalesQuoteModel>;\n\tSalesQuoteResponseMasters?: Array<SalesQuoteModel>;\n\tSalesQuoteResponseSubs?: Array<SalesQuoteModel>;\n\tSalesReturns?: Array<SalesReturnModel>;\n\tSampleRequests?: Array<SampleRequestModel>;\n\tSubSalesOrders?: Array<SalesOrderModel>;\n\tBillingContactID?: number;\n\tBillingContactKey?: string;\n\tBillingContact?: ContactModel;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesGroupModel>}\n * @public\n */\nexport interface SalesGroupPagedResults extends PagedResultsBase<SalesGroupModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @public\n */\nexport interface SalesGroupSearchModel extends BaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel {\n\tAccountIDOrCustomKeyOrName?: string;\n\tBillingContactKey?: string;\n\tSalesQuoteID?: number;\n\tSalesQuoteKey?: string;\n\tSalesOrderID?: number;\n\tSalesOrderKey?: string;\n\tPurchaseOrderID?: number;\n\tPurchaseOrderKey?: string;\n\tSalesInvoiceID?: number;\n\tSalesInvoiceKey?: string;\n\tSalesReturnID?: number;\n\tSalesReturnKey?: string;\n\tSampleRequestID?: number;\n\tSampleRequestKey?: string;\n\tMinDate?: Date;\n\tMaxDate?: Date;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tBillingContactID?: number;\n\tBillingContactIDIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface SalesInvoiceContactModel extends AmARelationshipTableModel<ContactModel> {\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link SalesEventBaseModel}\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface SalesInvoiceEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<TypeModel> {\n\tOldBalanceDue?: number;\n\tNewBalanceDue?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesInvoiceEventModel>}\n * @public\n */\nexport interface SalesInvoiceEventPagedResults extends PagedResultsBase<SalesInvoiceEventModel> {\n}\n\n/**\n * @see {@link SalesEventBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesInvoiceEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface SalesInvoiceFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link SalesCollectionBaseModelT<TypeModel,SalesInvoiceContactModel,SalesInvoiceEventModel,AppliedSalesInvoiceDiscountModel,AppliedSalesInvoiceItemDiscountModel,SalesInvoiceFileModel>}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveStoredFilesBaseModel<SalesInvoiceFileModel>}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface SalesInvoiceModel extends SalesCollectionBaseModelT<TypeModel,SalesInvoiceContactModel,SalesInvoiceEventModel,AppliedSalesInvoiceDiscountModel,AppliedSalesInvoiceItemDiscountModel,SalesInvoiceFileModel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<SalesInvoiceFileModel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tSendCreationNotification?: boolean;\n\tAssociatedSalesOrders?: Array<SalesOrderSalesInvoiceModel>;\n\tSalesInvoicePayments?: Array<SalesInvoicePaymentModel>;\n\tSalesGroupID?: number;\n\tSalesGroupKey?: string;\n\tSalesGroup?: SalesGroupModel;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesInvoiceModel>}\n * @public\n */\nexport interface SalesInvoicePagedResults extends PagedResultsBase<SalesInvoiceModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<PaymentModel>}\n * @public\n */\nexport interface SalesInvoicePaymentModel extends AmARelationshipTableModel<PaymentModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @public\n */\nexport interface SalesInvoicePaymentSearchModel extends AmARelationshipTableBaseSearchModel {\n}\n\n/**\n * @see {@link SalesCollectionBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveAStateSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesInvoiceSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\n\tMinSubtotalDiscounts?: number;\n\tMaxSubtotalDiscounts?: number;\n\tMatchSubtotalDiscounts?: number;\n\tMinSubtotalFees?: number;\n\tMaxSubtotalFees?: number;\n\tMatchSubtotalFees?: number;\n\tMinSubtotalHandling?: number;\n\tMaxSubtotalHandling?: number;\n\tMatchSubtotalHandling?: number;\n\tMinSubtotalItems?: number;\n\tMaxSubtotalItems?: number;\n\tMatchSubtotalItems?: number;\n\tMinSubtotalShipping?: number;\n\tMaxSubtotalShipping?: number;\n\tMatchSubtotalShipping?: number;\n\tMinSubtotalTaxes?: number;\n\tMaxSubtotalTaxes?: number;\n\tMatchSubtotalTaxes?: number;\n\tMinTotal?: number;\n\tMaxTotal?: number;\n\tMatchTotal?: number;\n\tMinBalanceDue?: number;\n\tMaxBalanceDue?: number;\n\tMatchBalanceDue?: number;\n\tMatchBalanceDueIncludeNull?: boolean;\n\tBillingContactID?: number;\n\tBillingContactIDIncludeNull?: boolean;\n\tMinDueDate?: Date;\n\tMaxDueDate?: Date;\n\tMatchDueDate?: Date;\n\tMatchDueDateIncludeNull?: boolean;\n\tSalesGroupID?: number;\n\tSalesGroupIDIncludeNull?: boolean;\n\tShippingContactID?: number;\n\tShippingContactIDIncludeNull?: boolean;\n\tShippingSameAsBilling?: boolean;\n\tShippingSameAsBillingIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StateModel>}\n * @public\n */\nexport interface SalesInvoiceStatePagedResults extends PagedResultsBase<StateModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface SalesInvoiceStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface SalesInvoiceTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @public\n */\nexport interface SalesItemBaseSearchModel extends NameableBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByUserBaseSearchModel {\n\tSku?: string;\n\tOriginalCurrencyID?: number;\n\tSellingCurrencyID?: number;\n\tUserExternalID?: string;\n\tMasterID?: number;\n\tMasterKey?: string;\n\tMasterTypeName?: string;\n\tCartSessionID?: Guid;\n\tTrackingNumber?: string;\n\tCartUserID?: number;\n\tForceUniqueLineItemKey?: string;\n\tForceUniqueLineItemKeyMatchNulls?: boolean;\n\tMinQuantity?: number;\n\tMaxQuantity?: number;\n\tMatchQuantity?: number;\n\tMinUnitCorePrice?: number;\n\tMaxUnitCorePrice?: number;\n\tMatchUnitCorePrice?: number;\n\tOriginalCurrencyIDIncludeNull?: boolean;\n\tProductIDIncludeNull?: boolean;\n\tMinQuantityBackOrdered?: number;\n\tMaxQuantityBackOrdered?: number;\n\tMatchQuantityBackOrdered?: number;\n\tMatchQuantityBackOrderedIncludeNull?: boolean;\n\tMinQuantityPreSold?: number;\n\tMaxQuantityPreSold?: number;\n\tMatchQuantityPreSold?: number;\n\tMatchQuantityPreSoldIncludeNull?: boolean;\n\tSellingCurrencyIDIncludeNull?: boolean;\n\tMinUnitCorePriceInSellingCurrency?: number;\n\tMaxUnitCorePriceInSellingCurrency?: number;\n\tMatchUnitCorePriceInSellingCurrency?: number;\n\tMatchUnitCorePriceInSellingCurrencyIncludeNull?: boolean;\n\tMinUnitSoldPrice?: number;\n\tMaxUnitSoldPrice?: number;\n\tMatchUnitSoldPrice?: number;\n\tMatchUnitSoldPriceIncludeNull?: boolean;\n\tMinUnitSoldPriceInSellingCurrency?: number;\n\tMaxUnitSoldPriceInSellingCurrency?: number;\n\tMatchUnitSoldPriceInSellingCurrency?: number;\n\tMatchUnitSoldPriceInSellingCurrencyIncludeNull?: boolean;\n\tForceUniqueLineItemKeyStrict?: boolean;\n\tForceUniqueLineItemKeyIncludeNull?: boolean;\n\tSkuStrict?: boolean;\n\tSkuIncludeNull?: boolean;\n\tUnitOfMeasure?: string;\n\tUnitOfMeasureStrict?: boolean;\n\tUnitOfMeasureIncludeNull?: boolean;\n\tMinUnitSoldPriceModifier?: number;\n\tMaxUnitSoldPriceModifier?: number;\n\tMatchUnitSoldPriceModifier?: number;\n\tMatchUnitSoldPriceModifierIncludeNull?: boolean;\n\tMinUnitSoldPriceModifierMode?: number;\n\tMaxUnitSoldPriceModifierMode?: number;\n\tMatchUnitSoldPriceModifierMode?: number;\n\tMatchUnitSoldPriceModifierModeIncludeNull?: boolean;\n\tMinDateReceived?: Date;\n\tMaxDateReceived?: Date;\n\tMatchDateReceived?: Date;\n\tMatchDateReceivedIncludeNull?: boolean;\n\tMinRestockingFeeAmount?: number;\n\tMaxRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\n\tSalesReturnReasonID?: number;\n\tSalesReturnReasonIDIncludeNull?: boolean;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface SalesItemTargetBaseModel extends BaseModel, HaveATypeModel<TypeModel> {\n\tQuantity: number;\n\tNothingToShip: boolean;\n\tMasterID: number;\n\tDestinationContactID: number;\n\tDestinationContactKey?: string;\n\tDestinationContact?: ContactModel;\n\tOriginProductInventoryLocationSectionID?: number;\n\tOriginProductInventoryLocationSectionKey?: string;\n\tOriginProductInventoryLocationSection?: ProductInventoryLocationSectionModel;\n\tOriginStoreProductID?: number;\n\tOriginStoreProductKey?: string;\n\tOriginStoreProduct?: StoreProductModel;\n\tBrandProductID?: number;\n\tBrandProductKey?: string;\n\tBrandProduct?: BrandProductModel;\n\tOriginVendorProductID?: number;\n\tOriginVendorProductKey?: string;\n\tOriginVendorProduct?: VendorProductModel;\n\tSelectedRateQuoteID?: number;\n\tSelectedRateQuoteKey?: string;\n\tSelectedRateQuoteName?: string;\n\tSelectedRateQuote?: RateQuoteModel;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface SalesItemTargetTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface SalesOrderContactModel extends AmARelationshipTableModel<ContactModel> {\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link SalesEventBaseModel}\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface SalesOrderEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<TypeModel> {\n\tOldBalanceDue?: number;\n\tNewBalanceDue?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesOrderEventModel>}\n * @public\n */\nexport interface SalesOrderEventPagedResults extends PagedResultsBase<SalesOrderEventModel> {\n}\n\n/**\n * @see {@link SalesEventBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesOrderEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface SalesOrderFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link SalesCollectionBaseModelT<TypeModel,SalesOrderContactModel,SalesOrderEventModel,AppliedSalesOrderDiscountModel,AppliedSalesOrderItemDiscountModel,SalesOrderFileModel>}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveStoredFilesBaseModel<SalesOrderFileModel>}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface SalesOrderModel extends SalesCollectionBaseModelT<TypeModel,SalesOrderContactModel,SalesOrderEventModel,AppliedSalesOrderDiscountModel,AppliedSalesOrderItemDiscountModel,SalesOrderFileModel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<SalesOrderFileModel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tProductName?: string;\n\tProductKey?: string;\n\tUserAvailability?: string;\n\tUserContactPhone1?: string;\n\tOrderType?: string;\n\tQTY?: number;\n\tUserStateOfResidence?: RegionModel;\n\tAssociatedPurchaseOrders?: Array<SalesOrderPurchaseOrderModel>;\n\tAssociatedSalesInvoices?: Array<SalesOrderSalesInvoiceModel>;\n\tAssociatedSalesQuotes?: Array<SalesQuoteSalesOrderModel>;\n\tAssociatedSalesReturns?: Array<SalesReturnSalesOrderModel>;\n\tSalesOrderPayments?: Array<SalesOrderPaymentModel>;\n\tActualShipDate?: Date;\n\tContactAttempts?: number;\n\tDoctorAccountID?: number;\n\tDoctorAccountKey?: string;\n\tDoctorAccountName?: string;\n\tDoctorAccount?: AccountModel;\n\tInventoryLocationID?: number;\n\tInventoryLocationKey?: string;\n\tInventoryLocationName?: string;\n\tInventoryLocation?: InventoryLocationModel;\n\tOrderApprovedDate?: Date;\n\tOrderCommitmentDate?: Date;\n\tRequestedShipDate?: Date;\n\tRequiredShipDate?: Date;\n\tSalesGroupAsMasterID?: number;\n\tSalesGroupAsMasterKey?: string;\n\tSalesGroupAsMaster?: SalesGroupModel;\n\tSalesGroupAsSubID?: number;\n\tSalesGroupAsSubKey?: string;\n\tSalesGroupAsSub?: SalesGroupModel;\n\tPaymentTransactionID?: string;\n\tPurchaseOrderNumber?: string;\n\tTaxTransactionID?: string;\n\tTrackingNumber?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesOrderModel>}\n * @public\n */\nexport interface SalesOrderPagedResults extends PagedResultsBase<SalesOrderModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<PaymentModel>}\n * @public\n */\nexport interface SalesOrderPaymentModel extends AmARelationshipTableModel<PaymentModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<PurchaseOrderModel>}\n * @public\n */\nexport interface SalesOrderPurchaseOrderModel extends AmARelationshipTableModel<PurchaseOrderModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<SalesInvoiceModel>}\n * @public\n */\nexport interface SalesOrderSalesInvoiceModel extends AmARelationshipTableModel<SalesInvoiceModel> {\n}\n\n/**\n * @see {@link SalesCollectionBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveAStateSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesOrderSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\n\tHasSalesGroupAsMaster?: boolean;\n\tHasSalesGroupAsSub?: boolean;\n\tUserContactFirstNameOrLastName?: string;\n\tMinSubtotalDiscounts?: number;\n\tMaxSubtotalDiscounts?: number;\n\tMatchSubtotalDiscounts?: number;\n\tMinSubtotalFees?: number;\n\tMaxSubtotalFees?: number;\n\tMatchSubtotalFees?: number;\n\tMinSubtotalHandling?: number;\n\tMaxSubtotalHandling?: number;\n\tMatchSubtotalHandling?: number;\n\tMinSubtotalItems?: number;\n\tMaxSubtotalItems?: number;\n\tMatchSubtotalItems?: number;\n\tMinSubtotalShipping?: number;\n\tMaxSubtotalShipping?: number;\n\tMatchSubtotalShipping?: number;\n\tMinSubtotalTaxes?: number;\n\tMaxSubtotalTaxes?: number;\n\tMatchSubtotalTaxes?: number;\n\tMinTotal?: number;\n\tMaxTotal?: number;\n\tMatchTotal?: number;\n\tMinActualShipDate?: Date;\n\tMaxActualShipDate?: Date;\n\tMatchActualShipDate?: Date;\n\tMatchActualShipDateIncludeNull?: boolean;\n\tMinBalanceDue?: number;\n\tMaxBalanceDue?: number;\n\tMatchBalanceDue?: number;\n\tMatchBalanceDueIncludeNull?: boolean;\n\tBillingContactID?: number;\n\tBillingContactIDIncludeNull?: boolean;\n\tMinContactAttempts?: number;\n\tMaxContactAttempts?: number;\n\tMatchContactAttempts?: number;\n\tMatchContactAttemptsIncludeNull?: boolean;\n\tDoctorAccountID?: number;\n\tDoctorAccountIDIncludeNull?: boolean;\n\tMinDueDate?: Date;\n\tMaxDueDate?: Date;\n\tMatchDueDate?: Date;\n\tMatchDueDateIncludeNull?: boolean;\n\tInventoryLocationID?: number;\n\tInventoryLocationIDIncludeNull?: boolean;\n\tMinOrderApprovedDate?: Date;\n\tMaxOrderApprovedDate?: Date;\n\tMatchOrderApprovedDate?: Date;\n\tMatchOrderApprovedDateIncludeNull?: boolean;\n\tMinOrderCommitmentDate?: Date;\n\tMaxOrderCommitmentDate?: Date;\n\tMatchOrderCommitmentDate?: Date;\n\tMatchOrderCommitmentDateIncludeNull?: boolean;\n\tMinRequestedShipDate?: Date;\n\tMaxRequestedShipDate?: Date;\n\tMatchRequestedShipDate?: Date;\n\tMatchRequestedShipDateIncludeNull?: boolean;\n\tMinRequiredShipDate?: Date;\n\tMaxRequiredShipDate?: Date;\n\tMatchRequiredShipDate?: Date;\n\tMatchRequiredShipDateIncludeNull?: boolean;\n\tSalesGroupAsMasterID?: number;\n\tSalesGroupAsMasterIDIncludeNull?: boolean;\n\tSalesGroupAsSubID?: number;\n\tSalesGroupAsSubIDIncludeNull?: boolean;\n\tShippingContactID?: number;\n\tShippingContactIDIncludeNull?: boolean;\n\tShippingSameAsBilling?: boolean;\n\tShippingSameAsBillingIncludeNull?: boolean;\n\tPaymentTransactionID?: string;\n\tPaymentTransactionIDStrict?: boolean;\n\tPaymentTransactionIDIncludeNull?: boolean;\n\tPurchaseOrderNumber?: string;\n\tPurchaseOrderNumberStrict?: boolean;\n\tPurchaseOrderNumberIncludeNull?: boolean;\n\tTaxTransactionID?: string;\n\tTaxTransactionIDStrict?: boolean;\n\tTaxTransactionIDIncludeNull?: boolean;\n\tTrackingNumber?: string;\n\tTrackingNumberStrict?: boolean;\n\tTrackingNumberIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StateModel>}\n * @public\n */\nexport interface SalesOrderStatePagedResults extends PagedResultsBase<StateModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface SalesOrderStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface SalesOrderTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CategoryModel>}\n * @public\n */\nexport interface SalesQuoteCategoryModel extends AmARelationshipTableModel<CategoryModel> {\n\tSlaveSeoUrl?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface SalesQuoteContactModel extends AmARelationshipTableModel<ContactModel> {\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link SalesEventBaseModel}\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface SalesQuoteEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<SalesQuoteEventModel>}\n * @public\n */\nexport interface SalesQuoteEventPagedResults extends PagedResultsBase<SalesQuoteEventModel> {\n}\n\n/**\n * @see {@link SalesEventBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesQuoteEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface SalesQuoteFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link SalesCollectionBaseModelT<TypeModel,SalesQuoteContactModel,SalesQuoteEventModel,AppliedSalesQuoteDiscountModel,AppliedSalesQuoteItemDiscountModel,SalesQuoteFileModel>}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveStoredFilesBaseModel<SalesQuoteFileModel>}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface SalesQuoteModel extends SalesCollectionBaseModelT<TypeModel,SalesQuoteContactModel,SalesQuoteEventModel,AppliedSalesQuoteDiscountModel,AppliedSalesQuoteItemDiscountModel,SalesQuoteFileModel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<SalesQuoteFileModel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tAssociatedSalesOrders?: Array<SalesQuoteSalesOrderModel>;\n\tSalesQuoteCategories?: Array<SalesQuoteCategoryModel>;\n\tRequestedShipDate?: Date;\n\tResponseAsStoreID?: number;\n\tResponseAsStoreKey?: string;\n\tResponseAsStoreName?: string;\n\tResponseAsStoreSeoUrl?: string;\n\tResponseAsStore?: StoreModel;\n\tResponseAsVendorID?: number;\n\tResponseAsVendorKey?: string;\n\tResponseAsVendorName?: string;\n\tResponseAsVendor?: VendorModel;\n\tSalesGroupAsRequestMasterID?: number;\n\tSalesGroupAsRequestMasterKey?: string;\n\tSalesGroupAsRequestMaster?: SalesGroupModel;\n\tSalesGroupAsRequestSubID?: number;\n\tSalesGroupAsRequestSubKey?: string;\n\tSalesGroupAsRequestSub?: SalesGroupModel;\n\tSalesGroupAsResponseMasterID?: number;\n\tSalesGroupAsResponseMasterKey?: string;\n\tSalesGroupAsResponseMaster?: SalesGroupModel;\n\tSalesGroupAsResponseSubID?: number;\n\tSalesGroupAsResponseSubKey?: string;\n\tSalesGroupAsResponseSub?: SalesGroupModel;\n\tSubtotalDiscountsModifier?: number;\n\tSubtotalDiscountsModifierMode?: number;\n\tSubtotalFeesModifier?: number;\n\tSubtotalFeesModifierMode?: number;\n\tSubtotalHandlingModifier?: number;\n\tSubtotalHandlingModifierMode?: number;\n\tSubtotalShippingModifier?: number;\n\tSubtotalShippingModifierMode?: number;\n\tSubtotalTaxesModifier?: number;\n\tSubtotalTaxesModifierMode?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesQuoteModel>}\n * @public\n */\nexport interface SalesQuotePagedResults extends PagedResultsBase<SalesQuoteModel> {\n}\n\n/**\n * @public\n */\nexport interface SalesQuoteSalesGroupIdentifiers {\n\tOrderID: number;\n\tInvoiceID?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<SalesOrderModel>}\n * @public\n */\nexport interface SalesQuoteSalesOrderModel extends AmARelationshipTableModel<SalesOrderModel> {\n}\n\n/**\n * @see {@link SalesCollectionBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveAStateSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesQuoteSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\n\tCategoryIDs?: Array<number>;\n\tHasSalesGroupAsMaster?: boolean;\n\tHasSalesGroupAsSub?: boolean;\n\tHasSalesGroupAsResponse?: boolean;\n\tHasSalesGroupAsRequest?: boolean;\n\tMinSubtotalDiscounts?: number;\n\tMaxSubtotalDiscounts?: number;\n\tMatchSubtotalDiscounts?: number;\n\tMinSubtotalFees?: number;\n\tMaxSubtotalFees?: number;\n\tMatchSubtotalFees?: number;\n\tMinSubtotalHandling?: number;\n\tMaxSubtotalHandling?: number;\n\tMatchSubtotalHandling?: number;\n\tMinSubtotalItems?: number;\n\tMaxSubtotalItems?: number;\n\tMatchSubtotalItems?: number;\n\tMinSubtotalShipping?: number;\n\tMaxSubtotalShipping?: number;\n\tMatchSubtotalShipping?: number;\n\tMinSubtotalTaxes?: number;\n\tMaxSubtotalTaxes?: number;\n\tMatchSubtotalTaxes?: number;\n\tMinTotal?: number;\n\tMaxTotal?: number;\n\tMatchTotal?: number;\n\tBillingContactID?: number;\n\tBillingContactIDIncludeNull?: boolean;\n\tMinDueDate?: Date;\n\tMaxDueDate?: Date;\n\tMatchDueDate?: Date;\n\tMatchDueDateIncludeNull?: boolean;\n\tMinRequestedShipDate?: Date;\n\tMaxRequestedShipDate?: Date;\n\tMatchRequestedShipDate?: Date;\n\tMatchRequestedShipDateIncludeNull?: boolean;\n\tResponseAsStoreID?: number;\n\tResponseAsStoreIDIncludeNull?: boolean;\n\tResponseAsVendorID?: number;\n\tResponseAsVendorIDIncludeNull?: boolean;\n\tSalesGroupAsRequestMasterID?: number;\n\tSalesGroupAsRequestMasterIDIncludeNull?: boolean;\n\tSalesGroupAsRequestSubID?: number;\n\tSalesGroupAsRequestSubIDIncludeNull?: boolean;\n\tSalesGroupAsResponseMasterID?: number;\n\tSalesGroupAsResponseMasterIDIncludeNull?: boolean;\n\tSalesGroupAsResponseSubID?: number;\n\tSalesGroupAsResponseSubIDIncludeNull?: boolean;\n\tShippingContactID?: number;\n\tShippingContactIDIncludeNull?: boolean;\n\tShippingSameAsBilling?: boolean;\n\tShippingSameAsBillingIncludeNull?: boolean;\n\tMinSubtotalDiscountsModifier?: number;\n\tMaxSubtotalDiscountsModifier?: number;\n\tMatchSubtotalDiscountsModifier?: number;\n\tMatchSubtotalDiscountsModifierIncludeNull?: boolean;\n\tMinSubtotalDiscountsModifierMode?: number;\n\tMaxSubtotalDiscountsModifierMode?: number;\n\tMatchSubtotalDiscountsModifierMode?: number;\n\tMatchSubtotalDiscountsModifierModeIncludeNull?: boolean;\n\tMinSubtotalFeesModifier?: number;\n\tMaxSubtotalFeesModifier?: number;\n\tMatchSubtotalFeesModifier?: number;\n\tMatchSubtotalFeesModifierIncludeNull?: boolean;\n\tMinSubtotalFeesModifierMode?: number;\n\tMaxSubtotalFeesModifierMode?: number;\n\tMatchSubtotalFeesModifierMode?: number;\n\tMatchSubtotalFeesModifierModeIncludeNull?: boolean;\n\tMinSubtotalHandlingModifier?: number;\n\tMaxSubtotalHandlingModifier?: number;\n\tMatchSubtotalHandlingModifier?: number;\n\tMatchSubtotalHandlingModifierIncludeNull?: boolean;\n\tMinSubtotalHandlingModifierMode?: number;\n\tMaxSubtotalHandlingModifierMode?: number;\n\tMatchSubtotalHandlingModifierMode?: number;\n\tMatchSubtotalHandlingModifierModeIncludeNull?: boolean;\n\tMinSubtotalShippingModifier?: number;\n\tMaxSubtotalShippingModifier?: number;\n\tMatchSubtotalShippingModifier?: number;\n\tMatchSubtotalShippingModifierIncludeNull?: boolean;\n\tMinSubtotalShippingModifierMode?: number;\n\tMaxSubtotalShippingModifierMode?: number;\n\tMatchSubtotalShippingModifierMode?: number;\n\tMatchSubtotalShippingModifierModeIncludeNull?: boolean;\n\tMinSubtotalTaxesModifier?: number;\n\tMaxSubtotalTaxesModifier?: number;\n\tMatchSubtotalTaxesModifier?: number;\n\tMatchSubtotalTaxesModifierIncludeNull?: boolean;\n\tMinSubtotalTaxesModifierMode?: number;\n\tMaxSubtotalTaxesModifierMode?: number;\n\tMatchSubtotalTaxesModifierMode?: number;\n\tMatchSubtotalTaxesModifierModeIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StateModel>}\n * @public\n */\nexport interface SalesQuoteStatePagedResults extends PagedResultsBase<StateModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface SalesQuoteStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @public\n */\nexport interface SalesQuoteStatusUpdate {\n\tQuoteID: number;\n\tNote?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface SalesQuoteTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface SalesReturnContactModel extends AmARelationshipTableModel<ContactModel> {\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link SalesEventBaseModel}\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface SalesReturnEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<SalesReturnEventModel>}\n * @public\n */\nexport interface SalesReturnEventPagedResults extends PagedResultsBase<SalesReturnEventModel> {\n}\n\n/**\n * @see {@link SalesEventBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesReturnEventSearchModel extends SalesEventBaseSearchModel, HaveATypeSearchModel {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface SalesReturnFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link SalesCollectionBaseModelT<TypeModel,SalesReturnContactModel,SalesReturnEventModel,AppliedSalesReturnDiscountModel,AppliedSalesReturnItemDiscountModel,SalesReturnFileModel>}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveStoredFilesBaseModel<SalesReturnFileModel>}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface SalesReturnModel extends SalesCollectionBaseModelT<TypeModel,SalesReturnContactModel,SalesReturnEventModel,AppliedSalesReturnDiscountModel,AppliedSalesReturnItemDiscountModel,SalesReturnFileModel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<SalesReturnFileModel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tSalesOrderIDs?: Array<number>;\n\tAssociatedSalesOrders?: Array<SalesReturnSalesOrderModel>;\n\tSalesReturnPayments?: Array<SalesReturnPaymentModel>;\n\tActualShipDate?: Date;\n\tRefundAmount?: number;\n\tRequestedShipDate?: Date;\n\tRequiredShipDate?: Date;\n\tReturnApprovedDate?: Date;\n\tReturnCommitmentDate?: Date;\n\tSalesGroupID?: number;\n\tSalesGroupKey?: string;\n\tSalesGroup?: SalesGroupModel;\n\tPurchaseOrderNumber?: string;\n\tRefundTransactionID?: string;\n\tTaxTransactionID?: string;\n\tTrackingNumber?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesReturnModel>}\n * @public\n */\nexport interface SalesReturnPagedResults extends PagedResultsBase<SalesReturnModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<PaymentModel>}\n * @public\n */\nexport interface SalesReturnPaymentModel extends AmARelationshipTableModel<PaymentModel> {\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface SalesReturnReasonModel extends TypableBaseModel {\n\tIsRestockingFeeApplicable?: boolean;\n\tRestockingFeeAmount?: number;\n\tRestockingFeeAmountCurrencyID?: number;\n\tRestockingFeeAmountCurrencyKey?: string;\n\tRestockingFeeAmountCurrencyName?: string;\n\tRestockingFeeAmountCurrency?: CurrencyModel;\n\tRestockingFeePercent?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<SalesReturnReasonModel>}\n * @public\n */\nexport interface SalesReturnReasonPagedResults extends PagedResultsBase<SalesReturnReasonModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface SalesReturnReasonSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n\tIsRestockingFeeApplicable?: boolean;\n\tMinRestockingFeeAmount?: number;\n\tMaxRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmount?: number;\n\tMatchRestockingFeeAmountIncludeNull?: boolean;\n\tRestockingFeeAmountCurrencyID?: number;\n\tRestockingFeeAmountCurrencyIDIncludeNull?: boolean;\n\tMinRestockingFeePercent?: number;\n\tMaxRestockingFeePercent?: number;\n\tMatchRestockingFeePercent?: number;\n\tMatchRestockingFeePercentIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<SalesOrderModel>}\n * @public\n */\nexport interface SalesReturnSalesOrderModel extends AmARelationshipTableModel<SalesOrderModel> {\n}\n\n/**\n * @see {@link SalesCollectionBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveAStateSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SalesReturnSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\n\tStatusExclusion?: string;\n\tSalesOrderID?: number;\n\tMinSubtotalDiscounts?: number;\n\tMaxSubtotalDiscounts?: number;\n\tMatchSubtotalDiscounts?: number;\n\tMinSubtotalFees?: number;\n\tMaxSubtotalFees?: number;\n\tMatchSubtotalFees?: number;\n\tMinSubtotalHandling?: number;\n\tMaxSubtotalHandling?: number;\n\tMatchSubtotalHandling?: number;\n\tMinSubtotalItems?: number;\n\tMaxSubtotalItems?: number;\n\tMatchSubtotalItems?: number;\n\tMinSubtotalShipping?: number;\n\tMaxSubtotalShipping?: number;\n\tMatchSubtotalShipping?: number;\n\tMinSubtotalTaxes?: number;\n\tMaxSubtotalTaxes?: number;\n\tMatchSubtotalTaxes?: number;\n\tMinTotal?: number;\n\tMaxTotal?: number;\n\tMatchTotal?: number;\n\tMinActualShipDate?: Date;\n\tMaxActualShipDate?: Date;\n\tMatchActualShipDate?: Date;\n\tMatchActualShipDateIncludeNull?: boolean;\n\tMinBalanceDue?: number;\n\tMaxBalanceDue?: number;\n\tMatchBalanceDue?: number;\n\tMatchBalanceDueIncludeNull?: boolean;\n\tBillingContactID?: number;\n\tBillingContactIDIncludeNull?: boolean;\n\tMinDueDate?: Date;\n\tMaxDueDate?: Date;\n\tMatchDueDate?: Date;\n\tMatchDueDateIncludeNull?: boolean;\n\tMinRefundAmount?: number;\n\tMaxRefundAmount?: number;\n\tMatchRefundAmount?: number;\n\tMatchRefundAmountIncludeNull?: boolean;\n\tMinRequestedShipDate?: Date;\n\tMaxRequestedShipDate?: Date;\n\tMatchRequestedShipDate?: Date;\n\tMatchRequestedShipDateIncludeNull?: boolean;\n\tMinRequiredShipDate?: Date;\n\tMaxRequiredShipDate?: Date;\n\tMatchRequiredShipDate?: Date;\n\tMatchRequiredShipDateIncludeNull?: boolean;\n\tMinReturnApprovedDate?: Date;\n\tMaxReturnApprovedDate?: Date;\n\tMatchReturnApprovedDate?: Date;\n\tMatchReturnApprovedDateIncludeNull?: boolean;\n\tMinReturnCommitmentDate?: Date;\n\tMaxReturnCommitmentDate?: Date;\n\tMatchReturnCommitmentDate?: Date;\n\tMatchReturnCommitmentDateIncludeNull?: boolean;\n\tSalesGroupID?: number;\n\tSalesGroupIDIncludeNull?: boolean;\n\tShippingContactID?: number;\n\tShippingContactIDIncludeNull?: boolean;\n\tShippingSameAsBilling?: boolean;\n\tShippingSameAsBillingIncludeNull?: boolean;\n\tPurchaseOrderNumber?: string;\n\tPurchaseOrderNumberStrict?: boolean;\n\tPurchaseOrderNumberIncludeNull?: boolean;\n\tRefundTransactionID?: string;\n\tRefundTransactionIDStrict?: boolean;\n\tRefundTransactionIDIncludeNull?: boolean;\n\tTaxTransactionID?: string;\n\tTaxTransactionIDStrict?: boolean;\n\tTaxTransactionIDIncludeNull?: boolean;\n\tTrackingNumber?: string;\n\tTrackingNumberStrict?: boolean;\n\tTrackingNumberIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StateModel>}\n * @public\n */\nexport interface SalesReturnStatePagedResults extends PagedResultsBase<StateModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface SalesReturnStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface SalesReturnTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface SampleRequestContactModel extends AmARelationshipTableModel<ContactModel> {\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link SalesEventBaseModel}\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface SampleRequestEventModel extends SalesEventBaseModel, NameableBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface SampleRequestFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n}\n\n/**\n * @see {@link SalesCollectionBaseModelT<TypeModel,SampleRequestContactModel,SampleRequestEventModel,AppliedSampleRequestDiscountModel,AppliedSampleRequestItemDiscountModel,SampleRequestFileModel>}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveStoredFilesBaseModel<SampleRequestFileModel>}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableBrandBaseModel}\n * @see {@link AmFilterableByNullableFranchiseBaseModel}\n * @see {@link AmFilterableByNullableStoreBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @public\n */\nexport interface SampleRequestModel extends SalesCollectionBaseModelT<TypeModel,SampleRequestContactModel,SampleRequestEventModel,AppliedSampleRequestDiscountModel,AppliedSampleRequestItemDiscountModel,SampleRequestFileModel>, HaveNotesBaseModel, HaveStoredFilesBaseModel<SampleRequestFileModel>, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableBrandBaseModel, AmFilterableByNullableFranchiseBaseModel, AmFilterableByNullableStoreBaseModel, AmFilterableByNullableUserBaseModel {\n\tSalesGroupID?: number;\n\tSalesGroupKey?: string;\n\tSalesGroup?: SalesGroupModel;\n}\n\n/**\n * @see {@link PagedResultsBase<SampleRequestModel>}\n * @public\n */\nexport interface SampleRequestPagedResults extends PagedResultsBase<SampleRequestModel> {\n}\n\n/**\n * @see {@link SalesCollectionBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveAStateSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SampleRequestSearchModel extends SalesCollectionBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveAStateSearchModel, HaveATypeSearchModel {\n\tMinSubtotalDiscounts?: number;\n\tMaxSubtotalDiscounts?: number;\n\tMatchSubtotalDiscounts?: number;\n\tMinSubtotalFees?: number;\n\tMaxSubtotalFees?: number;\n\tMatchSubtotalFees?: number;\n\tMinSubtotalHandling?: number;\n\tMaxSubtotalHandling?: number;\n\tMatchSubtotalHandling?: number;\n\tMinSubtotalItems?: number;\n\tMaxSubtotalItems?: number;\n\tMatchSubtotalItems?: number;\n\tMinSubtotalShipping?: number;\n\tMaxSubtotalShipping?: number;\n\tMatchSubtotalShipping?: number;\n\tMinSubtotalTaxes?: number;\n\tMaxSubtotalTaxes?: number;\n\tMatchSubtotalTaxes?: number;\n\tMinTotal?: number;\n\tMaxTotal?: number;\n\tMatchTotal?: number;\n\tBillingContactID?: number;\n\tBillingContactIDIncludeNull?: boolean;\n\tMinDueDate?: Date;\n\tMaxDueDate?: Date;\n\tMatchDueDate?: Date;\n\tMatchDueDateIncludeNull?: boolean;\n\tSalesGroupID?: number;\n\tSalesGroupIDIncludeNull?: boolean;\n\tShippingContactID?: number;\n\tShippingContactIDIncludeNull?: boolean;\n\tShippingSameAsBilling?: boolean;\n\tShippingSameAsBillingIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StateModel>}\n * @public\n */\nexport interface SampleRequestStatePagedResults extends PagedResultsBase<StateModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface SampleRequestStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface SampleRequestTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface SearchFormBase {\n\tPage: number;\n\tPageSize: number;\n\tPageSetSize: number;\n\tPageFormat?: string;\n\tSort: SearchSort;\n\tName?: string;\n\tQuery?: string;\n\tAttributesAny?: Dictionary<Array<string>>;\n\tAttributesAll?: Dictionary<Array<string>>;\n\tBrandID?: number;\n\tBrandIDsAny?: Array<number>;\n\tBrandIDsAll?: Array<number>;\n\tForcedCategory?: string;\n\tCategory?: string;\n\tCategoryTop?: string;\n\tCategoryMid?: string;\n\tCategoriesAny?: Array<string>;\n\tCategoriesAll?: Array<string>;\n\tDistrictID?: number;\n\tDistrictIDsAny?: Array<number>;\n\tDistrictIDsAll?: Array<number>;\n\tCity?: string;\n\tFranchiseID?: number;\n\tFranchiseIDsAny?: Array<number>;\n\tFranchiseIDsAll?: Array<number>;\n\tManufacturerID?: number;\n\tManufacturerIDsAny?: Array<number>;\n\tManufacturerIDsAll?: Array<number>;\n\tPricingRanges?: Array<string>;\n\tProductID?: number;\n\tProductIDsAny?: Array<number>;\n\tProductIDsAll?: Array<number>;\n\tRatingRanges?: Array<string>;\n\tRegionID?: number;\n\tRegionIDsAny?: Array<number>;\n\tRole?: string;\n\tRolesAny?: Array<string>;\n\tRolesAll?: Array<string>;\n\tStoreID?: number;\n\tStoreIDsAny?: Array<number>;\n\tStoreIDsAll?: Array<number>;\n\tTypeID?: number;\n\tTypeIDsAny?: Array<number>;\n\tVendorID?: number;\n\tVendorIDsAny?: Array<number>;\n\tVendorIDsAll?: Array<number>;\n\tCreditLimit?: number;\n}\n\nexport enum SearchSort {\n\tRelevance = \"Relevance\",\n\tPopular = \"Popular\",\n\tRecent = \"Recent\",\n\tNameAscending = \"NameAscending\",\n\tNameDescending = \"NameDescending\",\n\tPricingAscending = \"PricingAscending\",\n\tPricingDescending = \"PricingDescending\",\n\tRatingAscending = \"RatingAscending\",\n\tRatingDescending = \"RatingDescending\",\n\tDefined = \"Defined\",\n\tClosingSoon = \"ClosingSoon\",\n}\n\n/**\n * @public\n */\nexport interface SerializableAttributeObject {\n\tID: number;\n\tKey?: string;\n\tValue?: string;\n\tUofM?: string;\n\tSortOrder?: number;\n}\n\n/**\n * @see {@link Dictionary<SerializableAttributeObject>}\n * @public\n */\nexport class SerializableAttributesDictionary extends Dictionary<SerializableAttributeObject> {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface ShipCarrierMethodModel extends NameableBaseModel {\n\tShipCarrierID?: number;\n\tShipCarrierKey?: string;\n\tShipCarrierName?: string;\n\tShipCarrier?: ShipCarrierModel;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveANullableContactBaseModel}\n * @public\n */\nexport interface ShipCarrierModel extends NameableBaseModel, HaveANullableContactBaseModel {\n\tIsInbound?: boolean;\n\tIsOutbound?: boolean;\n\tShipCarrierMethods?: Array<ShipCarrierMethodModel>;\n\tPickupTime?: Date;\n\tAccountNumber?: string;\n\tAuthentication?: string;\n\tPointOfContact?: string;\n\tSalesRep?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @public\n */\nexport interface ShipmentEventModel extends BaseModel {\n\tEventDate?: Date;\n\tAddressID?: number;\n\tAddressKey?: string;\n\tAddress?: AddressModel;\n\tShipmentID?: number;\n\tShipmentKey?: string;\n\tShipment?: ShipmentModel;\n\tNote?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ShipmentModel extends BaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tShipmentEvents?: Array<ShipmentEventModel>;\n\tDestinationContactID?: number;\n\tDestinationContactKey?: string;\n\tDestinationContact?: ContactModel;\n\tOriginContactID?: number;\n\tOriginContactKey?: string;\n\tOriginContact?: ContactModel;\n\tDateDelivered?: Date;\n\tEstimatedDeliveryDate?: Date;\n\tInventoryLocationSectionID?: number;\n\tInventoryLocationSectionKey?: string;\n\tInventoryLocationSectionName?: string;\n\tInventoryLocationSection?: InventoryLocationSectionModel;\n\tNegotiatedRate?: number;\n\tPublishedRate?: number;\n\tShipCarrierID?: number;\n\tShipCarrierKey?: string;\n\tShipCarrierName?: string;\n\tShipCarrier?: ShipCarrierModel;\n\tShipCarrierMethodID?: number;\n\tShipCarrierMethodKey?: string;\n\tShipCarrierMethodName?: string;\n\tShipCarrierMethod?: ShipCarrierMethodModel;\n\tShipDate?: Date;\n\tTargetShippingDate?: Date;\n\tVendorID?: number;\n\tVendorKey?: string;\n\tVendorName?: string;\n\tVendor?: VendorModel;\n\tDestination?: string;\n\tReference1?: string;\n\tReference2?: string;\n\tReference3?: string;\n\tTrackingNumber?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface ShipmentStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface ShipmentTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface Single {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByBrandsBaseModel<BrandSiteDomainModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseSiteDomainModel>}\n * @public\n */\nexport interface SiteDomainModel extends NameableBaseModel, AmFilterableByBrandsBaseModel<BrandSiteDomainModel>, AmFilterableByFranchisesBaseModel<FranchiseSiteDomainModel> {\n\tSiteDomainSocialProviders?: Array<SiteDomainSocialProviderModel>;\n\tAlternateUrl1?: string;\n\tAlternateUrl2?: string;\n\tAlternateUrl3?: string;\n\tCatalogContent?: string;\n\tFooterContent?: string;\n\tHeaderContent?: string;\n\tSideBarContent?: string;\n\tUrl?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<SiteDomainModel>}\n * @public\n */\nexport interface SiteDomainPagedResults extends PagedResultsBase<SiteDomainModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @public\n */\nexport interface SiteDomainSearchModel extends NameableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel {\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tAlternateUrl1?: string;\n\tAlternateUrl1Strict?: boolean;\n\tAlternateUrl1IncludeNull?: boolean;\n\tAlternateUrl2?: string;\n\tAlternateUrl2Strict?: boolean;\n\tAlternateUrl2IncludeNull?: boolean;\n\tAlternateUrl3?: string;\n\tAlternateUrl3Strict?: boolean;\n\tAlternateUrl3IncludeNull?: boolean;\n\tCatalogContent?: string;\n\tCatalogContentStrict?: boolean;\n\tCatalogContentIncludeNull?: boolean;\n\tFooterContent?: string;\n\tFooterContentStrict?: boolean;\n\tFooterContentIncludeNull?: boolean;\n\tHeaderContent?: string;\n\tHeaderContentStrict?: boolean;\n\tHeaderContentIncludeNull?: boolean;\n\tSideBarContent?: string;\n\tSideBarContentStrict?: boolean;\n\tSideBarContentIncludeNull?: boolean;\n\tUrl?: string;\n\tUrlStrict?: boolean;\n\tUrlIncludeNull?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<SocialProviderModel>}\n * @public\n */\nexport interface SiteDomainSocialProviderModel extends AmARelationshipTableModel<SocialProviderModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tScript?: string;\n\tUrlValues?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface SocialProviderModel extends NameableBaseModel {\n\tSiteDomainSocialProviders?: Array<SiteDomainSocialProviderModel>;\n\tUrl?: string;\n\tUrlFormat?: string;\n}\n\n/**\n * @public\n */\nexport interface Sort {\n\tfield?: string; // Name format overridden\n\tserverField?: string; // Name format overridden\n\torder?: number; // Name format overridden\n\tdir?: string; // Name format overridden\n}\n\n/**\n * @see {@link DisplayableBaseModel}\n * @public\n */\nexport interface StateableBaseModel extends DisplayableBaseModel {\n}\n\n/**\n * @see {@link DisplayableBaseSearchModel}\n * @public\n */\nexport interface StateableBaseSearchModel extends DisplayableBaseSearchModel {\n}\n\n/**\n * @see {@link StateableBaseModel}\n * @public\n */\nexport interface StateModel extends StateableBaseModel {\n}\n\n/**\n * @see {@link StateableBaseSearchModel}\n * @public\n */\nexport interface StateSearchModel extends StateableBaseSearchModel {\n}\n\n/**\n * @see {@link DisplayableBaseModel}\n * @public\n */\nexport interface StatusableBaseModel extends DisplayableBaseModel {\n}\n\n/**\n * @see {@link DisplayableBaseSearchModel}\n * @public\n */\nexport interface StatusableBaseSearchModel extends DisplayableBaseSearchModel {\n}\n\n/**\n * @see {@link StatusableBaseModel}\n * @public\n */\nexport interface StatusModel extends StatusableBaseModel {\n}\n\n/**\n * @see {@link StatusableBaseSearchModel}\n * @public\n */\nexport interface StatusSearchModel extends StatusableBaseSearchModel {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @public\n */\nexport interface StoreAccountModel extends AmARelationshipTableModel<AccountModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tHasAccessToStore?: boolean;\n\tPricePointID?: number;\n\tPricePointKey?: string;\n\tPricePointName?: string;\n\tPricePointDisplayName?: string;\n\tPricePointTranslationKey?: string;\n\tPricePointSortOrder?: number;\n\tPricePoint?: PricePointModel;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<StoreModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface StoreAssociationModel extends AmARelationshipTableModel<StoreModel>, HaveATypeModel<TypeModel> {\n\tMasterName?: string;\n\tMasterSeoUrl?: string;\n\tSlaveName?: string;\n\tSlaveSeoUrl?: string;\n\tMasterApproved?: boolean;\n\tMasterUnapproved?: boolean;\n\tSlaveApproved?: boolean;\n\tSlaveUnapproved?: boolean;\n\tMasterApprovedTimestamp?: Date;\n\tMasterUnapprovedTimestamp?: Date;\n\tSlaveApprovedTimestamp?: Date;\n\tSlaveUnapprovedTimestamp?: Date;\n\tCustomRole?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AuctionModel>}\n * @public\n */\nexport interface StoreAuctionModel extends AmARelationshipTableModel<AuctionModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<BadgeModel>}\n * @public\n */\nexport interface StoreBadgeModel extends AmARelationshipTableModel<BadgeModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface StoreCatalogSearchForm extends SearchFormBase {\n\tBadgeID?: number;\n\tBadgeIDsAny?: Array<number>;\n\tBadgeIDsAll?: Array<number>;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CategoryModel>}\n * @public\n */\nexport interface StoreCategoryModel extends AmARelationshipTableModel<CategoryModel> {\n\tSlaveSeoUrl?: string;\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableNameableBaseModel<ContactModel>}\n * @see {@link AmARelationshipTableModel<ContactModel>}\n * @public\n */\nexport interface StoreContactModel extends AmARelationshipTableNameableBaseModel<ContactModel>, AmARelationshipTableModel<ContactModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlavePhone?: string;\n\tSlaveFax?: string;\n\tSlaveEmail?: string;\n\tSlaveFirstName?: string;\n\tSlaveLastName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<CountryModel>}\n * @public\n */\nexport interface StoreCountryModel extends AmARelationshipTableModel<CountryModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface StoredFileModel extends NameableBaseModel, HaveATypeModel<TypeModel> {\n\tBytes?: Array<number>;\n\tIsStoredInDB?: boolean;\n\tSortOrder?: number;\n\tAuthor?: string;\n\tCopyright?: string;\n\tDisplayName?: string;\n\tFileFormat?: string;\n\tFileName?: string;\n\tSeoTitle?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<StoredFileModel>}\n * @public\n */\nexport interface StoredFilePagedResults extends PagedResultsBase<StoredFileModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface StoredFileSearchModel extends NameableBaseSearchModel, HaveATypeSearchModel {\n\tAccountID?: number;\n\tCategoryID?: number;\n\tIsStoredInDB?: boolean;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tAuthor?: string;\n\tAuthorStrict?: boolean;\n\tAuthorIncludeNull?: boolean;\n\tCopyright?: string;\n\tCopyrightStrict?: boolean;\n\tCopyrightIncludeNull?: boolean;\n\tDisplayName?: string;\n\tDisplayNameStrict?: boolean;\n\tDisplayNameIncludeNull?: boolean;\n\tFileFormat?: string;\n\tFileFormatStrict?: boolean;\n\tFileFormatIncludeNull?: boolean;\n\tFileName?: string;\n\tFileNameStrict?: boolean;\n\tFileNameIncludeNull?: boolean;\n\tSeoTitle?: string;\n\tSeoTitleStrict?: boolean;\n\tSeoTitleIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface StoredFileTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<DistrictModel>}\n * @public\n */\nexport interface StoreDistrictModel extends AmARelationshipTableModel<DistrictModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface StoreFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n\tMasterSeoUrl?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface StoreImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface StoreIndexableModel extends IndexableModelBase {\n\tSuggestedByBadges?: any;\n\tBadges?: Array<IndexableBadgeFilter>;\n\tSlogan?: string;\n\tMissionStatement?: string;\n\tExternalUrl?: string;\n\tAbout?: string;\n\tOverview?: string;\n\tOperatingHoursTimeZoneId?: string;\n\tOperatingHoursMondayStart?: number;\n\tOperatingHoursMondayEnd?: number;\n\tOperatingHoursTuesdayStart?: number;\n\tOperatingHoursTuesdayEnd?: number;\n\tOperatingHoursWednesdayStart?: number;\n\tOperatingHoursWednesdayEnd?: number;\n\tOperatingHoursThursdayStart?: number;\n\tOperatingHoursThursdayEnd?: number;\n\tOperatingHoursFridayStart?: number;\n\tOperatingHoursFridayEnd?: number;\n\tOperatingHoursSaturdayStart?: number;\n\tOperatingHoursSaturdayEnd?: number;\n\tOperatingHoursSundayStart?: number;\n\tOperatingHoursSundayEnd?: number;\n\tOperatingHoursClosedStatement?: string;\n\tCurrencyID?: number;\n\tCurrencyKey?: string;\n\tCurrencyName?: string;\n\tLanguageID?: number;\n\tLanguageKey?: string;\n\tLanguageName?: string;\n\tStoreUserAttributes?: Array<IndexableVariantAttributesFilter>;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<InventoryLocationModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface StoreInventoryLocationModel extends AmARelationshipTableModel<InventoryLocationModel>, HaveATypeModel<TypeModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @public\n */\nexport interface StoreInventoryLocationsMatrixModel {\n\tStoreID?: number;\n\tStoreKey?: string;\n\tStoreName?: string;\n\tInternalInventoryLocationID?: number;\n\tInternalInventoryLocationKey?: string;\n\tInternalInventoryLocationName?: string;\n\tDistributionCenterInventoryLocationID?: number;\n\tDistributionCenterInventoryLocationKey?: string;\n\tDistributionCenterInventoryLocationName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface StoreInventoryLocationTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ManufacturerModel>}\n * @public\n */\nexport interface StoreManufacturerModel extends AmARelationshipTableModel<ManufacturerModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveSeoBaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveImagesBaseModel<StoreImageModel>}\n * @see {@link HaveStoredFilesBaseModel<StoreFileModel>}\n * @see {@link AmFilterableByAccountsBaseModel<StoreAccountModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandStoreModel>}\n * @see {@link AmFilterableByCategoriesBaseModel<StoreCategoryModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseStoreModel>}\n * @see {@link AmFilterableByManufacturersBaseModel<StoreManufacturerModel>}\n * @see {@link AmFilterableByProductsBaseModel<StoreProductModel>}\n * @see {@link AmFilterableByUsersBaseModel<StoreUserModel>}\n * @see {@link AmFilterableByVendorsBaseModel<StoreVendorModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveANullableContactBaseModel}\n * @see {@link HaveOrderMinimumsBaseModel}\n * @see {@link HaveFreeShippingMinimumsBaseModel}\n * @public\n */\nexport interface StoreModel extends NameableBaseModel, HaveSeoBaseModel, HaveNotesBaseModel, HaveImagesBaseModel<StoreImageModel>, HaveStoredFilesBaseModel<StoreFileModel>, AmFilterableByAccountsBaseModel<StoreAccountModel>, AmFilterableByBrandsBaseModel<BrandStoreModel>, AmFilterableByCategoriesBaseModel<StoreCategoryModel>, AmFilterableByFranchisesBaseModel<FranchiseStoreModel>, AmFilterableByManufacturersBaseModel<StoreManufacturerModel>, AmFilterableByProductsBaseModel<StoreProductModel>, AmFilterableByUsersBaseModel<StoreUserModel>, AmFilterableByVendorsBaseModel<StoreVendorModel>, HaveATypeModel<TypeModel>, HaveANullableContactBaseModel, HaveOrderMinimumsBaseModel, HaveFreeShippingMinimumsBaseModel {\n\tDistance?: number;\n\tReviews?: Array<ReviewModel>;\n\tIsActiveAndInGoodStanding?: boolean;\n\tStoreAssociations?: Array<StoreAssociationModel>;\n\tStoreBadges?: Array<StoreBadgeModel>;\n\tStoreContacts?: Array<StoreContactModel>;\n\tStoreCountries?: Array<StoreCountryModel>;\n\tStoreDistricts?: Array<StoreDistrictModel>;\n\tStoreInventoryLocations?: Array<StoreInventoryLocationModel>;\n\tStoreRegions?: Array<StoreRegionModel>;\n\tStoreSubscriptions?: Array<StoreSubscriptionModel>;\n\tEndDate?: Date;\n\tLanguageID?: number;\n\tLanguageKey?: string;\n\tLanguage?: LanguageModel;\n\tOperatingHoursFridayEnd?: number;\n\tOperatingHoursFridayStart?: number;\n\tOperatingHoursMondayEnd?: number;\n\tOperatingHoursMondayStart?: number;\n\tOperatingHoursSaturdayEnd?: number;\n\tOperatingHoursSaturdayStart?: number;\n\tOperatingHoursSundayEnd?: number;\n\tOperatingHoursSundayStart?: number;\n\tOperatingHoursThursdayEnd?: number;\n\tOperatingHoursThursdayStart?: number;\n\tOperatingHoursTuesdayEnd?: number;\n\tOperatingHoursTuesdayStart?: number;\n\tOperatingHoursWednesdayEnd?: number;\n\tOperatingHoursWednesdayStart?: number;\n\tSortOrder?: number;\n\tStartDate?: Date;\n\tAbout?: string;\n\tExternalUrl?: string;\n\tMissionStatement?: string;\n\tOperatingHoursClosedStatement?: string;\n\tOperatingHoursTimeZoneId?: string;\n\tOverview?: string;\n\tSlogan?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<StoreModel>}\n * @public\n */\nexport interface StorePagedResults extends PagedResultsBase<StoreModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @public\n */\nexport interface StoreProductModel extends AmARelationshipTableModel<ProductModel> {\n\tSlaveSeoUrl?: string;\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tIsVisibleIn?: boolean;\n\tPriceBase?: number;\n\tPriceMsrp?: number;\n\tPriceReduction?: number;\n\tPriceSale?: number;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<RegionModel>}\n * @public\n */\nexport interface StoreRegionModel extends AmARelationshipTableModel<RegionModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<StoreRegionModel>}\n * @public\n */\nexport interface StoreRegionPagedResults extends PagedResultsBase<StoreRegionModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface StoreRegionSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n\tMasterName?: string;\n\tSlaveName?: string;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByCategoryBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link AmFilterableByVendorBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @see {@link HaveAContactBaseSearchModel}\n * @public\n */\nexport interface StoreSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByCategoryBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByUserBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\n\tHostUrl?: string;\n\tZipCode?: string;\n\tLatitude?: number;\n\tLongitude?: number;\n\tRadius?: number;\n\tUnits?: LocatorUnits;\n\tRegionID?: number;\n\tStoreContactRegionID?: number;\n\tCountryID?: number;\n\tStoreContactCountryID?: number;\n\tCity?: string;\n\tStoreContactCity?: string;\n\tSortByMembershipLevel?: boolean;\n\tDistrictID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tContactIDIncludeNull?: boolean;\n\tContactKeyStrict?: boolean;\n\tContactKeyIncludeNull?: boolean;\n\tContactFirstNameStrict?: boolean;\n\tContactFirstNameIncludeNull?: boolean;\n\tContactLastNameStrict?: boolean;\n\tContactLastNameIncludeNull?: boolean;\n\tContactPhoneStrict?: boolean;\n\tContactPhoneIncludeNull?: boolean;\n\tContactFaxStrict?: boolean;\n\tContactFaxIncludeNull?: boolean;\n\tContactEmailStrict?: boolean;\n\tContactEmailIncludeNull?: boolean;\n\tSeoKeywords?: string;\n\tSeoKeywordsStrict?: boolean;\n\tSeoKeywordsIncludeNull?: boolean;\n\tSeoUrl?: string;\n\tSeoUrlStrict?: boolean;\n\tSeoUrlIncludeNull?: boolean;\n\tSeoDescription?: string;\n\tSeoDescriptionStrict?: boolean;\n\tSeoDescriptionIncludeNull?: boolean;\n\tSeoMetaData?: string;\n\tSeoMetaDataStrict?: boolean;\n\tSeoMetaDataIncludeNull?: boolean;\n\tSeoPageTitle?: string;\n\tSeoPageTitleStrict?: boolean;\n\tSeoPageTitleIncludeNull?: boolean;\n\tIsActiveAndInGoodStanding?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\n\tMinEndDate?: Date;\n\tMaxEndDate?: Date;\n\tMatchEndDate?: Date;\n\tMatchEndDateIncludeNull?: boolean;\n\tLanguageID?: number;\n\tLanguageIDIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmount?: number;\n\tMaxMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmount?: number;\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmount?: number;\n\tMaxMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountAfter?: number;\n\tMaxMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferProductID?: number;\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmount?: number;\n\tMaxMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountAfter?: number;\n\tMaxMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferProductID?: number;\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\n\tMinOperatingHoursFridayEnd?: number;\n\tMaxOperatingHoursFridayEnd?: number;\n\tMatchOperatingHoursFridayEnd?: number;\n\tMatchOperatingHoursFridayEndIncludeNull?: boolean;\n\tMinOperatingHoursFridayStart?: number;\n\tMaxOperatingHoursFridayStart?: number;\n\tMatchOperatingHoursFridayStart?: number;\n\tMatchOperatingHoursFridayStartIncludeNull?: boolean;\n\tMinOperatingHoursMondayEnd?: number;\n\tMaxOperatingHoursMondayEnd?: number;\n\tMatchOperatingHoursMondayEnd?: number;\n\tMatchOperatingHoursMondayEndIncludeNull?: boolean;\n\tMinOperatingHoursMondayStart?: number;\n\tMaxOperatingHoursMondayStart?: number;\n\tMatchOperatingHoursMondayStart?: number;\n\tMatchOperatingHoursMondayStartIncludeNull?: boolean;\n\tMinOperatingHoursSaturdayEnd?: number;\n\tMaxOperatingHoursSaturdayEnd?: number;\n\tMatchOperatingHoursSaturdayEnd?: number;\n\tMatchOperatingHoursSaturdayEndIncludeNull?: boolean;\n\tMinOperatingHoursSaturdayStart?: number;\n\tMaxOperatingHoursSaturdayStart?: number;\n\tMatchOperatingHoursSaturdayStart?: number;\n\tMatchOperatingHoursSaturdayStartIncludeNull?: boolean;\n\tMinOperatingHoursSundayEnd?: number;\n\tMaxOperatingHoursSundayEnd?: number;\n\tMatchOperatingHoursSundayEnd?: number;\n\tMatchOperatingHoursSundayEndIncludeNull?: boolean;\n\tMinOperatingHoursSundayStart?: number;\n\tMaxOperatingHoursSundayStart?: number;\n\tMatchOperatingHoursSundayStart?: number;\n\tMatchOperatingHoursSundayStartIncludeNull?: boolean;\n\tMinOperatingHoursThursdayEnd?: number;\n\tMaxOperatingHoursThursdayEnd?: number;\n\tMatchOperatingHoursThursdayEnd?: number;\n\tMatchOperatingHoursThursdayEndIncludeNull?: boolean;\n\tMinOperatingHoursThursdayStart?: number;\n\tMaxOperatingHoursThursdayStart?: number;\n\tMatchOperatingHoursThursdayStart?: number;\n\tMatchOperatingHoursThursdayStartIncludeNull?: boolean;\n\tMinOperatingHoursTuesdayEnd?: number;\n\tMaxOperatingHoursTuesdayEnd?: number;\n\tMatchOperatingHoursTuesdayEnd?: number;\n\tMatchOperatingHoursTuesdayEndIncludeNull?: boolean;\n\tMinOperatingHoursTuesdayStart?: number;\n\tMaxOperatingHoursTuesdayStart?: number;\n\tMatchOperatingHoursTuesdayStart?: number;\n\tMatchOperatingHoursTuesdayStartIncludeNull?: boolean;\n\tMinOperatingHoursWednesdayEnd?: number;\n\tMaxOperatingHoursWednesdayEnd?: number;\n\tMatchOperatingHoursWednesdayEnd?: number;\n\tMatchOperatingHoursWednesdayEndIncludeNull?: boolean;\n\tMinOperatingHoursWednesdayStart?: number;\n\tMaxOperatingHoursWednesdayStart?: number;\n\tMatchOperatingHoursWednesdayStart?: number;\n\tMatchOperatingHoursWednesdayStartIncludeNull?: boolean;\n\tMinSortOrder?: number;\n\tMaxSortOrder?: number;\n\tMatchSortOrder?: number;\n\tMatchSortOrderIncludeNull?: boolean;\n\tMinStartDate?: Date;\n\tMaxStartDate?: Date;\n\tMatchStartDate?: Date;\n\tMatchStartDateIncludeNull?: boolean;\n\tAbout?: string;\n\tAboutStrict?: boolean;\n\tAboutIncludeNull?: boolean;\n\tExternalUrl?: string;\n\tExternalUrlStrict?: boolean;\n\tExternalUrlIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountWarningMessage?: string;\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountWarningMessage?: string;\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\n\tMissionStatement?: string;\n\tMissionStatementStrict?: boolean;\n\tMissionStatementIncludeNull?: boolean;\n\tOperatingHoursClosedStatement?: string;\n\tOperatingHoursClosedStatementStrict?: boolean;\n\tOperatingHoursClosedStatementIncludeNull?: boolean;\n\tOperatingHoursTimeZoneId?: string;\n\tOperatingHoursTimeZoneIdStrict?: boolean;\n\tOperatingHoursTimeZoneIdIncludeNull?: boolean;\n\tOverview?: string;\n\tOverviewStrict?: boolean;\n\tOverviewIncludeNull?: boolean;\n\tSlogan?: string;\n\tSloganStrict?: boolean;\n\tSloganIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<StoreCatalogSearchForm,StoreIndexableModel>}\n * @public\n */\nexport interface StoreSearchViewModel extends SearchViewModelBase<StoreCatalogSearchForm,StoreIndexableModel> {\n\tBadgeIDs?: Dictionary<number>;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<SubscriptionModel>}\n * @public\n */\nexport interface StoreSubscriptionModel extends AmARelationshipTableModel<SubscriptionModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface StoreSuggestResult extends SuggestResultBase {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface StoreTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<UserModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface StoreUserModel extends AmARelationshipTableModel<UserModel>, HaveATypeModel<TypeModel> {\n\tMasterSeoUrl?: string;\n\tSlaveUsername?: string;\n\tMasterName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<StoreUserModel>}\n * @public\n */\nexport interface StoreUserPagedResults extends PagedResultsBase<StoreUserModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface StoreUserSearchModel extends AmARelationshipTableBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveATypeSearchModel {\n\tMasterName?: string;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<VendorModel>}\n * @public\n */\nexport interface StoreVendorModel extends AmARelationshipTableModel<VendorModel> {\n\tMasterSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<PaymentModel>}\n * @public\n */\nexport interface SubscriptionHistoryModel extends AmARelationshipTableModel<PaymentModel> {\n\tMasterName?: string;\n\tPaymentSuccess?: boolean;\n\tPaymentDate?: Date;\n\tBillingPeriodsPaid?: number;\n\tMemo?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<SubscriptionHistoryModel>}\n * @public\n */\nexport interface SubscriptionHistoryPagedResults extends PagedResultsBase<SubscriptionHistoryModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableBaseSearchModel}\n * @public\n */\nexport interface SubscriptionHistorySearchModel extends AmARelationshipTableBaseSearchModel {\n\tMinDate?: Date;\n\tMaxDate?: Date;\n\tPaymentID?: number;\n\tSubscriptionID?: number;\n\tSucceededState?: boolean;\n\tMasterName?: string;\n\tPaymentSuccess?: boolean;\n\tMinPaymentDate?: Date;\n\tMaxPaymentDate?: Date;\n\tMatchPaymentDate?: Date;\n\tMinBillingPeriodsPaid?: number;\n\tMaxBillingPeriodsPaid?: number;\n\tMatchBillingPeriodsPaid?: number;\n\tMemo?: string;\n\tMemoStrict?: boolean;\n\tMemoIncludeNull?: boolean;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link AmFilterableByNullableAccountBaseModel}\n * @see {@link AmFilterableByNullableUserBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<SubscriptionTypeModel>}\n * @public\n */\nexport interface SubscriptionModel extends NameableBaseModel, AmFilterableByNullableAccountBaseModel, AmFilterableByNullableUserBaseModel, HaveAStatusModel, HaveATypeModel<SubscriptionTypeModel> {\n\tUserUsername?: string;\n\tAutoRenew?: boolean;\n\tCanUpgrade?: boolean;\n\tIsAutoRefill?: boolean;\n\tMemberSince?: Date;\n\tStartsOn?: Date;\n\tFee?: number;\n\tSubscriptionHistories?: Array<SubscriptionHistoryModel>;\n\tBillingPeriodsPaid?: number;\n\tBillingPeriodsTotal?: number;\n\tProductID?: number;\n\tProductKey?: string;\n\tProductName?: string;\n\tProductSeoUrl?: string;\n\tProduct?: ProductModel;\n\tRepeatTypeID?: number;\n\tRepeatTypeKey?: string;\n\tRepeatTypeName?: string;\n\tRepeatType?: RepeatTypeModel;\n\tCreditUponUpgrade?: number;\n\tEndsOn?: Date;\n\tLastPaidDate?: Date;\n\tPaymentDueDate?: Date;\n\tPrescriptionID?: number;\n\tPrescriptionKey?: string;\n\tPrescriptionName?: string;\n\tPrescription?: PrescriptionModel;\n\tSalesGroupID?: number;\n\tSalesGroupKey?: string;\n\tSalesGroup?: SalesGroupModel;\n\tSalesInvoiceID?: number;\n\tSalesInvoiceKey?: string;\n\tSalesInvoice?: SalesInvoiceModel;\n\tSalesOrderID?: number;\n\tSalesOrderKey?: string;\n\tSalesOrder?: SalesOrderModel;\n\tMemo?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<SubscriptionModel>}\n * @public\n */\nexport interface SubscriptionPagedResults extends PagedResultsBase<SubscriptionModel> {\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SubscriptionSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByUserBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tMinCoverDate?: Date;\n\tMaxCoverDate?: Date;\n\tCanUpgradeState?: boolean;\n\tAutoRenewState?: boolean;\n\tPaymentID?: number;\n\tPaymentTypeID?: number;\n\tAutoRenew?: boolean;\n\tCanUpgrade?: boolean;\n\tIsAutoRefill?: boolean;\n\tMinMemberSince?: Date;\n\tMaxMemberSince?: Date;\n\tMatchMemberSince?: Date;\n\tMinStartsOn?: Date;\n\tMaxStartsOn?: Date;\n\tMatchStartsOn?: Date;\n\tMinFee?: number;\n\tMaxFee?: number;\n\tMatchFee?: number;\n\tMinBillingPeriodsPaid?: number;\n\tMaxBillingPeriodsPaid?: number;\n\tMatchBillingPeriodsPaid?: number;\n\tMinBillingPeriodsTotal?: number;\n\tMaxBillingPeriodsTotal?: number;\n\tMatchBillingPeriodsTotal?: number;\n\tProductID?: number;\n\tRepeatTypeID?: number;\n\tMinCreditUponUpgrade?: number;\n\tMaxCreditUponUpgrade?: number;\n\tMatchCreditUponUpgrade?: number;\n\tMatchCreditUponUpgradeIncludeNull?: boolean;\n\tMinEndsOn?: Date;\n\tMaxEndsOn?: Date;\n\tMatchEndsOn?: Date;\n\tMatchEndsOnIncludeNull?: boolean;\n\tMinLastPaidDate?: Date;\n\tMaxLastPaidDate?: Date;\n\tMatchLastPaidDate?: Date;\n\tMatchLastPaidDateIncludeNull?: boolean;\n\tMinPaymentDueDate?: Date;\n\tMaxPaymentDueDate?: Date;\n\tMatchPaymentDueDate?: Date;\n\tMatchPaymentDueDateIncludeNull?: boolean;\n\tPrescriptionID?: number;\n\tPrescriptionIDIncludeNull?: boolean;\n\tSalesGroupID?: number;\n\tSalesGroupIDIncludeNull?: boolean;\n\tSalesInvoiceID?: number;\n\tSalesInvoiceIDIncludeNull?: boolean;\n\tSalesOrderID?: number;\n\tSalesOrderIDIncludeNull?: boolean;\n\tMemo?: string;\n\tMemoStrict?: boolean;\n\tMemoIncludeNull?: boolean;\n}\n\n/**\n * @public\n */\nexport interface SubscriptionsGrid {\n\tActive?: string;\n\tDosage?: string;\n\tEndsOn?: Date;\n\tProduct?: any;\n\tSubscriptionID?: number;\n\tStatus?: string;\n\tStartsOn?: Date;\n\tQTY?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<SubscriptionsGrid>}\n * @public\n */\nexport interface SubscriptionsGridPagedResults extends PagedResultsBase<SubscriptionsGrid> {\n}\n\n/**\n * @see {@link AccountSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link AmFilterableByUserBaseSearchModel}\n * @see {@link AmFilterableByVendorBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @public\n */\nexport interface SubscriptionsGridSearchModel extends AccountSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, AmFilterableByUserBaseSearchModel, AmFilterableByVendorBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel {\n\tDateEnd?: Date;\n\tDateFrom?: Date;\n\tKey?: string;\n\tStatus?: string;\n\tSubscriptionId?: number;\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface SubscriptionStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface SubscriptionTypeModel extends TypableBaseModel {\n}\n\n/**\n * @see {@link PagedResultsBase<SubscriptionTypeModel>}\n * @public\n */\nexport interface SubscriptionTypePagedResults extends PagedResultsBase<SubscriptionTypeModel> {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface SubscriptionTypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n}\n\n/**\n * @public\n */\nexport interface SuggestResultBase {\n\tID?: number;\n\tName?: string;\n\tCustomKey?: string;\n\tSeoUrl?: string;\n\tSummary?: string;\n\tScore: number;\n\tQueryableAttributes?: Dictionary<string>;\n}\n\n/**\n * @public\n */\nexport interface TotalData {\n\tPendingPrescriptionCount?: number;\n\tTransmissionErrorCount?: number;\n\tRefillRequestCount?: number;\n\tChangeRequestCount?: number;\n}\n\n/**\n * @see {@link DisplayableBaseModel}\n * @public\n */\nexport interface TypableBaseModel extends DisplayableBaseModel {\n}\n\n/**\n * @see {@link DisplayableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface TypableBaseSearchModel extends DisplayableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n\tStoreIDIncludeNull?: boolean;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n}\n\n/**\n * @see {@link TypableBaseModel}\n * @public\n */\nexport interface TypeModel extends TypableBaseModel {\n}\n\n/**\n * @see {@link TypableBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @public\n */\nexport interface TypeSearchModel extends TypableBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByStoreBaseSearchModel {\n}\n\nexport enum UploadStatus {\n\tNone,\n\tCreated,\n\tInProgress,\n\tCompleted,\n\tFailed,\n}\n\n/**\n * @see {@link AmAStoredFileRelationshipTableBaseModel}\n * @see {@link AmAStoredFileRelationshipTableModel}\n * @see {@link HaveSeoBaseModel}\n * @public\n */\nexport interface UserFileModel extends AmAStoredFileRelationshipTableBaseModel, AmAStoredFileRelationshipTableModel, HaveSeoBaseModel {\n\tMasterUsername?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link AmFilterableByUserBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface UserImageModel extends NameableBaseModel, IImageBaseModel, AmFilterableByUserBaseModel, HaveATypeModel<TypeModel> {\n\tMasterUsername?: string;\n}\n\n/**\n * @see {@link BaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveImagesBaseModel<UserImageModel>}\n * @see {@link HaveStoredFilesBaseModel<UserFileModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandUserModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseUserModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreUserModel>}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveAContactBaseModel}\n * @public\n */\nexport interface UserModel extends BaseModel, HaveNotesBaseModel, HaveImagesBaseModel<UserImageModel>, HaveStoredFilesBaseModel<UserFileModel>, AmFilterableByBrandsBaseModel<BrandUserModel>, AmFilterableByFranchisesBaseModel<FranchiseUserModel>, AmFilterableByStoresBaseModel<StoreUserModel>, HaveAStatusModel, HaveATypeModel<TypeModel>, HaveAContactBaseModel {\n\tOverridePassword?: string;\n\tSendCreationNotification?: boolean;\n\tCSRUserID?: number;\n\tReviews?: Array<ReviewModel>;\n\tIsSMSAllowed?: boolean;\n\tUseAutoPay?: boolean;\n\tAccountID?: number;\n\tAccountKey?: string;\n\tAccountName?: string;\n\tAccount?: AccountModel;\n\tCurrencyID?: number;\n\tCurrencyKey?: string;\n\tCurrencyName?: string;\n\tCurrency?: CurrencyModel;\n\tDateOfBirth?: Date;\n\tGeneralMedicalCompleted?: boolean;\n\tHeightFeet?: number;\n\tHeightInches?: number;\n\tLanguageID?: number;\n\tLanguageKey?: string;\n\tLanguage?: LanguageModel;\n\tPreferredStoreID?: number;\n\tPreferredStoreKey?: string;\n\tPreferredStoreName?: string;\n\tPreferredStoreSeoUrl?: string;\n\tPreferredStore?: StoreModel;\n\tStateOfResidenceID?: number;\n\tStateOfResidenceKey?: string;\n\tStateOfResidenceName?: string;\n\tStateOfResidenceCode?: string;\n\tStateOfResidence?: RegionModel;\n\tUserOnlineStatusID?: number;\n\tUserOnlineStatusKey?: string;\n\tUserOnlineStatusName?: string;\n\tUserOnlineStatusDisplayName?: string;\n\tUserOnlineStatusTranslationKey?: string;\n\tUserOnlineStatusSortOrder?: number;\n\tUserOnlineStatus?: StatusModel;\n\tWeight?: number;\n\tDisplayName?: string;\n\tEmail?: string;\n\tGender?: string;\n\tPhoneNumber?: string;\n\tUserName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface UserOnlineStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<UserModel>}\n * @public\n */\nexport interface UserPagedResults extends PagedResultsBase<UserModel> {\n}\n\n/**\n * @see {@link BaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link HaveAStatusSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @see {@link HaveAContactBaseSearchModel}\n * @public\n */\nexport interface UserSearchModel extends BaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveAStatusSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\n\tName?: string;\n\tFirstName?: string;\n\tLastName?: string;\n\tAccountName?: string;\n\tAccountKey?: string;\n\tAccessibleFromAccountID?: number;\n\tUserNameOrContactName?: string;\n\tUserNameOrCustomKeyOrEmailOrContactName?: string;\n\tIDOrUserNameOrCustomKeyOrEmailOrContactName?: string;\n\tUserNameOrCustomKeyOrEmail?: string;\n\tUserNameOrEmail?: string;\n\tOnlineStatusID?: number;\n\tAccessibleLevels?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tContactIDIncludeNull?: boolean;\n\tContactKeyStrict?: boolean;\n\tContactKeyIncludeNull?: boolean;\n\tContactFirstNameStrict?: boolean;\n\tContactFirstNameIncludeNull?: boolean;\n\tContactLastNameStrict?: boolean;\n\tContactLastNameIncludeNull?: boolean;\n\tContactPhoneStrict?: boolean;\n\tContactPhoneIncludeNull?: boolean;\n\tContactFaxStrict?: boolean;\n\tContactFaxIncludeNull?: boolean;\n\tContactEmailStrict?: boolean;\n\tContactEmailIncludeNull?: boolean;\n\tEmailConfirmed?: boolean;\n\tIsApproved?: boolean;\n\tIsSMSAllowed?: boolean;\n\tLockoutEnabled?: boolean;\n\tPhoneNumberConfirmed?: boolean;\n\tRequirePasswordChangeOnNextLogin?: boolean;\n\tTwoFactorEnabled?: boolean;\n\tUseAutoPay?: boolean;\n\tMinAccessFailedCount?: number;\n\tMaxAccessFailedCount?: number;\n\tMatchAccessFailedCount?: number;\n\tAccountID?: number;\n\tAccountIDIncludeNull?: boolean;\n\tCurrencyID?: number;\n\tCurrencyIDIncludeNull?: boolean;\n\tMinDateOfBirth?: Date;\n\tMaxDateOfBirth?: Date;\n\tMatchDateOfBirth?: Date;\n\tMatchDateOfBirthIncludeNull?: boolean;\n\tGeneralMedicalCompleted?: boolean;\n\tGeneralMedicalCompletedIncludeNull?: boolean;\n\tMinHeightFeet?: number;\n\tMaxHeightFeet?: number;\n\tMatchHeightFeet?: number;\n\tMatchHeightFeetIncludeNull?: boolean;\n\tMinHeightInches?: number;\n\tMaxHeightInches?: number;\n\tMatchHeightInches?: number;\n\tMatchHeightInchesIncludeNull?: boolean;\n\tLanguageID?: number;\n\tLanguageIDIncludeNull?: boolean;\n\tMinLockoutEndDateUtc?: Date;\n\tMaxLockoutEndDateUtc?: Date;\n\tMatchLockoutEndDateUtc?: Date;\n\tMatchLockoutEndDateUtcIncludeNull?: boolean;\n\tPreferredStoreID?: number;\n\tPreferredStoreIDIncludeNull?: boolean;\n\tStateOfResidenceID?: number;\n\tStateOfResidenceIDIncludeNull?: boolean;\n\tUserOnlineStatusID?: number;\n\tUserOnlineStatusIDIncludeNull?: boolean;\n\tMinWeight?: number;\n\tMaxWeight?: number;\n\tMatchWeight?: number;\n\tMatchWeightIncludeNull?: boolean;\n\tAccessToken?: string;\n\tAccessTokenStrict?: boolean;\n\tAccessTokenIncludeNull?: boolean;\n\tDisplayName?: string;\n\tDisplayNameStrict?: boolean;\n\tDisplayNameIncludeNull?: boolean;\n\tEmail?: string;\n\tEmailStrict?: boolean;\n\tEmailIncludeNull?: boolean;\n\tGender?: string;\n\tGenderStrict?: boolean;\n\tGenderIncludeNull?: boolean;\n\tPasswordHash?: string;\n\tPasswordHashStrict?: boolean;\n\tPasswordHashIncludeNull?: boolean;\n\tPhoneNumber?: string;\n\tPhoneNumberStrict?: boolean;\n\tPhoneNumberIncludeNull?: boolean;\n\tSecurityStamp?: string;\n\tSecurityStampStrict?: boolean;\n\tSecurityStampIncludeNull?: boolean;\n\tUserName?: string;\n\tUserNameStrict?: boolean;\n\tUserNameIncludeNull?: boolean;\n}\n\n/**\n * @see {@link PagedResultsBase<StatusModel>}\n * @public\n */\nexport interface UserStatusPagedResults extends PagedResultsBase<StatusModel> {\n}\n\n/**\n * @see {@link PagedResultsBase<TypeModel>}\n * @public\n */\nexport interface UserTypePagedResults extends PagedResultsBase<TypeModel> {\n}\n\n/**\n * @public\n */\nexport interface UserTypingStatus {\n\tUserID: number;\n\tUserName?: string;\n\tStatus: boolean;\n}\n\n/**\n * @see {@link AmARelationshipTableModel<AccountModel>}\n * @public\n */\nexport interface VendorAccountModel extends AmARelationshipTableModel<AccountModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link SearchFormBase}\n * @public\n */\nexport interface VendorCatalogSearchForm extends SearchFormBase {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link IImageBaseModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface VendorImageModel extends NameableBaseModel, IImageBaseModel, HaveATypeModel<TypeModel> {\n}\n\n/**\n * @see {@link IndexableModelBase}\n * @public\n */\nexport interface VendorIndexableModel extends IndexableModelBase {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ManufacturerModel>}\n * @public\n */\nexport interface VendorManufacturerModel extends AmARelationshipTableModel<ManufacturerModel> {\n\tMasterName?: string;\n\tSlaveName?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveNotesBaseModel}\n * @see {@link HaveImagesBaseModel<VendorImageModel>}\n * @see {@link AmFilterableByAccountsBaseModel<VendorAccountModel>}\n * @see {@link AmFilterableByBrandsBaseModel<BrandVendorModel>}\n * @see {@link AmFilterableByFranchisesBaseModel<FranchiseVendorModel>}\n * @see {@link AmFilterableByManufacturersBaseModel<VendorManufacturerModel>}\n * @see {@link AmFilterableByProductsBaseModel<VendorProductModel>}\n * @see {@link AmFilterableByStoresBaseModel<StoreVendorModel>}\n * @see {@link HaveATypeModel<TypeModel>}\n * @see {@link HaveANullableContactBaseModel}\n * @see {@link HaveOrderMinimumsBaseModel}\n * @see {@link HaveFreeShippingMinimumsBaseModel}\n * @public\n */\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 {\n\tReviews?: Array<ReviewModel>;\n\tAllowDropShip?: boolean;\n\tMustResetPassword?: boolean;\n\tPurchaseOrders?: Array<PurchaseOrderModel>;\n\tShipments?: Array<ShipmentModel>;\n\tDefaultDiscount?: number;\n\tRecommendedPurchaseOrderDollarAmount?: number;\n\tAccountNumber?: string;\n\tEmailSubject?: string;\n\tNotes1?: string;\n\tPasswordHash?: string;\n\tSecurityToken?: string;\n\tSendMethod?: string;\n\tShipTo?: string;\n\tShipViaNotes?: string;\n\tSignBy?: string;\n\tTermNotes?: string;\n\tTerms?: string;\n\tUserName?: string;\n}\n\n/**\n * @see {@link PagedResultsBase<VendorModel>}\n * @public\n */\nexport interface VendorPagedResults extends PagedResultsBase<VendorModel> {\n}\n\n/**\n * @see {@link AmARelationshipTableModel<ProductModel>}\n * @public\n */\nexport interface VendorProductModel extends AmARelationshipTableModel<ProductModel> {\n\tSlaveSeoUrl?: string;\n\tMasterName?: string;\n\tSlaveName?: string;\n\tActualCost?: number;\n\tCostMultiplier?: number;\n\tInventoryCount?: number;\n\tListedPrice?: number;\n\tMaximumInventory?: number;\n\tMinimumInventory?: number;\n\tBin?: string;\n}\n\n/**\n * @see {@link NameableBaseSearchModel}\n * @see {@link AmFilterableByAccountBaseSearchModel}\n * @see {@link AmFilterableByBrandBaseSearchModel}\n * @see {@link AmFilterableByFranchiseBaseSearchModel}\n * @see {@link AmFilterableByManufacturerBaseSearchModel}\n * @see {@link AmFilterableByProductBaseSearchModel}\n * @see {@link AmFilterableByStoreBaseSearchModel}\n * @see {@link HaveATypeSearchModel}\n * @see {@link HaveAContactBaseSearchModel}\n * @public\n */\nexport interface VendorSearchModel extends NameableBaseSearchModel, AmFilterableByAccountBaseSearchModel, AmFilterableByBrandBaseSearchModel, AmFilterableByFranchiseBaseSearchModel, AmFilterableByManufacturerBaseSearchModel, AmFilterableByProductBaseSearchModel, AmFilterableByStoreBaseSearchModel, HaveATypeSearchModel, HaveAContactBaseSearchModel {\n\tNotes?: string;\n\tAddressID?: number;\n\tTermID?: number;\n\tVendorsShipViaID?: number;\n\tBrandIDIncludeNull?: boolean;\n\tBrandNameStrict?: boolean;\n\tBrandNameIncludeNull?: boolean;\n\tFranchiseIDIncludeNull?: boolean;\n\tFranchiseNameStrict?: boolean;\n\tFranchiseNameIncludeNull?: boolean;\n\tStoreIDIncludeNull?: boolean;\n\tStoreAnyDistrictID?: number;\n\tStoreAnyZipCode?: string;\n\tStoreAnyLatitude?: number;\n\tStoreAnyLongitude?: number;\n\tStoreAnyRadius?: number;\n\tStoreAnyUnits?: LocatorUnits;\n\tContactIDIncludeNull?: boolean;\n\tContactKeyStrict?: boolean;\n\tContactKeyIncludeNull?: boolean;\n\tContactFirstNameStrict?: boolean;\n\tContactFirstNameIncludeNull?: boolean;\n\tContactLastNameStrict?: boolean;\n\tContactLastNameIncludeNull?: boolean;\n\tContactPhoneStrict?: boolean;\n\tContactPhoneIncludeNull?: boolean;\n\tContactFaxStrict?: boolean;\n\tContactFaxIncludeNull?: boolean;\n\tContactEmailStrict?: boolean;\n\tContactEmailIncludeNull?: boolean;\n\tAllowDropShip?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeIsPercent?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeIsPercent?: boolean;\n\tMustResetPassword?: boolean;\n\tMinDefaultDiscount?: number;\n\tMaxDefaultDiscount?: number;\n\tMatchDefaultDiscount?: number;\n\tMatchDefaultDiscountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmount?: number;\n\tMaxMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmount?: number;\n\tMatchMinimumForFreeShippingDollarAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingDollarAmountAfter?: number;\n\tMaxMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfter?: number;\n\tMatchMinimumForFreeShippingDollarAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountBufferProductID?: number;\n\tMinimumForFreeShippingDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmount?: number;\n\tMaxMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmount?: number;\n\tMatchMinimumForFreeShippingQuantityAmountIncludeNull?: boolean;\n\tMinMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMaxMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfter?: number;\n\tMatchMinimumForFreeShippingQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountBufferProductID?: number;\n\tMinimumForFreeShippingQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmount?: number;\n\tMaxMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmount?: number;\n\tMatchMinimumOrderDollarAmountIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountAfter?: number;\n\tMaxMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfter?: number;\n\tMatchMinimumOrderDollarAmountAfterIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferCategoryID?: number;\n\tMinimumOrderDollarAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderDollarAmountBufferProductID?: number;\n\tMinimumOrderDollarAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderDollarAmountOverrideFee?: number;\n\tMaxMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFee?: number;\n\tMatchMinimumOrderDollarAmountOverrideFeeIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmount?: number;\n\tMaxMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmount?: number;\n\tMatchMinimumOrderQuantityAmountIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountAfter?: number;\n\tMaxMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfter?: number;\n\tMatchMinimumOrderQuantityAmountAfterIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferCategoryID?: number;\n\tMinimumOrderQuantityAmountBufferCategoryIDIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountBufferProductID?: number;\n\tMinimumOrderQuantityAmountBufferProductIDIncludeNull?: boolean;\n\tMinMinimumOrderQuantityAmountOverrideFee?: number;\n\tMaxMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFee?: number;\n\tMatchMinimumOrderQuantityAmountOverrideFeeIncludeNull?: boolean;\n\tMinRecommendedPurchaseOrderDollarAmount?: number;\n\tMaxRecommendedPurchaseOrderDollarAmount?: number;\n\tMatchRecommendedPurchaseOrderDollarAmount?: number;\n\tMatchRecommendedPurchaseOrderDollarAmountIncludeNull?: boolean;\n\tAccountNumber?: string;\n\tAccountNumberStrict?: boolean;\n\tAccountNumberIncludeNull?: boolean;\n\tEmailSubject?: string;\n\tEmailSubjectStrict?: boolean;\n\tEmailSubjectIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessage?: string;\n\tMinimumForFreeShippingDollarAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessage?: string;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountIgnoredAcceptedMessageIncludeNull?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessage?: string;\n\tMinimumForFreeShippingQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumForFreeShippingQuantityAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderDollarAmountWarningMessage?: string;\n\tMinimumOrderDollarAmountWarningMessageStrict?: boolean;\n\tMinimumOrderDollarAmountWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeAcceptedMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessage?: string;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountOverrideFeeWarningMessageIncludeNull?: boolean;\n\tMinimumOrderQuantityAmountWarningMessage?: string;\n\tMinimumOrderQuantityAmountWarningMessageStrict?: boolean;\n\tMinimumOrderQuantityAmountWarningMessageIncludeNull?: boolean;\n\tNotes1?: string;\n\tNotes1Strict?: boolean;\n\tNotes1IncludeNull?: boolean;\n\tPasswordHash?: string;\n\tPasswordHashStrict?: boolean;\n\tPasswordHashIncludeNull?: boolean;\n\tSecurityToken?: string;\n\tSecurityTokenStrict?: boolean;\n\tSecurityTokenIncludeNull?: boolean;\n\tSendMethod?: string;\n\tSendMethodStrict?: boolean;\n\tSendMethodIncludeNull?: boolean;\n\tShipTo?: string;\n\tShipToStrict?: boolean;\n\tShipToIncludeNull?: boolean;\n\tShipViaNotes?: string;\n\tShipViaNotesStrict?: boolean;\n\tShipViaNotesIncludeNull?: boolean;\n\tSignBy?: string;\n\tSignByStrict?: boolean;\n\tSignByIncludeNull?: boolean;\n\tTermNotes?: string;\n\tTermNotesStrict?: boolean;\n\tTermNotesIncludeNull?: boolean;\n\tTerms?: string;\n\tTermsStrict?: boolean;\n\tTermsIncludeNull?: boolean;\n\tUserName?: string;\n\tUserNameStrict?: boolean;\n\tUserNameIncludeNull?: boolean;\n}\n\n/**\n * @see {@link SearchViewModelBase<VendorCatalogSearchForm,VendorIndexableModel>}\n * @public\n */\nexport interface VendorSearchViewModel extends SearchViewModelBase<VendorCatalogSearchForm,VendorIndexableModel> {\n}\n\n/**\n * @see {@link SuggestResultBase}\n * @public\n */\nexport interface VendorSuggestResult extends SuggestResultBase {\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveANullableContactBaseModel}\n * @public\n */\nexport interface VisitModel extends NameableBaseModel, HaveAStatusModel, HaveANullableContactBaseModel {\n\tAddressID?: number;\n\tAddressKey?: string;\n\tAddress?: AddressModel;\n\tIPOrganizationID?: number;\n\tIPOrganizationKey?: string;\n\tIPOrganizationName?: string;\n\tIPOrganization?: IPOrganizationModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUser?: UserModel;\n\tCampaignID?: number;\n\tCampaign?: CampaignModel;\n\tCampaignKey?: string;\n\tCampaignName?: string;\n\tSiteDomainID?: number;\n\tSiteDomain?: SiteDomainModel;\n\tSiteDomainKey?: string;\n\tSiteDomainName?: string;\n\tVisitorID?: number;\n\tVisitor?: VisitorModel;\n\tVisitorKey?: string;\n\tVisitorName?: string;\n\tEvents?: Array<EventModel>;\n\tContainsSocialProfile?: boolean;\n\tDelta?: number;\n\tDidBounce?: boolean;\n\tDuration?: number;\n\tEndedOn?: Date;\n\tIsFirstTrigger?: boolean;\n\tScore?: number;\n\tSource?: number;\n\tStartedOn?: Date;\n\tTotalTriggers?: number;\n\tBrowser?: string;\n\tEntryPage?: string;\n\tExitPage?: string;\n\tFlash?: string;\n\tIPAddress?: string;\n\tKeywords?: string;\n\tLanguage?: string;\n\tOperatingSystem?: string;\n\tPartitionKey?: string;\n\tReferrer?: string;\n\tReferringHost?: string;\n\tRowKey?: string;\n\tTime?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface VisitorModel extends NameableBaseModel {\n\tAddressID?: number;\n\tAddressKey?: string;\n\tAddress?: AddressModel;\n\tIPOrganizationID?: number;\n\tIPOrganizationKey?: string;\n\tIPOrganizationName?: string;\n\tIPOrganization?: IPOrganizationModel;\n\tUserID?: number;\n\tUserKey?: string;\n\tUser?: UserModel;\n\tVisits?: Array<VisitModel>;\n\tScore?: number;\n\tIPAddress?: string;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @public\n */\nexport interface WalletModel extends NameableBaseModel {\n\tFirstName?: string;\n\tLastName?: string;\n\tIsDefault?: boolean;\n\tUserID?: number;\n\tUserKey?: string;\n\tUserUsername?: string;\n\tUser?: UserModel;\n\tAccountContactID?: number;\n\tAccountContactKey?: string;\n\tAccountContactName?: string;\n\tAccountContact?: AccountContactModel;\n\tCurrencyID?: number;\n\tCurrencyKey?: string;\n\tCurrencyName?: string;\n\tCurrency?: CurrencyModel;\n\tExpirationMonth?: number;\n\tExpirationYear?: number;\n\tAccountNumber?: string;\n\tBankName?: string;\n\tCardHolderName?: string;\n\tCardType?: string;\n\tCreditCardNumber?: string;\n\tRoutingNumber?: string;\n\tToken?: string;\n}\n\n/**\n * @public\n */\nexport interface WebhookData {\n\tClinicianID?: number;\n\tClinicID?: number;\n\tPendingPrescriptionCount?: number;\n\tTransmissionErrorCount?: number;\n\tRefillRequestCount?: number;\n\tPatientID?: number;\n\tAgentID?: number;\n\tPrescriptionID?: number;\n\tPrescriptionStatus?: number;\n\tStatusDateTime?: Date;\n\tStatusDetails?: string;\n\tRelatedRxRequestQueueItemID?: number;\n\tRelatedRxChangeQueueItemID?: number;\n\tMedicationStatus?: number;\n\tStatusNotes?: string;\n\tLockoutDateTime?: Date;\n\tErrorDetails?: string;\n\tClinicianIDPCompleteDate?: Date;\n\tIDPCompleteType?: string;\n\tDateTime?: Date;\n\tStatus?: string;\n\tSelfReportedMedicationID?: number;\n\tPharmacyID?: number;\n\tPharmacyStatus?: string;\n\tPrescriberID?: number;\n\tPriorAuthorizationCaseStatus?: string;\n\tPriorAuthorizationCaseID?: number;\n\tSourceType?: string;\n\tPatientAllergyID?: number;\n\tTotalData?: TotalData;\n}\n\n/**\n * @public\n */\nexport interface WebhookRequestModel {\n\tEventType?: string;\n\tData?: WebhookData;\n}\n\n/**\n * @see {@link NameableBaseModel}\n * @see {@link HaveAStatusModel}\n * @see {@link HaveATypeModel<TypeModel>}\n * @public\n */\nexport interface ZoneModel extends NameableBaseModel, HaveAStatusModel, HaveATypeModel<TypeModel> {\n\tAdZones?: Array<AdZoneModel>;\n\tHeight?: number;\n\tWidth?: number;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"suggestionBtn\":\"SearchTermFilter_suggestionBtn__ZwT+6\"};","import { useRef } from \"react\";\nimport { useDetectOutsideClick } from \"src/_shared/customHooks/useDetectOutsideClick\";\n\ninterface IOutsideClickDetectorProps {\n  onOutsideClicked: () => void;\n  children?: JSX.Element | JSX.Element[];\n}\n\nexport const OutsideClickDetector = (props: IOutsideClickDetectorProps): JSX.Element => {\n  const wrapperRef = useRef(null);\n  useDetectOutsideClick(wrapperRef, props.onOutsideClicked);\n  // NOTE: className only for finding in DOM\n  return <div className=\"outside-click-detector\" ref={wrapperRef}>{props.children}</div>;\n};\n","import { MutableRefObject, useEffect } from \"react\";\n\nexport const useDetectOutsideClick = (ref: MutableRefObject<any>, onOutSideClicked: () => void): void => {\n  useEffect(() => {\n    function handleClickOutside(event: MouseEvent) {\n      if (ref.current && !ref.current.contains(event.target)) {\n        onOutSideClicked();\n      }\n    }\n    document.addEventListener(\"mousedown\", handleClickOutside);\n    return () => {\n      // Unbind the event listener on clean up\n      document.removeEventListener(\"mousedown\", handleClickOutside);\n    };\n  }, [ ref ]);\n};\n","import { useEffect } from \"react\";\n\nexport const useDebounceWithCallback = <T>(value: T, callback: Function, delay?: number): void => {\n  useEffect(() => {\n    // eslint-disable-next-line no-undef\n    let timer: NodeJS.Timeout = null;\n    if (value !== undefined && callback) {\n      timer = setTimeout(() => callback(), delay ?? 500);\n    }\n\n    return () => {\n      if (timer) {\n        clearTimeout(timer);\n      }\n    };\n  }, [ value, delay ]);\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Accordion, Button, Card, Col, Form, InputGroup, ListGroup } from \"react-bootstrap\";\nimport { useLocation } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { CatalogFilterHeaderButton } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton\";\nimport { ISearchTermFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { SuggestProductCatalogWithProviderDto } from \"src/_api\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { ProductSuggestResult, SearchSort } from \"src/_api/cvApi._DtoClasses\";\nimport classes from \"src/Catalog/controls/CatalogFilterComponents/SearchTermFilter.module.scss\";\nimport { OutsideClickDetector } from \"src/_shared/higherOrderComponents\";\nimport { useDebounceWithCallback } from \"src/_shared/customHooks/useDebounceWithCallback\";\n\nexport const SearchTermFilter = (props: ISearchTermFilterProps): JSX.Element => {\n  const { expandedFilterName, setExpandedFilterName, onSearchSubmitted, currentFormQuery } = props;\n  const [ query, setQuery ] = useState(currentFormQuery ?? \"\");\n  const [ suggestions, setSuggestions ] = useState<Array<ProductSuggestResult>>([]);\n  const [ hideOverflow, setHideOverflow ] = useState<boolean>(true);\n\n  useDebounceWithCallback<string>(query, handleDebouncedQuery, 500);\n\n  const cefConfig = useCefConfig() as CEFConfig;\n  const location = useLocation();\n  const { t } = useTranslation();\n  const { setRunning, finishRunning } = useViewState();\n\n  useEffect(() => {\n    if ((!currentFormQuery || !currentFormQuery?.length) && query?.length) {\n      setQuery(\"\");\n      return;\n    }\n    if (currentFormQuery && currentFormQuery !== query) {\n      setQuery(currentFormQuery);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ location ]);\n\n  useEffect(() => {\n    if (expandedFilterName === \"Search Term\") {\n      setTimeout(() => {\n        setHideOverflow(false);\n        // Allow time for css transition\n      }, 200);\n    } else if (!hideOverflow) {\n      setHideOverflow(true);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ expandedFilterName ]);\n\n  function handleDebouncedQuery(): void {\n    const searchIsSuggestion = Boolean(suggestions.find(s => s.Name === query));\n    if (searchIsSuggestion) {\n      setSuggestions([]);\n      return;\n    }\n    if (query === currentFormQuery) {\n      return;\n    }\n    onQueryChanged();\n  }\n\n  // TODO need to implement debounce on this\n  const onSearchInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n    if (e.key === \"Enter\") {\n      onSearchSubmitted(query);\n      setSuggestions([]);\n      e.preventDefault();\n    }\n    if (e.key === \"Escape\") {\n      setSuggestions([]);\n    }\n  };\n\n  function onQueryChanged(): void {\n    if (!query?.length) {\n      setSuggestions([]);\n      return;\n    }\n    setRunning();\n    cvApi.providers\n      .SuggestProductCatalogWithProvider({\n        Page: 1,\n        PageSetSize: cefConfig?.catalog.defaultPageSize || 9,\n        PageSize: cefConfig?.catalog.defaultPageSize || 9,\n        Query: query,\n        Sort: (cefConfig?.catalog.defaultSort as SearchSort) || SearchSort.Relevance\n      } as SuggestProductCatalogWithProviderDto)\n      .then(result => {\n        setSuggestions(result.data);\n        if (hideOverflow) {\n          setHideOverflow(false);\n        }\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  const onSuggestionClicked = (suggestion: ProductSuggestResult): void => {\n    setQuery(suggestion.Name);\n    setHideOverflow(true);\n    // SetSuggestions([]);\n  };\n\n  const currentlyExpanded = expandedFilterName === \"Search Term\";\n\n  return (\n    <Col sm={6}\n      md={12}\n      lg={12}>\n      <Card className=\"applied-filters mb-1\">\n        <Card.Header className=\"p-2 bg-transparent text-body\">\n          <CatalogFilterHeaderButton\n            dataSid=\"searchTermCatalogFilterBtn\"\n            expandedFilterName={expandedFilterName}\n            setExpandedFilterName={setExpandedFilterName}\n            title={\"Search Term\"}\n            icon={\"fa fa-fw fa-search\"}\n          />\n        </Card.Header>\n        <OutsideClickDetector onOutsideClicked={() => {\n          setSuggestions([]);\n        }}>\n          <Accordion.Collapse\n            eventKey=\"search-collapse\"\n            className={`show transition-max-height ${hideOverflow ? \"overflow-hidden\" : \"\"}`}\n            style={{\n              maxHeight: currentlyExpanded ? \"350px\" : \"0px\"\n            }}>\n            <Card.Body\n              className=\"p-3 bg-light\"\n              style={{ maxHeight: \"50vh\", overflowY: hideOverflow ? \"auto\" : \"initial\" }}>\n              <InputGroup>\n                <Form.Control\n                  data-sid=\"searchTermCatalogFilterInput\"\n                  style={{ borderRight: 0 }}\n                  type=\"text\"\n                  placeholder={t(\n                    \"ui.storefront.searchCatalog.controls.externalSearchBox.Search.Ellipses\"\n                  )}\n                  aria-label=\"Search\"\n                  role=\"search\"\n                  value={query}\n                  onKeyDown={onSearchInputKeyDown}\n                  onChange={e => setQuery(e.target.value)}\n                />\n                <div className=\"input-group-text p-0\"\n                  style={{ borderLeft: 0 }}>\n                  <Button\n                    data-sid=\"searchTermCatalogFilterSubmit\"\n                    style={{ borderLeft: 0 }}\n                    variant=\"none\"\n                    onClick={e => {\n                      onSearchSubmitted(query);\n                      setSuggestions([]);\n                    }}\n                    type=\"button\">\n                    <i className=\"fal fa-fw fa-search\" />\n                  </Button>\n                </div>\n                {suggestions.length\n                  ? <Card.Body\n                    className=\"position-absolute border bg-white p-0\"\n                    style={{ top: \"105%\", overflow: \"visible\", zIndex: 1 }}>\n                    <ListGroup as=\"ul\" className=\"list-unstyled mb-0\">\n                      {suggestions.map(suggestion => <Accordion.Item\n                        key={suggestion.Name}\n                        eventKey=\"search-collapse\"\n                        className=\"border-0 p-0 text-start\"\n                        style={{ top: \"105%\", overflow: \"visible\" }}>\n                        <Button\n                          variant=\"link\"\n                          onClick={() => onSuggestionClicked(suggestion)}\n                          // eslint-disable-next-line max-len\n                          className={`text-start py-0 ps-3 text-nowrap w-100 text-decoration-none ${classes.suggestionBtn}`}>\n                          {suggestion.Name}\n                        </Button>\n                      </Accordion.Item>)}\n                    </ListGroup>\n                  </Card.Body>\n                  : null}\n              </InputGroup>\n            </Card.Body>\n          </Accordion.Collapse>\n        </OutsideClickDetector>\n        {/* <SizeMe monitorHeight={true}>\n          {({ size }) => {\n            const { height } = size;\n            return (\n              <div\n                className={`card-collapse show overflow-hidden transition-max-height`}\n                style={{\n                  maxHeight:\n                    expandedFilterName === \"Search Term\"\n                      ? `${cardMaxHeight === 0 ? 350 : cardMaxHeight}px`\n                      : \"0px\"\n                }}\n                id=\"search-collapse\">\n                <div\n                  className=\"card-body p-3 bg-light\"\n                  style={{ maxHeight: \"50vh\", overflowY: \"auto\" }}>\n                  <div className=\"input-group\">\n                    <input\n                      className=\"form-control\"\n                      type=\"text\"\n                      placeholder={t(\"ui.storefront.searchCatalog.controls.externalSearchBox.Search.Ellipses\")}\n                      aria-label={t(\"ui.storefront.searchCatalog.controls.externalSearchBox.Search.Ellipses\")}\n                      role=\"search\"\n                      value={query}\n                      onKeyDown={onSearchInputKeyDown}\n                      onChange={(e) => setQuery(e.target.value)}\n                    />\n                    <div className=\"input-group-append\">\n                      <button\n                        className=\"btn btn-outline-secondary\"\n                        type=\"button\"\n                        onClick={(e) => onSubmitSearch(e)}>\n                        <FontAwesomeIcon icon={faSearch} />\n                      </button>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            );\n          }}\n        </SizeMe> */}\n      </Card>\n    </Col>\n  );\n};\n","import { Accordion, Button, Card, Col, Form, ListGroup, ListGroupItem } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { CatalogFilterHeaderButton } from \"src/Catalog/controls/CatalogFilterComponents/CatalogFilterHeaderButton\";\nimport { IRatingRangesFilterProps } from \"src/Catalog/controls/CatalogFilterComponents/_CatalogFilterComponentsTypes\";\n\nconst stars = [ { ID: 1 }, { ID: 2 }, { ID: 3 }, { ID: 4 }, { ID: 5 } ];\n\nexport const ProductRatingsFilter = (props: IRatingRangesFilterProps): JSX.Element => {\n  const { expandedFilterName, setExpandedFilterName, ratingRanges, onRatingRangeClicked, isChecked } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Col xs={12}\n      sm={6}\n      md={12}>\n      <Card className=\"applied-filters mb-1\">\n        <Accordion flush>\n          <Card.Header className=\"p-2 bg-transparent text-body\">\n            <CatalogFilterHeaderButton\n              expandedFilterName={expandedFilterName}\n              setExpandedFilterName={setExpandedFilterName}\n              title={t(\"ui.storefront.product.reviews.ratingSummary.productRating.Plural\")}\n              icon={\"fal fa-fw fa-star\"}\n            />\n          </Card.Header>\n          <Accordion.Collapse\n            eventKey=\"seller-ratings-collapse\"\n            className={expandedFilterName === t(\"ui.storefront.product.reviews.ratingSummary.productRating.Plural\")\n              ? \"show\"\n              : \"\"}>\n            <Card.Body className=\"ps-0\">\n              <ListGroup as=\"ul\" className=\"check-list list-unstyled mb-0\">\n                {ratingRanges\n                  && ratingRanges.length\n                  && ratingRanges.map((range, index) => <ListGroupItem key={range.Label}\n                    className=\"border-0 py-1\">\n                    <Button type=\"button\"\n                      variant=\"none\"\n                      className=\"align-items-center d-flex ps-0 py-0\">\n                      <Form.Check.Input\n                        id={`sellerRating${index}`}\n                        type=\"checkbox\"\n                        checked={isChecked(range)}\n                        onChange={e => {\n                          onRatingRangeClicked(isChecked(range) ? [] : [ range.Label ]);\n                        }}\n                        className=\"mt-0\"\n                      />\n                      <Form.Check.Label className=\"ms-2\">\n                        <span className=\"stars d-flex\">\n                          {stars\n                            .map((s, index2) => <svg\n                              key={s.ID}\n                              width=\"20\"\n                              height=\"19\"\n                              xmlns=\"http://www.w3.org/2000/svg\"\n                              viewBox=\"0 0 20 19\">\n                              <path\n                                // eslint-disable-next-line max-len\n                                d=\"M10 14.332 4.122 18.09 5.88 11.34.49 6.909l6.964-.414L10 0l2.546 6.495 6.965.415-5.39 4.429 1.757 6.751z\"\n                                fill={index2 <= index ? \"#f8d200\" : \"#D9D9D9\"}></path>\n                            </svg>)}\n                        </span>\n                      </Form.Check.Label>\n                    </Button>\n                  </ListGroupItem>)}\n              </ListGroup>\n            </Card.Body>\n          </Accordion.Collapse>\n        </Accordion>\n      </Card>\n    </Col>\n  );\n};\n","import { Card, ListGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface IAppliedFilterBlockProps {\n  titleKey: string;\n  titleId?: string;\n  content: React.ReactNode;\n}\n\nexport const AppliedFilterBlock = (props: IAppliedFilterBlockProps): JSX.Element => {\n  const { titleKey, titleId, content } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <ListGroup\n      as=\"ul\"\n      variant=\"flush\"\n      className=\"bg-light\"\n      style={{ maxHeight: \"50vh\", overflowY: \"auto\" }}>\n      <ListGroup.Item as=\"li\" className=\"p-2\">\n        <Card.Title as=\"h5\"\n          className=\"mb-1 ms-2\"\n          id={titleId}>\n          {t(titleKey)}\n        </Card.Title>\n        {content}\n      </ListGroup.Item>\n    </ListGroup>\n  );\n};\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { Fragment, useState } from \"react\";\nimport { Button, Card, Col, ListGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n  AttributesFilter,\n  BrandsFilter,\n  CategoriesFilter,\n  CompareFilter,\n  PriceRangesFilter,\n  ProductRatingsFilter,\n  SearchTermFilter\n} from \"src/Catalog/controls/CatalogFilterComponents\";\nimport { Dictionary, ProductSearchViewModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport {\n  AggregateRatingRange,\n  AppliedCartItemDiscountModel,\n  CategoryModel,\n  GeneralAttributeModel,\n  ProductCatalogSearchForm\n} from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { AppliedFilterBlock } from \"src/Catalog/controls/CatalogFilterComponents/AppliedFilterBlock\";\n\ninterface ICatalogFiltersProps {\n  categoriesBySeoUrl: Record<string, CategoryModel>;\n  categoriesByNamePipeKey: Record<string, CategoryModel>;\n  allAttributes: GeneralAttributeModel[];\n  // Redux\n  compareCartItems?: Array<SalesItemBaseModel<AppliedCartItemDiscountModel>>;\n  productSearchViewModel: ProductSearchViewModel;\n  setProductSearchViewModel: React.Dispatch<React.SetStateAction<ProductSearchViewModel>>;\n  multiFilterMode: \"multi-any\" | \"multi-all\";\n}\n\nexport const CatalogFilters = (props: ICatalogFiltersProps): JSX.Element => {\n  const {\n    categoriesBySeoUrl,\n    categoriesByNamePipeKey,\n    allAttributes,\n    productSearchViewModel,\n    setProductSearchViewModel,\n    multiFilterMode\n  } = props;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const [ expandedFilterName, setExpandedFilterName ] = useState(\n    productSearchViewModel?.Form?.Query ? \"Search Term\" : null\n  );\n\n  const onClickRemoveParam = (\n    param: keyof ProductCatalogSearchForm | Array<keyof ProductCatalogSearchForm>,\n    paramKey?: string\n  ): void => {\n    let form: ProductCatalogSearchForm = null;\n    try {\n      form = JSON.parse(JSON.stringify(productSearchViewModel?.Form));\n    } catch (err) {\n      return;\n    }\n    if (param instanceof Array) {\n      for (let i = 0; i < param.length; i++) {\n        const p = param[i];\n        if (form[p]) {\n          delete form[p];\n        }\n      }\n    } else if (form[param]) {\n      delete form[param];\n    }\n    form.Page = 1;\n    setProductSearchViewModel({ ...productSearchViewModel, Form: form });\n  };\n\n  const onClickRemoveParams = (\n    ...params: (keyof ProductCatalogSearchForm | Array<keyof ProductCatalogSearchForm>)[]\n  ): void => {\n    let form: ProductCatalogSearchForm = null;\n    try {\n      form = JSON.parse(JSON.stringify(productSearchViewModel?.Form));\n    } catch (err) {\n      return;\n    }\n    params.forEach(param => {\n      if (param instanceof Array) {\n        for (let i = 0; i < param.length; i++) {\n          const p = param[i];\n          if (form[p]) {\n            delete form[p];\n          }\n        }\n      } else if (form[param]) {\n        delete form[param];\n      }\n      form.Page = 1;\n    });\n    setProductSearchViewModel({ ...productSearchViewModel, Form: form });\n  };\n\n  const alterSearchViewModelForm = (newForm: Partial<ProductCatalogSearchForm>) => {\n    if (!newForm || !productSearchViewModel || !setProductSearchViewModel) {\n      return;\n    }\n    setProductSearchViewModel({\n      ...productSearchViewModel,\n      Form: {\n        ...productSearchViewModel?.Form,\n        Page: 1,\n        ...newForm\n      }\n    });\n  };\n\n  const alterAttribute = (changeType: \"push\" | \"pop\", attributeName: string, value: string): void => {\n    const formKey = multiFilterMode === \"multi-any\" ? \"AttributesAny\" : \"AttributesAll\";\n    const newAttributes: Dictionary<Array<string>> = { ...productSearchViewModel.Form[formKey] };\n    const attributeAlreadyIncluded\n      = productSearchViewModel?.Form[formKey]\n      && productSearchViewModel.Form[formKey][attributeName]\n      && productSearchViewModel.Form[formKey][attributeName].indexOf(value) > -1;\n    if ((attributeAlreadyIncluded && changeType === \"push\") || (!attributeAlreadyIncluded && changeType === \"pop\")) {\n      return;\n    }\n    if (changeType === \"push\") {\n      if (!newAttributes[attributeName]) {\n        newAttributes[attributeName] = [];\n      }\n      newAttributes[attributeName].push(value);\n    } else {\n      newAttributes[attributeName] = newAttributes[attributeName].filter(x => x !== value);\n      if (newAttributes[attributeName].length < 1) {\n        delete newAttributes[attributeName];\n      }\n      if (!Object.keys(newAttributes).length) {\n        onClickRemoveParam(\"AttributesAll\");\n        return;\n      }\n    }\n    alterSearchViewModelForm({\n      [formKey]: newAttributes\n    });\n  };\n\n  const filterProps = {\n    setExpandedFilterName,\n    expandedFilterName,\n    productSearchViewModel,\n    setProductSearchViewModel\n  };\n\n  const filterParamsExist\n    = Boolean(productSearchViewModel?.Form?.Category)\n    || Boolean(productSearchViewModel?.Form?.Query)\n    || Boolean(productSearchViewModel?.Form?.RatingRanges)\n    || Boolean(productSearchViewModel?.Form?.PricingRanges)\n    || Boolean(productSearchViewModel?.Form?.BrandName)\n    || Boolean(productSearchViewModel?.Form?.AttributesAny)\n    || Boolean(productSearchViewModel?.Form?.AttributesAll);\n\n  function n(category: CategoryModel | string, categoryTop: string = null, categoryMid: string = null): string {\n    if (!categoriesBySeoUrl || !categoriesByNamePipeKey) {\n      // Loading\n      return null;\n    }\n    if (!category) {\n      return null;\n    }\n    if (typeof category === \"string\") {\n      if (category in categoriesBySeoUrl) {\n        return n(categoriesBySeoUrl[category]);\n      }\n      if (category in categoriesByNamePipeKey) {\n        return n(categoriesByNamePipeKey[category]);\n      }\n      if (Boolean(categoryMid)) {\n        const full = `${categoryTop}/${categoryMid}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      if (Boolean(categoryTop)) {\n        const full = `${categoryTop}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      return \"Unknown Category\";\n    }\n    return category.DisplayName ?? category.Name;\n  }\n\n  function c(category: CategoryModel | string, categoryTop: string = null, categoryMid: string = null): CategoryModel {\n    if (!categoriesBySeoUrl || !categoriesByNamePipeKey) {\n      // Loading\n      return null;\n    }\n    if (!category) {\n      return null;\n    }\n    if (typeof category === \"string\") {\n      if (category in categoriesBySeoUrl) {\n        return c(categoriesBySeoUrl[category]);\n      }\n      if (category in categoriesByNamePipeKey) {\n        return c(categoriesByNamePipeKey[category]);\n      }\n      if (Boolean(categoryMid)) {\n        const full = `${categoryTop}/${categoryMid}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return c(categoriesBySeoUrl[full]);\n        }\n      }\n      if (Boolean(categoryTop)) {\n        const full = `${categoryTop}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return c(categoriesBySeoUrl[full]);\n        }\n      }\n      return null;\n    }\n    return category;\n  }\n\n  return (\n    <>\n      <Col\n        xs={12}\n        sm={6}\n        md={12}>\n        <Card className=\"applied-filters mb-3\">\n          <Card.Header className=\"p-2 bg-light text-body\">\n            <i className=\"far fa-fw fa-filter fa-fw me-2\" />\n            <span className=\"filter-title fw-medium\">{t(\"ui.storefront.searchCatalog.filers.YourAppliedFilters\")}</span>\n          </Card.Header>\n          {filterParamsExist ? null : (\n            <ListGroup\n              as=\"ul\"\n              variant=\"flush\"\n              className=\"bg-light\"\n              style={{ maxHeight: \"50vh\", overflowY: \"auto\" }}>\n              <ListGroup.Item\n                as=\"li\"\n                className=\"p-2\">\n                {t(\"ui.storefront.searchCatalog.filters.None\")}\n              </ListGroup.Item>\n            </ListGroup>\n          )}\n          {productSearchViewModel?.Form?.Category && (\n            <AppliedFilterBlock\n              titleKey=\"ui.storefront.common.Category.Plural\"\n              titleId=\"AppliedFiltersCategoriesText\"\n              content={\n                <Button\n                  variant=\"\"\n                  data-sid=\"AppliedFiltersCategoryType\"\n                  className=\"p-0 w-100 text-start\"\n                  onClick={e => {\n                    onClickRemoveParams(\"Category\", \"CategoryMid\", \"CategoryTop\");\n                  }}>\n                  <i className=\"far fa-fw fa-times text-danger me-1\" />\n                  {n(productSearchViewModel.Form.Category)}\n                </Button>\n              }\n            />\n          )}\n          {productSearchViewModel?.Form?.Query && (\n            <AppliedFilterBlock\n              titleKey=\"ui.storefront.searchCatalog.filters.SearchTerm\"\n              titleId=\"AppliedFiltersSearchTermText\"\n              content={\n                <Button\n                  variant=\"\"\n                  className=\"p-0 w-100 text-start\"\n                  onClick={() => onClickRemoveParam(\"Query\")}>\n                  <i className=\"far fa-fw fa-times text-danger me-1\" />\n                  {productSearchViewModel?.Form?.Query}\n                </Button>\n              }\n            />\n          )}\n          {productSearchViewModel?.Form?.RatingRanges?.length && (\n            <AppliedFilterBlock\n              titleKey=\"ui.storefront.product.reviews.ratingSummary.productRating.Plural\"\n              titleId=\"AppliedFiltersRatingRangesText\"\n              content={productSearchViewModel.Form.RatingRanges.map((range: string, index: number) => (\n                <Fragment key={range}>\n                  <Button\n                    variant=\"none\"\n                    className=\"p-0 me-2 text-start\"\n                    onClick={() => onClickRemoveParam(\"RatingRanges\")}>\n                    <i className=\"far fa-fw fa-times text-danger m-0\" />\n                  </Button>\n                  <i className=\"fal fa-fw fa-star me-1\" />\n                  {range}\n                </Fragment>\n              ))}\n            />\n          )}\n          {productSearchViewModel?.Form?.PricingRanges && (\n            <AppliedFilterBlock\n              titleKey=\"ui.storefront.searchCatalog.filters.PriceRange.Plural\"\n              titleId=\"AppliedFiltersPricingRangesText\"\n              content={\n                <Button\n                  variant=\"\"\n                  style={{ textAlign: \"left\" }}\n                  className=\"p-0 w-100 bg-white text-start\"\n                  onClick={() => onClickRemoveParam(\"PricingRanges\")}>\n                  <i className=\"far fa-fw fa-times text-danger me-1\" />\n                  {productSearchViewModel?.Form?.PricingRanges}\n                </Button>\n              }\n            />\n          )}\n          {productSearchViewModel?.Form?.BrandName && (\n            <AppliedFilterBlock\n              titleKey=\"ui.storefront.searchCatalog.filters.BrandName\"\n              titleId=\"AppliedFiltersBrandNameText\"\n              content={\n                <Button\n                  variant=\"\"\n                  style={{ textAlign: \"left\" }}\n                  className=\"p-0 w-100 bg-white text-start\"\n                  onClick={() => onClickRemoveParam(\"BrandName\")}>\n                  <i className=\"far fa-fw fa-times text-danger me-1\" />\n                  {productSearchViewModel?.Form?.BrandName}\n                </Button>\n              }\n            />\n          )}\n          {(productSearchViewModel?.Form?.AttributesAll || productSearchViewModel?.Form?.AttributesAny) && (\n            <AppliedFilterBlock\n              titleKey=\"ui.storefront.common.Attribute.Plural\"\n              titleId=\"AppliedFiltersAttributesText\"\n              content={Object.keys(productSearchViewModel?.Form?.AttributesAll).map((key): JSX.Element => {\n                const values: string[] = productSearchViewModel.Form.AttributesAll[key];\n                return (\n                  <div key={key}>\n                    <span className=\"pt-2 bg-white\">{key}</span>\n                    {values.map((val: string) => (\n                      <ListGroup.Item\n                        className=\"p-0 border-0\"\n                        key={`${key}_${val}`}>\n                        <Button\n                          variant=\"\"\n                          className=\"p-0 w-100 bg-white border-0 text-start\"\n                          onClick={e => alterAttribute(\"pop\", key, val)}>\n                          <small>\n                            <i className=\"far fa-fw fa-times text-danger me-1\" />\n                          </small>\n                          {val}\n                        </Button>\n                      </ListGroup.Item>\n                    ))}\n                  </div>\n                );\n              })}\n            />\n          )}\n          <Card.Footer className=\"p-1\">\n            <Button\n              variant=\"primary\"\n              size=\"sm\"\n              className=\"w-100 rounded\"\n              id=\"btnClearAllFilters\"\n              disabled={!filterParamsExist}\n              onClick={() => {\n                const paramsToClear: Array<keyof ProductCatalogSearchForm> = [\n                  \"AttributesAll\",\n                  \"Category\",\n                  \"Query\",\n                  \"RatingRanges\",\n                  \"PricingRanges\",\n                  \"BrandName\"\n                ];\n                onClickRemoveParam(paramsToClear);\n              }}>\n              {t(\"ui.storefront.searchCatalog.filters.ClearAllFilters\")}\n            </Button>\n          </Card.Footer>\n        </Card>\n      </Col>\n      <SearchTermFilter\n        {...filterProps}\n        onSearchSubmitted={query => alterSearchViewModelForm({\n          Category: undefined,\n          Query: query\n        })\n        }\n        currentFormQuery={productSearchViewModel?.Form?.Query}\n      />\n      {cefConfig?.featureSet.reviews.enabled\n        && productSearchViewModel?.RatingRanges?.some(range => range.DocCount > 0) && (\n        <ProductRatingsFilter\n          {...filterProps}\n          onRatingRangeClicked={ranges => alterSearchViewModelForm({\n            RatingRanges: ranges,\n            Query: undefined\n          })\n          }\n          ratingRanges={productSearchViewModel.RatingRanges}\n          isChecked={(range: AggregateRatingRange) => Array.isArray(productSearchViewModel?.Form.RatingRanges)\n              && productSearchViewModel.Form.RatingRanges.includes(range.Label)\n          }\n        />\n      )}\n      {cefConfig?.featureSet.categories.enabled\n        && productSearchViewModel?.CategoriesTree?.Children?.some(cat => cat.DocCount > 0) && (\n        <CategoriesFilter\n          {...filterProps}\n          categoriesBySeoUrl={categoriesBySeoUrl}\n          categoriesByNamePipeKey={categoriesByNamePipeKey}\n          onCategoryClicked={seoUrl => alterSearchViewModelForm({\n            // Always take the last fragment in the SEO URL if there are multiple\n            Category: c(seoUrl).SeoUrl.split(\"/\").reverse()[0],\n            CategoryMid: undefined,\n            CategoryTop: undefined,\n            Query: undefined\n          })\n          }\n          categoriesTree={productSearchViewModel?.CategoriesTree}\n        />\n      )}\n      {productSearchViewModel?.Attributes?.length > 0 && (\n        <AttributesFilter\n          {...filterProps}\n          allAttributes={allAttributes}\n          onAttributeClicked={(attributeName: string, value: string) => alterAttribute(\"push\", attributeName, value)}\n        />\n      )}\n      {cefConfig?.featureSet.pricing.enabled\n        && productSearchViewModel?.PricingRanges?.some(range => range.DocCount > 0) && (\n        <PriceRangesFilter\n          {...filterProps}\n          onPricingRangeClicked={ranges => alterSearchViewModelForm({\n            PricingRanges: ranges\n          })\n          }\n          pricingRanges={productSearchViewModel?.PricingRanges}\n        />\n      )}\n      {Object.keys(productSearchViewModel?.BrandNames ?? {}).length > 0 && (\n        <BrandsFilter\n          {...filterProps}\n          brands={productSearchViewModel?.BrandNames}\n          onBrandNameClicked={brandName => alterSearchViewModelForm({ BrandName: brandName })}\n        />\n      )}\n      {cefConfig?.featureSet.carts.compare.enabled && <CompareFilter {...filterProps} />}\n    </>\n  );\n};\n","import { Alert } from \"react-bootstrap\";\n\ninterface ICartMessagesProps {\n  messages?: string[];\n}\n\nexport const CartMessages = (props: ICartMessagesProps): JSX.Element => {\n  if (!props.messages) {\n    return null;\n  }\n\n  return (\n    <>\n      {props.messages.map((msg: string, index: number) => {\n        let alertVariant = \"info\";\n        if (msg.toUpperCase().startsWith(\"ERROR\")) {\n          alertVariant = \"danger\";\n        }\n        if (msg.toUpperCase().startsWith(\"WARNING\")) {\n          alertVariant = \"warning\";\n        }\n        return (\n          <Alert\n            variant={alertVariant}\n            key={msg}\n            id={`AddToCartModalText_${index}`}\n            className={`${index === props.messages.length - 1 ? \"mb-0\" : \"\"}`}>\n            {msg}\n          </Alert>\n        );\n      })}\n    </>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { TypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"./useViewState\";\nimport { IViewState } from \"./_customHooksTypes\";\n\ninterface IUseStoredFileTypes {\n  storedFileTypes?: Array<TypeModel>;\n  useStoredFileTypesViewState: IViewState;\n}\n\nexport const useStoredFileTypes = (): IUseStoredFileTypes => {\n  const [ storedFileTypes, setStoredFileTypes ] = useState<Array<TypeModel>>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  useEffect(() => {\n    setRunning();\n    const promiserKey = \"storedFileTypes\";\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.media.GetStoredFileTypes({\n        Active: true,\n        AsListing: true,\n      })\n    )\n      .then(res => {\n        setStoredFileTypes(res.data.Results);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }, []);\n\n  return {\n    storedFileTypes,\n    useStoredFileTypesViewState: viewState,\n  };\n};\n","/* eslint-disable array-element-newline */\n/* eslint-disable no-inline-comments */\n/* eslint-disable line-comment-position */\nimport React, { useEffect, useState } from \"react\";\nimport { Alert, Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { IUploadResult } from \"src/_api/cvApi.shared\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport axios from \"src/axios\";\nimport { FileEntityType, TypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ErrorView } from \"./ErrorView\";\nimport { isFileAcceptable } from \"./Helpers\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\n\ninterface IFileUploadWidgetProps {\n  allowMultiple?: boolean;\n  inputContainerClassName?: string;\n  limit?: number;\n  acceptableFileTypes?: Array<string>;\n  uploadCallback?: Function;\n  // Should be required\n  uploadType: FileEntityType;\n  storedFileType?: TypeModel;\n}\n\nexport const FileUploadWidget = (props: IFileUploadWidgetProps): JSX.Element => {\n  const [ uploadedFiles, setUploadedFiles ] = useState<Array<IUploadResult>>([]);\n  const [ fileNotAllowed, setFileNotAllowed ] = useState(false);\n  const [ pendingUpload, setPendingUpload ] = useState(false);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  useEffect(() => {\n    const inputContainer = document.getElementById(\"input-container\");\n    if (uploadedFiles.length && inputContainer) {\n      inputContainer.classList.add(\"d-none\");\n    }\n  }\n  , [uploadedFiles]);\n\n  async function handleFile(e: React.ChangeEvent<HTMLInputElement>) {\n    setPendingUpload(true);\n    const files = e.target.files;\n    if (!files?.length) {\n      return;\n    }\n    const [ file ] = e.target.files;\n    const fileName = file.name;\n    if (!isFileAcceptable(props.acceptableFileTypes, fileName)) {\n      if (props.uploadCallback) {\n        props.uploadCallback();\n      }\n      if (!props.allowMultiple) {\n        setUploadedFiles([]);\n      }\n      setFileNotAllowed(true);\n      return;\n    }\n    setFileNotAllowed(false);\n\n    try {\n      setRunning();\n      const formData = new FormData();\n      formData.append(\"EntityFileType\", String(props.uploadType));\n      formData.append(\"file\", file, file.name);\n      formData.append(\"StoredFileTypeKey\", props.storedFileType?.CustomKey || \"General\");\n      // Using a direct axios post since uploadFiles sends an empty body to API\n      const fileUploadResponse = await axios.post(\n        [ \"Media\", \"StoredFiles\", \"Upload\", \".json\" ].join(\"/\"),\n        formData\n      );\n      if (!fileUploadResponse?.data) {\n        finishRunning(true, \"Failed to upload\");\n        return;\n      }\n      const files : Array<IUploadResult> = fileUploadResponse.data.UploadFiles;\n      // TODO: match FormData with IUpload and IUploadResult types\n      if (props.allowMultiple) {\n        setUploadedFiles(prevUploadedFiles => [ ...prevUploadedFiles, ...files ]);\n        if (props.uploadCallback) {\n          props.uploadCallback([ ...uploadedFiles, ...files ].map(x => x.FileName));\n        }\n      } else {\n        setUploadedFiles(files);\n        if (props.uploadCallback) {\n          props.uploadCallback(files.map(x => x.FileName));\n        }\n      }\n      finishRunning();\n      setPendingUpload(false);\n    } catch (err: any) {\n      const msg = err?.response?.data?.message || err?.message || err as string;\n      finishRunning(true, msg);\n    }\n  }\n\n  const handleClick = () => {\n    document.getElementById(\"file-input\")?.click();\n  };\n\n  const cloud = <svg xmlns=\"http://www.w3.org/2000/svg\" shapeRendering=\"geometricPrecision\" textRendering=\"geometricPrecision\" imageRendering=\"optimizeQuality\" fillRule=\"evenodd\" clipRule=\"evenodd\" viewBox=\"0 0 512 386.883\" width=\"25pt\" height=\"25pt\" className=\"upload-cloud\"><path fillRule=\"nonzero\" d=\"M377.763 115.7c-9.42 2.733-18.532 6.86-27.591 12.155-9.256 5.41-18.373 12.031-27.649 19.629l-19.849-22.742c16.721-15.527 33.187-26.464 49.108-33.514-13.06-22.39-31.538-38.532-52.418-48.549-21.339-10.238-45.242-14.171-68.507-11.922-23.123 2.234-45.56 10.619-64.123 25.025-21.451 16.646-37.775 41.521-44.034 74.469l-1.959 10.309-10.27 1.801c-27.993 4.909-49.283 18.793-62.859 36.776-7.186 9.518-12.228 20.161-14.969 31.19-2.728 10.979-3.193 22.399-1.243 33.525 3.291 18.766 13.592 36.737 31.669 50.382 5.467 4.128 11.376 7.709 17.886 10.48 6.215 2.647 13.017 4.612 20.558 5.686h78.258v30.246h-78.827l-1.891-.178c-11.099-1.413-20.982-4.186-29.914-7.99-8.994-3.829-16.989-8.65-24.264-14.142C20.256 299.753 6.183 275.02 1.628 249.05c-2.669-15.225-2.027-30.868 1.715-45.929 3.73-15.012 10.524-29.404 20.167-42.177 16.233-21.507 40.501-38.514 71.737-46.241 9.014-35.904 28.299-63.573 53.057-82.786C171.438 13.963 199.327 3.521 228.021.748c28.551-2.76 57.975 2.11 84.339 14.758 28.095 13.479 52.661 35.696 68.986 66.815 13.827-2.201 27.042-1.521 39.42 1.5 18.862 4.603 35.493 14.611 49.212 28.159 13.36 13.193 23.994 29.797 31.216 48.001 16.814 42.377 15.209 93.978-13.361 131.996-9.299 12.37-21.252 22.45-35.572 30.468-13.811 7.735-29.884 13.593-47.949 17.787l-3.368.414h-66.346V310.4h64.727c14.501-3.496 27.297-8.212 38.168-14.299 10.794-6.045 19.62-13.396 26.238-22.2 21.842-29.066 22.745-69.34 9.463-102.815-5.698-14.359-13.999-27.371-24.363-37.605-10.007-9.882-21.906-17.126-35.154-20.36-6.654-1.625-13.721-2.248-21.145-1.705l-14.769 4.284zM205.205 265.348c-5.288 6.391-14.756 7.285-21.148 1.997-6.391-5.288-7.285-14.757-1.997-21.148l59.645-72.019c5.288-6.392 14.757-7.285 21.148-1.998a15.053 15.053 0 012.707 2.921l60.072 72.279c5.287 6.359 4.42 15.802-1.939 21.09-6.359 5.287-15.801 4.42-21.089-1.939l-34.288-41.256.202 146.628c0 8.273-6.707 14.98-14.98 14.98-8.274 0-14.981-6.707-14.981-14.98l-.202-146.582-33.15 40.027z\"/></svg>\n\n  if (pendingUpload) {\n    return <LoadingWidget />;\n  }\n  return (\n    <div>\n      {fileNotAllowed && (\n        <Alert\n          variant=\"danger\">\n          {t(\"ui.storefront.common.UploadedFilesAreInvalidType\", \"Uploaded file(s) are not of valid type\")}\n        </Alert>\n      )}\n      {!uploadedFiles.length\n        ? props.inputContainerClassName === \"small-screen\"\n          ? (<div className=\"upload-button-container\">\n            <input\n              id=\"file-input\"\n              className=\"d-none\"\n              type=\"file\"\n              accept={props.acceptableFileTypes.join(\",\")}\n              name=\"StoredFiles\"\n              disabled={viewState.running}\n              onChange={handleFile}\n            />\n            <button className=\"upload-button btn btn-brand-orange btn-lg rounded-pill px-5 py-3 my-2 text-white d-flex gap-1 align-items-center fs-4\"\n              onClick={handleClick}>\n              <div>{cloud}</div>\n            Take Photo or Upload\n            </button>\n          </div>)\n          : (<div className={props.inputContainerClassName\n        || \"bg-light border-1 my-2 p-3\"}\n          id=\"input-container\">\n            <input\n              onChange={handleFile}\n              type=\"file\"\n              accept={props.acceptableFileTypes.join(\",\")}\n              name=\"StoredFiles\"\n              disabled={viewState.running}\n            />\n          </div>)\n        : viewState.running || pendingUpload ? <LoadingWidget />\n          : null}\n\n      {uploadedFiles.length\n        ? <ul className=\"uploaded-files bg-white border border-brand-orange-subtle rounded-pill list-unstyled py-2 px-3\">\n          {uploadedFiles.map(file => {\n            const pathPieces = file.FileName.split(\"\\\\\");\n            const name = pathPieces[pathPieces.length - 1];\n            return (\n              <li\n                className=\"d-flex align-items-center justify-content-between pt-1\"\n                key={file.FileName}>\n                <span>{name}</span>\n                {viewState.running ? <LoadingWidget />\n                  : <Button variant=\"none\"\n                    onClick={() => {\n                      setUploadedFiles(prevUploadedFiles => prevUploadedFiles.filter(x => x.FileName !== file.FileName));\n                      if (props.uploadCallback) {\n                        props.uploadCallback(uploadedFiles.filter(x => x.FileName !== file.FileName));\n                      }\n                    }}>\n                    <i className=\"fa-light fa-trash-can text-brand-orange\" />\n                  </Button>\n                }\n              </li>\n            );\n          })}\n        </ul>\n        : null}\n      {viewState.hasError && <ErrorView viewState={viewState} componentName=\"FileUploadWidget\" />}\n    </div>\n  );\n};\n\nFileUploadWidget.defaultProps = {\n  allowMultiple: false,\n  acceptableFileTypes: [\n    \"image/*\", // All images\n    \"application/pdf\", // PDFs\n    \"application/msword\", \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", // Word documents\n    \"application/vnd.ms-excel\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" // Excel documents\n  ]\n};\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\ninterface IAddToCartModalContext {\n  actionIndex: number;\n  alterCanProceed: (newCanProceed: boolean) => void;\n  canProceed: boolean;\n  messages: string[];\n  proceed: (newAttributes?: Record<string, string>) => void;\n  product?: ProductModel;\n  masterProduct?: ProductModel;\n  show: boolean;\n  isPrimeOrMojo: boolean;\n}\n\nexport const AddToCartModalContext = React.createContext<IAddToCartModalContext>({\n  actionIndex: 0,\n  alterCanProceed: () => null,\n  canProceed: false,\n  messages: [],\n  proceed: (_newAttributes) => null,\n  product: null,\n  masterProduct: null,\n  show: false,\n  isPrimeOrMojo: false,\n});\n\nexport const useAddToCartModalContext = (): IAddToCartModalContext => {\n  const context = useContext(AddToCartModalContext);\n  return context;\n};\n\nexport const AddToCartModalContextProvider = (props: React.PropsWithChildren<{\n  messages?: string[];\n  product?: ProductModel;\n  masterProduct?: ProductModel;\n  retryAddToCart: (attrs: Record<string, string>) => void;\n  show: boolean;\n  isPrimeOrMojo: boolean;\n}>): JSX.Element => {\n  const [ attributes, setAttributes ] = useState<Record<string, string>>({});\n  const [ canProceed, setCanProceed ] = useState<boolean>(false);\n  const [ actionIndex, setActionIndex ] = useState<number>(0);\n  const cefConfig = useCefConfig();\n\n  const actions = props.messages?.filter(x => x?.startsWith(\"ACTION_\"));\n\n  useEffect(() => {\n    if (actions && !actions?.length) {\n      window.location.href = `${corsLink(cefConfig, cefConfig.routes.cart.root, \"cart\")}`;\n    }\n  }\n  , [actions]);\n\n  const proceed = (newAttributes: Record<string, string> = null) => {\n    const attributesToSet = { ...attributes, ...(newAttributes ?? {}) };\n    const wasLastAction = actionIndex === actions.length - 1;\n    setAttributes(attributesToSet);\n    if (wasLastAction) {\n      setActionIndex(0);\n      // Will try adding to cart again to get more actions/get a list of no actions\n      props.retryAddToCart(attributesToSet);\n      return;\n    }\n    setCanProceed(false);\n    setActionIndex(idx => idx + 1);\n  };\n\n  return (\n    <AddToCartModalContext.Provider\n      value={{\n        actionIndex,\n        alterCanProceed: (newCanProceed: boolean) => {\n          setCanProceed(newCanProceed);\n        },\n        canProceed,\n        messages: props.messages,\n        proceed,\n        product: props.product,\n        masterProduct: props.masterProduct,\n        show: props.show,\n        isPrimeOrMojo: props.product.Name.includes(\"Prime\") || props.product.Name.includes(\"Mojo\"),\n      }}>\n      {props.children}\n    </AddToCartModalContext.Provider>\n  );\n};\n","/** @format */\n\nexport const QuestionnaireModalHeader = (): JSX.Element => {\n  const LogoImg = \"https://mango-web-app.azurewebsites.net/wp-content/uploads/2024/05/MangoRxHeaderLogo.png\";\n  return (\n    <div className=\"d-flex align-items-center justify-content-between py-1 py-lg-4 text-center\">\n      <a\n        href=\"/\"\n        className=\"d-flex\">\n        <img\n          data-sid=\"imgHeaderLogo\"\n          className=\"img-fluid lazyload logo align-self-center\"\n          alt=\"Mango logo\"\n          height=\"68\"\n          src={LogoImg}\n        />\n      </a>\n    </div>\n  );\n};\n","import { PropsWithChildren, useEffect, useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { Modal } from \"src/_shared/modals/Modal\";\nimport { useStoredFileTypes } from \"src/_shared/customHooks/useStoredFileTypes\";\nimport { FileUploadWidget } from \"src/_shared/common/FileUploadWidget\";\nimport { FileEntityType } from \"src/_api/cvApi._DtoClasses\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useAddToCartModalContext } from \"../AddToCartModalContext\";\nimport { isFileAcceptable } from \"src/_shared/common/Helpers\";\nimport { QuestionnaireModalHeader } from \"./QuestionnaireModalHeader\";\n\ninterface IBloodworkModalProps {\n  show: boolean;\n  onCancel: () => void;\n}\n\nconst acceptableFileTypes = [ \".pdf\", \".jpg\", \".jpeg\", \".png\" ];\n\nexport const BloodworkModal = (props: PropsWithChildren<IBloodworkModalProps>): JSX.Element => {\n  const { show, onCancel } = props;\n\n  const { t } = useTranslation();\n  const { storedFileTypes, useStoredFileTypesViewState } = useStoredFileTypes();\n  const { alterCanProceed, canProceed, proceed } = useAddToCartModalContext();\n  const [ screenSize, setScreenSize ] = useState(\"\");\n\n  useEffect(() => {\n    const screenWidth = window.innerWidth;\n    if (screenWidth < 768) {\n      setScreenSize(\"small-screen\");\n    } else {\n      setScreenSize(\"large-screen\");\n    }\n  }\n  , [ window.innerWidth ]);\n\n  return <Modal\n    show={show}\n    onCancel={onCancel}\n    size=\"xl\"\n    title={t(\"ui.storefront.common.UploadBloodwork\", \"Upload Bloodwork\")}\n    modalClasses=\"atc-questionnaire-modal bloodwork-modal\"\n    modalBodyClasses=\"d-flex flex-column align-items-center\"\n    hideCloseButton={true}\n    CustomHeader={() => <QuestionnaireModalHeader />}\n    headerClasses=\"justify-content-center border-0\"\n    includeFooter={false}>\n    {useStoredFileTypesViewState.hasError && <ErrorView viewState={useStoredFileTypesViewState} />}\n    {props.children}\n    <Row>\n      <Col\n        xs={12}\n        lg={6}>\n        <div className=\"px-4 py-3\">\n          <h2 className=\"text-capitalize mb-4 alt-font\">\n            I've Got My <span className=\"alt-font text-brand-orange\">Bloodwork</span>\n          </h2>\n          <p>\n            {t(\n              \"ui.storefront.cart.modals.bloodwork.UploadACopyOfMostRecent\",\n              \"Upload a copy of your most recent bloodwork (within the last 30-45 days). Acceptable bloodwork must include ALL of the following blood panels:\"\n            )}\n          </p>\n          <ul style={{\n            // lines bullets up with edge of div\n            paddingLeft: \"0.75rem\"\n          }}>\n            <li>FSH (Follicle-Stimulating Hormone)</li>\n            <li>LH (Luteinizing Hormone)</li>\n            <li>Total Testosterone</li>\n            <li>Free Testosterone (Free Androgen Calculation)</li>\n            <li>PSA (Prostate-Specific Antigen)</li>\n            <li>SHBG (Sex Hormone-Binding Globulin)</li>\n            <li>Estradiol</li>\n          </ul>\n          <FileUploadWidget\n            allowMultiple={false}\n            inputContainerClassName={screenSize}\n            uploadType={FileEntityType.StoredFileAccount}\n            storedFileType={storedFileTypes?.find(x => x.Name.toLowerCase() === \"bloodwork\")}\n            uploadCallback={(items: string[]) => {\n              if (!items?.length) {\n                alterCanProceed(false);\n                return;\n              }\n              const fileIsAcceptable = isFileAcceptable(acceptableFileTypes, items[0]);\n              alterCanProceed(fileIsAcceptable);\n            }}\n            acceptableFileTypes={acceptableFileTypes}\n          />\n          <p>\n            {t(\"ui.storefront.common.AcceptableFileTypesInclude\", \"Acceptable file types include\")} PDF, JPEG, and PNG\n          </p>\n          <div className=\"upload-btn-container\">\n            <Button\n              className=\"btn submit-btn-upload fs-5\"\n              disabled={!canProceed}\n              onClick={() => {\n                if (canProceed) {\n                  window.dataLayer = window.dataLayer || [];\n                  window.dataLayer.push({\n                    event: \"bloodwork_uploaded\"\n                  });\n                }\n                proceed({ BloodworkComplete: \"true\" });\n              }}>\n              Submit\n            </Button>\n          </div>\n        </div>\n      </Col>\n      <Col\n        xs={12}\n        className=\"d-block d-lg-none border-bottom border-black border-2 my-4\"\n      />\n      <Col\n        xs={12}\n        lg={6}\n        className=\"position-relative\">\n        <div className=\"position-absolute d-none d-lg-block as-0 at-0 h-100 border-start border-2 border-black\"></div>\n        <div className=\"px-0 lg-px-4 py-3\">\n          <h2 className=\"mb-4 alt-font\">\n            No Bloodwork? <span className=\"alt-font text-brand-orange\">No Problem!</span>\n          </h2>\n          <p className=\"mb-0\">\n          Order MangoRx’s approved at-home blood kit right now.\n          </p>\n          <Button className=\"btn btn-bloodwork\"\n            href=\"https://mangorx.com/product/testosterone-support-blood-kits\">\n            Buy Now\n          </Button>\n          <p>\n            Once you get your results, log back into your MangoRx account and pick up right where you left off.\n          </p>\n        </div>\n      </Col>\n    </Row>\n    <div className=\"btn-container w-100 d-flex justify-content-start mt-md-4 px-4\">\n      <button\n        className=\"cancel-btn py-3 mx-1 border-0\"\n        onClick={() => {\n          onCancel();\n        }}>\n          Cancel & Close\n      </button>\n    </div>\n  </Modal>;\n};\n","import { PropsWithChildren } from \"react\";\nimport { Alert, Button } from \"react-bootstrap\";\nimport { Modal } from \"src/_shared/modals\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useAddToCartModalContext } from \"../AddToCartModalContext\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useTranslation } from \"react-i18next\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\n\ninterface ICancelPrescriptionProps {\n  show: boolean;\n  onCancel: () => void;\n}\n\nexport const CancelPrescriptionModal = (props: PropsWithChildren<ICancelPrescriptionProps>): JSX.Element => {\n  const { show, onCancel } = props;\n\n  const { actionIndex, messages, proceed } = useAddToCartModalContext();\n\n  const currentAction = messages?.filter(x => x.startsWith(\"ACTION_\"))[actionIndex];\n  const actionArgument = currentAction.split(\" \")[1];\n\n  return <Modal\n    show={show}\n    onCancel={onCancel}\n    size=\"lg\">\n    {props.children}\n    <CancelPrescription prescriptionId={actionArgument} proceed={proceed} />\n  </Modal>;\n};\n\nconst CancelPrescription = ({ prescriptionId, proceed }: { prescriptionId: string, proceed: () => void }) => {\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const cancelPrescription = async () => {\n    setRunning();\n    try {\n      const result = await cvApi.prescriptions.CancelExistingPrescription({\n        PrescriptionID: parseInt(prescriptionId)\n      });\n      if (!result.data.ActionSucceeded) {\n        finishRunning(true, result.data.Messages?.[0] ?? \"Failed to cancel prescription\");\n      }\n      finishRunning();\n      proceed();\n    } catch (err: any) {\n      finishRunning(true, err);\n    }\n  };\n\n  return <div className=\"position-relative text-center\">\n    {viewState.running && <LoadingWidget overlay />}\n    <div className=\"pb-4\">\n      {t(\n        \"ui.storefront.prescription.mustCancelExisting\",\n        \"You must cancel your existing prescription to proceed.\"\n      )}\n    </div>\n    <Button onClick={cancelPrescription}>Cancel Existing Prescription</Button>\n    {viewState.hasError && <Alert variant=\"danger\">{viewState.errorMessage}</Alert>}\n  </div>;\n};\n","import { useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { setCountries, setRegions } from \"../slices/geographySlice\";\n\ninterface IGeographyFactory {\n  loadCountries: (force?: boolean) => void;\n  loadRegions: (countryID?: number, force?: boolean) => void;\n}\n\nexport const useGeographyFactory = (): IGeographyFactory => {\n  const dispatch = useDispatch();\n\n  const [ geographyFactory ] = useState<IGeographyFactory>({\n    loadCountries: (force?: boolean) => {\n      const promiserKey = \"geographyFactory:loadCountries\";\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      return promiser.resolve(\n        promiserKey,\n        () => cvApi.geography.GetCountries()\n          .then(r => {\n            const result = r.data?.Results ?? [];\n            dispatch(setCountries(result));\n            return result;\n          })\n      ).then();\n    },\n    loadRegions: (countryID?: number, force?: boolean) => {\n      let promiserKey = \"geographyFactory:loadRegions\";\n      if (countryID) {\n        promiserKey += `_countryID${countryID}`;\n      }\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      return promiser.resolve(\n        promiserKey,\n        () => cvApi.geography.GetRegions()\n          .then(r => {\n            const result = r.data?.Results ?? [];\n            dispatch(setRegions(result));\n            return result;\n          })\n      ).then();\n    }\n  });\n\n  return geographyFactory;\n};\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { CountryModel, RegionModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RootState } from \"src/_redux/store\";\nimport { useGeographyFactory } from \"../factories/geographyFactory\";\n\ninterface IGeographySliceState {\n  countries: CountryModel[] | null;\n  regions: RegionModel[] | null;\n}\n\nexport const geographySlice = createSlice({\n  name: \"geography\",\n  initialState: {\n    countries: null,\n    regions: null\n  } as IGeographySliceState,\n  reducers: {\n    setCountries: (state, action: PayloadAction<CountryModel[]>) => {\n      state.countries = action.payload;\n    },\n    setRegions: (state, action: PayloadAction<RegionModel[]>) => {\n      state.regions = action.payload;\n    },\n  }\n});\n\nexport const { setCountries, setRegions } = geographySlice.actions;\nexport const useCountries = (): CountryModel[] => {\n  const countries = useSelector((state: RootState) => state.geography.countries);\n  const geographyFactory = useGeographyFactory();\n\n  useEffect(() => {\n    if (countries === null) {\n      geographyFactory.loadCountries();\n    }\n  }, [ countries ]);\n\n  return countries;\n};\n\nexport const useRegions = (): RegionModel[] => {\n  const regions = useSelector((state: RootState) => state.geography.regions);\n  const geographyFactory = useGeographyFactory();\n\n  useEffect(() => {\n    if (regions === null) {\n      geographyFactory.loadRegions();\n    }\n  }, [ regions ]);\n\n  return regions;\n};\n\nexport default geographySlice.reducer;\n","/* eslint-disable max-len */\n/* eslint-disable capitalized-comments */\nimport { ICardInputFormGroupProps } from \"./_formGroupTypes\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { t } from \"i18next\";\nimport { FormGroupLabel } from \"./FormGroupLabel\";\nimport cardValidator from \"card-validator\";\nimport { CardNumberVerification } from \"card-validator/dist/card-number\";\n\nexport const CardInputFormGroup = (props : ICardInputFormGroupProps): JSX.Element => {\n  const formIdentifier = \"txtWalletCardNumber\";\n  const cardTypeFormIdentifier = \"txtWalletCardType\";\n\n  const { register, errors, setValue, hideInvalidTooltip, dataSid } = props;\n  const cardInput = register(formIdentifier, {\n    onChange: event => {\n      if (event?.target?.value === undefined) {\n        return;\n      }\n      const valid = cardValidator.number(event.target.value);\n      if (valid.isPotentiallyValid && Boolean(valid.card)) {\n        setValue(cardTypeFormIdentifier, valid.card.type);\n      }\n      setValue(formIdentifier, prettyCardNumber(event.target.value, valid));\n    },\n    required: {\n      value: true,\n      message: t(\"ui.storefront.common.validation.ThisFieldIsRequired\")\n    },\n    validate: {\n      isValid: value => {\n        const valid = cardValidator.number(value);\n        if (valid.isValid) {\n          return true;\n        }\n        return \"This card number is invalid.\";\n      },\n      maxLength: value => {\n        if (value?.length <= 24) {\n          return true;\n        }\n        return \"Must not exceed maximum length of 24\";\n      },\n      minLength: value => {\n        if (value?.length >= 13) {\n          return true;\n        }\n        return \"Must reach minimum length of 13\";\n      }\n    }\n  });\n\n  return (\n    <Form.Group\n      className=\"position-relative mb-3 w-100\">\n      <FormGroupLabel\n        label={t(\"ui.storefront.wallet.walletCard.CardNumber\")}\n        formIdentifier={formIdentifier}\n        required={true}\n      />\n      <InputGroup>\n        <input\n          id={formIdentifier}\n          data-sid={dataSid}\n          autoComplete=\"cc-number\"\n          type=\"text\"\n          inputMode=\"numeric\"\n          className={`form-control credit-card-input ${errors[formIdentifier] ? \"is-invalid\" : \"\"}`}\n          // Prevents Excess Input\n          maxLength={24}\n          minLength={13}\n          {...cardInput}\n          onChange={e => cardInput.onChange(e)}\n          placeholder=\"1234 5678 9012 3456\"\n        />\n        {!props.hideIcon && (\n          <span className=\"credit-card-icon border-end border-1 border-primary-subtle\n            d-flex align-items-center h-100\">\n            <i className=\"fal fa-fw fa-credit-card text-primary fs-4\"></i>\n          </span>\n          // <InputGroup>\n          //   <i className=\"fal fa-fw fa-credit-card\" />\n          // </InputGroup>\n        )}\n\n        {errors[formIdentifier] && !hideInvalidTooltip\n          ? <div className=\"input-group-append w-100 pt-1 pl-1\" role=\"alert\">\n            <span className=\"text-danger\">\n              {errors[formIdentifier].message}\n            </span>\n          </div>\n          : null}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n\nfunction prettyCardNumber(cardNumber: string, cardNumberVerification: CardNumberVerification): string {\n  if (cardNumberVerification.card) {\n    const cardNumberToUse = cardNumber.replaceAll(/\\s/gu, \"\");\n    const { gaps } = cardNumberVerification.card;\n    const offsets = [].concat(0, gaps, cardNumberToUse.length);\n    const components = [];\n    for (let i = 0; offsets[i] < cardNumberToUse.length; i++) {\n      const start = offsets[i];\n      const end = Math.min(offsets[i + 1], cardNumberToUse.length);\n      components.push(cardNumberToUse.substring(start, end));\n    }\n    return components.join(\" \");\n  }\n  return cardNumber;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"fakeInput\":\"CheckboxFormGroup_fakeInput__N-rV+\"};","import { useEffect, useRef, useState } from \"react\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport classes from \"./CheckboxFormGroup.module.scss\";\nimport { ICheckboxFormGroupProps } from \"./_formGroupTypes\";\n\nexport const CheckboxFormGroup = (props: ICheckboxFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    disabled,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    inputClass,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    checkboxOptions,\n    // setValue\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const [ tooltipIsOpen, setTooltipIsOpen ] = useState<boolean>(false);\n  const [ errorExists, setErrorExists ] = useState<boolean>(false);\n\n  const inputsRefs = useRef<HTMLInputElement[]>([]);\n  const { t } = useTranslation();\n  const relevantFields = checkboxOptions.map(op => op.identifier);\n\n  useEffect(() => {\n    if (hideInvalidTooltip) {\n      return;\n    }\n    let willBeError = false;\n    for (const field of relevantFields) {\n      if (errors[field]) {\n        willBeError = true;\n        break;\n      }\n    }\n    if (willBeError) {\n      setErrorExists(true);\n      return;\n    }\n    setErrorExists(false);\n  });\n\n  const applyHasErrorClass = (): string => (errorExists ? \"has-error\" : \"\");\n\n  return (\n    <Form.Group className={`position-relative mb-2 ${formClasses ?? \"\"} ${applyHasErrorClass()}`}>\n      {tooltipIsOpen ? (\n        <div className={\"rounded border text-center p-2 w-25 small bg-dark text-light form-group-tooltip\"}>\n          {t(tooltipKey)}\n        </div>\n      ) : null}\n      <InputGroup className=\"d-block\">\n        {checkboxOptions.map((option, index) => {\n          const { identifier, required, requiredMessage, labelKey, labelText } = option;\n          const { ref, ...checkboxInput } = register(identifier, {\n            required:\n              typeof required === \"boolean\"\n                ? {\n                  value: required,\n                  message: typeof required === \"boolean\" ? requiredMessage : undefined\n                }\n                : undefined\n          });\n          return (\n            <Form.Label\n              htmlFor={identifier}\n              key={labelText}\n              className={`${classes.label} control-label d-flex`}\n              onMouseEnter={e => {\n                if (tooltipKey || tooltipText) {\n                  setTooltipIsOpen(true);\n                }\n              }}\n              onMouseLeave={e => {\n                if (tooltipIsOpen) {\n                  setTooltipIsOpen(false);\n                }\n              }}\n              //   onClick={() => {\n              //     inputsRefs.current[index].checked = !inputsRefs.current[index].checked;\n              //     setValue(identifier, inputsRefs.current[index].checked);\n              //   }}\n            >\n              {/* <Button\n                className={`${classes.fakeInput} ${inputsRefs.current[index]?.checked ? \"bg-primary\" : \"bg-white\"}`}\n                variant=\"default\"\n                onClick={() => {\n                  inputsRefs.current[index].checked = !inputsRefs.current[index].checked;\n                  setValue(identifier, inputsRefs.current[index].checked);\n                }}> */}\n              {/* Intentionally Empty */}\n              {/* </Button> */}\n              {required ? <span className=\"text-danger\">&nbsp;*&nbsp;</span>\n                : <span className=\"invisible\">&nbsp;*&nbsp;</span>}\n              <Form.Check\n                as=\"input\"\n                className={`${inputClass ?? \"\"}`}\n                type=\"checkbox\"\n                onBlur={onBlur}\n                onFocus={onFocus}\n                onKeyDown={onKeyDown}\n                onKeyUp={onKeyUp}\n                onMouseDown={onMouseDown}\n                onMouseEnter={onMouseEnter}\n                onMouseLeave={onMouseLeave}\n                onMouseMove={onMouseMove}\n                onMouseOver={onMouseOver}\n                onMouseUp={onMouseUp}\n                disabled={disabled}\n                {...checkboxInput}\n                onChange={e => {\n                  checkboxInput.onChange(e);\n                  if (extraOnChange) {\n                    extraOnChange(e);\n                  }\n                  if (!touched) {\n                    setTouched(true);\n                  }\n                }}\n                id={identifier}\n                name={identifier}\n                ref={(e: HTMLInputElement) => {\n                  ref(e);\n                  // @ts-ignore\n                  inputsRefs.current[index] = e;\n                }}\n              />\n              <span className=\"ms-3\">{t(labelKey)}</span>\n              {tooltipKey || tooltipText ? (\n                <span className=\"text-info\">\n                  <i className=\"fal fa-fw fa-check-circle\" />\n                </span>\n              ) : null}\n            </Form.Label>\n          );\n        })}\n        {errorExists && !hideInvalidTooltip ? (\n          <InputGroup.Text\n            className=\"text-start text-wrap m-0\"\n            role=\"alert\">\n            {Object.keys(errors)\n              .filter(errorKey => relevantFields.includes(errorKey))\n              .map(errorKey => {\n                if (!errors[errorKey]) {\n                  return null;\n                }\n                return (\n                  <span\n                    key={errorKey}\n                    className=\"text-danger\">\n                    {errors[errorKey].message}\n                  </span>\n                );\n              })}\n          </InputGroup.Text>\n        ) : null}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","/** @format */\n\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { IDateInputFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\n\nexport const DateInputFormGroup = (props: IDateInputFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    formIdentifier,\n    disabled,\n    required,\n    requiredMessage,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n    inputClass,\n    formClasses,\n\n    // OnBlur seems to be ignored on input\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    min,\n    minMessage,\n    max,\n    maxMessage,\n    includeTime,\n    hideRequired,\n  } = props;\n\n  const { t } = useTranslation();\n\n  const dateInput = register(formIdentifier, {\n    required: {\n      value: typeof required === \"boolean\" ? required : null,\n      message: requiredMessage ?? \"This field is required\"\n    },\n    max: {\n      value: max ? max : null,\n      message: maxMessage ?? `Maximum date: ${max}`\n    },\n    min: {\n      value: required && min ? min : null,\n      message: minMessage ?? `Minimum date ${min}`\n    },\n    disabled: typeof disabled === \"boolean\" ? disabled : false\n  });\n\n  const timeInput = register(`time${formIdentifier}`, {\n    required: {\n      value: typeof required === \"boolean\" ? required : null,\n      message: requiredMessage ?? \"This field is required\"\n    },\n    disabled: typeof disabled === \"boolean\" ? disabled : false\n  });\n\n  return (\n    <Form.Group className={`position-relative ${formClasses ?? \"\"} ${errors[formIdentifier] ? \"has-error\" : \"\"}`}>\n      <FormGroupLabel\n        label={labelText ?? t(labelKey)}\n        formIdentifier={formIdentifier}\n        tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n        required={required}\n        hideRequired={hideRequired}\n      />\n      <InputGroup>\n        <input\n          className={`w-100 p-2 form-control ${inputClass ?? \"\"}`}\n          type=\"date\"\n          min={min}\n          max={max}\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onKeyDown={onKeyDown}\n          onKeyUp={onKeyUp}\n          onMouseDown={onMouseDown}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          onMouseMove={onMouseMove}\n          onMouseOver={onMouseOver}\n          onMouseUp={onMouseUp}\n          {...dateInput}\n          onChange={e => {\n            dateInput.onChange(e);\n            if (extraOnChange) {\n              extraOnChange(e);\n            }\n          }}\n          id={formIdentifier}\n        />\n        {includeTime\n          ? <InputGroup.Text className=\"with-control\">\n            <Form.Control\n              type=\"time\"\n              id={`time${formIdentifier}}`}\n              name={`time${formIdentifier}}`}\n              {...timeInput}\n              disabled={disabled}\n              required={required}\n            />\n          </InputGroup.Text>\n          : null}\n        {errors[formIdentifier] && !hideInvalidTooltip\n          ? <div className=\"input-group-append w-100 pt-1 pl-1\" role=\"alert\">\n            <span className=\"text-danger\">\n              {errors[formIdentifier].message}\n            </span>\n          </div>\n          : null}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","/** @format */\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { INumberInputFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\n\nexport const NumberInputFormGroup = (props: INumberInputFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    formIdentifier,\n    min,\n    minMessage,\n    max,\n    maxMessage,\n    placeholderText,\n    placeholderKey,\n    isCurrency,\n    isPercent,\n    step,\n    disabled,\n    required,\n    requiredMessage,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    inputClass,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip\n    // TODO: failsOn,\n    // TODO: startTouched\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n\n  const numberInput = register(formIdentifier, {\n    required: {\n      value: typeof required === \"boolean\" ? required : null,\n      message: requiredMessage ?? \"This field is required\"\n    },\n    min: {\n      value: typeof min === \"number\" ? min : null,\n      message: minMessage ?? `Must reach minimum of ${min}`\n    },\n    max: {\n      value: typeof max === \"number\" ? max : null,\n      message: maxMessage ?? `Must not exceed maximum of ${max}`\n    },\n    valueAsNumber: true\n  });\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  return (\n    <Form.Group className={`position-relative ${formClasses ?? \"\"} ${errors[formIdentifier] ? \"has-error\" : \"\"}`}>\n      <FormGroupLabel\n        label={labelText ?? t(labelKey)}\n        formIdentifier={formIdentifier}\n        tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n        required={required}\n      />\n      <InputGroup>\n        {isCurrency\n          ? <InputGroup.Text>\n            <i className=\"fal fa-fw fa-dollar-sign\" />\n          </InputGroup.Text>\n          : null}\n        <input\n          {...numberInput}\n          className={`form-control ${applyValidClass()} ${inputClass ?? \"\"}`}\n          id={formIdentifier}\n          type=\"number\"\n          placeholder={placeholderText ?? t(placeholderKey)}\n          min={min}\n          max={max}\n          step={step ?? 1}\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onKeyDown={onKeyDown}\n          onKeyUp={onKeyUp}\n          onMouseDown={onMouseDown}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          onMouseMove={onMouseMove}\n          onMouseOver={onMouseOver}\n          onMouseUp={onMouseUp}\n          disabled={disabled}\n          onChange={e => {\n            numberInput.onChange(e);\n            if (extraOnChange) {\n              extraOnChange(e);\n            }\n            if (!touched) {\n              setTouched(true);\n            }\n          }}\n        />\n        {isPercent\n          ? <InputGroup.Text>\n            <i className=\"fal fa-fw fa-percent\" />\n          </InputGroup.Text>\n          : null}\n        {errors[formIdentifier] && !hideInvalidTooltip\n          ? <div className=\"input-group-append w-100 pt-1 pl-1\" role=\"alert\">\n            <span className=\"text-danger\">\n              {errors[formIdentifier].message}\n            </span>\n          </div>\n          : null}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Form, InputGroup, ListGroup } from \"react-bootstrap\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\nimport { IPasswordInputFormGroupProps } from \"./_formGroupTypes\";\n\nexport const PasswordInputFormGroup = (props: IPasswordInputFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    pattern,\n    patternMessage,\n    formIdentifier,\n    disabled,\n    required,\n    requiredMessage,\n    labelKey,\n    // TODO: labelText,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    inputClasses,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    // TODO: Use showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: Use failsOn,\n    placeholderKey,\n    placeholderText,\n    minLengthMessage,\n    maxLength,\n    maxLengthMessage,\n    requireDigitMessage,\n    requireUppercaseMessage,\n    requireLowercaseMessage,\n    requireSpecialMessage,\n    suppressRequirements,\n    dataSid,\n    leftIconContainerClassName,\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const [ showPassword, setShowPassword ] = useState(false);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const toggleShowPassword = (): void => {\n    setShowPassword(!showPassword);\n  };\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  const reqd = typeof required === \"boolean\" ? required : true;\n\n  const passwordInput = register(formIdentifier, {\n    maxLength: {\n      value: typeof maxLength === \"number\" && !suppressRequirements ? maxLength : null,\n      message:\n        maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\n    },\n    minLength: {\n      value: suppressRequirements ? null : cefConfig?.passwordRequireLength,\n      message: minLengthMessage ?? `Must reach minimum length of ${cefConfig?.passwordRequireLength}`\n    },\n    pattern: {\n      value: pattern,\n      message: patternMessage ?? \"Value does not match required pattern\"\n    },\n    required: {\n      value: reqd,\n      message: requiredMessage ?? \"This field is required\"\n    },\n    validate: reqd\n      ? {\n        hasLowerCase: value => {\n          if (!suppressRequirements && cefConfig?.passwordRequireLowercase && !value.match(/[a-z]/gu)) {\n            return requireLowercaseMessage ?? \"Password must contain at least one lowercase character\";\n          }\n          return true;\n        },\n        hasUpperCase: value => {\n          if (!suppressRequirements && cefConfig?.passwordRequireUppercase && !value.match(/[A-Z]/gu)) {\n            return requireUppercaseMessage ?? \"Password must contain at least one uppercase character\";\n          }\n          return true;\n        },\n        hasNumber: value => {\n          if (!suppressRequirements && cefConfig?.passwordRequireDigit && !value.match(/\\d+/gu)) {\n            return requireDigitMessage ?? \"Password must contain at least one number\";\n          }\n          return true;\n        },\n        hasSpecial: value => {\n          if (!suppressRequirements\n            && cefConfig?.passwordRequireSpecial\n            && !value.match(/[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]+/gu)) {\n            return requireSpecialMessage ?? \"Password must contain at least one special character\";\n          }\n          return true;\n        }\n      }\n      : null\n  });\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    if (hideInvalidTooltip) {\n      return \"is-valid\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  return (\n    <Form.Group\n      className={`position-relative ${formClasses ?? \"\"} ${\n        errors[formIdentifier] ? \"has-error\" : \"\"\n      }`}>\n      <FormGroupLabel\n        label={t(labelKey)}\n        formIdentifier={formIdentifier}\n        tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n        required={reqd}\n      />\n      <InputGroup>\n        <InputGroup.Text className={leftIconContainerClassName || \"p-0 border-0\"}>\n          <Button\n            id=\"btnShowPassword\"\n            variant=\"outline-secondary\"\n            className=\"border-end-0 border-medium rounded-end-0 rounded-start d-flex h-100 align-items-center\"\n            onClick={toggleShowPassword}>\n            <i className={`far fa-fw ${showPassword ? \"fa-eye-slash\" : \"fa-eye\"}`} />\n          </Button>\n        </InputGroup.Text>\n        <input\n          className={`form-control border-start-0 ${applyValidClass()} ${inputClasses ?? \"\"}`}\n          type={showPassword ? \"text\" : \"password\"}\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onKeyDown={onKeyDown}\n          onKeyUp={onKeyUp}\n          onMouseDown={onMouseDown}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          onMouseMove={onMouseMove}\n          onMouseOver={onMouseOver}\n          onMouseUp={onMouseUp}\n          disabled={disabled}\n          data-sid={dataSid}\n          {...passwordInput}\n          onChange={e => {\n            passwordInput.onChange(e);\n            if (extraOnChange) {\n              extraOnChange(e);\n            }\n            if (!touched) {\n              setTouched(true);\n            }\n          }}\n          id={formIdentifier}\n          placeholder={placeholderKey ? t(placeholderKey) : placeholderText ? placeholderText : \"\"}\n        />\n        {errors[formIdentifier] && !hideInvalidTooltip\n          ? <div className=\"w-100\">\n            <ListGroup as=\"ul\" className=\"list-unstyled\">\n              {errors[formIdentifier]\n                && Object.values<string>(errors[formIdentifier].types).map(\n                  (msg): JSX.Element => <li className=\"text-danger\" key={msg}>\n                    {msg}\n                  </li>\n\n                )}\n            </ListGroup>\n          </div>\n          : null}\n        {/* TODO: add success messages */}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","/* eslint-disable max-len */\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { ISelectFormGroupProps, SelectFormGroupOption } from \"src/_shared/forms/formGroups/_formGroupTypes\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useRegions } from \"src/_redux/slices/geographySlice\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\n\nexport const SelectFormGroup = (props: ISelectFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    formIdentifier,\n    formClasses,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    disabled,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    // TODO: forceTooltipWithFocus,\n    required,\n    requiredMessage,\n    options,\n    // TODO: autocomplete,\n    leftIcon,\n    rightIcon,\n    selectClass,\n    // TODO: isAutofocus,\n    optionsAsValue,\n    includeNull,\n    nullKey,\n    nullText,\n    hideOptionKey,\n    initialOption,\n    watchOption,\n    dataSid,\n    hideRequired,\n    productId,\n    autocomplete,\n    doNotValidate,\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const [ nullOptionDisabled, setNullOptionDisabled ] = useState<boolean>(false);\n  const [ selectedValue, setSelectedValue ] = useState<string>(\"\");\n  const [ checkingAvailability, setCheckingAvailability ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const regions = useRegions();\n  const currentUser = useCurrentUser();\n  const authFactory = useAuthFactory();\n  const cartFactory = useCartFactory();\n  const cart = useCart(\"Cart\");\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  let nullString: string = \"\";\n  if (nullKey) {\n    nullString = t(nullKey);\n  } else if (nullText) {\n    nullString = nullText;\n  }\n  useEffect(() => {\n    if (selectedValue.length) {\n      return;\n    }\n    changeOption(initialOption);\n  }, [ initialOption, options ]);\n\n  useEffect(() => {\n    changeOption(watchOption);\n  }, [ watchOption ]);\n\n  function changeOption(optionArg: SelectFormGroupOption): void {\n    if (optionArg && options?.length) {\n      if (includeNull && optionArg.option === \"\") {\n        setSelectedValue(\"\");\n        return;\n      }\n      const initialValueOption = options.find(\n        o => o.option === optionArg.option || (Boolean(o.value) && o.value === optionArg.value)\n      );\n      if (initialValueOption) {\n        setSelectedValue(initialValueOption.value ?? initialValueOption.option);\n        setNullOptionDisabled(true);\n      } else {\n        setSelectedValue(\"\");\n        setNullOptionDisabled(false);\n      }\n      return;\n    }\n    if (hideOptionKey && options?.length && selectedValue === \"\") {\n      setSelectedValue(options[0].option);\n      setNullOptionDisabled(true);\n    } else if (!hideOptionKey && !options && selectedValue === \"\") {\n      setSelectedValue(\"\");\n      setNullOptionDisabled(false);\n    }\n  }\n\n  const checkAvailability = (value: string): Promise<void> => {\n    setRunning();\n    setCheckingAvailability(true);\n    const newState = regions.find(r => r.Name === value);\n\n    const productIdOrFromCart = productId ?? cart?.SalesItems?.[0]?.ProductID;\n\n    return authFactory\n      .updateCurrentUser({\n        ...currentUser,\n        StateOfResidenceName: value,\n        StateOfResidenceCode: newState ? newState?.Code : currentUser.StateOfResidenceCode,\n        StateOfResidenceID: newState ? newState?.ID : currentUser.StateOfResidenceID,\n        StateOfResidenceKey: newState ? newState?.CustomKey : currentUser.StateOfResidenceKey,\n        StateOfResidence: newState ? newState : currentUser.StateOfResidence\n      })\n      .then(() => cartFactory.checkRestrictedRegions(productIdOrFromCart))\n      .then(r => {\n        if (!r.ActionSucceeded) {\n          finishRunning();\n          setCheckingAvailability(false);\n          return Promise.reject(new Error(`${r.Messages[0]}`));\n        }\n        finishRunning();\n        setCheckingAvailability(false);\n        return Promise.resolve();\n      });\n  };\n\n  const select = register(formIdentifier, {\n    required: typeof required === \"boolean\"\n      ? {\n        value: required,\n        message: requiredMessage ?? \"This field is required\"\n      }\n      : undefined,\n    validate: {\n      isNotNull: value => {\n        if (!value || value === \"\" || value === nullText) {\n          return \"This field is required\";\n        }\n        if (formIdentifier === \"txtPatientGender\" && value === \"Female\") {\n          return \"Sorry, this product is just for the fellas.\";\n        }\n        if (formIdentifier === \"txtPatientState\" && value !== currentUser.StateOfResidenceName) {\n          if (doNotValidate) {\n            return true;\n          }\n          return checkAvailability(value)\n            .then(() => true)\n            .catch(() => {\n              return \"Sorry, this product isn’t currently available in your state.\";\n            });\n        }\n        return true;\n      }\n    }\n  });\n\n  return (\n    <>\n      <Form.Group\n        className={`form-group position-relative ${formClasses ?? \"\"} ${errors[formIdentifier] ? \"has-error\" : \"\"}`}>\n        <FormGroupLabel\n          label={labelText ?? t(labelKey)}\n          formIdentifier={formIdentifier}\n          tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n          required={required}\n          hideRequired={hideRequired}\n        />\n        <InputGroup className=\"input-group\">\n          {leftIcon ? (\n            <InputGroup.Text className=\"rounded-start\">\n              <FontAwesomeIcon\n                icon={leftIcon}\n                className=\"fa-fw\"\n              />\n            </InputGroup.Text>\n          ) : null}\n          <Form.Select\n            className={`custom-select ${rightIcon ? \"\" : \"rounded-end\"} ${!checkingAvailability && applyValidClass()} ${selectClass ?? \"\"}`}\n            id={formIdentifier}\n            name={formIdentifier}\n            disabled={disabled}\n            data-sid={dataSid}\n            onBlur={onBlur}\n            onFocus={onFocus}\n            onKeyDown={onKeyDown}\n            onKeyUp={onKeyUp}\n            onMouseDown={onMouseDown}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            onMouseMove={onMouseMove}\n            onMouseOver={onMouseOver}\n            onMouseUp={onMouseUp}\n            value={selectedValue}\n            autoComplete={autocomplete}\n            {...select}\n            onChange={e => {\n              setSelectedValue(e.target.value);\n              select.onChange(e);\n              if (!nullOptionDisabled) {\n                setNullOptionDisabled(true);\n              }\n              if (extraOnChange) {\n                extraOnChange(e);\n              }\n              if (!touched) {\n                setTouched(true);\n              }\n            }}>\n            {includeNull ? (\n              <option\n                value=\"\"\n                disabled={nullOptionDisabled}>\n                {nullString}\n              </option>\n            ) : null}\n            {options && Array.isArray(options)\n              ? options.map(opt => (\n                <option\n                  key={opt.value ?? opt.option}\n                  value={optionsAsValue ? opt.option : opt.value ? opt.value : opt.option}>\n                  {opt.option}\n                </option>\n              ))\n              : null}\n          </Form.Select>\n          {rightIcon ? (\n            <InputGroup.Text className=\"rounded-end\">\n              <FontAwesomeIcon\n                icon={rightIcon}\n                className=\"fa-fw\"\n              />\n            </InputGroup.Text>\n          ) : null}\n          {checkingAvailability ? (\n            <div\n              className=\"input-group-append w-100 pt-1 pl-1\"\n              role=\"alert\">\n              <span className=\"text-gray\">Checking availability...</span>\n            </div>\n          )\n            : null}\n          {errors[formIdentifier] && !checkingAvailability ? (\n            <div\n              className=\"input-group-append w-100 pt-1 pl-1\"\n              role=\"alert\">\n              <span className=\"text-danger\">{errors[formIdentifier].message}</span>\n            </div>\n          ) : null}\n          {/* TODO: add success messages */}\n        </InputGroup>\n      </Form.Group>\n    </>\n  );\n};\n","/** @format */\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { ITextAreaFormGroupProps } from \"src/_shared/forms/formGroups/_formGroupTypes\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\n\nexport const TextAreaFormGroup = (props: ITextAreaFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    validateObject,\n    formIdentifier,\n    disabled,\n    required,\n    requiredMessage,\n    // TODO: autoComplete,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    inputClass,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    // TODO: startTouched,\n    placeholderKey,\n    placeholderText,\n    minLength,\n    minLengthMessage,\n    maxLength,\n    maxLengthMessage,\n    showCharacterCounter,\n    rows\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const [ letterCount, setLetterCount ] = useState<number>(0);\n\n  const { t } = useTranslation();\n\n  const textArea = register(formIdentifier, {\n    required: {\n      value: typeof required === \"boolean\" ? required : null,\n      message: requiredMessage ?? \"This field is required\"\n    },\n    minLength: {\n      value: typeof minLength === \"number\" ? minLength : null,\n      message: minLengthMessage ?? `Must reach minimum length of ${minLength}`\n    },\n    maxLength: {\n      value: typeof maxLength === \"number\" ? maxLength : null,\n      message: maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\n    },\n    validate: validateObject ?? null\n  });\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  return (\n    <Form.Group className={`position-relative ${formClasses ?? \"\"} ${errors[formIdentifier] ? \"has-error\" : \"\"}`}>\n      <FormGroupLabel\n        formIdentifier={formIdentifier}\n        label={labelText ?? t(labelKey)}\n        tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n        required={required}\n      />\n      <InputGroup>\n        <textarea\n          className={`w-100 p-1 form-control ${applyValidClass()} ${inputClass ?? \"\"}`}\n          style={{\n            maxWidth: \"100%\",\n            minHeight: `${24 * (rows || 4)}px`\n          }}\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onKeyDown={onKeyDown}\n          onKeyUp={onKeyUp}\n          onMouseDown={onMouseDown}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          onMouseMove={onMouseMove}\n          onMouseOver={onMouseOver}\n          onMouseUp={onMouseUp}\n          rows={rows}\n          disabled={disabled}\n          {...textArea}\n          onChange={e => {\n            textArea.onChange(e);\n            if (extraOnChange) {\n              extraOnChange(e);\n            }\n            if (!touched) {\n              setTouched(true);\n            }\n            setLetterCount(e.target.value.length);\n          }}\n          id={formIdentifier}\n          placeholder={placeholderText ?? t(placeholderKey)}\n        />\n        {maxLength > 0 && showCharacterCounter ? <div>{`${letterCount} of ${maxLength}`}</div> : null}\n        {errors[formIdentifier] && !hideInvalidTooltip\n          ? <div className=\"input-group-append w-100 pt-1 pl-1\" role=\"alert\">\n            <span className=\"text-danger\">\n              {errors[formIdentifier].message}\n            </span>\n          </div>\n          : null}\n        {/* TODO: add success messages */}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","import { ChangeEvent, forwardRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { PatternFormat, PatternFormatProps } from \"react-number-format\";\nimport { ITextInputFormGroupProps } from \"./_formGroupTypes\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faBriefcase, faCity, faRoad } from \"@fortawesome/free-solid-svg-icons\";\nimport { FormGroupLabel } from \"./FormGroupLabel\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const debounce = (func: Function, wait: number, context: any) => {\n  // eslint-disable-next-line no-undef\n  let timeout: NodeJS.Timeout = null;\n  return (...args: any[]): void => {\n    // eslint-disable-next-line prefer-rest-params\n    const later = () => {\n      timeout = null;\n      func.apply(context, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n};\n\nexport const TextInputFormGroup = (props: ITextInputFormGroupProps): JSX.Element => {\n  const {\n    register,\n    errors,\n    pattern,\n    patternMessage,\n    validateObject,\n    formIdentifier,\n    dataSid,\n    disabled,\n    required,\n    requiredMessage,\n    autoComplete,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    leftIcon,\n    rightIcon,\n    inputClasses,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onKeyPress,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    onPaste,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    // TODO: startTouched,\n    placeholderKey,\n    placeholderText,\n    minLength,\n    minLengthMessage,\n    maxLength,\n    maxLengthMessage,\n    isEmail,\n    isPhone,\n    isFax,\n    isUsername,\n    // inputMode,\n    hideRequired,\n    unitLabel,\n    leftIconContainerClassName,\n    valueToPrefill,\n  } = props;\n\n  const [ touched, setTouched ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n\n  const textInput = register(formIdentifier, {\n    maxLength: {\n      value: typeof maxLength === \"number\" ? maxLength : null,\n      message:\n        maxLengthMessage ?? `Must not exceed maximum length of ${maxLength}`\n    },\n    minLength: {\n      value: typeof minLength === \"number\" ? minLength : null,\n      message: minLengthMessage ?? `Must reach minimum length of ${minLength}`\n    },\n    pattern: {\n      value: isEmail\n        // eslint-disable-next-line no-useless-escape, prefer-named-capture-group, require-unicode-regexp, max-len\n        ? /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i\n        : pattern,\n      message: patternMessage ?? \"Value does not match required pattern\"\n    },\n    required: {\n      value: typeof required === \"boolean\" ? required : null,\n      message:\n        requiredMessage\n        ?? t(\"ui.storefront.common.validation.ThisFieldIsRequired\")\n    },\n    validate: validateObject ?? null\n  });\n\n  let inputAutoComplete: string = null;\n  if (isUsername) {\n    inputAutoComplete = \"username\";\n  } else if (isEmail) {\n    inputAutoComplete = \"email\";\n  } else if (isPhone) {\n    inputAutoComplete = \"tel\";\n  } else if (isFax) {\n    inputAutoComplete = \"fax\";\n  } else if (autoComplete) {\n    inputAutoComplete = autoComplete;\n  }\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  const renderLeftIcon = () => {\n    if (formClasses && formClasses.includes(\"new-address-input\")) {\n      return null;\n    }\n    if (!isEmail && !isFax && !isPhone && !leftIcon) {\n      return null;\n    }\n    let iconString = null;\n    if (leftIcon === faRoad) {\n      iconString = \"fal fa-fw fa-road\";\n    } else if (leftIcon === faBriefcase) {\n      iconString = \"fal fa-fw fa-briefcase\";\n    } else if (leftIcon === faCity) {\n      iconString = \"fal fa-fw fa-city\";\n    }\n    return (\n      <InputGroup.Text className={leftIconContainerClassName}>\n        {iconString && <i className={iconString}/>}\n        {isEmail ? <i className=\"fal fa-fw fa-envelope\" /> : null}\n        {isPhone ? <i className=\"fal fa-fw fa-phone\" /> : null}\n        {isFax ? <i className=\"fal fa-fw fa-fax\" /> : null}\n        {!iconString && leftIcon ? <FontAwesomeIcon icon={leftIcon} className=\"fa-fw\" /> : null}\n      </InputGroup.Text>\n    );\n  };\n\n  return (\n    <Form.Group\n      className={`position-relative ${formClasses ?? \"\"} ${\n        errors[formIdentifier] ? \"has-error\" : \"\"\n      }`}>\n      <FormGroupLabel\n        label={labelText ?? t(labelKey)}\n        formIdentifier={formIdentifier}\n        tooltipText={tooltipText ?? tooltipKey ? t(tooltipKey) : null}\n        required={required}\n        hideRequired={hideRequired}\n      />\n      <InputGroup>\n        {renderLeftIcon()}\n        <Form.Control\n          className={`form-control ${rightIcon ? \"\" : \"rounded-end\"} ${applyValidClass()} ${inputClasses ?? \"\"}`}\n          data-sid={dataSid ?? null}\n          type={isPhone || isFax ? \"tel\" : \"text\"}\n          as={isPhone ? PatternFormatWrapper : Form.Control}\n          defaultValue={valueToPrefill}\n          format=\"###-###-####\"\n          onBlur={onBlur}\n          onFocus={onFocus}\n          onKeyDown={onKeyDown}\n          onKeyUp={onKeyUp}\n          onKeyPress={onKeyPress}\n          onPaste={onPaste}\n          onMouseDown={onMouseDown}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n          onMouseMove={onMouseMove}\n          onMouseOver={onMouseOver}\n          onMouseUp={onMouseUp}\n          disabled={disabled}\n          // Prevents Excess Input\n          maxLength={maxLength ?? 100}\n          autoComplete={inputAutoComplete ?? \"off\"}\n          {...textInput}\n          onChange={debounce((e: ChangeEvent<HTMLInputElement>) => {\n            textInput.onChange(e);\n            if (extraOnChange) {\n              extraOnChange(e);\n            }\n            if (!touched) {\n              setTouched(true);\n            }\n          // eslint-disable-next-line no-invalid-this\n          }, 500, this)}\n          id={formIdentifier}\n          placeholder={placeholderKey ? t(placeholderKey) : placeholderText}\n        />\n        {rightIcon\n          ? <InputGroup.Text className=\"rounded-end\">\n            <i className=\"fal fa-fw fa-right-icon\" />\n          </InputGroup.Text>\n          : null}\n        {unitLabel && (\n          <InputGroup.Text className=\"rounded-end bg-transparent border-0\">\n            {unitLabel}\n          </InputGroup.Text>\n        )}\n        {errors[formIdentifier] && !hideInvalidTooltip\n          ? <div className=\"input-group-append w-100 pt-1 pl-1\" role=\"alert\">\n            <span className=\"text-danger\">\n              {errors[formIdentifier].message}\n            </span>\n          </div>\n          : null}\n        {/* TODO: add success messages */}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n\nconst PatternFormatWrapper = forwardRef<HTMLInputElement, PatternFormatProps>((props, ref) => {\n  return <PatternFormat {...props} getInputRef={ref}/>;\n});\nPatternFormatWrapper.displayName = \"PatternFormatWrapper\";\n","// extracted by mini-css-extract-plugin\nexport default {\"switch\":\"ToggleFormGroup_switch__jGe8H\",\"slider\":\"ToggleFormGroup_slider__M4BOR\"};","import { format, subYears } from \"date-fns\";\nimport { useEffect, useState } from \"react\";\nimport { Alert, Button, Col, Container, Row } from \"react-bootstrap\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { UserModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useRegions } from \"src/_redux/slices/geographySlice\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { DateInputFormGroup, SelectFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { useAddToCartModalContext } from \"src/Cart/modals/AddToCartModalContext\";\n\nexport interface IGeneralMedicalFormDataEntry {\n  txtPatientFirstName: string;\n  txtPatientLastName: string;\n  txtPatientPhoneNumber: string;\n  txtPatientDateOfBirth: string;\n  txtPatientHeightFt: string;\n  txtPatientHeightIn: string;\n  txtPatientWeight: string;\n  txtPatientGender: string;\n  txtPatientState: string;\n}\n\nconst dateToDefaultValue = (date: string | Date): string => {\n  if (!date) {\n    return undefined;\n  }\n  // react-hook-form doesn't accept a Date object, nor a date ISO string as a default value\n  // instead the default value has to be YYYY-MM-DD...so this is a hack to make it so\n  if (typeof date === \"string\") {\n    return new Date(date).toISOString()\n      .substring(0, 10);\n  }\n  return date.toISOString().substring(0, 10);\n};\n\nconst numberInputOnly = (e: React.ChangeEvent<HTMLInputElement>) => {\n  const inputValue = e.target.value;\n  function extractNumbers(str: string) {\n    return str.replace(/\\D/gu, \"\");\n  }\n  if (isNaN(Number(inputValue))) {\n    e.target.value = extractNumbers(inputValue);\n  }\n};\n\nconst eighteenYearsAgo = format(subYears(new Date(), 18), \"yyyy-MM-dd\");\nconst twentyfourYearsAgo = format(subYears(new Date(), 24), \"yyyy-MM-dd\");\n\nexport interface IGeneralMedicalFormProps {\n  loading: boolean | undefined;\n  onCancel?: () => void;\n  onConfirm: (data: IGeneralMedicalFormDataEntry) => void;\n  productID?: number;\n}\n\nexport const GeneralMedicalForm = (props: IGeneralMedicalFormProps): JSX.Element => {\n  const { loading, onCancel, onConfirm, productID } = props;\n  const [ showGenderRestrictionMessage, setShowGenderResctrictionMessage ] = useState<boolean>(false);\n  const [ showRegionResctrictionMessage, setShowRegionRestrictionMessage ] = useState<boolean>(false);\n  const [ regionRestrictionMessage, setRegionRestrictionMessage ] = useState<string>(\n    \"This product is restricted for this region.\"\n  );\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const regions = useRegions();\n  const currentUser = useCurrentUser();\n  const authFactory = useAuthFactory();\n  const cartFactory = useCartFactory();\n  const { t } = useTranslation();\n  const { register, handleSubmit, formState, setValue, getValues } = useForm<IGeneralMedicalFormDataEntry>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const [ init, setInit ] = useState<boolean>(true);\n  const [ dateIsValid, setDateIsValid ] = useState<boolean>(false);\n\n  const { isPrimeOrMojo } = useAddToCartModalContext();\n\n  const minAge = isPrimeOrMojo ? 24 : 18;\n\n  useEffect(() => {\n    if (currentUser.ID > 0 && init) {\n      setValue(\"txtPatientFirstName\", currentUser.ContactFirstName);\n      setValue(\"txtPatientLastName\", currentUser.ContactLastName);\n      setValue(\"txtPatientPhoneNumber\", currentUser.Contact?.Phone1);\n      setValue(\"txtPatientHeightFt\", currentUser.HeightFeet?.toString());\n      setValue(\"txtPatientHeightIn\", currentUser.HeightInches?.toString());\n      setValue(\"txtPatientWeight\", currentUser.Weight?.toString());\n      setValue(\"txtPatientGender\", currentUser.Gender);\n      setValue(\"txtPatientState\", currentUser.StateOfResidenceName);\n      setValue(\"txtPatientDateOfBirth\", currentUser?.DateOfBirth ? dateToDefaultValue(currentUser.DateOfBirth) : \"\");\n      setInit(false);\n    }\n  }, [ currentUser ]);\n\n  const confirm = (data: IGeneralMedicalFormDataEntry) => {\n    setRunning();\n    const newUser: UserModel = {\n      ...currentUser,\n      DateOfBirth: new Date(data.txtPatientDateOfBirth),\n      HeightFeet: parseInt(data.txtPatientHeightFt),\n      HeightInches: parseInt(data.txtPatientHeightIn),\n      Gender: data.txtPatientGender,\n      Weight: parseInt(data.txtPatientWeight),\n      StateOfResidence: null,\n      StateOfResidenceID: null,\n      StateOfResidenceKey: data.txtPatientState,\n      StateOfResidenceCode: null,\n      StateOfResidenceName: data.txtPatientState,\n      Contact: {\n        ...currentUser.Contact,\n        FirstName: data.txtPatientFirstName,\n        LastName: data.txtPatientLastName,\n        Phone1: data.txtPatientPhoneNumber\n      },\n      GeneralMedicalCompleted: true\n    };\n    authFactory\n      .updateCurrentUser(newUser)\n      .then(() => cartFactory.checkRestrictedRegions(productID))\n      .then(r => {\n        if (!r.ActionSucceeded) {\n          finishRunning();\n          setShowRegionRestrictionMessage(true);\n          setRegionRestrictionMessage(`${r.Messages[0]}`);\n          setTimeout(() => {\n            setShowGenderResctrictionMessage(false);\n            setRegionRestrictionMessage(\"This product is restricted for this region.\");\n            onCancel();\n          }, 5000);\n        } else {\n          finishRunning();\n          onConfirm(data);\n        }\n      });\n  };\n\n  const genderOptions = [\n    { option: \"Male\", value: \"Male\" },\n    { option: \"Female\", value: \"Female\" }\n  ];\n\n  const regionOptions = regions?.filter(r => r.Name !== \"Virgin Islands\" && r.Name !== \"Puerto Rico\").map(region => ({\n    option: region.Name,\n    value: region.Name\n  }));\n\n  const handleSubmitAndTrack = () => {\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push({\n      event: \"consultation_started\"\n    });\n    handleSubmit(confirm)();\n  };\n\n  return (\n    <div className=\"general-medical-form-modal\">\n      <Container>\n        <div\n          className=\"\n          \">\n          {loading || viewState.running ? <LoadingWidget overlay={true} /> : null}\n          <div>\n            <Row >\n              <Col xs={12}\n                md={6}\n                className=\"mb-3\">\n                <TextInputFormGroup\n                  register={register}\n                  errors={formState.errors}\n                  formIdentifier=\"txtPatientFirstName\"\n                  labelText={t(\"ui.storefront.medical.PatientFirstName\", \"Patient First Name\")}\n                  maxLength={128}\n                  placeholderKey=\"First Name\"\n                  required={true}\n                  hideRequired={true}\n                  hideInvalidTooltip={true}\n                  autoComplete=\"given-name\"\n                  disabled={Boolean(currentUser && currentUser?.ContactFirstName)}\n                />\n\n              </Col>\n              <Col xs={12}\n                md={6}\n                className=\"mb-3\">\n                <TextInputFormGroup\n                  register={register}\n                  errors={formState.errors}\n                  formIdentifier=\"txtPatientLastName\"\n                  labelText={t(\"ui.storefront.medical.PatientLastName\", \"Patient Last Name\")}\n                  maxLength={128}\n                  placeholderKey=\"ui.storefront.common.LastName\"\n                  required={true}\n                  hideRequired={true}\n                  hideInvalidTooltip={true}\n                  autoComplete=\"family-name\"\n                  disabled={Boolean(currentUser && currentUser?.ContactLastName)}\n                />\n              </Col>\n            </Row>\n\n            <Col xs={12}\n              className=\"mb-3\">\n              <TextInputFormGroup\n                register={register}\n                errors={formState.errors}\n                formIdentifier=\"txtPatientPhoneNumber\"\n                inputClasses=\"rounded\"\n                labelKey=\"ui.storefront.common.Phone\"\n                placeholderKey=\"ui.storefront.common.Phone\"\n                inputMode=\"tel\"\n                required={true}\n                isPhone={true}\n                hideRequired={true}\n                hideInvalidTooltip={true}\n                leftIconContainerClassName={\"d-none\"}\n                autoComplete=\"tel\"\n                valueToPrefill={currentUser?.Contact?.Phone1}\n              />\n            </Col>\n            <Col xs={12}\n              className=\"mb-3\">\n              <div\n                className=\"label\">\n                <span className=\"d-inline-block mb-n1 small\">\n                  {t(\"ui.storefront.common.IdVerified\", \"(ID verified after checkout)\")}\n                </span>\n                <span>{t(\"ui.storefront.common.DateOfBirth\", \"Date of Birth\")}</span>\n              </div>\n              <div className=\"date-container w-100\">\n                <DateInputFormGroup\n                  formClasses=\"w-100\"\n                  register={register}\n                  errors={formState.errors}\n                  formIdentifier=\"txtPatientDateOfBirth\"\n                  labelKey=\"ui.storefront.common.DateOfBirth\"\n                  max={isPrimeOrMojo\n                    ? twentyfourYearsAgo\n                    : eighteenYearsAgo}\n                  maxMessage={`Sorry, must be ${minAge} years old to proceed.`}\n                  extraOnChange={(v) => {\n                    // eslint-disable-next-line no-constant-condition\n                    if (new Date(v.target.value)) {\n                      setDateIsValid(true);\n                    } else {\n                      setDateIsValid(false);\n                    }\n                  }}\n                />\n                <span className=\"inner-label small\">\n                    Date of Birth (ID verified after checkout)\n                </span>\n                <span className={`calendar-icon d-flex align-items-center pe-3 h-100\n                  ${formState.errors && formState.errors.txtPatientDateOfBirth ? \"with-error\" : \"\"}`}>\n                  <i className=\"fa-light fa-calendar text-primary fs-2\" />\n                </span>\n              </div>\n            </Col>\n\n            <Row>\n              <Col xs={6}\n                md={4}\n                className=\"mb-3\">\n                <div\n                  className=\"label\">\n                  {t(\"ui.storefront.storeDashboard.storeProductEditor.Height\", \"Height\")}\n                </div>\n                <div\n                  className=\"input-container w-100\">\n                  <TextInputFormGroup\n                    register={register}\n                    inputMode=\"numeric\"\n                    errors={formState.errors}\n                    formIdentifier=\"txtPatientHeightFt\"\n                    formClasses=\"w-100\"\n                    labelKey=\"ui.storefront.storeDashboard.storeProductEditor.Height\"\n                    placeholderKey=\"Height\"\n                    extraOnChange={numberInputOnly}\n                    required\n                    hideRequired\n                    hideInvalidTooltip\n                  />\n                  <span className=\"inner-label\">ft</span>\n                </div>\n              </Col>\n              <Col xs={6}\n                md={4}\n                className=\"mb-3\">\n                <div\n                  className=\"input-container w-100\">\n                  <TextInputFormGroup\n                    register={register}\n                    errors={formState.errors}\n                    inputMode=\"numeric\"\n                    formIdentifier=\"txtPatientHeightIn\"\n                    formClasses=\"w-100\"\n                    placeholderKey=\"Height\"\n                    extraOnChange={numberInputOnly}\n                    required\n                    hideRequired\n                    hideInvalidTooltip\n                  />\n                  <span className=\"inner-label\">in</span>\n                </div>\n              </Col>\n\n              <Col xs={12}\n                md={4}\n                className=\"mb-3\">\n                <div\n                  className=\"input-container w-100\">\n                  <TextInputFormGroup\n                    register={register}\n                    errors={formState.errors}\n                    formIdentifier=\"txtPatientWeight\"\n                    formClasses=\"w-100\"\n                    labelKey=\"ui.storefront.storeDashboard.storeProductEditor.Weight\"\n                    inputMode=\"decimal\"\n                    placeholderKey=\"ui.storefront.storeDashboard.storeProductEditor.Weight\"\n                    extraOnChange={numberInputOnly}\n                    required\n                    hideRequired\n                    hideInvalidTooltip\n                  />\n                  <span className=\"inner-label\">lbs</span>\n                </div>\n              </Col>\n            </Row>\n\n            <Col xs={12}\n              className=\"mb-3\">\n              {currentUser?.ID > 0 && (\n                <SelectFormGroup\n                  register={register}\n                  errors={formState.errors}\n                  formIdentifier=\"txtPatientGender\"\n                  labelText={t(\"ui.storefront.medical.Sex\", \"Sex\")}\n                  includeNull\n                  nullKey=\"Sex\"\n                  options={genderOptions}\n                  initialOption={{\n                    option: currentUser.Gender,\n                    value: currentUser.Gender\n                  }}\n                  required\n                  hideRequired\n                  hideInvalidTooltip\n                  autocomplete=\"nope\"\n                />\n              )}\n            </Col>\n            <Col xs={12}\n              className=\"mb-3\">\n              {regions?.length > 0 && currentUser?.ID > 0 && (\n                <SelectFormGroup\n                  productId={productID}\n                  register={register}\n                  errors={formState.errors}\n                  formIdentifier=\"txtPatientState\"\n                  labelKey=\"ui.storefront.common.StateOfResidence\"\n                  includeNull\n                  nullKey=\"State of Residence\"\n                  required\n                  hideRequired\n                  options={regionOptions}\n                  initialOption={currentUser.StateOfResidenceName ? {\n                    option: currentUser.StateOfResidenceName,\n                    value: currentUser.StateOfResidenceName\n                  } : null}\n                  autocomplete=\"nope\"\n                  dataSid=\"ddlRegionIDRegistrationAddressBook\"\n                  hideInvalidTooltip\n                />\n              )}\n            </Col>\n          </div>\n        </div>\n      </Container>\n      <div className=\"btn-container w-100 d-flex justify-content-between mt-md-4 px-4\">\n        <button\n          className=\"cancel-btn py-3 mx-1 border-0\"\n          onClick={() => {\n            onCancel();\n          }}>\n          Cancel & Close\n        </button>\n        <Button\n          className=\"next-btn px-5 py-3 mx-1\"\n          data-bs-dismiss=\"modal\"\n          onClick={handleSubmitAndTrack}\n          type=\"button\"\n          disabled={!formState.isValid}>\n          Next\n        </Button>\n      </div>\n      {showGenderRestrictionMessage && (\n        <Alert className=\"alert-danger mt-3\">\n          {t(\"ui.storefront.generalMedicalForm.GenderRestrictionMessage\", \"No products on the site are for women.\")}\n        </Alert>\n      )}\n      {showRegionResctrictionMessage && <Alert className=\"alert-danger mt-3\">{regionRestrictionMessage}</Alert>}\n    </div>\n  );\n};\n","import { PropsWithChildren } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Modal } from \"src/_shared/modals/Modal\";\nimport { GeneralMedicalForm } from \"src/Catalog/controls/GeneralMedicalForm\";\nimport { useAddToCartModalContext } from \"../AddToCartModalContext\";\nimport { QuestionnaireModalHeader } from \"./QuestionnaireModalHeader\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\ninterface IGeneralQuestionnaireModalProps {\n  closeMedicalForm: () => void;\n  onCancel: () => void;\n  productID: number;\n  show: boolean;\n}\n\nexport const GeneralQuestionnaireModal = (props: PropsWithChildren<IGeneralQuestionnaireModalProps>): JSX.Element => {\n  const { closeMedicalForm, onCancel, productID, show } = props;\n\n  const { proceed } = useAddToCartModalContext();\n  const currentUser = useCurrentUser();\n\n  return <Modal\n    show={show}\n    onCancel={onCancel}\n    modalClasses=\"atc-questionnaire-modal\"\n    modalBodyClasses=\"d-flex flex-column align-items-center modal-body-modified\"\n    CustomHeader={() => <QuestionnaireModalHeader />}\n    headerClasses=\"justify-content-center border-0 mb-0 mb-md-4 py-4\"\n    hideCloseButton={true}>\n    {props.children}\n    {currentUser.GeneralMedicalCompleted ? <h2 className=\"alt-font text-center mb-md-4\">\n      {\"Let's\"} update<span className=\"alt-font text-center text-primary d-block\">your chart</span>\n    </h2>\n      : <h2 className=\"alt-font text-center mb-md-4\">\n        {\"Let's\"} get your <span className=\"alt-font text-center text-primary d-block\">chart started</span>\n      </h2>}\n    <GeneralMedicalForm\n      loading={false}\n      onConfirm={() => proceed()}\n      onCancel={closeMedicalForm}\n      productID={productID}\n    />\n  </Modal>;\n};\n\nexport default GeneralQuestionnaireModal;\n","/** @format */\n\nexport const currencyFormatter = new Intl.NumberFormat(\"en-US\", {\n  style: \"currency\",\n  currency: \"USD\"\n});\n\nexport const camelCaseToHumanReadable = (name: string): string => {\n  function capitalize(word: string) {\n    return word.charAt(0).toUpperCase() + word.substring(1);\n  }\n  // @ts-ignore\n  const words = name.match(/[A-Za-z][a-z]*/gu) || [];\n  return words.map(capitalize).join(\" \");\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const getObjectFromDotNotation = (str: string, value: any): any => str\n  .split(\".\")\n  .reverse()\n  .reduce(\n    (prevValue, currentValue) => ({\n      [currentValue]: prevValue\n    }),\n    value\n  );\n\nexport const limitWithEllipses = (\n  text: string,\n  limit: number\n): string => text.length > limit ? `${text.substr(0, limit)}...` : text;\n\nexport const getDtoAsPromiserKeyFragment = (dto: Object): string => {\n  if (!dto || typeof dto !== \"object\") {\n    return \"\";\n  }\n  return Object.keys(dto)\n    .sort()\n    .reduce((str, key) => {\n      if (Object.hasOwn(dto, key)) {\n        return `${str}${key}:${JSON.stringify(dto[key as keyof Object])}`;\n      }\n      return str;\n    }, \"\");\n};\n\nexport const convertTimeFromUTCToUserLocal = (dateTime: Date | string): Date => {\n  if (!dateTime) {\n    return null;\n  }\n  // const utcOffsetInMins = new Date().getTimezoneOffset();\n  // const tzDifferenceMillis = utcOffsetInMins * 60 * 1000;\n  // const convertedTime = new Date(\n  //     new Date(dateTime).getTime() + (-1 * tzDifferenceMillis)\n  // ).toISOString();\n  // return new Date(convertedTime);\n  if (typeof dateTime === \"string\") {\n    let str = dateTime;\n    if (!dateTime.endsWith(\"z\") && !dateTime.endsWith(\"Z\")) {\n      str += \"Z\";\n    }\n    return new Date(str);\n  }\n  return new Date(dateTime.toISOString());\n};\n\nexport const removeMgLabelFromString = (str: string): string => {\n  if (typeof str !== \"string\") {\n    return str;\n  }\n  const words = str.split(\" \");\n  return words.filter(w => !w.includes(\"mg\")).join(\" \");\n};\n\nexport const removeNonDigitCharacters = (str: string): string => {\n  // @ts-ignore\n  return str.replace(/\\D/gu, \"\");\n};\n","// <copyright file=\"AnswerContext.tsx\" company=\"clarity-ventures.com\">\n// Copyright (c) 2023 clarity-ventures.com. All rights reserved.\n// </copyright>\n// <summary></summary>\n\nimport React from \"react\";\nimport { AnswerModel, QuestionModel, QuestionOptionModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface AnswerContextProps {\n  answers: AnswerModel[];\n  addOrUpdateAnswer: (answer: AnswerModel) => void;\n  createAnswer: (question: QuestionModel, option? : QuestionOptionModel | null) => AnswerModel;\n}\n\nexport const AnswerContext = React.createContext<AnswerContextProps>({\n  answers: [],\n  addOrUpdateAnswer: () => null,\n  createAnswer: (question: QuestionModel, option: QuestionOptionModel | null): AnswerModel => null,\n});\n","/* eslint-disable max-len */\n/** @format */\n\n// <copyright file=\"QuestionOption.tsx\" company=\"clarity-ventures.com\">\n// Copyright (c) 2023 clarity-ventures.com. All rights reserved.\n// </copyright>\n// <summary></summary>\nimport React, { useContext, useMemo } from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { ControllerRenderProps, FieldValues, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { QuestionOptionModel } from \"src/_api/cvApi._DtoClasses\";\nimport { AnswerContext } from \"./AnswerContext\";\n\ninterface QuestionOptionProps {\n  disabled?: boolean;\n  option: QuestionOptionModel;\n  onChange: (value: any) => void;\n  typeKey: string;\n  questionTranslationKey?: string;\n  controlName: string;\n  field: ControllerRenderProps<FieldValues, any>;\n}\n\nexport const QuestionOption: React.FC<QuestionOptionProps> = props => {\n  const { formState, register } = useFormContext();\n  const { answers } = useContext(AnswerContext);\n  const { t } = useTranslation();\n\n  const existingAnswer = useMemo(() => {\n    return answers.find(a => a.QuestionID === props.option.QuestionID && a.OptionID === props.option.ID);\n  }, [ answers ]);\n\n  const getDefaultCheckedState = (): boolean => {\n    return existingAnswer ? existingAnswer.Active : false;\n  };\n\n  const renderInput = () => {\n    let element: React.ReactNode = null;\n    const isInvalid = Boolean(formState.errors[props.controlName]);\n    const labelDataSID = `${props.questionTranslationKey}_${props.option.OptionTranslationKey}_label`;\n    const inputDataSID = `${props.questionTranslationKey}_${props.option.OptionTranslationKey}_input`;\n    const inputID = `${props.option.QuestionID}-${props.option.OptionTranslationKey}`;\n    const idsForLargerTextFields = [ 91, 92, 93 ];\n    const label = (\n      <span data-sid={labelDataSID}>\n        {props.option.OptionTranslationKey\n          ? t(props.option.OptionTranslationKey.replace(/\\r\\n/gu, \"\"))\n          : props.option.CustomKey}\n      </span>\n    );\n\n    switch (props.typeKey) {\n      case ServiceStrings.questionnaire.types.NUMBER: {\n        element = (\n          <Form.Control\n            data-sid={inputDataSID}\n            type=\"number\"\n            isInvalid={isInvalid}\n            {...props.field}\n            onChange={props.onChange}\n            disabled={props.disabled}\n          />\n        );\n        break;\n      }\n\n      case ServiceStrings.questionnaire.types.TEXT_AREA: {\n        element = (\n          <Form.Control\n            data-sid={inputDataSID}\n            as=\"textarea\"\n            isInvalid={isInvalid}\n            {...props.field}\n            onChange={props.onChange}\n            disabled={props.disabled}\n          />\n        );\n        break;\n      }\n\n      case ServiceStrings.questionnaire.types.BOOLEAN:\n      case ServiceStrings.questionnaire.types.RADIO: {\n        element = (\n          <label\n            role=\"button\"\n            htmlFor={`checkbox-${props.option.ID}`}\n            className=\"border-0 bg-transparent questionnaire-button\">\n            <Form.Check\n              data-sid={inputDataSID}\n              type=\"radio\"\n              className={`question-option border rounded-pill bg-white shadow-sm\n                 ${getDefaultCheckedState() ? \"border-brand-orange border-2\" : \"border-brand-orange-subtle border-1\"}`}\n              style={idsForLargerTextFields.includes(props.option.ID) ? { height: \"90px\" } : {}}\n              id={inputID}\n              label={label}\n              {...props.field}\n              isInvalid={isInvalid}\n              value={props.option.ID}\n              checked={getDefaultCheckedState()}\n              onChange={props.onChange}\n              disabled={props.disabled}\n            />\n          </label>\n        );\n        break;\n      }\n\n      case ServiceStrings.questionnaire.types.MULTIPLE_CHOICE: {\n        /* Register here is not a mistake. Spreading props.field prevents value from working. */\n        const checkboxInput = register(props.controlName);\n        element = (\n          <label\n            role=\"button\"\n            htmlFor={`checkbox-${props.option.ID}`}\n            className=\"border-0 bg-transparent questionnaire-button\">\n            <Form.Check\n              data-sid={inputDataSID}\n              type=\"checkbox\"\n              className={`question-option border rounded-pill bg-white shadow-sm\n               ${\n          props.field.value.includes(props.option.ID.toString())\n            ? \"border-brand-orange border-2\"\n            : \"border-brand-orange-subtle border-1\"\n          }`}\n              id={`checkbox-${props.option.ID}`}\n              name={`checkbox-${props.option.ID}`}\n              isInvalid={isInvalid}\n              label={label}\n              value={props.option.ID.toString()}\n              {...checkboxInput}\n              onChange={e => {\n                props.onChange(e);\n                checkboxInput.onChange(e);\n              }}\n              disabled={props.disabled}\n            />\n          </label>\n        );\n        break;\n      }\n\n      case ServiceStrings.questionnaire.types.SELECT: {\n        element = (\n          <option\n            value={props.option.ID}\n            data-sid={inputDataSID}\n            disabled={props.disabled}>\n            {t(props.option.OptionTranslationKey)}\n          </option>\n        );\n        break;\n      }\n\n      case ServiceStrings.questionnaire.types.STRING:\n      case \"GENERAL\":\n      default: {\n        element = (\n          <Form.Control\n            className={`border bg-white shadow-sm \n               ${props.field.value.length ? \"border-brand-orange border-2\" : \"border-brand-orange-subtle border-1\"}`}\n            data-sid={inputDataSID}\n            as=\"textarea\"\n            isInvalid={isInvalid}\n            {...props.field}\n            onChange={props.onChange}\n            disabled={props.disabled}\n            style={{ minHeight: \"120px\" }}\n          />\n        );\n        break;\n      }\n    }\n    return element;\n  };\n\n  return <>{renderInput()}</>;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"boolean-options-container\":\"Question_boolean-options-container__Z0k1c\"};","import { AnswerModel, QuestionModel, QuestionOptionModel } from \"src/_api/cvApi._DtoClasses\";\nimport cvApi from \"src/_api/cvApi\";\n\nexport function getControlName(question: QuestionModel): string {\n  return `question_${question?.ID}`;\n}\n\nexport function createAnswer(question: QuestionModel, option: QuestionOptionModel | null): AnswerModel {\n  return {\n    ID: 0,\n    Active: false,\n    CreatedDate: new Date(),\n    QuestionID: question.ID,\n    QuestionKey: question.CustomKey,\n    OptionID: option.ID || null,\n    OptionKey: option.CustomKey || null,\n    Option: option\n  };\n}\n\nexport const fetchAnswers = async (\n  validQuestions: QuestionModel[],\n  forUserID?: number\n): Promise<AnswerModel[]> => {\n  const questionIDs = validQuestions.map(q => q.ID);\n  const answersRes = await cvApi.questionnaire.GetAnswersForQuestions({\n    QuestionIDs: questionIDs,\n    ForUserID: forUserID\n  });\n  const fetchedAnswers = answersRes?.data?.Result ?? [];\n  validQuestions?.forEach(question => {\n    if (question.Options) {\n      question.Options.forEach(option => {\n        const exists = fetchedAnswers.some(a => a.QuestionID === question.ID && a.OptionID === option.ID);\n        if (!exists) {\n          fetchedAnswers.push(createAnswer(question, option));\n        }\n      });\n    }\n  });\n  return fetchedAnswers;\n};\n","// <copyright file=\"Question.tsx\" company=\"clarity-ventures.com\">\n// Copyright (c) 2023 clarity-ventures.com. All rights reserved.\n// </copyright>\n// <summary></summary>\nimport _ from \"lodash\";\nimport React, { useContext, useMemo, useState } from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { Controller, ControllerRenderProps, FieldValues, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { AnswerModel, QuestionModel, QuestionOptionModel } from \"src/_api/cvApi._DtoClasses\";\nimport { AnswerContext } from \"./AnswerContext\";\nimport { QuestionOption } from \"./QuestionOption\";\n// @ts-ignore\nimport classes from \"./Question.module.scss\";\nimport { getControlName } from \"./QuestionnaireFunctions\";\n\ninterface QuestionProps {\n  disabled?: boolean;\n  isVisible?: boolean;\n  question: QuestionModel;\n  questionLabelClasses?: string;\n  autoFocus?: boolean;\n}\n\nexport const Question: React.FC<QuestionProps> = ({ disabled, isVisible, question, questionLabelClasses }) => {\n  const { t } = useTranslation();\n  const { addOrUpdateAnswer, answers } = useContext(AnswerContext);\n  const { control, formState, getValues } = useFormContext();\n  const [ warningMessage, setWarningMessage ] = useState(\"\");\n\n  const controlName = useMemo(() => getControlName(question), [ question ]);\n\n  const questionHasMultipleOptions = useMemo(() => {\n    if (!question) {\n      return false;\n    }\n    return question.TypeKey === ServiceStrings.questionnaire.types.BOOLEAN\n      || question.TypeKey === ServiceStrings.questionnaire.types.MULTIPLE_CHOICE\n      || question.TypeKey === ServiceStrings.questionnaire.types.RADIO\n      || question.TypeKey === ServiceStrings.questionnaire.types.SELECT;\n  }, [ question ]);\n\n  const getExistingAnswer = (iquestion: QuestionModel, option: QuestionOptionModel): AnswerModel => {\n    return answers.find(a => a.QuestionID === iquestion.ID && a.OptionID === option.ID);\n  };\n\n  const handleInputChange = (\n    iquestion: QuestionModel,\n    option: QuestionOptionModel,\n    event: React.SyntheticEvent<any>\n  ) => {\n    const existingAnswer = { ...getExistingAnswer(iquestion, option) };\n\n    if (existingAnswer) {\n      if (iquestion.TypeKey === ServiceStrings.questionnaire.types.MULTIPLE_CHOICE) {\n        existingAnswer.Active = !existingAnswer.Active;\n      } else {\n        existingAnswer.Active = true;\n        answers\n          .filter(a => a.Active === true)\n          .filter(a => a.QuestionID === iquestion.ID && a.OptionID !== option.ID)\n          .forEach(a => {\n            a.Active = false;\n            addOrUpdateAnswer(a);\n          });\n      }\n      if (\n        option.RequiresAdditionalInformation\n        && iquestion.TypeKey !== ServiceStrings.questionnaire.types.MULTIPLE_CHOICE\n        && iquestion.TypeKey !== ServiceStrings.questionnaire.types.SELECT\n      ) {\n        existingAnswer.AdditionalInformation = event.currentTarget.value;\n      }\n      if (option.RequiresAdditionalInformation && iquestion.TypeKey === ServiceStrings.questionnaire.types.SELECT) {\n        addOrUpdateAnswer(existingAnswer);\n      }\n\n      addOrUpdateAnswer(existingAnswer);\n      if (existingAnswer.Active\n        && existingAnswer.Option.MessageIfSelected\n        && !existingAnswer.Option.PreventsContinuing) {\n        setWarningMessage(existingAnswer.Option.MessageIfSelected);\n        return;\n      }\n      if (warningMessage) {\n        setWarningMessage(\"\");\n      }\n    }\n  };\n\n  const handleAdditionalInformation = (\n    iquestion: QuestionModel,\n    option: QuestionOptionModel,\n    event: React.SyntheticEvent<any>\n  ) => {\n    const existingAnswer = getExistingAnswer(iquestion, option);\n\n    if (existingAnswer) {\n      existingAnswer.AdditionalInformation = event.currentTarget.value;\n      addOrUpdateAnswer(existingAnswer);\n    }\n  };\n\n  const getControllerOptions = (typeKey: string) => {\n    let defaultValue = \"\";\n    const answersForThisQuestion = answers.filter(a => a.Active === true).filter(a => a.QuestionID === question.ID);\n    let isRequired = true;\n\n    switch (typeKey) {\n      case ServiceStrings.questionnaire.types.NUMBER:\n      case ServiceStrings.questionnaire.types.STRING:\n      case ServiceStrings.questionnaire.types.TEXT_AREA: {\n        defaultValue = _.first(answersForThisQuestion)?.AdditionalInformation || \"\";\n        break;\n      }\n      case ServiceStrings.questionnaire.types.SELECT:\n      case ServiceStrings.questionnaire.types.RADIO: {\n        defaultValue = _.first(answersForThisQuestion)?.OptionID?.toString() || \"\";\n        break;\n      }\n      case ServiceStrings.questionnaire.types.MULTIPLE_CHOICE: {\n        isRequired = !Boolean(answersForThisQuestion?.length);\n        break;\n      }\n\n      case ServiceStrings.questionnaire.types.BOOLEAN: {\n        isRequired = false;\n        break;\n      }\n\n      default: {\n        break;\n      }\n    }\n\n    return {\n      defaultValue,\n      rules: {\n        required: isRequired,\n        validate: {\n          messageIfSelected: (): boolean | string => {\n            // A string of the Option's ID or an array of the same if question is multiple choice\n            const currentValue: string | string[] = getValues(getControlName(question));\n            if (!currentValue || !isVisible || !questionHasMultipleOptions) {\n              return true;\n            }\n            if (question.TypeKey === ServiceStrings.questionnaire.types.MULTIPLE_CHOICE) {\n              const fullOptions = answers\n                .filter(\n                  a => (currentValue as string[]).some(oID => parseInt(oID) === a.OptionID)\n                )\n                .map(a => a.Option);\n              if (fullOptions.some(o => o.PreventsContinuing)) {\n                return fullOptions.find(o => o.PreventsContinuing).MessageIfSelected;\n              }\n              return true;\n            }\n            const fullOption = answers\n              .filter(a => a.QuestionID === question.ID)\n              .find(a => a.Option.ID === parseInt(currentValue as string)).Option;\n            if (fullOption.PreventsContinuing) {\n              return fullOption.MessageIfSelected;\n            }\n            return true;\n          }\n        }\n      }\n    };\n  };\n\n  const controllerOptions = getControllerOptions(question.TypeKey);\n\n  const renderFormGroup = (children: React.ReactNode, field: ControllerRenderProps<FieldValues, any>) => {\n    const selectedOptions = answers.filter(a => a.QuestionID === question.ID && a.Active);\n    switch (question.TypeKey) {\n      case ServiceStrings.questionnaire.types.MULTIPLE_CHOICE: {\n        const isInvalid = Boolean(formState.errors[controlName]);\n        return (\n          <div>\n            <div className={question?.Options.length < 4 ? \"force-single-col\" : \"options-container\"}>\n              {children}\n            </div>\n            {question?.Options?.map(option => (\n              <React.Fragment key={option.ID}>\n                {option.RequiresAdditionalInformation && selectedOptions.some(a => a.OptionID === option.ID) && (\n                  <div className=\"mt-3\">\n                    <Form.Label>{\"Additional Information\"}</Form.Label>\n                    <Form.Control\n                      type=\"text\"\n                      onChange={event => handleAdditionalInformation(question, option, event)}\n                      defaultValue={getExistingAnswer(question, option)?.AdditionalInformation || \"\"}\n                      isInvalid={isInvalid}\n                      disabled={disabled}\n                      autoFocus={true}\n                    />\n                    <Form.Control.Feedback\n                      type=\"invalid\"\n                      className={formState.errors[controlName] && \"d-block pb-4\"}>\n                      {formState.errors[controlName]?.message}\n                    </Form.Control.Feedback>\n                  </div>\n                )}\n              </React.Fragment>\n            ))}\n          </div>\n        );\n      }\n      case ServiceStrings.questionnaire.types.SELECT: {\n        const isInvalid = Boolean(formState.errors[controlName]);\n        return (\n          <React.Fragment>\n            <Form.Select\n              {...field}\n              disabled={disabled}\n              isInvalid={isInvalid}\n              onChange={event => {\n                field.onChange(event);\n                try {\n                  const option = question?.Options?.find(o => String(o.ID) === event.currentTarget.value);\n                  handleInputChange(question, option, event);\n                } catch (e) {\n                  console.warn(\"Option not found for value:\", event.currentTarget.value);\n                }\n              }}>\n              <option\n                disabled={true}\n                value=\"\">\n                {t(\"questionnaire.PleaseSelectAnEntry\", \"Please Select an Entry\")}\n              </option>\n              {children}\n            </Form.Select>\n            {question?.Options?.map(option => (\n              <React.Fragment key={option.ID}>\n                {option.RequiresAdditionalInformation && selectedOptions.some(a => a.OptionID === option.ID) && (\n                  <div className=\"mt-3\">\n                    <Form.Label>{\"Additional Information\"}</Form.Label>\n                    <Form.Control\n                      autoFocus={true}\n                      type=\"text\"\n                      onChange={event => handleAdditionalInformation(question, option, event)}\n                      defaultValue={getExistingAnswer(question, option)?.AdditionalInformation || \"\"}\n                      isInvalid={isInvalid}\n                      disabled={disabled}\n                    />\n                    <Form.Control.Feedback\n                      type=\"invalid\"\n                      className={formState.errors[controlName] && \"d-block pb-4\"}>\n                      {formState.errors[controlName]?.message}\n                    </Form.Control.Feedback>\n                  </div>\n                )}\n              </React.Fragment>\n            ))}\n          </React.Fragment>\n        );\n      }\n      default: {\n        return (\n          <div\n            className={question.Options.length < 4\n              ? \"force-single-col\"\n              : question.TypeKey === \"STRING\" || question.TypeKey === \"TEXT_AREA\"\n                ? \"option-container\"\n                : \"options-container\"}\n          >{children}</div>\n        );\n      }\n    }\n  };\n\n  return (\n    <Controller\n      name={controlName}\n      control={control}\n      {...controllerOptions}\n      // shouldUnregister = unregister the question if it is removed from the DOM\n      // This happens if a user answers a question in such a way that the skip the next question\n      // E.g.do you have allergies? No => skip next question, Yes => list your allergies question\n      shouldUnregister={true}\n      render={({ field }) => (\n        <Form.Group className={classes[\"group-wrapper\"]}>\n          <Form.Label className={questionLabelClasses || \"mt-3\"}>\n            {t(question.QuestionTranslationKey)}\n          </Form.Label>\n          <Form.Control.Feedback\n            type=\"valid\"\n            className={warningMessage && \"d-block\"}>\n            {warningMessage}\n          </Form.Control.Feedback>\n          <Form.Control.Feedback\n            type=\"invalid\"\n            className={formState.errors[controlName] && \"d-block pb-4\"}>\n            {formState.errors[controlName]?.message}\n          </Form.Control.Feedback>\n          {question.TypeKey === ServiceStrings.questionnaire.types.MULTIPLE_CHOICE && (\n            <span className=\"text-brand-orange d-block fs-5 mt-3 mb-2\">\n              {t(\"ui.storefront.questionnaire.SelectAllThatApply\", \"Select All That Apply\")}\n            </span>\n          )}\n          {renderFormGroup(\n            question?.Options?.sort((a, b) => a.SortOrder - b.SortOrder).map(option => (\n              <QuestionOption\n                questionTranslationKey={question.QuestionTranslationKey}\n                key={option.ID}\n                option={option}\n                disabled={disabled}\n                onChange={event => {\n                  if (question.TypeName !== ServiceStrings.questionnaire.types.MULTIPLE_CHOICE) {\n                    field.onChange(event);\n                  }\n                  handleInputChange(question, option, event);\n                }}\n                typeKey={question.TypeKey}\n                controlName={controlName}\n                field={field}\n              />\n            )),\n            field\n          )}\n        </Form.Group>\n      )}\n    />\n  );\n};\n","import _ from \"lodash\";\nimport { useMemo, useState } from \"react\";\nimport ProgressBar from \"react-bootstrap/ProgressBar\";\nimport { useTranslation } from \"react-i18next\";\nimport { QuestionModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IQuestionnaireProgressBarProps {\n  questions: QuestionModel[];\n  visibleQuestionID: number;\n}\n\nexport const QuestionnaireProgressBar = (props: IQuestionnaireProgressBarProps): JSX.Element => {\n  const { questions, visibleQuestionID } = props;\n\n  const { t } = useTranslation();\n\n  const currentQuestionPosition = questions?.findIndex(q => q.ID === visibleQuestionID) || 0;\n\n  const sections = useMemo(() => {\n    if (!questions?.length) {\n      return null;\n    }\n    return questions.reduce((sectionNames, q) => {\n      if (!q.SerializableAttributes?.Section?.Value) {\n        // This shouldn't happen\n        return sectionNames;\n      }\n      if (sectionNames[q.SerializableAttributes.Section.Value]) {\n        sectionNames[q.SerializableAttributes.Section.Value] += 1;\n      } else {\n        sectionNames[q.SerializableAttributes.Section.Value] = 1;\n      }\n      return sectionNames;\n    }, { } as { [sectionName: string]: number; });\n  }, [ questions ]);\n\n  const currentSection = useMemo(() => {\n    if (!sections) {\n      return null;\n    }\n    let total = 0;\n    let n = 1;\n    for (const section in sections) {\n      if (!_.has(sections, section)) {\n        continue;\n      }\n      total += sections[section];\n      if (currentQuestionPosition <= total) {\n        break;\n      }\n      n += 1;\n    }\n    return n;\n  }, [ sections ]);\n\n  if (!questions?.length || !visibleQuestionID) {\n    return null;\n  }\n\n  return (\n    <div className=\"my-2 mx-auto w-85\">\n      <div className=\"d-flex align-items-center\">\n        {sections && Object.keys(sections).map((sectionKey: string, index: number) => {\n          const amountInThisSection = sections[sectionKey];\n          let distanceIntoThisSection: number = null;\n          const sumOfAllPreviousSections: number = Object.keys(sections)\n            .filter((_sectKey, i) => i < index)\n            .reduce((n, sectKey) => n + sections[sectKey], 0);\n          if (currentQuestionPosition <= sumOfAllPreviousSections) {\n            // We're not into this section yet\n            distanceIntoThisSection = 0;\n          } else if (currentQuestionPosition >= sumOfAllPreviousSections + amountInThisSection) {\n            // We've passed this section\n            distanceIntoThisSection = amountInThisSection;\n          } else {\n            // We're in this section\n            distanceIntoThisSection = currentQuestionPosition - sumOfAllPreviousSections;\n          }\n\n          const isFirst = index === 0;\n          const isLast = index === Object.keys(sections).length - 1;\n          const additionalProgressbarClasses = isFirst\n            ? \"border-start border-end-0 rounded-start-pill rounded-end-0\"\n            : isLast\n              ? \"border-start-0 border-end rounded-end-pill rounded-start-0\"\n              : \"border-start-0 border-end-0 rounded-0\";\n\n          return (\n            <div key={sectionKey} className=\"flex-grow-1 position-relative\">\n              <ProgressBar\n                className={`bg-$gray-200 w-100 ${additionalProgressbarClasses}`}\n                style={{\n                  height: \"0.225rem\"\n                }}\n                min={0}\n                max={sections[sectionKey]}\n                now={distanceIntoThisSection}\n              />\n              <div\n                className=\"rounded-circle bg-gray position-absolute d-flex flex-column align-items-center\"\n                style={{\n                  top: \"-3px\",\n                  left: isFirst ? \"0px\" : \"2px\",\n                  padding: \"0.3rem\",\n                }}\n              >\n                <div className=\"ps-2 pt-1 d-block mt-3 position-absolute text-container\">\n                  <span className=\"text-capitalize text-center text-gray px-2 py-1 rounded-pill\"\n                    style={{ display: \"inline-block\", marginTop: \"4px\" }}>\n                    {sectionKey}\n                  </span>\n                </div>\n              </div>\n\n              {isLast && (\n                <div\n                  className=\"rounded-circle bg-gray position-absolute d-flex flex-column align-items-center\"\n                  style={{\n                    top: \"-3px\",\n                    right: \"0px\",\n                    padding: \"0.3rem\",\n                  }}\n                >\n                  <div className=\"pt-1 d-block mt-3 position-absolute text-container\">\n                    <span className=\"text-capitalize text-center text-gray px-2 py-1 rounded-pill\"\n                      style={{ display: \"inline-block\", marginTop: \"4px\" }}>\n                      Almost Done!\n                    </span>\n                  </div>\n                </div>\n              )}\n            </div>\n          );\n        })}\n      </div>\n      {/* {questions && sections && (\n        <div className=\"d-block d-lg-none text-center mt-2 pt-1\">\n          <span className=\"small d-block mb-n1\">\n            {t(\"ui.storefront.common.Section\", \"Section\")} {currentSection} of {Object.keys(sections || {}).length}\n          </span>\n          <span className=\"d-block\">\n            {questions[currentQuestionPosition].SerializableAttributes.Section.Value}\n          </span>\n        </div>\n      )} */}\n    </div>\n  );\n};\n","// <copyright file=\"QuestionnaireComponent.tsx\" company=\"clarity-ventures.com\">\n// Copyright (c) 2023 clarity-ventures.com. All rights reserved.\n// </copyright>\n// <summary></summary>\nimport _ from \"lodash\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Alert, Button, Form } from \"react-bootstrap\";\nimport { FormProvider, SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useQuestionnaireFactory } from \"src/_shared/customHooks/useQuestionnaireFactory\";\nimport {\n  AnswerModel,\n  QuestionModel,\n  QuestionnaireModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport { AnswerContext } from \"./AnswerContext\";\nimport { Question } from \"./Question\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { QuestionnaireProgressBar } from \"src/Questionnaire/QuestionnaireProgressBar\";\nimport { createAnswer, fetchAnswers, getControlName } from \"./QuestionnaireFunctions\";\n\ninterface QuestionnaireProps {\n  // Must pass either customKey or ID\n  questionnaireCustomKey?: string;\n  questionnaireID?: number;\n  showTitle: boolean;\n  onFormValidityChange?: (isValid: boolean) => void;\n  afterSubmit?: () => void;\n  hideButtonOnValidSubmission?: boolean;\n  showSubmitButton?: boolean;\n  questionnaireData?: QuestionnaireModel;\n  questionsData?: QuestionModel[];\n  submitButtonText?: string;\n  forUserID?: number;\n  /**\n   * Set this to true to show one question at a time\n   */\n  oneByOne?: boolean;\n  /**\n   * Set this to true to show the grouped sections (Current Experience, Your LifeStyle, etc) at the top\n   */\n  showProgressBar?: boolean;\n  questionLabelClasses?: string;\n  topClasses?: string;\n  bottomClasses?: string;\n  showCancelButton?: boolean;\n  onCancelClicked?: () => void;\n}\n\nexport interface IFormInput {\n  [key: string]: string | string[];\n}\n\nexport const QuestionnaireComponent: React.FC<QuestionnaireProps> = props => {\n  const questionsFromParent = useMemo(() => {\n    if (!props.questionsData?.length) {\n      return null;\n    }\n    return _.sortBy(props.questionsData, \"SortOrder\");\n  }, [ props.questionsData ]);\n\n  const [ questionnaire, setQuestionnaire ] = useState<QuestionnaireModel>(props.questionnaireData);\n  const [ questions, setQuestions ] = useState<QuestionModel[]>(questionsFromParent);\n  const [ answers, setAnswers ] = useState<AnswerModel[] | null>(null);\n  const [ modifiedAnswers, setModifiedAnswers ] = useState<AnswerModel[]>([]);\n  const [ visibleQuestionID, setVisibleQuestionID ] = useState<number>(props.oneByOne && questionsFromParent\n    ? questionsFromParent[0].ID\n    : -1);\n\n  const questionnaireFactory = useQuestionnaireFactory();\n  const { t } = useTranslation();\n  const { viewState, setRunning, finishRunning } = useViewState();\n  const methods = useForm<IFormInput>({ mode: \"onChange\" });\n  const { formState, handleSubmit, setValue } = methods;\n  const { isValid } = formState;\n\n  const contentRef = useRef(null);\n  const buttonContainerRef = useRef(null);\n\n  const handleScrollToTop = () => {\n    if (contentRef.current) {\n      contentRef.current.scrollTo({\n        top: 0,\n        behavior: \"smooth\"\n      });\n    }\n  };\n\n  const handleNextClick = () => {\n    goToNextQuestion();\n    buttonContainerRef.current.classList.add(\"buttons-hidden\");\n    setTimeout(() => {\n      document.body.classList.add(\"no-scroll\");\n      contentRef.current.classList.add(\"no-scroll\");\n      handleScrollToTop();\n    });\n\n    setTimeout(() => {\n      buttonContainerRef.current.classList.remove(\"buttons-hidden\");\n      document.body.classList.remove(\"no-scroll\");\n      contentRef.current.classList.remove(\"no-scroll\");\n    }, 5);\n  };\n\n  const handleBackClick = () => {\n    goToPreviousQuestion();\n    buttonContainerRef.current.classList.add(\"buttons-hidden\");\n    setTimeout(() => {\n      document.body.classList.add(\"no-scroll\");\n      contentRef.current.classList.add(\"no-scroll\");\n      handleScrollToTop();\n    });\n\n    setTimeout(() => {\n      buttonContainerRef.current.classList.remove(\"buttons-hidden\");\n      document.body.classList.remove(\"no-scroll\");\n      contentRef.current.classList.remove(\"no-scroll\");\n    }, 5);\n  };\n\n  const questionsRequiringAnAnswer = useMemo(() => {\n    if (!questions?.length) {\n      return [];\n    }\n    return questions.filter((q, i) => {\n      const visibleQuestionIndex = questions.findIndex(qu => qu.ID === visibleQuestionID);\n      const thisQuestionsAnswers = answers.filter(a => a.QuestionID === q.ID && a.Active);\n      const thisQuestionIsBeforeVisibleQuestion = i < visibleQuestionIndex;\n      const thisQuestionHasNoAnswers = !thisQuestionsAnswers?.length;\n      if (thisQuestionIsBeforeVisibleQuestion && thisQuestionHasNoAnswers) {\n        // The user skipped it by choosing an Option with a specific FollowUpQuestionID\n        // that was for a question later than the next one at that time\n        return false;\n      }\n      return true;\n    });\n  }, [ answers, questions, visibleQuestionID ]);\n\n  // endIndex is excluded to match typical JavaScript behavior (e.g. .slice)\n  const clearAnswersOfQuestions = (startIndex: number, endIndex: number): void => {\n    const IDsOfQuestionsToClear = questions.slice(startIndex, endIndex).map(q => q.ID);\n    const processAnswerClearing = (answrArr: AnswerModel[]): AnswerModel[] => {\n      if (!answrArr?.length) {\n        return answrArr;\n      }\n      return answrArr.map(a => {\n        if (IDsOfQuestionsToClear.some(id => id === a.QuestionID)) {\n          a.Active = false;\n        }\n        return a;\n      });\n    };\n    setAnswers(processAnswerClearing);\n    setModifiedAnswers(processAnswerClearing);\n  };\n\n  const goToNextQuestion = (): void => {\n    const currentQuestionIndex = questions.findIndex(q => q.ID === visibleQuestionID);\n    const currentQuestion = questions[currentQuestionIndex];\n    const currentQuestionAnswers = answers.filter(a => a.QuestionID === currentQuestion.ID && a.Active);\n    let relevantAnswerOption = currentQuestionAnswers[0]?.Option;\n    if (currentQuestion.TypeKey === ServiceStrings.questionnaire.types.MULTIPLE_CHOICE) {\n      // Code assumes only one of the multiple options will have a FollowUpQuestionID\n      relevantAnswerOption = currentQuestionAnswers.find(a => a.Option?.FollowUpQuestionID)?.Option;\n    }\n    let newVisibleQuestionID: number = -1;\n    if (relevantAnswerOption?.FollowUpQuestionID) {\n      // User chose an option that leads to a specific next question\n      newVisibleQuestionID = relevantAnswerOption.FollowUpQuestionID;\n    } else if (currentQuestion.NextQuestionID) {\n      // No option has a specific next question, so go to next at question level\n      newVisibleQuestionID = currentQuestion.NextQuestionID;\n    } else {\n      // Neither option nor question has a specified follow-up, just go to next in list\n      // questions is already sorted by SortOrder\n      newVisibleQuestionID = questions[currentQuestionIndex + 1].ID;\n    }\n    const userIsSkipping = newVisibleQuestionID !== questions[currentQuestionIndex + 1].ID;\n    if (userIsSkipping) {\n      const newVisibleQuestionIndex = questions.findIndex(q => q.ID === newVisibleQuestionID);\n      clearAnswersOfQuestions(currentQuestionIndex + 1, newVisibleQuestionIndex);\n    }\n    setVisibleQuestionID(newVisibleQuestionID);\n  };\n\n  const goToPreviousQuestion = (): void => {\n    let didSet = false;\n    const currentQuestionIndex = questions.findIndex(q => q.ID === visibleQuestionID);\n    const currentQuestion = questions[currentQuestionIndex];\n    for (let i = currentQuestionIndex - 1; i >= 0; i--) {\n      const prevQuestion = questions[i];\n      if (prevQuestion.NextQuestionID === currentQuestion.ID\n        && answers.some(a => a.QuestionID === prevQuestion.ID && a.Active)\n      ) {\n        setVisibleQuestionID(prevQuestion.ID);\n        didSet = true;\n        break;\n      }\n      const answerForPrevQuestion = answers.find(a => a.QuestionID === prevQuestion.ID && a.Active);\n      const optionForPrevQuestion = answerForPrevQuestion?.Option;\n      const optionFollowUpQuestionID = optionForPrevQuestion?.FollowUpQuestionID;\n      // Clicking an option get him/her to the currently viewed question\n      if (optionFollowUpQuestionID === visibleQuestionID) {\n        setVisibleQuestionID(prevQuestion.ID);\n        didSet = true;\n        break;\n      }\n    }\n    if (!didSet) {\n      const setVisibleQuestionToLastAnswered = (): void => {\n        for (let i = currentQuestionIndex - 1; i >= 0; i--) {\n          const questionWasAnswered = answers.some(a => a.Active && a.QuestionID === questions[i].ID);\n          if (questionWasAnswered) {\n            setVisibleQuestionID(questions[i].ID);\n            break;\n          }\n        }\n      };\n      setVisibleQuestionToLastAnswered();\n    }\n  };\n\n  const setAnswerValuesInForm = (answArr: AnswerModel[], questionArr: QuestionModel[]): void => {\n    questionArr.forEach(q => {\n      const selectedAnswers = answArr.filter(a => a.Active && a.QuestionID === q.ID && a.ID > 0);\n      if (!selectedAnswers?.length) {\n        return;\n      }\n      const controlName = getControlName(q);\n      switch (q.TypeKey) {\n        case ServiceStrings.questionnaire.types.RADIO:\n        case ServiceStrings.questionnaire.types.SELECT:\n        case ServiceStrings.questionnaire.types.BOOLEAN: {\n          const option = q.Options.find(o => o.ID === selectedAnswers[0].OptionID);\n          if (!option) {\n            return;\n          }\n          setValue(controlName, option.ID.toString());\n          break;\n        }\n        case ServiceStrings.questionnaire.types.NUMBER:\n        case ServiceStrings.questionnaire.types.STRING:\n        case ServiceStrings.questionnaire.types.TEXT_AREA: {\n          setValue(controlName, selectedAnswers[0].AdditionalInformation);\n          break;\n        }\n        case ServiceStrings.questionnaire.types.MULTIPLE_CHOICE: {\n          setValue(\n            controlName,\n            selectedAnswers.map(a => a.OptionID.toString())\n          );\n          break;\n        }\n        default: {\n          // Do nothing\n        }\n      }\n    });\n  };\n\n  useEffect(() => {\n    // Answers starts a null, should at least be empty array after useEffect runs once\n    // Prevent running twice so we don't suddenly change the visible question\n    const hasAlreadyRun = Boolean(answers);\n    if ((!props.questionnaireCustomKey && !props.questionnaireID)\n      || !questionnaireFactory\n      || (props.oneByOne && hasAlreadyRun)) {\n      return;\n    }\n\n    if (!props.questionnaireData || !props.questionsData) {\n      setRunning();\n      fetchQuestionsAndAnswers()\n        .then(res => {\n          const answersWithFullOptions = res.answers.map(a => ({\n            ...a,\n            Option: res.questions\n              .find(q => q.ID === a.QuestionID).Options.find(o => o.ID === a.OptionID)\n          }));\n          setAnswers(answersWithFullOptions);\n          const sortedQuestions = _.sortBy(res.questions, \"SortOrder\");\n          setQuestions(sortedQuestions);\n          if (props.oneByOne && sortedQuestions?.length) {\n            setVisibleQuestionID(sortedQuestions[0].ID);\n          }\n          setQuestionnaire(res.questionnaire);\n          setAnswerValuesInForm(res.answers, res.questions);\n          finishRunning();\n        })\n        .catch(err => {\n          finishRunning(true, err);\n        });\n      return;\n    }\n    fetchAnswers(props.questionsData, props.forUserID).then(fetchedAnswers => {\n      const answersWithFullOptions = fetchedAnswers.map(a => ({\n        ...a,\n        Option: props.questionsData\n          .find(q => q.ID === a.QuestionID).Options.find(o => o.ID === a.OptionID)\n      }));\n      setAnswers(answersWithFullOptions);\n      setAnswerValuesInForm(fetchedAnswers, props.questionsData);\n    });\n    // eslint-disable-next-line consistent-return\n    return () => {\n      setAnswers([]);\n      setQuestions([]);\n      setQuestionnaire(null);\n    };\n  }, [\n    props.oneByOne,\n    props.questionnaireCustomKey,\n    props.questionnaireID,\n    questionnaireFactory\n  ]);\n\n  const onSubmit: SubmitHandler<IFormInput> = async (data, event) => {\n    if (!props.showSubmitButton) {\n      return;\n    }\n    try {\n      setRunning();\n      // Don't send answers that are new (ID = 0) and also false.\n      const answersToSend = modifiedAnswers.filter(a => !(!a.Active && !a.ID));\n      await cvApi.questionnaire.SecureCreateOrUpdateAnswers({ Answers: answersToSend });\n      // Fetch saved answers so their generated ID is available to us to check\n      const fetchedAnswers = await fetchAnswers(questions, props.forUserID);\n      setAnswers(fetchedAnswers);\n      if (_.isFunction(props?.afterSubmit)) {\n        props.afterSubmit();\n      }\n      setModifiedAnswers([]);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  };\n\n  const addOrUpdateAnswer = (answer: AnswerModel) => {\n    setAnswers(prevAnswers => {\n      const existingIndex = prevAnswers.findIndex(a => a.OptionID === answer.OptionID);\n      let newAnswers = null;\n      if (existingIndex > -1) {\n        newAnswers = [ ...prevAnswers ];\n        newAnswers[existingIndex] = answer;\n      } else {\n        newAnswers = [ ...prevAnswers, answer ];\n      }\n      setModifiedAnswers(prevModified => {\n        const existingModifiedIndex = prevModified.findIndex(a => a.OptionID === answer.OptionID);\n        let newModifiedAnswers = null;\n        if (existingModifiedIndex > -1) {\n          newModifiedAnswers = [ ...prevModified ];\n          newModifiedAnswers[existingModifiedIndex] = answer;\n        } else {\n          newModifiedAnswers = [ ...prevModified, answer ];\n        }\n\n        return newModifiedAnswers;\n      });\n\n      return newAnswers;\n    });\n  };\n\n  const fetchQuestionnaireByKey = async (): Promise<QuestionnaireModel> => {\n    const questionnaireResult = await questionnaireFactory.getQuestionnaireByKey(props.questionnaireCustomKey);\n    if (!questionnaireResult || !questionnaireResult) {\n      return null;\n    }\n    return questionnaireResult;\n  };\n\n  const fetchQuestionnaireByID = async (): Promise<QuestionnaireModel> => {\n    const questionnaireResult = await questionnaireFactory.getQuestionnaireByID(props.questionnaireID);\n    if (!questionnaireResult) {\n      return null;\n    }\n    return questionnaireResult;\n  };\n\n  const fetchQuestionsAndAnswers = async (): Promise<{\n    answers: AnswerModel[];\n    questions: QuestionModel[];\n    questionnaire: QuestionnaireModel;\n  }> => {\n    // This should have all questions & options\n    const iquestionnaire = props.questionnaireCustomKey\n      ? await fetchQuestionnaireByKey()\n      : await fetchQuestionnaireByID();\n    const fullQuestions = await questionnaireFactory.getQuestions({\n      Active: true,\n      AsListing: true,\n      IDs: iquestionnaire.Questions.map(q => q.ID),\n    });\n    const fetchedAnswers = await fetchAnswers(fullQuestions, props.forUserID);\n    return {\n      answers: fetchedAnswers,\n      questions: fullQuestions,\n      questionnaire: iquestionnaire\n    };\n  };\n\n  const answeredQuestions = useMemo(() => {\n    if (!answers?.length || !questions?.length) {\n      return [];\n    }\n    const activeAnswers = answers.filter(x => x.Active);\n    return questionsRequiringAnAnswer\n      .filter(q => activeAnswers.some(a => a.QuestionID === q.ID));\n  }, [ answers, questions, questionsRequiringAnAnswer, visibleQuestionID ]);\n\n  const formIsValidAndUntouched = (): boolean => {\n    return isValid\n      && modifiedAnswers?.length === 0\n      && answeredQuestions?.length === questions?.length;\n  };\n\n  // formState.submitCount & modifiedAnswers.length are required to recheck validity upon updating form\n  // Submitting the form will change modifiedAnswers to an empty array.\n  // If the form is changed to a valid state but not submitted, we must submit it first.\n  useEffect(() => {\n    if (_.isFunction(props.onFormValidityChange) && answeredQuestions?.length > 0) {\n      props.onFormValidityChange(formIsValidAndUntouched());\n    }\n  }, [ answeredQuestions, isValid, formState.submitCount ]);\n\n  const visibleQuestionHasBeenAnswered = answers && answers.some(a => a.QuestionID === visibleQuestionID && a.Active);\n  const isViewingFirstQuestion = useMemo(() => {\n    if (!questions?.length) {\n      // Disable next until questions are loaded\n      return true;\n    }\n    return visibleQuestionID === questions[0].ID;\n  }, [ visibleQuestionID, questions ]);\n  const isViewingLastQuestion = useMemo(() => {\n    if (!questions?.length) {\n      // Disable next until questions are loaded\n      return true;\n    }\n    return visibleQuestionID === questions[questions.length - 1].ID;\n  }, [ visibleQuestionID, questions ]);\n\n  const onError = () => {\n    console.error(\"Form errors:\", formState.errors);\n  };\n\n  if (viewState.running && !viewState.hasError) {\n    return <LoadingWidget overlay={true} />;\n  }\n\n  if (!_.isArray(questions)) {\n    return null;\n  }\n\n  return (\n    <FormProvider {...methods}>\n      {questionnaire && props.showTitle && (\n        <h1>{questionnaire.Description ?? questionnaire.Name ?? questionnaire.CustomKey}</h1>\n      )}\n      {props.showProgressBar && (\n        <QuestionnaireProgressBar\n          questions={questions}\n          visibleQuestionID={visibleQuestionID}\n        />\n      )}\n      <Form onSubmit={handleSubmit(onSubmit, onError)} className=\"position-relative\">\n        <div className=\"top-bottom-wrapper\" ref={contentRef}>\n          <div className={`questionnaire-component-top ${props.topClasses || \"\"}`}>\n            {answers && (\n              <AnswerContext.Provider value={{ answers, addOrUpdateAnswer, createAnswer }}>\n                {questionsRequiringAnAnswer\n                  .map(question => {\n                    return (\n                      <div\n                        className={props.oneByOne && question.ID !== visibleQuestionID\n                          ? \"d-none\"\n                          : \"active-question text-center\"\n                        }\n                        key={question.ID}>\n                        <Question\n                          autoFocus={question.ID === visibleQuestionID}\n                          question={question}\n                          disabled={!props.showSubmitButton}\n                          questionLabelClasses={props.questionLabelClasses}\n                          isVisible={props.oneByOne\n                            ? question.ID === visibleQuestionID\n                            : true}\n                        />\n                      </div>\n                    );\n                  })}\n              </AnswerContext.Provider>\n            )}\n          </div>\n\n          <div className={`questionnaire-component-bottom ${props.bottomClasses || \"\"}`}>\n            <div className=\"d-flex gap-2 justify-content-between align-items-center button-container\"\n              ref={buttonContainerRef}>\n              <div>\n                {props.showCancelButton && (\n                  <Button\n                    className=\"bg-transparent border-0 cancel-btn\"\n                    onClick={() => {\n                      props.onCancelClicked();\n                    }}>\n                    {t(\"ui.storefront.common.Cancel\", \"Cancel\")} and {t(\"ui.storefront.common.Close\", \"Close\")}\n                  </Button>\n                )}\n              </div>\n              <div>\n                {props.oneByOne && (\n                  <div className=\"d-flex justify-content-between\">\n                    {!isViewingFirstQuestion && (\n                      <Button\n                        variant=\"outline-secondary\"\n                        className=\"btn-lg rounded-pill px-5 py-3 mx-1 border-2\"\n                        disabled={!questions || isViewingFirstQuestion}\n                        onClick={() => {\n                          handleBackClick();\n                        }}>\n                        <div className=\"d-flex gap-3 align-items-center\">\n                          <i className=\"fa-solid fa-arrow-left\"/>\n                          <span>\n                          Back\n                          </span>\n                        </div>\n                      </Button>\n                    )}\n                    <Button\n                      type=\"submit\"\n                      className={isViewingLastQuestion && props.showSubmitButton\n                        ? \"next-btn border-0 align-items-center bg-brand-orange d-inline-flex btn-lg rounded-pill px-5 py-3 mx-1\" : \"d-none\"}\n                      disabled={!isValid || answeredQuestions.length !== questionsRequiringAnAnswer.length}\n                    >\n                      {props.submitButtonText ?? t(\"ui.storefront.common.Submit\", \"Submit\")}\n                    </Button>\n                    <Button\n                      className={`next-btn border-0 align-items-center bg-brand-orange\n                       ${isViewingLastQuestion ? \"d-none\" : \"d-inline-flex btn-lg rounded-pill px-5 py-3 mx-1\"}`}\n                      disabled={!visibleQuestionHasBeenAnswered}\n                      onClick={() => {\n                        handleNextClick();\n                      }}>\n                      <div className=\"d-flex gap-3 align-items-center\">\n                        <span>\n                          Next\n                        </span>\n                        <i className=\"fa-solid fa-arrow-right\"/>\n                      </div>\n\n                    </Button>\n                  </div>\n                )}\n                {!props.oneByOne\n                && props.showSubmitButton\n                && !props.hideButtonOnValidSubmission\n                && !formIsValidAndUntouched()\n                && (\n                  <Button\n                    type=\"submit\"\n                    variant=\"primary\"\n                    disabled={!isValid || answeredQuestions.length !== questionsRequiringAnAnswer.length}\n                    className=\"w-100 mt-4\">\n                    {props.submitButtonText ?? t(\"ui.storefront.common.Submit\", \"Submit\")}\n                  </Button>\n                )}\n              </div>\n            </div>\n            {!props.showSubmitButton && formState.isDirty && (\n              <Alert\n                variant={isValid ? \"success\" : \"danger\"}\n                className=\"mt-3\">\n                {isValid\n                  ? t(\"ui.storefront.common.Valid\", \"Valid\")\n                  : t(\"ui.storefront.common.Invalid\", \"Invalid\")\n                }\n              </Alert>\n            )}\n          </div>\n        </div>\n      </Form>\n      <ErrorView viewState={viewState} />\n    </FormProvider>\n  );\n};\n\nQuestionnaireComponent.defaultProps = {\n  showSubmitButton: true\n};\n","import { useState } from \"react\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { QuestionModel, QuestionnaireModel } from \"src/_api/cvApi._DtoClasses\";\nimport { GetQuestionsDto } from \"src/_api/cvApi.Questionnaire\";\nimport { getDtoAsPromiserKeyFragment } from \"../common/Formatters\";\n\ninterface IQuestionnaireFactory {\n  getQuestionnaireByID: (id: number, force?: boolean) => Promise<QuestionnaireModel>;\n  getQuestionnaireByKey: (customKey: string, force?: boolean) => Promise<QuestionnaireModel>;\n  getQuestions: (dto: GetQuestionsDto, force?: boolean) => Promise<QuestionModel[]>;\n}\n\nexport const useQuestionnaireFactory = (): IQuestionnaireFactory => {\n  const [ questionnaireFactory ] = useState<IQuestionnaireFactory>({\n    getQuestionnaireByID: async (id: number, force: boolean): Promise<QuestionnaireModel> => {\n      const promiserKey = `questionnaireFactory:getQuestionnaireByID:${id}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.questionnaire.GetQuestionnaireByID(id)\n      );\n      return res.data;\n    },\n    getQuestionnaireByKey: async (customKey: string, force: boolean): Promise<QuestionnaireModel> => {\n      const promiserKey = `questionnaireFactory:getQuestionnaireByKey:${customKey}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.questionnaire.GetQuestionnaireByKey(customKey)\n      );\n      return res.data;\n    },\n    getQuestions: async (dto: GetQuestionsDto, force?: boolean): Promise<QuestionModel[]> => {\n      const promiserKey = `questionnaireFactory:getQuestions:${getDtoAsPromiserKeyFragment(dto)}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.questionnaire.GetQuestions(dto)\n      );\n      if (!res?.data) {\n        throw new Error(\"Failed to fetch questions\");\n      }\n      return res.data.Results;\n    }\n  });\n\n  return questionnaireFactory;\n};\n","import { PropsWithChildren, useState } from \"react\";\nimport { QuestionnaireComponent } from \"src/Questionnaire/QuestionnaireComponent\";\nimport { Modal } from \"src/_shared/modals/Modal\";\nimport { useAddToCartModalContext } from \"../AddToCartModalContext\";\nimport { QuestionnaireModalHeader } from \"./QuestionnaireModalHeader\";\n\ninterface IQuestionnaireModalProps {\n  show: boolean;\n  onCancel: () => void;\n}\n\nexport const QuestionnaireModal = (props: PropsWithChildren<IQuestionnaireModalProps>): JSX.Element => {\n  const { show, onCancel } = props;\n\n  const { actionIndex, messages, proceed } = useAddToCartModalContext();\n\n  const currentAction = messages?.filter(x => x?.startsWith(\"ACTION_\"))[actionIndex];\n  const actionArgument = currentAction.split(\" \")[1];\n\n  return <Modal\n    show={show}\n    onCancel={onCancel}\n    CustomHeader={() => <QuestionnaireModalHeader />}\n    headerClasses=\"justify-content-center border-0 mb-5 mt-2\"\n    modalClasses=\"atc-questionnaire-modal\"\n    modalBodyClasses=\"\"\n    hideCloseButton={true}\n    backdrop=\"static\">\n    {props.children}\n\n    <div className=\"py-2\">\n      <QuestionnaireComponent\n        key={actionArgument}\n        showTitle={false}\n        oneByOne={true}\n        showCancelButton={true}\n        onCancelClicked={onCancel}\n        topClasses=\"\"\n        bottomClasses=\"\"\n        questionnaireCustomKey={actionArgument}\n        afterSubmit={() => proceed({ [`Questionnaire${actionArgument}`]: \"true\" })}\n        questionLabelClasses=\"text-center fs-1 fw-semibold mt-4\n         question-label\"\n        showProgressBar={true}\n      />\n    </div>\n\n  </Modal>;\n};\n","/* eslint-disable max-len */\nimport { PropsWithChildren, useEffect, useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { Modal } from \"src/_shared/modals/Modal\";\nimport { useStoredFileTypes } from \"src/_shared/customHooks/useStoredFileTypes\";\nimport { FileUploadWidget } from \"src/_shared/common/FileUploadWidget\";\nimport { FileEntityType } from \"src/_api/cvApi._DtoClasses\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useAddToCartModalContext } from \"../AddToCartModalContext\";\nimport { isFileAcceptable } from \"src/_shared/common/Helpers\";\nimport { QuestionnaireModalHeader } from \"./QuestionnaireModalHeader\";\n\ninterface IUploadIDModalProps {\n  show: boolean;\n  onCancel: () => void;\n}\n\nconst acceptableFileTypes = [ \"image/jpg\", \"image/jpeg\", \"image/png\" ];\n\nexport const UploadIDModal = (props: PropsWithChildren<IUploadIDModalProps>): JSX.Element => {\n  const { show, onCancel } = props;\n\n  const { storedFileTypes, useStoredFileTypesViewState } = useStoredFileTypes();\n\n  const { t } = useTranslation();\n  const { alterCanProceed, canProceed, proceed } = useAddToCartModalContext();\n  const [ screenSize, setScreenSize ] = useState(\"\");\n\n  useEffect(\n    () => {\n      const screenWidth = window.innerWidth;\n      if (screenWidth < 768) {\n        setScreenSize(\"small-screen\");\n      } else {\n        setScreenSize(\"large-screen\");\n      }\n    }\n    , [ window.innerWidth ]\n  );\n\n  const checkmark = <svg xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"25pt\"\n    height=\"25pt\"\n    version=\"1.1\"\n    viewBox=\"0 0 100 100\"\n    className=\"upload-checkmark\">\n    <path d=\"m89.398 19.801c0.14453-0.1875 0.27734-0.38672 0.39453-0.59375l0.14062-0.21094-0.027344-0.015625c0.30859-0.63672 0.48828-1.3477 0.48828-2.1016 0-2.6523-2.1484-4.8008-4.8008-4.8008-1.5508 0-2.9297 0.73828-3.8047 1.8828l-42.012 53.281-20.277-17.492c-0.26562-0.28125-0.55859-0.53125-0.875-0.75391l-0.027344-0.023438c-0.92578-0.63672-2.0469-1.0156-3.2539-1.0156-3.168 0-5.7383 2.5703-5.7383 5.7383 0 1.4375 0.53516 2.75 1.4102 3.7578l-0.003906 0.003906 25.512 28.164c1.0469 1.3945 2.7109 2.3008 4.5898 2.3008 1.8789 0 3.5391-0.90625 4.5859-2.3008h0.003906l0.027344-0.039063c0.11328-0.15234 0.21484-0.30859 0.3125-0.47266z\"/>\n  </svg>;\n\n  return <Modal\n    show={show}\n    onCancel={onCancel}\n    modalClasses=\"atc-questionnaire-modal\"\n    modalBodyClasses=\"d-flex flex-column align-items-center\"\n    CustomHeader={() => <QuestionnaireModalHeader />}\n    headerClasses=\"justify-content-center border-0\"\n    hideCloseButton={true}\n    backdrop=\"static\">\n      <div className=\"upload-container d-flex flex-column align-items-center\">\n    {props.children}\n    <h1 className=\"alt-font mb-0\">Upload ID</h1>\n    <p className=\"text-primary fs-5\">*Required</p>\n    <p className=\"upload-text fs-3 pt-3 py-2 text-center\">Let's confirm your identity so a provider can approve you.</p>\n    {useStoredFileTypesViewState.hasError && <ErrorView viewState={useStoredFileTypesViewState} />}\n    <div className=\"d-flex align-items-center\">\n      <FileUploadWidget\n        inputContainerClassName={screenSize}\n        allowMultiple={false}\n        uploadType={FileEntityType.StoredFileAccount}\n        storedFileType={storedFileTypes?.find(x => x.Name.toLowerCase() === \"driver's license\")}\n        uploadCallback={(items: string[]) => {\n          if (!items?.length) {\n            alterCanProceed(false);\n            return;\n          }\n          const fileIsAcceptable = isFileAcceptable(acceptableFileTypes, items[0]);\n          alterCanProceed(fileIsAcceptable);\n        }}\n        acceptableFileTypes={acceptableFileTypes}\n      />\n    </div>\n    <div className=\"my-4\">\n        <div className=\"fs-5 text-black text-nowrap mt-2\">\n          {checkmark}\n          Not blurry, faint, or indecipherable\n        </div>\n        <div className=\"fs-5 text-black text-nowrap mt-2\">\n          {checkmark}\n          Not cut off or missing information\n        </div>\n        <div className=\"fs-5 text-black text-nowrap mt-2\">\n          {checkmark}\n          Not expired\n        </div>\n        <div className=\"fs-5 text-black text-nowrap mt-2\">\n          {checkmark}\n          Government issued\n        </div>\n      </div>\n      <Button\n        className=\"submit-btn submit-btn-upload btn btn-brand-orange btn-lg\n       rounded-pill px-5 py-2 mx-1 fs-4\"\n        disabled={!canProceed}\n        onClick={() => {\n          if (canProceed) {\n            window.dataLayer = window.dataLayer || [];\n            window.dataLayer.push({\n              event: \"id_uploaded\"\n            });\n          }\n          proceed({ IDComplete: \"true\" });\n        } }>\n      Submit ID\n    </Button>\n    <p className=\"text-center fs-6 my-4 upload-text \">By clicking the \"SUBMIT\" button above, I confirm my identity and agree to submit my photos for identity verification, which may include the use of facial recognition technology by a third-party vendor.</p>\n    <p className=\"text-center fs-6 my-2 upload-text \">MangoRx never receives or collects biometric information. For more information see our <a className=\"text-primary text-decoration-underline\" href=\"https://mangorx.com/privacy-policy\">Privacy Policy</a></p>\n      <button\n        className=\"cancel-btn py-3 mx-1 border-0 align-self-start\"\n        onClick={() => {\n          onCancel();\n        }}>\n            Cancel & Close\n      </button>\n    </div>\n\n    <footer className=\"upload-footer bg-black d-flex flex-column align-items-center gap-1\">\n      <p className=\"fs-6 text-primary mb-0\">Having trouble?{\" \"}<span className=\"text-white\">Email a copy of your ID to</span></p>\n      <p className=\"fs-6 text-white mb-0\"><a href=\"mailto\" className=\"text-primary text-decoration-underline\">support@mangorx.com</a>{\" \"}to avoid any delays.</p>\n    </footer>\n  </Modal>;\n};\n","/* eslint-disable max-len */\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { CartMessages } from \"src/_shared/common/CartMessages\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport {\n  BloodworkModal,\n  CancelPrescriptionModal,\n  GeneralQuestionnaireModal,\n  NoFurtherActionsModal,\n  QuestionnaireModal,\n  UploadIDModal\n} from \"./ActionModals\";\nimport { AddToCartModalContextProvider, useAddToCartModalContext } from \"./AddToCartModalContext\";\nimport { useEffect, useState } from \"react\";\n\ninterface IAddToCartModalBodyProps {\n  onCancel: () => void;\n  cartTypeName: string;\n  closeMedicalForm?: () => void;\n}\n\nconst AddToCartModalBody = (props: IAddToCartModalBodyProps): JSX.Element => {\n  const { onCancel, cartTypeName, closeMedicalForm } = props;\n\n  const [ modifiedMessages, setModifiedMessages ] = useState<string[]>([]);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const history = useHistory();\n  const { actionIndex, messages, product, show } = useAddToCartModalContext();\n\n  const isForQuoteCart = cartTypeName === ServiceStrings.carts.types.quote;\n\n  const onViewCartClicked = () => {\n    if (isForQuoteCart) {\n      history.push(corsLink(cefConfig, cefConfig.routes.quoteCart.root, \"quoteCart\"));\n    } else {\n      history.push(corsLink(cefConfig, cefConfig.routes.cart.root, \"cart\"));\n    }\n    history.go(0);\n  };\n\n  const onContinueShoppingClicked = () => {\n    onCancel();\n  };\n\n  const actions = messages?.filter(x => x?.startsWith(\"ACTION_\"));\n  const actualMessages = messages?.filter(x => !x?.startsWith(\"ACTION_\"));\n\n  useEffect(() => {\n    if (actualMessages?.includes(\"ERROR! You must purchase the initial Prime product before purchasing the follow-up.\")) {\n      if (product.Name.toLowerCase().includes(\"mojo\")) {\n      // eslint-disable-next-line quotes\n        setModifiedMessages(actualMessages.map(message => (message === \"ERROR! You must purchase the initial Prime product before purchasing the follow-up.\" ? `ERROR! You must purchase the initial Mojo product before purchasing the follow-up.` : message)));\n      }\n      setTimeout(\n        () => {\n          onCancel();\n        }\n        , 5000\n      );\n    }\n  }, []);\n\n  if (!product) {\n    return <div className=\"d-none\"></div>;\n  }\n\n  if (isForQuoteCart) {\n    // This code is untested, MANGO is not using the quote cart as of 06/24/2024\n    return (\n      <ConfirmationModal\n        title={t(\n          isForQuoteCart ? \"ui.storefront.carts.AddToQuoteCartModalTitle\" : \"ui.storefront.carts.AddToCartModalTitle\"\n        )}\n        show={show}\n        confirmBtnLabel={t(\"ui.storefront.cart.ViewCart\")}\n        cancelBtnLabel={actions?.length ? null : t(\"ui.storefront.cart.continueShopping\")}\n        onConfirm={onViewCartClicked}\n        onCancel={onContinueShoppingClicked}\n        confirmBtnSID=\"AddToCartModalGoToCart\"\n        cancelBtnSID=\"btnAddToCartModalContinueShopping\"\n        size=\"lg\"\n        hideFooter={Boolean(actions?.length)}\n        confirmButton={actions?.length ? <></> : null}>\n        <Row>\n          {!Boolean(actions?.length) && (\n            <div className={product ? \"col-12\" : \"hide\"}>\n              <Row>\n                <Col xs={12} sm={4}>\n                  <ImageWithFallback\n                    className=\"img-fluid d-block mx-auto\"\n                    alt={product.Name}\n                    src={product.PrimaryImageFileName}\n                    imageResizerParamsBody={{\n                      maxwidth: 200,\n                      maxheight: 200,\n                      scale: \"both\",\n                      mode: \"pad\"\n                    }}\n                  />\n                </Col>\n                <Col xs={12} sm={8}>\n                  <h4\n                    className=\"cef-confirmation-add-cart-title\"\n                    id=\"AddToCartModalProductText\"\n                    data-sid=\"AddToCartModalProductText\">\n                    {product.Name}\n                  </h4>\n                </Col>\n              </Row>\n            </div>\n          )}\n          {actualMessages?.length && (\n            <div className=\"col-12 pt-2\">\n              <CartMessages\n                messages={actualMessages}\n              />\n            </div>\n          )}\n        </Row>\n      </ConfirmationModal>\n    );\n  }\n\n  if (!actions?.length) {\n    // Return OOB modal\n    return null;\n    // return (\n    //   <NoFurtherActionsModal\n    //     onConfirm={onViewCartClicked}\n    //     onCancel={onContinueShoppingClicked}\n    //   />\n    // );\n  }\n\n  const currentAction = actions[actionIndex];\n  const [ actionName ] = currentAction.split(\" \");\n\n  // Determine action type\n  switch (actionName) {\n    case \"ACTION_GENERAL_QUESTIONNAIRE\": {\n      return (\n        <GeneralQuestionnaireModal\n          show={show}\n          onCancel={onCancel}\n          closeMedicalForm={closeMedicalForm}\n          productID={product?.ID}\n        >\n          {Boolean(actualMessages?.length) && (\n            <Col xs={12} className=\"pt-2\">\n              <CartMessages\n                messages={modifiedMessages && modifiedMessages.length ? modifiedMessages : actualMessages}\n              />\n            </Col>\n          )}\n        </GeneralQuestionnaireModal>\n      );\n    }\n    case \"ACTION_QUESTIONNAIRE\": {\n      return (\n        <QuestionnaireModal show={show} onCancel={onCancel}>\n          {Boolean(actualMessages?.length) && (\n            <Col xs={12} className=\"pt-2\">\n              <CartMessages messages={actualMessages} />\n            </Col>\n          )}\n        </QuestionnaireModal>\n      );\n    }\n    case \"ACTION_BLOODWORK\": {\n      return (\n        <BloodworkModal show={show} onCancel={onCancel}>\n          {Boolean(actualMessages?.length) && (\n            <Col xs={12} className=\"pt-2\">\n              <CartMessages messages={actualMessages} />\n            </Col>\n          )}\n        </BloodworkModal>\n      );\n    }\n    case \"ACTION_ID\": {\n      return (\n        <UploadIDModal show={show} onCancel={onCancel}>\n          {Boolean(actualMessages?.length) && (\n            <Col xs={12} className=\"pt-2\">\n              <CartMessages messages={actualMessages} />\n            </Col>\n          )}\n        </UploadIDModal>\n      );\n    }\n    case \"ACTION_CANCEL_PRESCRIPTION\": {\n      return (\n        <CancelPrescriptionModal show={show} onCancel={onCancel}>\n          {Boolean(actualMessages?.length) && (\n            <Col xs={12} className=\"pt-2\">\n              <CartMessages messages={actualMessages} />\n            </Col>\n          )}\n        </CancelPrescriptionModal>\n      );\n    }\n    default: {\n      return <span>Server returned an unknown action.</span>;\n    }\n  }\n};\n\ninterface IAddToCartModalProps {\n  product: ProductModel;\n  masterProduct?: ProductModel;\n  show: boolean;\n  onCancel: () => void;\n  messages?: string[];\n  cartTypeName: string;\n  onRetry?: (attributes: Record<string, string>) => void;\n  closeMedicalForm?: () => void;\n}\n\nexport const AddToCartModal = (props: IAddToCartModalProps): JSX.Element => {\n  const retryAddToCart = (attrs: Record<string, string>) => {\n    if (props.onRetry) {\n      props.onRetry(attrs);\n    }\n  };\n\n  return (\n    <AddToCartModalContextProvider\n      show={props.show}\n      retryAddToCart={retryAddToCart}\n      messages={props.messages}\n      product={props.product}\n      masterProduct={props.masterProduct}\n      isPrimeOrMojo={props.masterProduct?.Name.includes(\"Prime\") || props.masterProduct?.Name.includes(\"Mojo\")}>\n      <AddToCartModalBody\n        cartTypeName={props.cartTypeName}\n        onCancel={props.onCancel}\n        closeMedicalForm={props.closeMedicalForm}\n      />\n    </AddToCartModalContextProvider>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Alert, Anchor, Col, Row } from \"react-bootstrap\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\ninterface IAddAllToCartModalProps {\n  show: boolean;\n  onConfirm?: Function;\n  onCancel: Function;\n  messages?: string[];\n  cartType?: string;\n}\n\nexport const AddAllToCartModal = (\n  props: IAddAllToCartModalProps\n): JSX.Element => {\n  const { cartType, messages, onCancel, onConfirm, show } = props;\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  const isForQuoteCart = cartType === ServiceStrings.carts.types.quote;\n\n  const onContinueShoppingClicked = () => {\n    onCancel();\n  };\n\n  return (\n    <ConfirmationModal\n      title={isForQuoteCart ? \"Add to Quote Cart Result\" : \"Add to Cart Result\"}\n      show={show}\n      confirmBtnLabel={t(onConfirm ? \"Okay\" : \"ui.storefront.cart.ViewCart\")}\n      cancelBtnLabel={t(\"ui.storefront.cart.continueShopping\")}\n      confirmButton={<Anchor\n        className=\"btn btn-primary\"\n        href={corsLink(cefConfig, \"/\", isForQuoteCart ? \"quoteCart\" : \"cart\")}>\n        {t(\"ui.storefront.cart.ViewCart\")}\n      </Anchor>}\n      onCancel={onContinueShoppingClicked}\n      size=\"md\">\n      <Row>\n        {messages?.length\n          ? <Col xs={12}>\n            {messages.map((msg: string, index: number) => {\n              let alertClass = \"info\";\n              const [ firstWord ] = msg.split(\" \");\n              switch (firstWord.toUpperCase()) {\n                case \"ERROR\": {\n                  alertClass = \"danger\";\n                  break;\n                }\n                case \"WARNING\": {\n                  alertClass = \"warning\";\n                  break;\n                }\n                default: {\n                  break;\n                }\n              }\n              return (\n                <Alert\n                  variant={alertClass}\n                  key={msg}\n                  id={`AddAllToCartModalText_${index}`}\n                  className={index === messages.length - 1 ? \"mb-0\" : \"\"}>\n                  {msg}\n                </Alert>\n              );\n            })}\n          </Col>\n          : null}\n      </Row>\n    </ConfirmationModal>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\n\ninterface IRemoveFromCartModalProps {\n  productName: string;\n  show: boolean;\n  onConfirm: Function;\n  onCancel: Function;\n  cancelBtnLabel?: string;\n  parentRunning?: boolean;\n  cartTypeText: string;\n}\n\nexport const RemoveFromCartModal = (props: IRemoveFromCartModalProps): JSX.Element => {\n  const { productName, show, onConfirm, onCancel, cancelBtnLabel, parentRunning, cartTypeText } = props;\n  const { t } = useTranslation();\n\n  return (\n    <ConfirmationModal\n      title={t(\"ui.storefront.common.RemoveItem\")}\n      show={show}\n      confirmBtnLabel={t(\"ui.storefront.common.RemoveItem\")}\n      confirmBtnVariant=\"danger\"\n      confirmBtnSID=\"removeFromCartConfirmationModalConfirm\"\n      confirmDisabled={parentRunning}\n      cancelBtnLabel={cancelBtnLabel ?? t(\"ui.storefront.cart.continueShopping\")}\n      onConfirm={onConfirm}\n      onCancel={onCancel}\n      size=\"md\">\n      <p id=\"lbRFCMContent\">\n        <span>{t(\"ui.storefront.cart.AreYouSureYouWantToRemove\")}</span>\n        &nbsp;\n        <b>{productName}</b>&nbsp; from&nbsp;\n        <b>{cartTypeText}</b>?\n      </p>\n      {parentRunning && <LoadingWidget overlay={true} />}\n    </ConfirmationModal>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"primary\":\"#f28522\",\"secondary\":\"#2e2e2e\",\"success\":\"#5d9627\",\"info\":\"#17a2b8\",\"warning\":\"#ffc107\",\"danger\":\"#dc3544\",\"primaryDark\":\"#ed780e\",\"secondaryDark\":\"#212121\",\"successDark\":\"#508222\",\"infoDark\":\"#148ea1\",\"warningDark\":\"#edb100\",\"dangerDark\":\"#d32534\",\"light\":\"#f4f5f5\",\"medium\":\"#ced4da\",\"dark\":\"#1e242b\",\"white\":\"#fff\",\"blue\":\"#357bff\",\"indigo\":\"#6610f2\",\"purple\":\"#6f42c1\",\"pink\":\"#e6717c\",\"red\":\"#dc3544\",\"orange\":\"#f28522\",\"yellow\":\"#ffc107\",\"green\":\"#5d9627\",\"teal\":\"#20c997\",\"cyan\":\"#17a2b8\",\"greenFade\":\"#ddf1cb\",\"darkBlue\":\"#153166\",\"tableBorderColor\":\"#ddd\",\"brand-orange\":\"#f28522\",\"gridBreakpointxs\":\"0\",\"gridBreakpointsm\":\"576px\",\"gridBreakpointmd\":\"768px\",\"gridBreakpointlg\":\"992px\",\"gridBreakpointxl\":\"1200px\",\"gridBreakpointtk\":\"2000px\",\"gridBreakpointfk\":\"3000px\",\"boxShadowSm\":\"0 .125rem .25rem rgba(26,27,27,.075)\"};","import { useState } from \"react\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { getDtoAsPromiserKeyFragment } from \"src/_shared/common/Formatters\";\nimport { NotePagedResults, NoteTypePagedResults } from \"src/_api/cvApi._DtoClasses\";\nimport { CreateSecurePatientNoteAsDoctorDto, GetNotesDto, GetNoteTypesDto } from \"src/_api/cvApi.Structure\";\n\ninterface INoteFactory {\n  createNote: (dto: CreateSecurePatientNoteAsDoctorDto) => Promise<void>;\n  getNotes: (dto: GetNotesDto, force?: boolean) => Promise<NotePagedResults>;\n  getNoteTypes: (dto?: GetNoteTypesDto) => Promise<NoteTypePagedResults>;\n}\n\nexport const useNoteFactory = (): INoteFactory => {\n  const [ noteFactory ] = useState<INoteFactory>({\n    createNote: async (dto: CreateSecurePatientNoteAsDoctorDto): Promise<void> => {\n      await cvApi.structure.CreateSecurePatientNoteAsDoctor(dto);\n      return null;\n    },\n    getNotes: async (dto: GetNotesDto, force?: boolean): Promise<NotePagedResults> => {\n      const promiserKey = `noteFactory:getNotes:${getDtoAsPromiserKeyFragment(dto)}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        // TODO: update to secure endpoint\n        () => cvApi.structure.GetNotes(dto)\n      );\n      if (!res?.data?.Results) {\n        throw new Error(\"Failed to fetch notes\");\n      }\n      return res.data;\n    },\n    getNoteTypes: async (dto: GetNoteTypesDto = {\n      Active: true,\n      AsListing: true,\n    }): Promise<NoteTypePagedResults> => {\n      const promiserKey = `noteFactory:getNoteTypes:${getDtoAsPromiserKeyFragment(dto)}`;\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.structure.GetNoteTypes(dto)\n      );\n      if (!res?.data?.Results) {\n        throw new Error(\"Failed to fetch note types\");\n      }\n      return res.data;\n    },\n  });\n\n  return noteFactory;\n};\n","import { useEffect, useState } from \"react\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { NotePagedResults, StoredFilePagedResults } from \"src/_api/cvApi._DtoClasses\";\nimport { useNoteFactory } from \"src/_shared/customHooks/useNoteFactory\";\nimport { useStoredFilesFactory } from \"src/_shared/customHooks/useStoredFilesFactory\";\n\ninterface IPatientFactory {\n  getPatient: (id: number, force?: boolean) => Promise<UserModel>;\n  getPatientBloodworkFiles: (patientAccountID: number, force?: boolean) => Promise<StoredFilePagedResults>;\n  getPatientFiles: (patientUserID: number, force?: boolean) => Promise<StoredFilePagedResults>;\n  getPatientNotes: (patientAccountID: number, force?: boolean) => Promise<NotePagedResults>;\n  getDoctorNotesForPatient: (patientAccountID: number, force?: boolean) => Promise<NotePagedResults>;\n}\n\nexport const usePatientFactory = (): IPatientFactory => {\n  const [ patientFactory, setPatientFactory ] = useState<IPatientFactory>(null);\n\n  const noteFactory = useNoteFactory();\n  const storedFilesFactory = useStoredFilesFactory();\n\n  useEffect(() => {\n    if (!noteFactory || !storedFilesFactory) {\n      return;\n    }\n    setPatientFactory({\n      getPatient: async (id: number, force?: boolean): Promise<UserModel> => {\n        const promiserKey = `patientFactory:getPatient:${id}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          // TODO: update to secured endpoint\n          () => cvApi.contacts.GetUserByID(id)\n        );\n        if (!res?.data?.ID) {\n          throw new Error(\"Failed to fetch patient\");\n        }\n        return res.data;\n      },\n      getPatientBloodworkFiles: async (patientAccountID: number, force?: boolean): Promise<StoredFilePagedResults> => {\n        const promiserKey = `patientFactory:getPatientBloodworkFiles:${patientAccountID}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const types = await storedFilesFactory.getStoredFileTypes({ Active: true, AsListing: true });\n        const bloodWorkType = types.find(t => t.Name.toLowerCase() === \"bloodwork\");\n        const filesRes = await storedFilesFactory.getStoredFiles({\n          AccountID: patientAccountID,\n          Active: true,\n          AsListing: true,\n          TypeID: bloodWorkType.ID,\n        });\n        return filesRes;\n      },\n      getPatientFiles: async (patientAccountID: number, force?: boolean): Promise<StoredFilePagedResults> => {\n        const promiserKey = `patientFactory:getPatientFiles:${patientAccountID}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const files = await promiser.resolve(\n          promiserKey,\n          () => storedFilesFactory.getStoredFiles({\n            AccountID: patientAccountID,\n            Active: true,\n            ExcludedTypeName: \"Bloodwork\"\n          })\n        );\n        return files;\n      },\n      getPatientNotes: async (patientAccountID: number, force?: boolean): Promise<NotePagedResults> => {\n        const promiserKey = `patientFactory:getPatientNotes:${patientAccountID}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const noteTypes = await noteFactory.getNoteTypes();\n        const patientNoteType = noteTypes.Results.find(t => t.Name.toLowerCase() === \"patient\");\n        if (!patientNoteType) {\n          throw new Error(\"Cannot find patient note type\");\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          // TODO: update to secured endpoint\n          () => cvApi.structure.GetNotes({\n            AccountID: patientAccountID,\n            TypeID: patientNoteType.ID,\n            TypeKey: patientNoteType.CustomKey,\n          })\n        );\n        if (!res?.data) {\n          throw new Error(\"Failed to fetch patient notes\");\n        }\n        return res.data;\n      },\n      getDoctorNotesForPatient: async (patientAccountID: number, force?: boolean): Promise<NotePagedResults> => {\n        const promiserKey = `patientFactory:getDoctorNotesForPatient:${patientAccountID}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const noteTypes = await noteFactory.getNoteTypes({\n          Active: true,\n          AsListing: true\n        });\n        const doctorNoteType = noteTypes.Results.find(t => t.Name.toLowerCase() === \"doctor\");\n        if (!doctorNoteType) {\n          throw new Error(\"Cannot find doctor note type\");\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          // TODO: update to secured endpoint\n          () => cvApi.structure.GetNotes({\n            AccountID: patientAccountID,\n            TypeID: doctorNoteType.ID,\n            TypeKey: doctorNoteType.CustomKey,\n          })\n        );\n        if (!res?.data) {\n          throw new Error(\"Failed to fetch patient notes\");\n        }\n        return res.data;\n      }\n    });\n  }, [ noteFactory, storedFilesFactory ]);\n\n  return patientFactory;\n};\n","import { useState } from \"react\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { getDtoAsPromiserKeyFragment } from \"src/_shared/common/Formatters\";\nimport { StoredFilePagedResults, TypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { GetStoredFilesDto, GetStoredFileTypesDto } from \"src/_api/cvApi.Media\";\n\ninterface IStoredFilesFactory {\n  getStoredFileTypes: (dto?: GetStoredFileTypesDto, force?: boolean) => Promise<TypeModel[]>;\n  getStoredFiles: (dto: GetStoredFilesDto, force?: boolean) => Promise<StoredFilePagedResults>;\n}\n\nexport const useStoredFilesFactory = (): IStoredFilesFactory => {\n  const [ storedFilesFactory ] = useState<IStoredFilesFactory>({\n    getStoredFileTypes: async (\n      dto: GetStoredFileTypesDto = { Active: true, AsListing: true },\n      force: boolean = false,\n    ): Promise<TypeModel[]> => {\n      const promiserKey = `storedFilesFactory:getStoredFileTypes:${getDtoAsPromiserKeyFragment(dto)}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.media.GetStoredFileTypes(dto)\n      );\n      if (!res?.data) {\n        throw new Error(\"Failed to fetch stored file types\");\n      }\n      return res.data.Results;\n    },\n    getStoredFiles: async (dto: GetStoredFilesDto, force?: boolean): Promise<StoredFilePagedResults> => {\n      const promiserKey = `storedFilesFactory:getStoredFiles:${getDtoAsPromiserKeyFragment(dto)}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.media.GetStoredFiles(dto)\n      );\n      if (!res?.data) {\n        throw new Error(\"Failed to fetch stored files\");\n      }\n      return res.data;\n    }\n  });\n\n  return storedFilesFactory;\n};\n","import { useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { StoredFileModel, StoredFilePagedResults } from \"src/_api/cvApi._DtoClasses\";\nimport { usePatientFactory } from \"./usePatientFactory\";\n\ninterface IUsePatientFilesData {\n  patientFiles: StoredFileModel[];\n  reloadPatientFiles: () => void;\n  usePatientFilesViewState: IViewState;\n}\n\ninterface IUsePatientOptions {\n  useModalForFailure?: boolean;\n  condition?: boolean;\n}\n\nexport const usePatientFiles = (\n  patientAccountID: number,\n  options?: IUsePatientOptions\n): IUsePatientFilesData => {\n  const [ pagedPatientFiles, setPagedPatientFiles ] = useState<StoredFilePagedResults>(null);\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const patientFactory = usePatientFactory();\n\n  const fetchPatientFiles = async (force?: boolean) => {\n    setRunning();\n    try {\n      const res = await patientFactory.getPatientFiles(patientAccountID, force);\n      setPagedPatientFiles(res);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err, null, Boolean(options?.useModalForFailure));\n    }\n  };\n\n  useEffect(() => {\n    if (!patientFactory\n      || pagedPatientFiles\n      || !options?.condition) {\n      return;\n    }\n    fetchPatientFiles();\n  }, [ patientFactory, options ]);\n\n  return {\n    patientFiles: pagedPatientFiles?.Results,\n    reloadPatientFiles: () => {\n      fetchPatientFiles(true);\n    },\n    usePatientFilesViewState: viewState,\n  };\n};\n","/* eslint-disable camelcase */\n/* eslint-disable max-len */\n/* eslint-disable @typescript-eslint/no-extra-parens */\n/** @format */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { Anchor, Button, ButtonGroup, Dropdown, Spinner } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { faCartPlus, faQuoteRight } from \"@fortawesome/free-solid-svg-icons\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { AddToCartModal } from \"src/Cart/modals\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\n// @ts-ignore\nimport cssVariables from \"src/_meta/css/exposedToJSVariables.module.scss\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { Modal } from \"src/_shared/modals\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { SerializableAttributeObject, SerializableAttributesDictionary } from \"src/_api/cvApi._DtoClasses\";\nimport { LoginModal } from \"../../Authentication/LoginModal\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { trackEvent } from \"src/Klaviyo/klaviyo_helpers\";\nimport { usePatientFiles } from \"../../_shared/customHooks/usePatientFiles\";\n\ninterface IAddToCartButtonProps {\n  product: ProductModel;\n  masterProduct?: ProductModel;\n  quantity: number;\n  btnClasses?: string;\n  btnGroupClasses?: string;\n  btnVariant?: string;\n  btnSize?: \"lg\" | \"sm\";\n  btnIcon?: IconProp;\n  dropdownBtnClasses?: string;\n  asIcon?: boolean;\n  excludeQuoteCart?: boolean;\n  quoteCartOnly?: boolean;\n  quoteBtnDisabled?: boolean;\n  label?: string;\n  disabled?: boolean;\n  useConfirmModal?: boolean;\n  useErrorModal?: boolean;\n  onItemAdded?: () => void;\n  onError?: (err: Error) => void;\n  verticalAlign?: string;\n  dropdownBtnVariant?: string;\n  dropDirection?: \"up\" | \"start\" | \"end\" | \"down\";\n  index?: number;\n  ignorePricingAndInventory?: boolean;\n  force?: boolean;\n  finishRunning?: Function;\n  setRunning?: Function;\n}\n\n// eslint-disable-next-line complexity\nexport const AddToCartButton = (props: IAddToCartButtonProps): JSX.Element => {\n  const {\n    product,\n    masterProduct,\n    quantity,\n    btnClasses,\n    btnGroupClasses,\n    btnVariant,\n    btnSize,\n    btnIcon,\n    dropdownBtnClasses,\n    asIcon,\n    excludeQuoteCart,\n    quoteCartOnly,\n    quoteBtnDisabled,\n    label,\n    disabled,\n    useConfirmModal,\n    useErrorModal,\n    onItemAdded,\n    onError,\n    verticalAlign,\n    dropdownBtnVariant,\n    ignorePricingAndInventory,\n    force\n  } = props;\n\n  const [ showAddToCartModal, setShowAddToCartModal ] = useState<boolean>(false);\n  const [ showAddToQuoteCartModal, setShowAddToQuoteCartModal ] = useState<boolean>(false);\n  const [ addToCartModalMessages, setAddToCartModalMessages ] = useState<string[]>(null);\n  const [ onItemAddedCalled, setOnItemAddedCalled ] = useState<boolean>(false);\n  const [ showErrorMessagesModal, setShowErrorMessagesModal ] = useState<boolean>(false);\n  const [ showLoginModal, setShowLoginModal ] = useState(false);\n  const [ showTooltip, setShowTooltip ] = useState(false);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const history = useHistory();\n  const location = useLocation();\n  const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n  const currentUser = useCurrentUser();\n  const authFactory = useAuthFactory();\n  const cartFactory = useCartFactory();\n  const currentCart = useCart(ServiceStrings.carts.types.cart);\n\n  const { patientFiles } = usePatientFiles(currentUser.AccountID, {\n    condition: Boolean(currentUser.AccountID)\n  });\n\n  const retryWithAttributes = (type: string, attributes: Record<string, string>) => {\n    setShowAddToCartModal(false);\n    const sad: SerializableAttributesDictionary = Object.keys(attributes)\n      .map(x => ({ Key: x, Value: attributes[x] } as SerializableAttributeObject))\n      .reduce((prev, cur) => ({ ...prev, [cur.Key]: cur }), {});\n    onAddCartItem(type, sad);\n  };\n\n  const onAddCartItem = (typeName: string, attributes: SerializableAttributesDictionary = null): void => {\n    if (!cartFactory) {\n      return;\n    }\n    if (!product.ID) {\n      console.error(\"Missing or invalid id. Add to cart failed.\");\n      return;\n    }\n    setRunning();\n    cartFactory\n      .addItemToCart(typeName, product.ID, quantity, product, attributes)\n      .then(res => {\n        if (typeof res === typeof Error) {\n          throw res;\n        }\n        if (!res) {\n          throw new Error(\"Unable to add product to cart\");\n        }\n\n        // this only tracks the intention to add to cart\n        if (res.ActionSucceeded) {\n          trackEvent(\n            \"Added to Cart\",\n            {\n              // \"Cart ID\": res.Result,\n              \"Product ID\": product.ID,\n              \"AccountId\": currentUser.AccountID,\n              \"Original Price\": product?.$_rawPrices.base,\n              \"Discount\": product?.$_rawPrices.amountOff,\n              // eslint-disable-next-line max-len\n              \"Sale Price\": (product?.$_rawPrices.base && product?.$_rawPrices.amountOff) ? (product.$_rawPrices.base - product.$_rawPrices.amountOff) : null\n            }\n          );\n          window.dataLayer = window.dataLayer || [];\n          const event = {\n            event: \"add_to_cart\",\n            ecommerce: {\n              currency: \"USD\",\n              value: product?.$_rawPrices.sale ? product?.$_rawPrices.sale : product?.$_rawPrices.base,\n              items: [\n                {\n                  item_id: product?.ID,\n                  item_name: product?.Name,\n                  price: product?.$_rawPrices.sale ? product?.$_rawPrices.sale : product?.$_rawPrices.base,\n                  quantity: 1\n                }\n              ]\n            }\n          };\n          window.dataLayer.push(event);\n        }\n\n        if (res.Messages) {\n          const isPrime = masterProduct?.ID === 60;\n          const isMojo = masterProduct?.ID === 69;\n          if (isPrime || isMojo) {\n            const orderMapping = {\n              \"ACTION_BLOODWORK\": 0,\n              \"ACTION_QUESTIONNAIRE Testosterone_Questionnaire\": 1,\n              \"ACTION_QUESTIONNAIRE TELEHEALTH\": 2,\n              \"ACTION_ID\": 3,\n            };\n            res.Messages.sort(\n              (a, b) => orderMapping[a as keyof typeof orderMapping] - orderMapping[b as keyof typeof orderMapping]\n            );\n          } else {\n            const orderMapping = {\n              \"ACTION_QUESTIONNAIRE\": 0,\n              \"ACTION_QUESTIONNAIRE TELEHEALTH\": 1,\n              \"ACTION_ID\": 2,\n            };\n            res.Messages.sort(\n              (a, b) => orderMapping[a as keyof typeof orderMapping] - orderMapping[b as keyof typeof orderMapping]\n            );\n          }\n          if (!force && label !== \"Request Refill\") {\n            const messages = res.Messages?.length\n              ? Array.from(new Set([ ...(currentUser.GeneralMedicalCompleted ? [ \"ACTION_GENERAL_QUESTIONNAIRE\" ] : []), ...res.Messages, ...(patientFiles.find(p => p.TypeName === \"Driver's License\") ? [ \"ACTION_ID\" ] : []) ]))\n              : res.Messages;\n\n            setAddToCartModalMessages(messages);\n            // @ts-ignore\n          } else if (!res.CartActionSucceeded) {\n            // On a refill request, we have to assume the customer has already completed bloodwork & any questionnaires required.\n            // So, we forcibly insert them into the subsequent cart item add request from the cart response messages.\n            if (res.Messages?.some((msg: string) => msg.startsWith(\"ACTION_GENERAL_QUESTIONNAIRE\"))) {\n              // Have to update the user record's GeneralMedicalCompleted to 1, no other option\n              authFactory.updateCurrentUser({\n                ...currentUser,\n                GeneralMedicalCompleted: true\n              }).then(() => {\n                retryWithAttributes(typeName, { });\n              });\n              return;\n            }\n            try {\n              const flatAttributes = Object.keys(attributes ?? {})\n                .reduce((accu, e) => {\n                  accu[e] = attributes[e].Value;\n                  return accu;\n                }, {} as Record<string, string>);\n              const newMessages = res.Messages\n                .filter((msg: string) => msg.startsWith(\"ACTION_\"))\n                .reduce((accu, e) => {\n                  if (e.startsWith(\"ACTION_QUESTIONNAIRE\")) {\n                    accu[`Questionnaire${e.split(\" \")[1]}`] = \"true\";\n                  }\n                  if (e.startsWith(\"ACTION_BLOODWORK\")) {\n                    accu.BloodworkComplete = \"true\";\n                  }\n                  return accu;\n                }, flatAttributes as Record<string, string>);\n              retryWithAttributes(typeName, newMessages);\n            } catch (e) {\n              console.error(e);\n            }\n            return;\n          }\n        }\n        if (useConfirmModal) {\n          if (typeName === ServiceStrings.carts.types.quote) {\n            if (!cefConfig.addToQuoteCartModalDisabled) {\n              setShowAddToQuoteCartModal(true);\n            }\n          } else if (!cefConfig.disableAddToCartModals) {\n            setShowAddToCartModal(true);\n          }\n        } else if (onItemAdded && typeof onItemAdded == \"function\") {\n          onItemAdded();\n          setOnItemAddedCalled(true);\n        }\n        finishRunning();\n      })\n      .catch((err: Error) => {\n        finishRunning(true, err);\n        if (err.message === \"No User\") {\n          const currentPath = location.pathname;\n          history.push({\n            pathname: window.location.pathname,\n            search: `?returnUrl=${encodeURIComponent(currentPath)}`\n          });\n          setShowLoginModal(true);\n        }\n        if (useErrorModal && err.message !== \"No User\") {\n          setShowErrorMessagesModal(true);\n        }\n        if (onError) {\n          onError(err);\n        }\n      });\n  };\n\n  useEffect(\n    () => {\n      const timer = setTimeout(() => {\n        if (localStorage.getItem(\"firstClick\") === \"true\" && currentUser.Account) {\n          localStorage.removeItem(\"firstClick\");\n          if (buttonRef.current) {\n            buttonRef.current.click();\n          }\n        }\n      }, 850);\n\n      return () => clearTimeout(timer);\n    },\n    [ currentUser.Account ]\n  );\n\n  if (!product || !cefConfig) {\n    return null;\n  }\n\n  if (!ignorePricingAndInventory) {\n    if ((cefConfig.featureSet.inventory.enabled && !product.readInventory)\n        || (cefConfig.featureSet.pricing.enabled && !product.readPrices)) {\n      return null;\n    }\n  }\n\n  if (\n    viewState.running || !cefConfig\n  ) {\n    return (\n      <section>\n        <div className=\"position-fixed top-0 start-0 w-100 h-100 bg-white d-flex justify-content-center\n        align-items-center\"\n        style={{ zIndex: \"9999\" }}>\n          <LoadingWidget message=\"Loading...\" innerClasses=\"pt-6\"/>\n        </div>\n      </section>\n    );\n  }\n\n  const addToACartModals = (\n    <>\n      <AddToCartModal\n        cartTypeName={ServiceStrings.carts.types.cart}\n        show={showAddToCartModal}\n        closeMedicalForm={() => {\n          setShowAddToCartModal(false);\n        }}\n        onCancel={() => {\n          setShowAddToCartModal(false);\n          if (!onItemAddedCalled && onItemAdded) {\n            onItemAdded();\n          }\n        }}\n        product={product}\n        masterProduct={masterProduct}\n        messages={addToCartModalMessages}\n        onRetry={attributes => retryWithAttributes(ServiceStrings.carts.types.cart, attributes)}\n      />\n      <AddToCartModal\n        cartTypeName={ServiceStrings.carts.types.quote}\n        show={showAddToQuoteCartModal}\n        onCancel={() => {\n          setShowAddToQuoteCartModal(false);\n          if (!onItemAddedCalled && onItemAdded) {\n            onItemAdded();\n          }\n        }}\n        product={product}\n        messages={addToCartModalMessages}\n        onRetry={attributes => retryWithAttributes(ServiceStrings.carts.types.quote, attributes)}\n      />\n    </>\n  );\n\n  if (quoteCartOnly) {\n    return (\n      <div\n        className=\"position-relative\"\n        id=\"quoteCartOnly\">\n        {addToACartModals}\n        <Button\n          variant={btnVariant}\n          id={`btnGridAddToCartProduct${product?.ID ?? \"\"}`}\n          size={btnSize ?? null}\n          disabled={viewState.running || disabled || quoteBtnDisabled}\n          style={{ verticalAlign: verticalAlign ?? \"middle\" }}\n          title={t(\"ui.storefront.quotes.cart.add\")}\n          aria-label={t(\"ui.storefront.quotes.cart.add\")}\n          onClick={() => onAddCartItem(\"Quote Cart\")}\n          className={`w-100 ${btnClasses ?? \"\"}`}>\n          {asIcon && (\n            <FontAwesomeIcon\n              icon={btnIcon ?? (faQuoteRight as IconProp)}\n              className=\"fa-fw\"\n            />\n          )}\n          <span className={`${asIcon ? \"sr-only\" : \"\"}`}>{label ?? t(\"ui.storefront.quotes.cart.add\")}</span>\n        </Button>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"position-relative\">\n      {addToACartModals}\n      <LoginModal\n        signUpModal={true}\n        show={showLoginModal}\n        onConfirm={() => setShowLoginModal(false)}\n        onCancel={() => {\n          setShowLoginModal(false);\n        }} />\n      <Modal\n        show={showErrorMessagesModal}\n        onCancel={() => setShowErrorMessagesModal(false)}\n        size=\"md\">\n        {viewState.errorMessage\n          ? viewState.errorMessage\n          : viewState.errorMessages\n            ? viewState.errorMessages.map(msg => <span key={msg}>{msg}</span>)\n            : \"An error occurred\"}\n        <hr className=\"mx-n3\" />\n        <div className=\"d-flex justify-content-end\">\n          <Button\n            variant=\"primary\"\n            onClick={() => setShowErrorMessagesModal(false)}>\n            {t(\"ui.storefront.common.OK\")}\n          </Button>\n        </div>\n      </Modal>\n      <ButtonGroup\n        className={btnGroupClasses ?? \"w-100\"}\n        id=\"atcButtonGroup\">\n        {currentCart && currentCart.SalesItems?.length > 0 ? (\n          <Anchor\n            className={`${btnClasses ?? \"\"} btn btn-primary`}\n            id={`btnGridViewCartProduct${product?.ID ?? \"\"}`}\n            title={t(\"ui.storefront.cart.ViewCart\", \"View Cart\")}\n            aria-label={t(\"ui.storefront.cart.ViewCart\", \"View Cart\")}\n            href={corsLink(cefConfig, cefConfig.routes.cart.root, \"cart\")}\n            data-sid={`btnGridViewCartProduct_${product?.Name ?? \"\"}`}\n          >\n            {t(\"ui.storefront.cart.ViewCart\", \"View Cart\")}\n          </Anchor>\n        ) : (\n          <Button\n            ref={buttonRef}\n            variant={btnVariant}\n            className={btnClasses ?? \"\"}\n            size={btnSize ?? null}\n            id={`btnGridAddToCartProduct${product?.ID ?? \"\"}`}\n            title={t(\"ui.storefront.cart.addToCart\")}\n            aria-label={t(\"ui.storefront.cart.addToCart\")}\n            disabled={viewState.running || disabled}\n            onClick={() => {\n              if (!currentUser.Account) {\n                localStorage.setItem(\"firstClick\", \"true\");\n              }\n              onAddCartItem(\"Cart\");\n            }}\n            data-sid={`btnGridAddToCartProduct_${product?.Name ?? \"\"}`}\n          >\n            {(asIcon && (\n              <FontAwesomeIcon\n                icon={btnIcon ?? (faCartPlus as IconProp)}\n                className=\"fal fa-fw\"\n              />\n            ))\n              || label\n              || t(\"ui.storefront.cart.addToCart\")}\n          </Button>\n        )}\n        {!excludeQuoteCart && cefConfig.featureSet?.salesQuotes?.enabled && (\n          <Dropdown\n            drop={props.dropDirection ?? \"down\"}\n            as={ButtonGroup}>\n            <Dropdown.Toggle\n              variant={dropdownBtnVariant ?? btnVariant}\n              size={btnSize ?? null}\n              id={`viewDetailsAddToQuoteCartDropdown_${product?.ID ?? \"\"}`}\n              className={`no-caret ${dropdownBtnClasses ?? \"rounded-end rounded-0 text-white\"}`}\n              style={{ borderLeft: `solid 1px ${cssVariables[`${btnVariant}Dark`]}`, maxWidth: \"fit-content\" }}\n              disabled={viewState.running || quoteBtnDisabled || props.disabled}>\n              {viewState.running ? (\n                <Spinner\n                  animation=\"border\"\n                  size=\"sm\"\n                />\n              ) : (\n                <i\n                  className={\n                    props.dropDirection === \"up\" ? \"fal fa-fw fa-sm fa-chevron-up\" : \"fal fa-fw fa-sm fa-chevron-down\"\n                  }\n                />\n              )}\n            </Dropdown.Toggle>\n            <Dropdown.Menu align=\"end\">\n              <Dropdown.Item\n                as={Button}\n                id=\"atqcDropdownButton\"\n                variant=\"outline-light\"\n                className=\"px-2 text-dark active-bg-transparent\"\n                onClick={() => onAddCartItem(\"Quote Cart\")}>\n                <i className=\"fal fa-fw fa-quote-right\" />\n                &nbsp;\n                <span id=\"txtAddToQuoteCart\">{t(\"ui.storefront.quotes.cart.add\")}</span>\n              </Dropdown.Item>\n            </Dropdown.Menu>\n          </Dropdown>\n        )}\n      </ButtonGroup>\n\n      {currentCart && currentCart.SalesItems?.length > 0 && location.pathname.includes(\"Product\") && (\n        <div className=\"flex flex-row align-items-center gap-2 pt-2 sm-w-60\"\n          style={{ cursor: \"pointer\" }}\n          onMouseEnter={() => setShowTooltip(true)}\n          onMouseLeave={() => setShowTooltip(false)}\n        >\n          {showTooltip && (\n            <div className=\"cart-tooltip\">\n          Unfortunately, you can only purchase one prescription product per order. You already have an item in your cart—complete checkout or remove it to add this product. Thanks for your understanding!\n            </div>\n          )}\n\n          <p className=\"mb-0\"\n          >Why can&apos;t I add this to my cart?</p>\n          <i className=\"fal fa-fw fa-circle-question pb-1\" />\n        </div>\n      )}\n    </div>\n  );\n};\n\nAddToCartButton.defaultProps = {\n  useConfirmModal: true,\n  useErrorModal: true\n};\n","import { useState } from \"react\";\nimport { Button, ButtonGroup, Dropdown } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { AddAllToCartModal } from \"src/Cart/modals\";\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport {\n  AppliedSalesInvoiceItemDiscountModel,\n  AppliedSalesOrderItemDiscountModel,\n  AppliedSalesQuoteItemDiscountModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\n\ninterface IAddAllToCartButtonProps {\n  classes?: string;\n  btnClasses?: string;\n  btnVariant?: string;\n  btnSize?: \"lg\" | \"sm\";\n  dropdownBtnClasses?: string;\n  excludeQuoteCart?: boolean;\n  label?: string;\n  disabled?: boolean;\n  useConfirmModal?: boolean;\n  salesItems: Array<SalesItemBaseModel<AppliedSalesQuoteItemDiscountModel\n    | AppliedSalesOrderItemDiscountModel\n    | AppliedSalesInvoiceItemDiscountModel>>;\n}\n\nexport const AddAllToCartButton = (\n  props: IAddAllToCartButtonProps\n): JSX.Element => {\n  const {\n    btnClasses,\n    btnVariant,\n    btnSize,\n    dropdownBtnClasses,\n    excludeQuoteCart,\n    label,\n    disabled,\n    useConfirmModal,\n    salesItems\n  } = props;\n\n  const [ confirmationModalData, setConfirmationModalData ] = useState<{\n    show: boolean;\n    messages: string[];\n    cartType: string;\n  }>({\n    show: false,\n    messages: null,\n    cartType: null\n  });\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const cartFactory = useCartFactory();\n\n  const onAddCartItems = (TypeName: string): void => {\n    if (!salesItems) {\n      console.error(\"Missing or invalid products. Add to cart failed.\");\n      return;\n    }\n\n    const isForQuoteCart = TypeName === ServiceStrings.carts.types.quote;\n    setRunning();\n    cartFactory.addAllItemsToCart(TypeName, salesItems\n      .map(item => ({ ProductID: item.ProductID, Quantity: item.TotalQuantity })))\n      .then(result => {\n        if (useConfirmModal) {\n          const confirmMsg = `${result.Result.filter(Boolean).length}\n            unique item(s) were added to the ${TypeName.toLowerCase()}.`;\n          setConfirmationModalData({\n            show: isForQuoteCart ? !cefConfig.addToQuoteCartModalDisabled : !cefConfig.disableAddToCartModals,\n            // eslint-disable-next-line @typescript-eslint/no-extra-parens\n            messages: [ confirmMsg, ...(result.Messages ?? []) ],\n            cartType: TypeName\n          });\n        }\n        finishRunning();\n      })\n      .catch(err => {\n        setConfirmationModalData({\n          show: true,\n          messages: null,\n          cartType: TypeName\n        });\n        finishRunning(true, null, err.Messages ?? [ \"Failed to add cart item\" ]);\n      });\n  };\n\n  return (\n    <>\n      <AddAllToCartModal\n        show={confirmationModalData.show}\n        onCancel={() => {\n          setConfirmationModalData({\n            show: false,\n            messages: null,\n            cartType: null\n          });\n        }}\n        messages={\n          viewState.hasError && viewState.errorMessages?.every(e => typeof e === \"string\")\n            ? viewState.errorMessages as unknown[] as string[]\n            : confirmationModalData.messages\n        }\n        cartType={confirmationModalData.cartType}\n      />\n      <ButtonGroup className={props.classes}>\n        <Button\n          className={btnClasses ?? \"btn-block rounded-start text-white text-nowrap\"}\n          id=\"btnAddAllToCart\"\n          variant={btnVariant ?? \"success\"}\n          size={btnSize ?? null}\n          disabled={disabled ?? viewState.running ?? false}\n          onClick={() => onAddCartItems(ServiceStrings.carts.types.cart)}>\n          {label ?? t(\"ui.storefront.userDashboard2.controls.salesDetail.ReorderAll\")}\n        </Button>\n        {excludeQuoteCart || !cefConfig.featureSet.salesQuotes?.enabled\n          ? null\n          : <Dropdown as={ButtonGroup}>\n            <Dropdown.Toggle\n              variant={btnVariant}\n              id=\"addAllToCartButtonAddToQuoteCartDropdown\"\n              className={dropdownBtnClasses ?? \"text-white rounded-end rounded-0 no-caret\"}\n              disabled={disabled ?? viewState.running ?? false}\n              style={{ maxWidth: \"fit-content\" }}>\n              <i className=\"fal fa-fw fa-chevron-down fa-sm\" />\n            </Dropdown.Toggle>\n            <Dropdown.Menu align=\"end\">\n              <Dropdown.Item\n                as={Button}\n                variant=\"outline-light\"\n                className=\"px-2 text-dark active-bg-transparent\"\n                onClick={() => onAddCartItems(ServiceStrings.carts.types.quote)}>\n                <i className=\"fal fa-fw fa-quote-right\" />\n                &nbsp;\n                <span>{t(\"ui.storefront.quotes.cart.add\")}</span>\n              </Dropdown.Item>\n            </Dropdown.Menu>\n          </Dropdown>}\n      </ButtonGroup>\n    </>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"addToCartQuantityInput\":\"AddToCartQuantitySelector_addToCartQuantityInput__zwQRd\"};","import React, { useRef, useState } from \"react\";\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\nimport classes from \"src/Cart/controls/AddToCartQuantitySelector.module.scss\";\nimport { useDebounceWithCallback } from \"src/_shared/customHooks/useDebounceWithCallback\";\n\ninterface IAddToCartQuantitySelectorProps {\n  onChange: (updatedValue: number) => void;\n  initialValue?: number;\n  id?: number | string;\n  increaseDisabled?: boolean;\n  canIncreaseFn?: (quantity: number) => boolean;\n  decreaseDisabled?: boolean;\n  useInput?: boolean;\n  debounceMS?: number;\n}\n\nexport const AddToCartQuantitySelector = (props: IAddToCartQuantitySelectorProps): JSX.Element => {\n  const { onChange, initialValue, increaseDisabled, decreaseDisabled, useInput } = props;\n  const [ quantity, setQuantity ] = useState(initialValue ?? 1);\n\n  const firstRender = useRef(true);\n\n  useDebounceWithCallback(quantity, () => {\n    if (firstRender.current) {\n      firstRender.current = false;\n      return;\n    }\n    onChange(quantity);\n  }, props.debounceMS ?? 500);\n\n  const onChangeQuantity = (e: React.ChangeEvent<HTMLInputElement>) => {\n    e.preventDefault();\n    setQuantity(Number(e.target.value));\n  };\n\n  const incrementQuantity = (e: React.MouseEvent<HTMLButtonElement>) => {\n    e.preventDefault();\n    setQuantity(quantity + 1);\n  };\n\n  const decrementQuantity = (e: React.MouseEvent<HTMLButtonElement>) => {\n    e.preventDefault();\n    if (quantity <= 1) {\n      return;\n    }\n    setQuantity(quantity - 1);\n  };\n\n  const checkIncreaseDisabled = (): boolean => {\n    if (props.canIncreaseFn) {\n      return !props.canIncreaseFn(quantity);\n    }\n    return Boolean(increaseDisabled);\n  };\n\n  if (!props.id) {\n    console.error(\"No id was provided to the AddToCartQuantitySelector.\");\n  }\n  return (\n    <InputGroup className=\"flex-nowrap w-100 quantity-selector\">\n      <InputGroup.Text className=\"p-0\">\n        <Button\n          variant=\"\"\n          className=\"border-0\"\n          disabled={decreaseDisabled}\n          id={`btnReduceItemQuantity${props.id ?? \"\"}`}\n          onClick={decrementQuantity}>\n          <i className=\"fal fa-fw fa-minus\" />\n        </Button>\n      </InputGroup.Text>\n      {useInput\n        ? <Form.Control\n          className={`text-center qty ${classes.addToCartQuantityInput}`}\n          style={{\n            minWidth: `calc(${quantity.toString().length}ch + 40px)`\n          }}\n          aria-label=\"num\"\n          type=\"number\"\n          placeholder=\"1\"\n          value={quantity}\n          onChange={onChangeQuantity}\n        />\n        : <span\n          className={`form-control text-center qty ${classes.addToCartQuantityInput}`}\n          style={{\n            minWidth: `calc(${quantity.toString().length}ch + 40px)`\n          }}>\n          {quantity}\n        </span>\n      }\n      <InputGroup.Text className=\"p-0\">\n        <Button\n          variant=\"\"\n          className=\"border-0\"\n          disabled={checkIncreaseDisabled()}\n          id={`btnIncreaseItemQuantity${props.id ?? \"\"}`}\n          onClick={incrementQuantity}>\n          <i className=\"fal fa-fw fa-plus\" />\n        </Button>\n      </InputGroup.Text>\n    </InputGroup>\n  );\n};\n\nAddToCartQuantitySelector.defaultProps = {\n  useInput: true\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, ButtonGroup, Dropdown, Spinner } from \"react-bootstrap\";\nimport {\n  faList,\n  IconDefinition\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { AddToCartModal } from \"src/Cart/modals\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface IViewDetailsButtonProps {\n  seoUrl: string;\n  product?: ProductModel;\n  btnClasses?: string;\n  btnVariant?: string;\n  btnSize?: \"lg\" | \"sm\";\n  includeQuoteCart?: boolean;\n  verticalAlign?: string;\n  asIcon?: boolean;\n  icon?: IconDefinition | IconProp;\n  quantity?: number;\n  onItemAdded?: (id: number) => void;\n  useConfirmModal?: boolean;\n}\n\nexport const ViewDetailsButton = (props: IViewDetailsButtonProps): JSX.Element => {\n  const {\n    seoUrl,\n    product,\n    btnClasses,\n    btnVariant,\n    btnSize,\n    includeQuoteCart,\n    verticalAlign,\n    asIcon,\n    icon,\n    quantity,\n    onItemAdded,\n    useConfirmModal\n  } = props;\n\n  const [ showConfirmationModal, setShowConfirmationModal ] = useState<boolean>(false);\n  const [ confirmationModalMessages, setConfirmationModalMessages ] = useState<string[]>(null);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const cartFactory = useCartFactory();\n\n  const onAddQuoteCartItem = (): void => {\n    if (!product?.ID) {\n      console.error(\"Missing or invalid id. Add to cart failed.\");\n      return;\n    }\n\n    let itemResponse: number = 0;\n    setRunning();\n    cartFactory.addItemToCart(ServiceStrings.carts.types.quote, product.ID, quantity)\n      .then(res => {\n        itemResponse = res.Result;\n        if (res.Messages) {\n          setConfirmationModalMessages(res.Messages);\n        }\n        if (!res.ActionSucceeded) {\n          throw res;\n        }\n        if (useConfirmModal) {\n          setShowConfirmationModal(true);\n        }\n        if (onItemAdded) {\n          onItemAdded(itemResponse);\n        }\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to add cart item\");\n      });\n  };\n\n  return (\n    <>\n      <a\n        className={`btn btn-${btnVariant} ${btnSize ? `btn-${btnSize}` : \"\"} ${\n          includeQuoteCart ? \"rounded-start\" : \"rounded\"\n        } text-center ${btnClasses ?? \"\"}`}\n        style={{ verticalAlign: verticalAlign ?? \"middle\" }}\n        id={`btnGridOutOfStockViewDetailsProduct${product?.ID ?? seoUrl}`}\n        title={t(\"ui.storefront.common.ViewDetails\")}\n        aria-label={t(\"ui.storefront.common.ViewDetails\")}\n        href={corsLink(cefConfig, `/${seoUrl}`, \"productDetail\")}>\n        {asIcon && <FontAwesomeIcon icon={(icon as IconProp) ?? faList as IconProp} className=\"fa-fw\" />}\n        <span className={`${asIcon ? \"sr-only\" : \"\"}`}>\n          {t(\"ui.storefront.common.ViewDetails\")}\n        </span>\n      </a>\n      {includeQuoteCart\n        && <Dropdown as={ButtonGroup}>\n          <Dropdown.Toggle\n            variant={btnVariant}\n            id={`viewDetailsAddToQuoteCartDropdown_${product?.ID ?? \"\"}`}\n            className=\"rounded-end rounded-0 no-caret\"\n            // TODO: reference scss variables for these colors\n            style={{\n              borderLeft: `solid 1px ${btnVariant === \"success\" ? \"#258035\" : \"#3d4246\"}`,\n              maxWidth: \"fit-content\"\n            }}\n            disabled={viewState.running}>\n            {viewState.running\n              ? <Spinner animation=\"border\" size=\"sm\" />\n              : <i className=\"fal fa-fw fa-chevron-down fa-sm\" />\n            }\n          </Dropdown.Toggle>\n          <Dropdown.Menu align=\"end\">\n            <Dropdown.Item\n              as={Button}\n              variant=\"outline-light\"\n              className=\"px-2 text-dark active-bg-transparent\"\n              onClick={onAddQuoteCartItem}\n              disabled={viewState.running}>\n              <i className=\"fal fa-fw fa-quote-right\"/>\n              &nbsp;\n              <span>{t(\"ui.storefront.quotes.cart.add\")}</span>\n            </Dropdown.Item>\n          </Dropdown.Menu>\n        </Dropdown>\n      }\n      <AddToCartModal\n        cartTypeName={ServiceStrings.carts.types.quote}\n        show={showConfirmationModal}\n        product={product}\n        onCancel={() => setShowConfirmationModal(false)}\n        messages={confirmationModalMessages}\n      />\n    </>\n  );\n};\n","/** @format */\n\n// https://stackoverflow.com/questions/46190574/how-to-import-signalr-in-react-component\nimport { JsonHubProtocol, HubConnectionState, HubConnectionBuilder, LogLevel } from \"@microsoft/signalr\";\n\nasync function startSignalRConnection(connection) {\n  try {\n    await connection.start();\n    console.assert(connection.state === HubConnectionState.Connected);\n    console.log(\"SignalR connection established\");\n  } catch (err) {\n    console.assert(connection.state === HubConnectionState.Disconnected);\n    console.error(\"SignalR Connection Error: \", err);\n    setTimeout(() => startSignalRConnection(connection), 5000);\n  }\n  if (connection.state === HubConnectionState.Connected) {\n    return connection;\n  }\n  return null;\n}\n\n// Set up a SignalR connection to the specified hub URL, and actionEventMap.\n// actionEventMap should be an object mapping event names, to eventHandlers that will\n// be dispatched with the message body.\nexport const setupSignalRConnection = async (cefConfig) => {\n  const connectionHub = cefConfig.featureSet.signalR.root + cefConfig.featureSet.signalR.path + '/hubs';\n\n  // create the connection instance\n  // withAutomaticReconnect will automatically try to reconnect\n  // and generate a new socket connection if needed\n\n  const connection = new HubConnectionBuilder()\n    .withUrl(connectionHub)\n    .withAutomaticReconnect()\n    .withHubProtocol(new JsonHubProtocol())\n    .configureLogging(LogLevel.Information)\n    .build();\n\n  // Note: to keep the connection open the serverTimeout should be\n  // larger than the KeepAlive value that is set on the server\n  // keepAliveIntervalInMilliseconds default is 15000 and we are using default\n  // serverTimeoutInMilliseconds default is 30000 and we are using 60000 set below\n  connection.serverTimeoutInMilliseconds = 60000;\n\n  // re-establish the connection if connection dropped\n  connection.onclose(error => {\n    console.assert(connection.state === HubConnectionState.Disconnected);\n    console.log(\"Connection closed due to error. Try refreshing this page to restart the connection\", error);\n  });\n\n  connection.onreconnecting(error => {\n    console.assert(connection.state === HubConnectionState.Reconnecting);\n    console.log(\"Connection lost due to error. Reconnecting.\", error);\n  });\n\n  connection.onreconnected(connectionId => {\n    console.assert(connection.state === HubConnectionState.Connected);\n    console.log(\"Connection reestablished. Connected with connectionId\", connectionId);\n  });\n\n  await startSignalRConnection(connection);\n\n  return connection;\n};\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { HubConnection } from \"@microsoft/signalr\";\nimport { useEffect, useState } from \"react\";\nimport promiser from \"src/_shared/Promiser\";\nimport { setupSignalRConnection } from \"src/signalR/signalR\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface ISignalRSliceState {\n  connection: HubConnection | null;\n}\n\nexport const signalRSlice = createSlice({\n  name: \"signalR\",\n  initialState: {\n    connection: null,\n  } as ISignalRSliceState,\n  reducers: {\n    setSignalRConnection: (state, action: PayloadAction<HubConnection>) => {\n      state.connection = action.payload;\n    }\n  }\n});\n\nexport const { setSignalRConnection } = signalRSlice.actions;\nexport const useSignalR = (): HubConnection | null => {\n  // const connection = useSelector((state: RootState) => state.signalR.connection);\n  const [ connection, setConnection ] = useState<HubConnection | null>(null);\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    if (connection === null && cefConfig) {\n      promiser.resolve(\n        \"initializeSignalR\",\n        () => setupSignalRConnection(cefConfig)\n      )\n        .then(r => {\n          setConnection(r);\n        })\n        .catch(err => {\n          console.error(err);\n        });\n    }\n  }, [ connection, cefConfig ]);\n\n  return connection;\n};\n\nexport default signalRSlice.reducer;\n","/**\n * @file React/src/_shared/customHooks/usePricingFactory.tsx\n * @author Copyright (c) 2020-2023 clarity-ventures.com. All rights reserved.\n * @desc Pricing Factory hook\n */\n\nimport { useEffect, useState } from \"react\";\nimport { CalculatedPrices, ProductModel } from \"src/_api/cvApi.shared\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport cvApi from \"src/_api/cvApi\";\n\nexport interface IPricingFactory {\n  factoryAssign(product: ProductModel): Promise<ProductModel>;\n  bulkFactoryAssign(products: ProductModel[]): Promise<ProductModel[]>;\n}\n\nexport class PricingFactory implements IPricingFactory {\n  // Functions\n  private static genBlankPricesObj(): CalculatedPrices {\n    return {\n      amountOff: null,\n      base: null,\n      haveBase: false,\n      haveMsrp: false,\n      haveReduction: false,\n      haveSale: false,\n      isSale: false,\n      loading: true,\n      msrp: null,\n      percentOff: null,\n      reduction: null,\n      sale: null\n    };\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  async factoryAssign(product: ProductModel): Promise<ProductModel> {\n    if (product.readPrices instanceof Function) {\n      // Already processed\n      return product;\n    }\n    // eslint-disable-next-line dot-notation\n    product[\"$_rawPrices\"] = PricingFactory.genBlankPricesObj();\n    // eslint-disable-next-line dot-notation\n    product.readPrices = () => product[\"$_rawPrices\"];\n    // TODO: MemCache the results by product ID so we can avoid repeat calls for same product\n    const r = await cvApi.pricing.CalculatePricesForProduct(product.ID, 1);\n    if (!r?.data?.ActionSucceeded) {\n      console.error(r?.data);\n      return Promise.reject(new Error());\n    }\n    // eslint-disable-next-line dot-notation\n    const prices = product[\"$_rawPrices\"] as CalculatedPrices;\n    const { BasePrice, SalePrice, MsrpPrice, ReductionPrice } = r.data.Result;\n    // Assign updated values\n    prices.base = BasePrice;\n    prices.sale = SalePrice;\n    prices.msrp = MsrpPrice;\n    prices.reduction = ReductionPrice;\n    // Assign calculated values\n    prices.haveBase = prices.base >= 0;\n    prices.haveSale = prices.sale >= 0;\n    prices.haveMsrp = prices.msrp >= 0;\n    prices.haveReduction = prices.reduction >= 0;\n    prices.isSale = prices.sale > 0 && prices.sale < prices.base;\n    if (prices.isSale) {\n      prices.amountOff = prices.base - prices.sale;\n      prices.percentOff = prices.amountOff / prices.base * 100;\n    }\n    prices.repeatAbbr = r.data.Result.RepeatTypeAbbreviation;\n    prices.repeatPeriods = r.data.Result.RepeatTypePeriods;\n    // Finish\n    prices.loading = false;\n    // eslint-disable-next-line dot-notation\n    product[\"$_rawPrices\"] = prices;\n    return product;\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  bulkFactoryAssign(products: ProductModel[]): Promise<ProductModel[]> {\n    if (!products || !products.length) {\n      return new Promise((resolve, _reject) => {\n        resolve(products);\n      });\n    }\n    const processed: ProductModel[] = [];\n    const toProcess: ProductModel[] = [];\n    products.forEach(product => {\n      if (product.readPrices instanceof Function) {\n        processed.push(product);\n      } else {\n        // eslint-disable-next-line dot-notation\n        product[\"$_rawPrices\"] = PricingFactory.genBlankPricesObj();\n        // eslint-disable-next-line dot-notation\n        product.readPrices = () => product[\"$_rawPrices\"];\n        toProcess.push(product);\n      }\n    });\n    return new Promise((resolve, reject) => {\n      cvApi.pricing\n        .CalculatePricesForProducts({\n          ProductIDs: toProcess.map(x => x.ID)\n        })\n        .then(r => {\n          if (!r || !r.data || !r.data.ActionSucceeded) {\n            console.error(r && r.data);\n            reject(r && r.data);\n            return;\n          }\n          if (r.data.Result === undefined) {\n            resolve(processed);\n            return;\n          }\n          Object.keys(r.data.Result).forEach(productID => {\n            const found = toProcess.find(x => x.ID === Number(productID));\n            // eslint-disable-next-line dot-notation\n            const prices = found[\"$_rawPrices\"] as CalculatedPrices;\n            prices.base = r.data.Result[productID].BasePrice;\n            prices.sale = r.data.Result[productID].SalePrice;\n            prices.msrp = r.data.Result[productID].MsrpPrice;\n            prices.reduction = r.data.Result[productID].ReductionPrice;\n            prices.haveBase = prices.base >= 0;\n            prices.haveSale = prices.sale >= 0;\n            prices.haveMsrp = prices.msrp >= 0;\n            prices.haveReduction = prices.reduction >= 0;\n            prices.isSale = prices.sale > 0 && prices.sale < prices.base;\n            if (prices.isSale) {\n              prices.amountOff = prices.base - prices.sale;\n              prices.percentOff = prices.amountOff / prices.base * 100;\n            }\n            prices.repeatAbbr = r.data.Result[productID].RepeatTypeAbbreviation;\n            prices.repeatPeriods = r.data.Result[productID].RepeatTypePeriods;\n            prices.loading = false;\n            // eslint-disable-next-line dot-notation\n            found[\"$_rawPrices\"] = prices;\n            processed.push(found);\n          });\n          resolve(processed);\n        })\n        .catch(reject);\n    });\n  }\n}\n\nexport const usePricingFactory = (): IPricingFactory => {\n  const [ pricingFactory, setPricingFactory ] = useState(null);\n  const cefConfig = useCefConfig() as CEFConfig;\n  useEffect(() => {\n    if (cefConfig === null) {\n      return;\n    }\n    // New up the class from above only once\n    const instance = new PricingFactory();\n    setPricingFactory(instance);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ cefConfig ]);\n  return pricingFactory;\n};\n","import { useEffect, useState } from \"react\";\nimport {\n  GetPackSizesVariantDTO,\n  ProductModel,\n  StatusModel,\n  TypeModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\nimport _ from \"lodash\";\n\ninterface IGetProductByIDOptions {\n  skipPricing?: boolean;\n  skipInventory?: boolean;\n  skipForcedPage?: boolean;\n}\n\ninterface IProductFactory {\n  applyDefaultStatusToProduct: (\n    product: ProductModel,\n    statuses?: StatusModel[]\n  ) => Promise<ProductModel>;\n  applyDefaultTypeToProduct: (\n    product: ProductModel,\n    types?: TypeModel[]\n  ) => Promise<ProductModel>;\n  getProductByID: (\n    id: number,\n    force?: boolean,\n    options?: IGetProductByIDOptions\n  ) => Promise<ProductModel>;\n  getProductsByIDs: (\n    ids: number[],\n    force?: boolean,\n    options?: IGetProductByIDOptions\n  ) => Promise<ProductModel[]>;\n  getProductStatuses: (force?: boolean) => Promise<StatusModel[]>;\n  getProductTypes: (force?: boolean) => Promise<TypeModel[]>;\n  getPackSizesForPurchaseOptions: (productIDs: number[], force?: boolean) => Promise<any>;\n  getReplacementProductOptions: (productID: number, force?: boolean) => Promise<ProductModel[]>;\n  getOneTimeVariantFromAnyProductID: (productID: number) => Promise<ProductModel>;\n}\n\nexport const useProductFactory = (): IProductFactory => {\n  const [ productFactory, setProductFactory ] = useState<IProductFactory | null>(null);\n\n  const cefConfig = useCefConfig();\n  const inventoryFactory = useInventoryFactory();\n  const pricingFactory = usePricingFactory();\n\n  useEffect(() => {\n    if (!cefConfig || !inventoryFactory || !pricingFactory) {\n      return;\n    }\n    const factory: IProductFactory = {\n      applyDefaultStatusToProduct: async (\n        product: ProductModel,\n        statuses?: StatusModel[]\n      ): Promise<ProductModel> => {\n        const productStatuses: StatusModel[] = statuses ?? await productFactory.getProductStatuses();\n        const normalStatus = productStatuses.find(x => x.Name.toLowerCase() === \"normal\");\n        product.Status = normalStatus;\n        product.StatusID = normalStatus?.ID;\n        product.StatusKey = normalStatus?.CustomKey;\n        return product;\n      },\n      applyDefaultTypeToProduct: async (\n        product: ProductModel,\n        types?: TypeModel[]\n      ): Promise<ProductModel> => {\n        const productTypes: TypeModel[] = types ?? await productFactory.getProductTypes();\n        const generalType = productTypes.find(x => x.Name.toLowerCase() === \"general\");\n        product.Type = generalType;\n        product.TypeID = generalType?.ID;\n        product.TypeKey = generalType?.CustomKey;\n        return product;\n      },\n      getProductByID: async (\n        id: number,\n        force?: boolean,\n        options?: IGetProductByIDOptions\n      ): Promise<ProductModel> => {\n        const promiserKey = `productFactory:getProductByID:${id}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const productRes = await promiser.resolve(\n          promiserKey,\n          () => cvApi.products.GetProductByID(id),\n          true,\n          3,\n          true\n        );\n        if (!productRes?.data) {\n          throw new Error(`Failed to fetch product with ID ${id}`);\n        }\n        let product = productRes.data;\n        if (cefConfig?.featureSet.inventory.enabled && !options?.skipInventory) {\n          product = await inventoryFactory.factoryAssign(product);\n        }\n        if (cefConfig?.featureSet.pricing.enabled && !options?.skipPricing) {\n          product = await pricingFactory.factoryAssign(product);\n        }\n        return product;\n      },\n      getProductsByIDs: async (\n        ids: number[],\n        force?: boolean,\n        options?: IGetProductByIDOptions\n      ): Promise<ProductModel[]> => {\n        const promiserKey = `productFactory:getProductsByIDs:${ids.join(\",\")}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        async function inner(idSet: number[], indexKey: number, forceInner: boolean)\n          : Promise<{ results: ProductModel[], indexKey: number }> {\n          if (!idSet?.length) {\n            return { results: [], indexKey };\n          }\n          const promiserKeyInner = `productFactory:getProductsByIDs:${idSet.join(\",\")}`;\n          if (forceInner) {\n            promiser.flush(promiserKeyInner);\n          }\n          try {\n            const productsRes = await promiser.resolve(\n              promiserKeyInner,\n              () => cvApi.products.GetProductsByIDs({\n                i: idSet\n              }),\n              true,\n              3,\n              true\n            );\n            let products = _.cloneDeep(productsRes.data);\n            if (typeof products === \"string\") {\n              console.debug(\"products response didn't deserialize\");\n              products = JSON.parse(products);\n            }\n            if (cefConfig?.featureSet.inventory.enabled && !options?.skipInventory) {\n              products = await inventoryFactory.bulkFactoryAssign(products);\n            }\n            if (cefConfig?.featureSet.pricing.enabled && !options?.skipPricing) {\n              products = await pricingFactory.bulkFactoryAssign(products);\n            }\n            return { results: products, indexKey };\n          } catch (err) {\n            if (!forceInner\n                // \"Unterminated string in JSON\"\n                // \"Expected ',' or '}' after property value in JSON\"\n                && (err as Error)?.stack?.indexOf(\"at JSON.parse\") !== -1) {\n              // Force a retry, the data was cut off\n              console.debug(\"Had to force retry a product\");\n              return inner(idSet, indexKey, true);\n            }\n            console.error(err);\n            return { results: [], indexKey };\n          }\n        }\n        if (options?.skipForcedPage) {\n          return (await inner(ids, -1, force)).results;\n        }\n        const forcedPageSize = 1;\n        if (ids.length > forcedPageSize) {\n          const collected: ProductModel[] = [];\n          const promises = [];\n          for (let page = 0; page < (ids.length / forcedPageSize); page++) {\n            const start = page * forcedPageSize;\n            const end = ids.length >= start + forcedPageSize ? start + forcedPageSize : undefined;\n            const thisSlice = ids.slice(start, end);\n            promises.push(inner(thisSlice, page, force));\n            // // eslint-disable-next-line no-await-in-loop\n            // const innerResultSet = await inner(thisSlice);\n            // collected.push(...innerResultSet);\n          }\n          await Promise.all(promises).then(rarr => {\n            collected.push(...rarr.sort(x => x.indexKey).flatMap(x => x.results));\n          });\n          return collected;\n        }\n        return (await inner(ids, -1, force)).results;\n      },\n      getProductStatuses: async (force?: boolean): Promise<StatusModel[]> => {\n        const promiserKey = \"productFactory:getProductStatuses\";\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const productStatusesRes = await promiser.resolve(\n          promiserKey,\n          () => cvApi.products.GetProductStatuses({\n            Active: true,\n            AsListing: true\n          })\n        );\n        return productStatusesRes.data.Results;\n      },\n      getProductTypes: async (force?: boolean): Promise<TypeModel[]> => {\n        const promiserKey = \"productFactory:getProductTypes\";\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const productTypesRes = await promiser.resolve(\n          promiserKey,\n          () => cvApi.products.GetProductTypes({\n            Active: true,\n            AsListing: true\n          })\n        );\n        return productTypesRes.data.Results;\n      },\n      getPackSizesForPurchaseOptions: async (productIDs: number[], force?: boolean): Promise<any> => {\n        const promiserKey = \"productFactory:getPackSizesForPurchaseOptions\";\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const results = await Promise.all(\n          productIDs?.map(id => cvApi.products.GetAllPackSizesForPurchaseOption({ SelectedProductID: id }))\n        );\n        const validResults: {[id: number]: GetPackSizesVariantDTO[]} = {};\n        for (let i = 0; i < productIDs.length; i++) {\n          if (!results[i].data.ActionSucceeded) {\n            console.log(\"Failed to get pack sizes for purchse option\");\n          }\n          validResults[productIDs[i]] = results[i].data.Result;\n        }\n        return validResults;\n      },\n      getReplacementProductOptions: async (\n        productID: number,\n        force?: boolean\n      ): Promise<ProductModel[]> => {\n        const promiserKey = `productFactory:getReplacementProductOptions:${productID}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.products.ReplacementProducts({ ProductID: productID })\n        );\n        if (!res?.data) {\n          throw new Error(\"Failed to fetch replacements\");\n        }\n        return res.data;\n      },\n      getOneTimeVariantFromAnyProductID: async (productID: number): Promise<ProductModel | null> => {\n        const promiserKey = `productFactory:getOneTimeVariantFromAnyProductID:${productID}`;\n        try {\n          const res = await promiser.resolve(\n            promiserKey,\n            () => cvApi.products.GetOneTimeVariantFromAnyProductID({ ProductID: productID })\n          );\n          if (!res?.data) {\n            console.log(\"Failed to fetch one time variant\");\n            return null;\n          }\n          return res.data.Result;\n        } catch (error) {\n          console.error(\"Error fetching one time variant:\", error);\n          return null;\n        }\n      }\n    };\n\n    setProductFactory(factory);\n  }, [ cefConfig, inventoryFactory, pricingFactory ]);\n\n  return productFactory;\n};\n","/* eslint-disable sort-keys */\nimport { LotModel } from \"src/_api/cvApi._DtoClasses\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useSignalR } from \"src/_redux/slices/signalRSlice\";\nimport { useEffect, useState } from \"react\";\nimport { GetBidsDto } from \"src/_api\";\nimport { IHttpPromiseCallbackArg, PagedResultsBase } from \"src/_api/cvApi.shared\";\nimport { IDashboardTableData } from \"../interfaces/IDashboardTableData\";\nimport { useProductFactory } from \"./useProductFactory\";\n\nexport interface IBiddingFactory {\n  placeBid: (lotID: number, bidAmount?: number) => Promise<LotModel>;\n  getBidsForCurrentUser: (dto: GetBidsDto) => Promise<PagedResultsBase<IDashboardTableData>>;\n  getQuickBidAmount: (lotID: number) => Promise<number>;\n  getCurrentLotData: (lotID: number) => Promise<LotModel>;\n  getIncrement: (current: number, lot: LotModel) => number;\n  onLotUpdate: (lotID: number, action: (lot: LotModel) => void) => void;\n}\n\nexport const useBiddingFactory = (): IBiddingFactory | null => {\n  const [ biddingFactory, setBiddingFactory ] = useState<IBiddingFactory>(null);\n\n  const cefConfig = useCefConfig();\n  const signalR = useSignalR();\n  const productFactory = useProductFactory();\n\n  useEffect(() => {\n    if (!cefConfig || !signalR || biddingFactory !== null) {\n      return;\n    }\n    const factory = {\n      placeBid: (lotID: number, bidAmount?: number): Promise<LotModel> => {\n        if (!lotID || lotID === 0) {\n          throw new Error(\"Invalid lot ID\");\n        }\n        return cvApi.auctions\n          .PlaceBid({ LotID: lotID, BidAmount: bidAmount })\n          .then(r => r?.data);\n      },\n\n      // eslint-disable-next-line arrow-body-style\n      getQuickBidAmount: (lotID: number): Promise<number> => {\n        return factory.getCurrentLotData(lotID).then(r => {\n          const current = r?.HighestBid?.CurrentBid ?? r?.StartingPrice;\n          if (!current) {\n            return 1;\n          }\n          return current + factory.getIncrement(current, r);\n        });\n      },\n\n      // eslint-disable-next-line arrow-body-style\n      getCurrentLotData: (lotID: number): Promise<LotModel> => {\n        return promiser.resolve(\n          `currentLot${lotID}`,\n          () => cvApi.auctions.GetHighestBidForLot(lotID).then(r => r?.data)\n        );\n      },\n\n      getBidsForCurrentUser: async (dto: GetBidsDto): Promise<PagedResultsBase<IDashboardTableData>> => {\n        const res = await cvApi.auctions.GetCurrentBuyerBidsAndLotInfo(dto) as IHttpPromiseCallbackArg<\n          PagedResultsBase<IDashboardTableData>\n        >;\n        if (!res.data?.Results || !res.data?.Results?.length) {\n          throw new Error(\"Unable to fetch bids for the current user\");\n        }\n        const data = { ...res.data };\n        const products = await productFactory.getProductsByIDs(\n          data.Results.map(x => x.ProductID)\n        );\n        data.Results = data.Results.map((x, i) => ({\n          ...x,\n          product: products[i]\n        }));\n        return data as PagedResultsBase<IDashboardTableData>;\n      },\n\n      getIncrement: (current: number, lot: LotModel): number => {\n        const set = (lot.IncrementProfile?.IncrementSteps ?? lot.Auction?.IncrementProfile?.IncrementSteps)\n          ?.map(x => ({ start: x.Start, increment: x.Increment }))\n          ?? [ ...cefConfig.featureSet.auctions.increments ];\n        const increments = set.sort((a, b) => b.start - a.start);\n        for (const increment of increments) {\n          if (current >= increment.start) {\n            return increment.increment;\n          }\n        }\n        // Calculate bid increment here\n        return 1;\n      },\n\n      onLotUpdate: (lotID: number, action: (lot: LotModel) => void): void => {\n        // Subscribe to SignalR event for this lot\n        signalR.on(`ReceiveBidForLot${lotID}`, (newLot: LotModel) => {\n          const promiserKey = `currentLot${lotID}`;\n          promiser.flush(promiserKey);\n          promiser.resolve(promiserKey, () => Promise.resolve(newLot));\n          action(newLot);\n        });\n        // Broadcast the current bid immediately so each component doesn't have to explicitly ask for it\n        factory.getCurrentLotData(lotID)\n          .then(r => action(r))\n          .catch(err => console.error(err));\n      },\n    };\n    setBiddingFactory(factory);\n  }, [ cefConfig, signalR ]);\n\n  return biddingFactory;\n};\n","/* eslint-disable no-unused-vars */\n/**\n * @file React/src/Catalog/controls/Price.tsx\n * @author Copyright (c) 2019-2023 clarity-ventures.com. All rights reserved.\n * @desc Product detail price widget\n */\nimport { Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { CalculatedPrices } from \"src/_api/cvApi.shared\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useEffect, useState } from \"react\";\nimport promiser from \"src/_shared/Promiser\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\n// TODO: import { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface IProductPriceProps {\n  prices?: CalculatedPrices;\n  hidePercentOff?: boolean;\n  sizeClass?: string;\n  muteDiscountText?: boolean;\n  colClasses?: string;\n  productID?: number;\n  product?: any;\n}\n\nexport const Price = (props: IProductPriceProps): JSX.Element => {\n  const { prices, hidePercentOff, sizeClass, muteDiscountText, colClasses, product } = props;\n  const [ pricesToUse, setPricesToUse ] = useState<CalculatedPrices>(prices);\n  const { t } = useTranslation();\n  const { setRunning, finishRunning } = useViewState();\n\n  const checkIfPrimeOrMojoInitial = (productName: string) => {\n    return (/(?:Prime|Mojo).*Initial/iu).test(productName);\n  };\n\n  const isPrimeOrMojoInitial = checkIfPrimeOrMojoInitial(product && product.Name);\n\n  useEffect(() => {\n    if (pricesToUse) {\n      return;\n    }\n    setRunning();\n    const promiserKey = `CalculatePricesForProduct(${props.productID}, 1)`;\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.pricing.CalculatePricesForProduct(props.productID, 1)\n    )\n      .then(result => {\n        if (!result.data.ActionSucceeded) {\n          finishRunning(true, \"An error occurred while fetching prices\");\n          return;\n        }\n        const toUse: CalculatedPrices = {\n          amountOff: 0,\n          base: 0,\n          haveBase: false,\n          haveMsrp: false,\n          haveReduction: false,\n          haveSale: false,\n          isSale: false,\n          loading: true,\n          msrp: 0,\n          percentOff: 0,\n          reduction: 0,\n          sale: 0\n        };\n        toUse.base = result.data.Result.BasePrice;\n        toUse.sale = result.data.Result.SalePrice;\n        toUse.msrp = result.data.Result.MsrpPrice;\n        toUse.reduction = result.data.Result.ReductionPrice;\n        // Assign calculated values\n        toUse.haveBase = toUse.base >= 0;\n        toUse.haveSale = toUse.sale >= 0;\n        toUse.haveMsrp = toUse.msrp >= 0;\n        toUse.haveReduction = toUse.reduction >= 0;\n        toUse.isSale = toUse.sale > 0 && toUse.sale < toUse.base;\n        if (toUse.isSale) {\n          toUse.amountOff = toUse.base - toUse.sale;\n          toUse.percentOff = toUse.amountOff / toUse.base * 100;\n        }\n        toUse.repeatAbbr = result.data.Result.RepeatTypeAbbreviation;\n        toUse.repeatPeriods = result.data.Result.RepeatTypePeriods;\n        // Finish\n        toUse.loading = false;\n        setPricesToUse(toUse);\n      });\n  }, []);\n\n  if (!pricesToUse) {\n    return <LoadingWidget size=\"1x\" />;\n  }\n  return (\n    <Row id=\"pnlProductPrice\">\n      {/* Non-Kit setups  */}\n      <Col className={`${colClasses ?? \"\"} mt-0`}>\n        {/*\n        <span ng-if=\"pdpCtrl.prices.isSale\"\n          className=\"price text-success\">\n          <span data-translate=\"ui.storefront.product.detail.productDetails.onSale\"></span>\n          <br />\n        </span>\n        */}\n        {!pricesToUse.haveBase && !pricesToUse.haveSale\n          && <span className=\"price text-success\">\n            {t(\"ui.storefront.common.Free\")}\n          </span>\n        }\n        {pricesToUse.haveBase && pricesToUse.isSale\n          ? <del\n            className={`price ${muteDiscountText ? \"text-muted\" : \"\"} ${sizeClass ?? \"\"}`}\n            data-sid=\"ProductDetailsPagePrice\">\n            {currencyFormatter.format(pricesToUse.base)}\n          </del>\n          : <span className=\"price\" data-sid=\"ProductDetailsPagePrice\">\n            {currencyFormatter.format(pricesToUse.base)}\n            {pricesToUse.repeatAbbr && `/${pricesToUse.repeatAbbr}`}\n          </span>\n        }\n        {pricesToUse.isSale\n          && <span className=\"price text-success\">\n            {\" \"}\n            <span data-sid=\"ProductDetailsPageSalePrice\">\n              {currencyFormatter.format(pricesToUse.sale)}\n              {pricesToUse.repeatAbbr && `/${pricesToUse.repeatAbbr}`}\n            </span>\n          </span>\n        }\n        {/* {pricesToUse.isSale && !hidePercentOff\n          && <span className={`price-savings ${muteDiscountText ? \"text-muted\" : \"\"} ${sizeClass ?? \"\"}`}>\n            {\" \"}\n            {`${currencyFormatter.format(pricesToUse.amountOff)} (${Math.trunc(pricesToUse.percentOff)}%)\n              ${t(\"ui.storefront.product.detail.productDetails.Off\")}`\n            }\n          </span>\n        } */}\n        {pricesToUse.isSale && !hidePercentOff && !isPrimeOrMojoInitial\n          && <span className={`price-savings ${muteDiscountText ? \"text-muted\" : \"\"} ${sizeClass ?? \"\"}`}>\n            {\" \"}\n            {`${currencyFormatter.format(pricesToUse.amountOff)} (${Math.trunc(pricesToUse.percentOff)}%)\n              ${t(\"ui.storefront.product.detail.productDetails.Off\")}`\n            }\n          </span>\n        }\n        {pricesToUse.isSale && !hidePercentOff && isPrimeOrMojoInitial\n        && <span className={`price-savings ${isPrimeOrMojoInitial\n          ? \"text-success\" : muteDiscountText ? \"text-muted\" : \"\"} ${sizeClass ?? \"\"}`}>\n          {\" \"}\n          First Month Free\n        </span>\n        }\n      </Col>\n    </Row>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"primary\":\"#4b4b4b\",\"secondary\":\"#6c757d\",\"success\":\"#31a746\",\"info\":\"#17a2b8\",\"warning\":\"#ffc107\",\"danger\":\"#dc3545\",\"primaryDark\":\"#3e3e3e\",\"secondaryDark\":\"#60686f\",\"successDark\":\"#2b933e\",\"infoDark\":\"#148ea1\",\"warningDark\":\"#edb100\",\"dangerDark\":\"#d32535\",\"light\":\"#f4f5f5\",\"medium\":\"#ced4da\",\"dark\":\"#1e242b\",\"white\":\"#fff\",\"blue\":\"#357bff\",\"indigo\":\"#6610f2\",\"purple\":\"#6f42c1\",\"pink\":\"#e6717c\",\"red\":\"#dc3545\",\"orange\":\"#fd7e14\",\"yellow\":\"#ffc107\",\"green\":\"#31a746\",\"teal\":\"#20c997\",\"cyan\":\"#17a2b8\",\"greenFade\":\"#e1f6e5\",\"darkBlue\":\"#153166\",\"tableBorderColor\":\"#ddd\",\"brand-orange\":\"#f28522\",\"gridBreakpointxs\":\"0\",\"gridBreakpointsm\":\"576px\",\"gridBreakpointmd\":\"768px\",\"gridBreakpointlg\":\"992px\",\"gridBreakpointxl\":\"1200px\",\"gridBreakpointtk\":\"2000px\",\"gridBreakpointfk\":\"3000px\",\"boxShadowSm\":\"0 .125rem .25rem rgba(26,27,27,.075)\",\"ribbon\":\"ProductCardBiddingWidget_ribbon__0MmYV\",\"ribbonTopRight\":\"ProductCardBiddingWidget_ribbonTopRight__iRTDP\",\"tab\":\"ProductCardBiddingWidget_tab__BBoi2\",\"icon\":\"ProductCardBiddingWidget_icon__qzDnR\"};","import _ from \"lodash\";\nimport { LotModel } from \"src/_api/cvApi._DtoClasses\";\n\n// NOTE: They are used implicitly via data\nexport enum LotStatus {\n  // eslint-disable-next-line no-unused-vars\n  Opening = \"Opening\",\n  // eslint-disable-next-line no-unused-vars\n  Open = \"Open\",\n  // eslint-disable-next-line no-unused-vars\n  Closed = \"Closed\"\n}\n\nexport const lotStatus = (lot: LotModel, now: Date): LotStatus => {\n  const opensAtDate = lot.OpensAt && new Date(lot.OpensAt);\n  const closesAtDate = lot.ClosesAt && new Date(lot.ClosesAt);\n  // Not open yet\n  if (_.isDate(opensAtDate) && now < opensAtDate) {\n    return LotStatus.Opening;\n  }\n\n  // Open, not closed\n  if (!_.isDate(opensAtDate) || now >= opensAtDate) {\n    if (now < closesAtDate && lot.StatusKey !== \"Closed\") {\n      return LotStatus.Open;\n    }\n  }\n\n  // Closed\n  return LotStatus.Closed;\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Form, InputGroup, Tab, Tabs } from \"react-bootstrap\";\nimport { BidModel, LotModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { useBiddingFactory } from \"src/_shared/customHooks/useBiddingFactory\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { Price } from \"src/Catalog/controls/Price\";\nimport { AddToCartButton } from \"src/Cart/controls\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport classes from \"./ProductCardBiddingWidget.module.scss\";\nimport { LotStatus, lotStatus } from \"./productCardBiddingFunctions\";\nimport _ from \"lodash\";\nimport { faCrown } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface IProductCardBiddingWidgetProps {\n  lotID: number;\n  lot?: LotModel;\n  product: ProductModel;\n  containerClasses?: string;\n  asIcon: boolean;\n  containerStyle: any;\n}\n\nexport const ProductCardBiddingWidget = (props: IProductCardBiddingWidgetProps): JSX.Element => {\n  const [ lot, setLot ] = useState<LotModel>(null);\n  const [ now, setNow ] = useState(new Date());\n  const [ currentBid, setCurrentBid ] = useState<BidModel>(null);\n  const [ bidAmount, setBidAmount ] = useState<number>(0);\n  const [ bidPlacedSuccess, setBidPlacedSuccess ] = useState<boolean>(false);\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const biddingFactory = useBiddingFactory();\n  const currentUser = useCurrentUser();\n\n  const lotUpdateReceived = (newLot: LotModel) => {\n    setLot(newLot);\n    setCurrentBid(newLot?.HighestBid);\n  };\n\n  useEffect(() => {\n    if (biddingFactory) {\n      biddingFactory.onLotUpdate(props.lotID, (newLot: LotModel) => lotUpdateReceived(newLot));\n    }\n  }, [ biddingFactory ]);\n\n  useEffect(() => {\n    if (!biddingFactory || !lot) {\n      return;\n    }\n    biddingFactory\n      .getQuickBidAmount(lot.ID)\n      .then(newQuickBid => {\n        if (bidAmount < newQuickBid) {\n          setBidAmount(newQuickBid);\n        }\n      });\n  }, [ currentBid ]);\n\n  useEffect(() => {\n    const intervalId = setInterval(() => {\n      setNow(new Date());\n    }, 1000);\n\n    return () => {\n      clearInterval(intervalId);\n    };\n  }, []);\n\n  const placeBid = (): void => {\n    // Finish running called on the lot update callback\n    setRunning();\n    biddingFactory\n      .placeBid(props.lotID, bidAmount)\n      .then(r => {\n        if (!r) {\n          finishRunning(true, \"Lot is missing\");\n          return;\n        }\n        setBidPlacedSuccess(true);\n        // Handle the lot response here\n        // Example: if highest bid user ID != current user ID, then the user's new bid is not the highest bid\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  };\n\n  const onChangeBidAmount = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setBidAmount(Number(e.target.value));\n    if (bidPlacedSuccess) {\n      setBidPlacedSuccess(false);\n    }\n  };\n\n  const disableBidButton = () => _.isUndefined(currentUser.ID)\n    || currentUser.ID === currentBid?.UserID\n    || viewState.running\n    || lotStatus(lot, now) === LotStatus.Closed;\n\n  if (!lot || !biddingFactory) {\n    return null;\n  }\n\n  return (\n    <>\n      {lot.BuyNowAvailable ? (\n        <Tabs\n          id=\"bid-buy-tab\"\n          className=\"tabs nav-fill\"\n          defaultActiveKey=\"currentBid\">\n          <Tab className=\"mt-3\"\n            tabClassName={classes.tab}\n            eventKey=\"currentBid\"\n            title=\"Current Bid\">\n            <CurrentBidTab\n              lot={lot}\n              currentBid={currentBid}\n              bidAmount={bidAmount}\n              onChangeBidAmount={onChangeBidAmount}\n              product={props.product}\n              disableBidButton={disableBidButton}\n              placeBid={placeBid}\n              now={now}\n              bidPlacedSuccess={bidPlacedSuccess}\n            />\n          </Tab>\n          <Tab className=\"mt-3\"\n            tabClassName={classes.tab}\n            eventKey=\"buyNow\"\n            title=\"Buy Now\">\n            <BuyNowTab\n              lot={lot}\n              product={props.product}\n              disableBidButton={disableBidButton}\n              now={now}\n            />\n          </Tab>\n        </Tabs>\n      ) : (\n        <CurrentBidTab\n          lot={lot}\n          currentBid={currentBid}\n          bidAmount={bidAmount}\n          onChangeBidAmount={onChangeBidAmount}\n          product={props.product}\n          disableBidButton={disableBidButton}\n          placeBid={placeBid}\n          now={now}\n          bidPlacedSuccess={bidPlacedSuccess}\n        />\n      )}\n    </>\n  );\n};\n\ninterface ICurrentBidTabProps {\n  lot: LotModel;\n  currentBid: BidModel;\n  bidAmount: number;\n  onChangeBidAmount: (e: React.ChangeEvent<HTMLInputElement>) => void;\n  product: ProductModel;\n  disableBidButton: Function;\n  placeBid: (e: React.MouseEvent<HTMLButtonElement>) => void;\n  now: Date;\n  bidPlacedSuccess: boolean;\n}\n\nconst CurrentBidTab: React.FC<ICurrentBidTabProps> = (props: ICurrentBidTabProps) => {\n  const currentUser = useCurrentUser();\n  return (\n    <div className=\"position-relative\">\n      {lotStatus(props.lot, props.now) === LotStatus.Closed\n        && <div className={`${classes.ribbon} ${classes.ribbonTopRight}`}><span>lot closed</span></div>}\n      <div className=\"d-flex justify-content-around\">\n        <h3 className=\"d-flex align-items-center\" data-sid={`currentBid_${props.lot.Name}`}>\n          {\n            (props.lot.HighestBid?.UserID !== undefined\n              && props.lot.HighestBid.UserID === currentUser.ID)\n              && <FontAwesomeIcon\n                data-sid={`winningCrown_${props.lot.Name}`}\n                icon={faCrown as IconProp}\n                className={`fa-fw ${classes.icon}`}\n                style={{ color: \"gold\" }}\n              />\n          }\n          {currencyFormatter.format(props.currentBid?.CurrentBid ?? props.lot.StartingPrice ?? 0)}\n        </h3>\n      </div>\n      <InputGroup className=\"flex-nowrap w-100\">\n        <Form.Label style={{ width: \"50%\" }} className=\"me-1\">\n          Bid Amount:\n          {props.lot.ReservePrice && props.lot.ReservePrice !== 0\n            && (props.bidAmount ?? 0) < (props.lot.ReservePrice ?? 0)\n            && <aside className=\"text-success small\"><strong>Reserve Not Met</strong></aside>}\n        </Form.Label>\n        {/* <InputGroup.Text>\n          <i className=\"fal fa-fw fa-dollar-sign\" />\n        </InputGroup.Text> */}\n        <Form.Control\n          className=\"text-center\"\n          aria-label=\"num\"\n          type=\"number\"\n          data-sid=\"biddingInput\"\n          value={props.bidAmount}\n          min={props.currentBid?.CurrentBid ?? 0}\n          onChange={props.onChangeBidAmount}\n          // placeholder removes defaulted 0 from input once user starts typing\n          // adding defaultValue does not work\n          placeholder=\"\"\n        />\n      </InputGroup>\n      <Button\n        variant=\"success\"\n        className=\"w-100 mt-1\"\n        data-sid={`btnGridBidProduct_${props.product.Name ?? \"\"}`}\n        disabled={props.disableBidButton()}\n        onClick={props.placeBid}>\n        <span data-sid={`successfulBidPlaced_${props.product.Name ?? \"\"}`}>\n          {props.bidPlacedSuccess ? \"Bid Placed\" : \"Place Bid\"}\n        </span>\n      </Button>\n      {(props.bidAmount ?? 0) < (props.currentBid?.CurrentBid ?? 0)\n            && <aside className=\"text-danger small text-center mt-1\">\n              <strong>Bid must be higher than current bid</strong>\n            </aside>}\n    </div>\n  );\n};\n\ninterface IBuyNowTabProps {\n  lot: LotModel;\n  product: ProductModel;\n  disableBidButton: Function;\n  now: Date,\n}\n\nconst BuyNowTab: React.FC<IBuyNowTabProps> = (props: IBuyNowTabProps) => {\n  return (\n    <div className=\"position-relative\">\n      {lotStatus(props.lot, props.now) === LotStatus.Closed\n        && <div className={`${classes.ribbon} ${classes.ribbonTopRight}`}><span>lot closed</span></div>}\n      <div className=\"d-flex justify-content-between\">\n        <span>Buy now price:</span>\n        <Price prices={props.product.readPrices()} />\n      </div>\n      <div>\n        <AddToCartButton\n          product={props.product}\n          quantity={1}\n          btnSize=\"lg\"\n          btnVariant=\"success\"\n          disabled={props.disableBidButton()}\n          excludeQuoteCart={true}\n        />\n      </div>\n    </div>\n  );\n};\n","import { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { AddToCartButton, AddToCartQuantitySelector } from \"src/Cart/controls\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { ViewDetailsButton } from \"src/Catalog/controls/ViewDetailsButton\";\nimport { ProductCardBiddingWidget } from \"src/Catalog/views/ProductCardWidgets/ProductCardBiddingWidget\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\n\ninterface IProductCardActionButtonWidgetProps {\n  product: ProductModel;\n  containerClasses?: string;\n  containerStyle?: any;\n  excludeQuoteCart?: boolean;\n  addToCartBtnClasses?: string;\n  addToCartBtnVariant?: string;\n  quoteCartBtnSeparated?: boolean;\n  viewDetailsBtnVariant?: string;\n  useOutOfStockInsteadOfViewDetails?: boolean;\n  outOfStockBtnVariant?: string;\n  outOfStockBtnClasses?: string;\n  small?: boolean;\n  buttonView?: \"addToCart\" | \"viewDetails\" | \"addToQuoteCart\";\n  asIcon?: boolean;\n  index?: number;\n  forceNoQuantitySelector?: true;\n  disableModals?: boolean;\n  initialQuantity?: number;\n}\n\n// eslint-disable-next-line complexity\nexport const ProductCardActionButtonWidget = (\n  props: IProductCardActionButtonWidgetProps\n): JSX.Element => {\n  const {\n    product,\n    containerClasses,\n    containerStyle,\n    excludeQuoteCart,\n    addToCartBtnClasses,\n    addToCartBtnVariant,\n    // TODO: quoteCartBtnSeparated,\n    viewDetailsBtnVariant,\n    useOutOfStockInsteadOfViewDetails,\n    outOfStockBtnVariant,\n    outOfStockBtnClasses,\n    small,\n    buttonView,\n    asIcon,\n    index,\n    disableModals\n  } = props;\n\n  const [ localQuantity, setLocalQuantity ] = useState<number>(props.initialQuantity ?? 1);\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const { finishRunning, viewState } = useViewState();\n  // TODO: const cart = useSelector((state: IReduxStore) => state.cart.cart);\n\n  // TODO: const productInCart = cart?.SalesItems?.find(item => item.ProductID === product.ID);\n\n  const buttonViewInternal = buttonView ?? \"addToCart\";\n  const showAddToQuoteCartBtn = cefConfig.featureSet.salesQuotes.useQuoteCart && !excludeQuoteCart;\n  // TODO: const showAddToQuoteCartDropdown = !quoteCartBtnSeparated;\n\n  if (buttonViewInternal === \"viewDetails\") {\n    return (\n      <ViewDetailsButton\n        quantity={localQuantity}\n        seoUrl={product.SeoUrl}\n        product={product}\n        btnClasses=\"btn-block\"\n        btnVariant={viewDetailsBtnVariant ?? \"secondary\"}\n        btnSize=\"lg\"\n        includeQuoteCart={false}\n        verticalAlign=\"middle\"\n        asIcon={false}\n        useConfirmModal={!cefConfig?.addToQuoteCartModalDisabled}\n      />\n    );\n  }\n\n  if (!product.readInventory || !product.TypeName) {\n    finishRunning(true, \"Product is missing inventory or TypeName\");\n    return <ErrorView viewState={viewState} />;\n  }\n\n  const productInventory = product.readInventory();\n  const productIsOutOfStock = productInventory.IsOutOfStock;\n  const productAllowsBackOrder = productInventory.AllowBackOrder;\n  const productIsVariantMaster = product.TypeName.toLowerCase() === \"variant master\";\n\n  const productCantBeAddedToRegularCart = productIsOutOfStock && !productAllowsBackOrder;\n\n  if (product.LotID) {\n    return <ProductCardBiddingWidget\n      product={product}\n      lotID={product.LotID}\n      containerClasses={containerClasses}\n      containerStyle={containerStyle}\n      asIcon={asIcon}\n    />;\n  }\n\n  if (buttonViewInternal === \"addToQuoteCart\") {\n    return (\n      <>\n        {!productIsVariantMaster && !props.forceNoQuantitySelector\n          && <div\n            className={`${asIcon ? \"d-inline-block\" : \"mb-1 d-block\"}`}\n            style={{ width: \"100%\" }}>\n            <AddToCartQuantitySelector\n              id={product.ID}\n              key={localQuantity}\n              increaseDisabled={false}\n              decreaseDisabled={localQuantity <= 1}\n              initialValue={localQuantity}\n              onChange={(val: number) => setLocalQuantity(val)}\n            />\n          </div>\n        }\n        {productIsVariantMaster || productCantBeAddedToRegularCart\n          ? <ViewDetailsButton\n            quantity={localQuantity}\n            seoUrl={product.SeoUrl}\n            product={product}\n            btnClasses={`${asIcon ? \"\" : \"btn-block\"}`}\n            btnVariant={viewDetailsBtnVariant ?? \"secondary\"}\n            includeQuoteCart={showAddToQuoteCartBtn}\n            verticalAlign={asIcon ? \"top\" : \"middle\"}\n            useConfirmModal={!cefConfig?.addToQuoteCartModalDisabled && !disableModals}\n          />\n          : null}\n        {!productIsVariantMaster && !productCantBeAddedToRegularCart\n          ? <AddToCartButton\n            quoteCartOnly={true}\n            product={product}\n            quantity={localQuantity}\n            btnClasses={addToCartBtnClasses}\n            btnVariant={addToCartBtnVariant ?? \"success\"}\n            index={index}\n            useConfirmModal={!cefConfig?.addToQuoteCartModalDisabled && !disableModals}\n          />\n          : null}\n      </>\n    );\n  }\n\n  if (productIsVariantMaster) {\n    return (\n      <>\n        <div className=\"hidden-stock-quantity btn-group w-100\">\n          <ViewDetailsButton\n            quantity={localQuantity}\n            seoUrl={product.SeoUrl}\n            product={product}\n            btnClasses={`${asIcon ? \"\" : \"btn-block\"} underline-hover-none`}\n            btnVariant={viewDetailsBtnVariant ?? \"secondary\"}\n            btnSize={!small && !asIcon ? \"lg\" : null}\n            includeQuoteCart={false}\n            verticalAlign={asIcon ? \"top\" : \"middle\"}\n            asIcon={asIcon}\n            useConfirmModal={!cefConfig?.addToQuoteCartModalDisabled && !disableModals}\n          />\n        </div>\n      </>\n    );\n  }\n\n  if (productIsOutOfStock && !productAllowsBackOrder) {\n    return (\n      <>\n        {showAddToQuoteCartBtn && !props.forceNoQuantitySelector\n          && <div\n            className={\n              containerClasses ? containerClasses : asIcon ? \"d-inline-block\" : \"mb-1 d-block\"\n            }\n            style={containerStyle ? containerStyle : { width: \"100%\" }}>\n            <AddToCartQuantitySelector\n              id={product.ID}\n              key={localQuantity}\n              decreaseDisabled={localQuantity <= 1}\n              initialValue={localQuantity}\n              onChange={(val: number) => setLocalQuantity(val)}\n            />\n          </div>\n        }\n        {useOutOfStockInsteadOfViewDetails\n          ? <>\n            <Button\n              variant={outOfStockBtnVariant ?? \"primary\"}\n              size={!small && !asIcon ? \"lg\" : null}\n              className={`w-100 ${outOfStockBtnClasses ?? \"\"}`}\n              disabled={true}>\n              {t(\"ui.storefront.common.OutOfStock\")}\n            </Button>\n            {showAddToQuoteCartBtn\n              && <AddToCartButton\n                quoteCartOnly={true}\n                product={product}\n                quantity={localQuantity}\n                btnClasses={`mt-1 w-100 rounded ${addToCartBtnClasses ?? (asIcon ? \"\" : \"btn-block\")}`}\n                btnVariant=\"secondary\"\n                verticalAlign={asIcon ? \"top\" : \"middle\"}\n                asIcon={asIcon}\n                index={index}\n                useConfirmModal={!cefConfig?.addToQuoteCartModalDisabled && !disableModals}\n              />\n            }\n          </>\n          : <div className=\"hidden-stock-quantity btn-group w-100\">\n            <ViewDetailsButton\n              quantity={localQuantity}\n              seoUrl={product.SeoUrl}\n              product={product}\n              btnClasses={`${addToCartBtnClasses ?? (asIcon ? \"\" : \"btn-block\")} underline-hover-none`}\n              btnVariant={viewDetailsBtnVariant ?? \"secondary\"}\n              includeQuoteCart={showAddToQuoteCartBtn}\n              verticalAlign={asIcon ? \"top\" : \"middle\"}\n              asIcon={asIcon}\n              useConfirmModal={!cefConfig?.addToQuoteCartModalDisabled && !disableModals}\n            />\n          </div>\n        }\n      </>\n    );\n  }\n\n  return (\n    <>\n      {!props.forceNoQuantitySelector\n      && <div\n        className={\n          containerClasses ? containerClasses : asIcon ? \"d-inline-block\" : \"mb-1 d-block\"\n        }\n        style={containerStyle ? containerStyle : { width: \"100%\" }}>\n        <AddToCartQuantitySelector\n          id={product.ID}\n          key={localQuantity}\n          decreaseDisabled={localQuantity <= 1}\n          initialValue={localQuantity}\n          onChange={(val: number) => setLocalQuantity(val)}\n        />\n      </div>}\n      <AddToCartButton\n        product={product}\n        quantity={localQuantity}\n        btnClasses={addToCartBtnClasses ?? (asIcon ? \"\" : \"btn-block\")}\n        btnVariant={addToCartBtnVariant ?? \"success\"}\n        verticalAlign={asIcon ? \"top\" : \"middle\"}\n        excludeQuoteCart={!showAddToQuoteCartBtn}\n        dropdownBtnVariant={productCantBeAddedToRegularCart ? \"secondary\" : addToCartBtnVariant ?? \"success\"}\n        asIcon={asIcon}\n        index={index}\n        useConfirmModal={!cefConfig.disableAddToCartModals && !disableModals}\n      />\n    </>\n  );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Dropdown, Form, InputGroup } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ProductSuggestResult, SearchSort } from \"src/_api/cvApi._DtoClasses\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useDebounceWithCallback } from \"src/_shared/customHooks/useDebounceWithCallback\";\nimport promiser from \"src/_shared/Promiser\";\n\nexport const ExternalSearchBox = (): JSX.Element => {\n  const [ suggestions, setSuggestions ] = useState<Array<ProductSuggestResult>>([]);\n  const [ showSuggestions, setShowSuggestions ] = useState(false);\n  const [ query, setQuery ] = useState(\"\");\n  const [ , setError ] = useState(null);\n\n  useDebounceWithCallback(query, handleDebouncedQuery, 500);\n  const { t } = useTranslation();\n  const history = useHistory();\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    if (suggestions?.length) {\n      setShowSuggestions(true);\n    }\n  }, [ suggestions ]);\n\n  function handleDebouncedQuery(): void {\n    if (!query?.length) {\n      setShowSuggestions(false);\n      setSuggestions([]);\n      return;\n    }\n    getSuggestionsWithQuery(query);\n  }\n\n  function getSuggestionsWithQuery(qry: string): void {\n    const promiserKey = `getSuggestionsWithQuery(${qry})`;\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.providers\n        .SuggestProductCatalogWithProvider({\n          Page: 1,\n          PageSetSize: 8,\n          PageSize: 8,\n          Query: qry,\n          Sort: SearchSort.Relevance,\n        })\n    ).then(result => {\n      const sorted = result.data.sort((a, b) => a.Score - b.Score).reverse();\n      setSuggestions(sorted);\n    })\n      .catch(err => {\n        setError(err);\n      });\n  }\n\n  const handleSubmit = (e: React.MouseEvent<HTMLFormElement>): void => {\n    if (!cefConfig) {\n      e.preventDefault();\n      return;\n    }\n    if (query === \"\") {\n      history.push(cefConfig.routes.catalog.root);\n      history.go(0);\n    } else {\n      history.push(`${cefConfig.routes.catalog.root}?term=${query}`);\n      history.go(0);\n      setQuery(\"\");\n    }\n    e.preventDefault();\n  };\n\n  // TODO: show <ErrorView /> somewhere in JSX below where it'll look good\n\n  return (\n    <div role=\"search\">\n      <Form\n        className=\"form-inline my-2 my-lg-0 position-relative\"\n        onSubmit={handleSubmit}>\n        <InputGroup>\n          <Form.Control\n            className=\"search-input p-0 ps-2 border-right-0\"\n            type=\"search\"\n            placeholder={t(\n              \"ui.storefront.searchCatalog.controls.externalSearchBox.Search.Ellipses\"\n            )}\n            aria-label=\"Search\"\n            onChange={e => setQuery(e.target.value)}\n            value={query}\n          />\n          <InputGroup.Text className=\"p-0\">\n            <Button\n              variant=\"\"\n              className=\"ps-3 pe-3\"\n              style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}\n              type=\"submit\">\n              <i className=\"fal fa-fw fa-search\" aria-label=\"search\" />\n            </Button>\n          </InputGroup.Text>\n        </InputGroup>\n        <Dropdown\n          className=\"position-absolute bg-white p-0\"\n          style={{ top: \"105%\", zIndex: 1000 }}\n          show={showSuggestions}\n          onToggle={(nextShow => {\n            if (nextShow === false) {\n              setShowSuggestions(false);\n            }\n          })}>\n          <Dropdown.Menu>\n            {suggestions.map(suggestion => {\n              return <Dropdown.Item as=\"div\"\n                key={suggestion.Name}\n                className=\"px-2 py-0 border-0\">\n                <a\n                  href={corsLink(cefConfig, `/${suggestion.SeoUrl}`, \"productDetail\")}\n                  onClick={() => setShowSuggestions(false)}\n                  className=\"underline-hover-none\">\n                  {suggestion.Name}\n                </a>\n              </Dropdown.Item>;\n            })}\n          </Dropdown.Menu>\n        </Dropdown>\n      </Form>\n    </div>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"navButton\":\"MagicImageCarousel_navButton__BSRyx\",\"navButtonLeft\":\"MagicImageCarousel_navButtonLeft__pzPMW\",\"navButtonRight\":\"MagicImageCarousel_navButtonRight__T4C0w\"};","/** @format */\n\nimport React, { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LanguageModel } from \"src/_api/cvApi._DtoClasses\";\n\nexport const LanguageSelectorButton = (): JSX.Element => {\n  const [ showSelectLanguageModal, setShowSelectLanguageModal ] = useState<boolean>(false);\n  const [ availableLanguages, setAvailableLanguages ] = useState<Array<LanguageModel>>([]);\n\n  const { i18n } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const onConfirm = () => {\n    setRunning();\n    cvApi.globalization\n      .GetLanguageByKey(i18n.language)\n      .then(res => {\n        setShowSelectLanguageModal(false);\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  const onLanguageSelectorButtonClicked = () => {\n    setShowSelectLanguageModal(true);\n    setRunning();\n    cvApi.globalization\n      .GetLanguages()\n      .then(res => {\n        if (!res.data || !res.data.Results) {\n          finishRunning(true, \"No languages found\");\n          return;\n        }\n        setAvailableLanguages(res.data.Results);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  const currentLng = availableLanguages.length ? availableLanguages.find(lang => lang.Locale === i18n.language) : null;\n\n  return (\n    <>\n      <ConfirmationModal\n        onConfirm={onConfirm}\n        onCancel={() => setShowSelectLanguageModal(false)}\n        // Intentionally empty\n        title=\"\"\n        show={showSelectLanguageModal}\n        confirmDisabled={viewState.hasError}\n        confirmBtnLabel=\"Select\">\n        {viewState.running\n          ? <LoadingWidget />\n          : <select\n            value={i18n.language}\n            onChange={(e: React.ChangeEvent<HTMLSelectElement>) => i18n.changeLanguage(e.target.value)}>\n            {availableLanguages && Array.isArray(availableLanguages)\n              ? availableLanguages.map(lang => <option key={lang.ID} value={lang.Locale}>\n                {lang.UnicodeName}\n              </option>)\n              : null}\n          </select>\n        }\n        {viewState.hasError && <ErrorView viewState={viewState} />}\n      </ConfirmationModal>\n      <Button variant=\"secondary\" onClick={onLanguageSelectorButtonClicked}>\n        {currentLng ? currentLng.UnicodeName : i18n.language}\n      </Button>\n    </>\n  );\n};\n","import { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Container, Row } from \"react-bootstrap\";\nimport { Categories } from \"src/_shared/Categories\";\nimport { MiniMenu } from \"src/_shared/MiniMenu\";\nimport { ExternalSearchBox } from \"src/Catalog/controls\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { LanguageSelectorButton } from \"src/_shared/LanguageSelectorButton\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\nexport const NavMenu = (): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  return (\n    <Container as=\"header\"\n      fluid\n      className=\"d-print-none\"\n      id=\"header\">\n      <div\n        id=\"headerMid\"\n        className=\"bg-light row align-items-center\"\n        style={{ minHeight: \"70px\" }}>\n        <Col xs={12}\n          md=\"auto\"\n          className=\"xs-text-center sm-text-center\">\n          <Link\n            to={corsLink(cefConfig, \"/\", \"site\")}\n            className=\"navbar-brand\"\n            title=\"Clarity eCommerce Development Website\">\n            &nbsp;\n            <ImageWithFallback\n              data-sid=\"imgCompanySiteLogo\"\n              className=\"img-fluid lazyloaded\"\n              src={\"clarity-ecommerce-logo.png\"}\n              kind={\"brands\"}\n              alt=\"Clarity Ventures Inc\"\n              imageResizerParamsBody={{\n                maxwidth: 200,\n                maxheight: 200,\n                scale: \"both\",\n                mode: \"pad\"\n              }}\n            />\n          </Link>\n        </Col>\n        <Col className=\"form-inline\">\n          <ExternalSearchBox />\n        </Col>\n        <Col xs={12} xl=\"auto\">\n          <Row className=\"align-items-center h-100\">\n            <Col xs=\"auto\" className=\"nav-item ms-auto dropdown\">\n              <MiniMenu />\n            </Col>\n          </Row>\n          <Row className=\"align-items-center mb-2\">\n            <Col xs=\"auto\" className=\"nav-item col-auto\">\n              <LanguageSelectorButton />\n            </Col>\n          </Row>\n        </Col>\n      </div>\n      <Row id=\"headerBot\">\n        <Col xs={12} className=\"bg-dark-blue\">\n          <Container className=\"px-2\">\n            <div className=\"navbar navbar-expand-md navbar-dark bg-dark-blue row py-md-0\">\n              <button\n                className=\"navbar-toggler\"\n                type=\"button\"\n                data-toggle=\"collapse\"\n                data-target=\"#headerBotContent\"\n                aria-controls=\"headerBotContent\"\n                aria-expanded=\"false\"\n                aria-label=\"Toggle Navigation\">\n                {t(\"ui.storefront.userDashboard.ToggleNavigation\")}\n                <div className=\"navbar-toggler-icon\"></div>\n              </button>\n              <div className=\"collapse navbar-collapse\" id=\"headerBotContent\">\n                <div className=\"navbar-nav\">\n                  <ul className=\"navbar-nav nav nav-pills\">\n                    <li className=\"nav-item dropdown mega-dropdown position-static\">\n                      <Link\n                        className=\"nav-link text-white dropdown-toggle\"\n                        to={corsLink(cefConfig, \"/\", \"catalog\")}\n                        data-bs-toggle=\"dropdown\"\n                        aria-expanded=\"false\">\n                        {t(\"ui.storefront.common.Product.Plural\")}\n                      </Link>\n                      <div className=\"dropdown-menu mega-menu w-100 top-auto\">\n                        <Categories />\n                      </div>\n                    </li>\n                    <li className=\"nav-item dropdown\">\n                      <Link\n                        className=\"nav-link text-white dropdown-toggle\"\n                        id=\"dropdownMenu\"\n                        to={corsLink(cefConfig, \"/about\", \"site\")}\n                        data-toggle=\"dropdown\"\n                        role=\"button\"\n                        aria-haspopup=\"true\"\n                        aria-expanded=\"false\">\n                        {t(\"ui.storefront.common.AboutUs\")}\n                      </Link>\n                      {/* <ul\n                        className=\"dropdown-menu\"\n                        aria-labelledby=\"dropdownMenu\">\n                        <li>\n                          <Link className=\"dropdown-item\" to=\"/\">\n                            Link 1\n                          </Link>\n                        </li>\n                        <li>\n                          <Link className=\"dropdown-item\" to=\"/\">\n                            Link 2\n                          </Link>\n                        </li>\n                        <li>\n                          <Link className=\"dropdown-item\" to=\"/\">\n                            Link 3\n                          </Link>\n                        </li>\n                      </ul> */}\n                    </li>\n                    <li className=\"nav-item\">\n                      <Link className=\"nav-link text-white\"\n                        to={corsLink(cefConfig, \"/news\", \"site\")}>\n                        News\n                      </Link>\n                    </li>\n                    <li className=\"nav-item\">\n                      <Link className=\"nav-link text-white\"\n                        to={corsLink(cefConfig, \"/industry\", \"site\")}>\n                        Industry\n                      </Link>\n                    </li>\n                    <li className=\"nav-item\">\n                      <Link className=\"nav-link text-white\"\n                        to={corsLink(cefConfig, \"/request-info\", \"site\")}>\n                        Request Info\n                      </Link>\n                    </li>\n                  </ul>\n                </div>\n              </div>\n            </div>\n          </Container>\n        </Col>\n      </Row>\n    </Container>\n  );\n};\n","import { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n  faAt,\n  faMapMarker,\n  faPhoneSquare\n} from \"@fortawesome/free-solid-svg-icons\";\nimport {\n  faCcAmex,\n  faCcDiscover,\n  faCcMastercard,\n  faCcPaypal,\n  faCcVisa,\n  faFacebook,\n  faLinkedin,\n  faTwitter\n} from \"@fortawesome/free-brands-svg-icons\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\nexport const Footer = (): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  return (\n    <footer\n      id=\"footer\"\n      className=\"container-fluid bg-dark-blue text-light py-4 d-print-none text-white-50\">\n      {/* <div id=\"footerTop2\" className=\"row\">\n        <div className=\"col-12\">\n          <div cef-brand-formatting-footer></div>\n        </div>\n      </div> */}\n      <div id=\"footerTop\" className=\"row\"></div>\n      <div id=\"footerMid\" className=\"row\">\n        <div className=\"\n          col-12 order-1\n          col-sm-6 order-sm-1\n          col-md-4 order-md-1\n          col-lg-3 order-lg-1\n          col-xl-2 order-xl-1\n          lg-ms-auto xl-ms-auto\">\n          <a\n            id=\"btnFooterLogo\"\n            className=\"mb-1\"\n            title=\"Logo\"\n            href=\"https://www.clarity-ventures.com/\"\n            rel=\"noopener noreferrer\"\n            target=\"_blank\">\n            <ImageWithFallback\n              className=\"img-fluid lazyload\"\n              alt=\"Clarity Ventures Website\"\n              width=\"259\"\n              height=\"74\"\n              src={\"clarity-logo-white-on-black.png\"}\n              kind=\"brands\"\n            />\n          </a>\n          <p className=\"text-center small mt-2\">\n            The Clarity eCommerce platform takes you where the other stores\n            can&apos;t go. It allows full customization of integrations,\n            reporting, styling, tracking, inventory... the list goes on.\n          </p>\n        </div>\n        <div className=\"\n          order-2 col-7\n          order-sm-2 col-sm-6\n          order-md-5 col-md-4\n          order-lg-5 col-lg-3\n          order-xl-5 col-xl-auto\n          lg-me-auto xl-me-auto mb-3\">\n          <h4 className=\"text-uppercase small text-light\">\n            {t(\"ui.storefront.common.ContactUs\")}\n          </h4>\n          <div className=\"row gx-0 align-items-center mb-3\">\n            <div className=\"col-auto\">\n              <div className=\"border border-light rounded-circle p-2\">\n                <FontAwesomeIcon icon={faMapMarker as IconProp} className=\"fa-fw fa-lg\" />\n              </div>\n            </div>\n            <div className=\"col ps-3\" id=\"companyAddress\">\n              <address className=\"mb-0 small\">\n                <span className=\"address\">\n                  6805 Capital of Texas Hwy\n                  <br />\n                  Suite 312\n                  <br />\n                  Austin, TX 78731\n                </span>\n              </address>\n            </div>\n          </div>\n          <div className=\"row gx-0 align-items-center mb-3\">\n            <div className=\"col-auto\">\n              <div className=\"border border-light rounded-circle p-2\">\n                <FontAwesomeIcon icon={faPhoneSquare as IconProp} className=\"fa-fw fa-lg\" />\n              </div>\n            </div>\n            <div className=\"col ps-3\" id=\"companyPhone\">\n              <a className=\"text-white-50 small\" href=\"tel:+18009288160\">\n                800-928-8160\n              </a>\n            </div>\n          </div>\n          <div className=\"row gx-0 align-items-center mb-3\">\n            <div className=\"col-auto\">\n              <div className=\"border border-light rounded-circle p-2\">\n                <FontAwesomeIcon icon={faAt as IconProp} className=\"fa-fw fa-lg\" />\n              </div>\n            </div>\n            <div className=\"col ps-3\" id=\"companyEmail\">\n              <a\n                className=\"text-white-50 small\"\n                href=\"mailto:rfq@clarity-ventures.com\">\n                rfq@clarity-ventures.com\n              </a>\n            </div>\n          </div>\n        </div>\n        <div className=\"order-3 col-5\n          xs-text-right\n          order-sm-6 col-sm-6\n          order-md-6 col-md-auto\n          order-lg-6 col-lg-auto\n          lg-me-auto\n          order-xl-6 col-xl-6\n          xl-text-right\n          col-tk-auto\">\n          <a href=\"https://www.facebook.com/ClarityTeam\" title=\"Facebook\">\n            <FontAwesomeIcon\n              icon={faFacebook as IconProp}\n              className=\"fa-3x text-white-50\"\n            />\n          </a>\n          <a href=\"https://twitter.com/ClarityTeam\" title=\"Twitter\">\n            <FontAwesomeIcon icon={faTwitter as IconProp} className=\"fa-3x text-white-50\" />\n          </a>\n          <a href=\"https://www.linkedin.com/company/1155055\" title=\"LinkedIn\">\n            <FontAwesomeIcon\n              icon={faLinkedin as IconProp}\n              className=\"fa-3x text-white-50\"\n            />\n          </a>\n        </div>\n        <div className=\"\n          order-4 col-6\n          order-sm-3 col-sm-6\n          order-md-2 col-md-auto\n          order-lg-2 col-lg-auto\n          order-xl-2 col-xl-auto\">\n          <h4 className=\"text-uppercase small text-light\">Shopping Guide</h4>\n          <ul className=\"links ps-3 small\">\n            <li>\n              <a className=\"text-white-50\"\n                title=\"FAQs\"\n                href={corsLink(cefConfig, \"/FAQS\", \"site\")}>\n                {t(\"ui.storefront.storeDashboard.storeMenu.SupportAndFAQs\")}\n              </a>\n            </li>\n            <li>\n              <a className=\"text-white-50\"\n                title=\"Payment\"\n                href={corsLink(cefConfig, \"/Payments\", \"site\")}>\n                {t(\"ui.storefront.checkout.checkoutPanels.Payment\")}\n              </a>\n            </li>\n            <li>\n              <a className=\"text-white-50\"\n                title=\"Shipment\"\n                href={corsLink(cefConfig, \"/Shipment\", \"site\")}>\n                Shipment\n              </a>\n            </li>\n            <li>\n              <a className=\"text-white-50\"\n                title=\"Where is my order?\"\n                href={corsLink(cefConfig, \"/orders\", \"dashboard\")}>\n                Where is my order?\n              </a>\n            </li>\n            <li className=\"last\">\n              <a className=\"text-white-50\"\n                title=\"Return policy\"\n                href={corsLink(cefConfig, \"/Return-Policy\", \"site\")}>\n                Return policy\n              </a>\n            </li>\n          </ul>\n        </div>\n        <div className=\"\n          order-5 col-6\n          order-sm-4 col-sm-6\n          order-md-3 col-md-auto\n          order-lg-3 col-lg-auto\n          order-xl-3 col-xl-auto\">\n          <h4 className=\"text-uppercase small text-light\">Features</h4>\n          <ul className=\"links ps-3 small\">\n            <li className=\"first Profile\">\n              <a className=\"text-white-50\" href={corsLink(cefConfig, \"/accountProfile\", \"dashboard\")}>\n                <span>\n                  {t(\"ui.storefront.userDashboard2.controls.YourAccount\")}\n                </span>\n              </a>\n            </li>\n            <li>\n              <Link to={corsLink(cefConfig, \"/wishList\", \"dashboard\")} className=\"text-white-50\">\n                <span>{t(\"ui.storefront.menu.miniMenu.wishList\")}</span>\n              </Link>\n            </li>\n            <li>\n              <Link to={corsLink(cefConfig, \"/favoritesList\", \"dashboard\")} className=\"text-white-50\">\n                <span>{t(\"ui.storefront.menu.miniMenu.FavoritesList\")}</span>\n              </Link>\n            </li>\n            <li>\n              <Link to={corsLink(cefConfig, \"/addressBook\", \"dashboard\")} className=\"text-white-50\">\n                <span>{t(\"ui.storefront.menu.miniMenu.addressBook\")}</span>\n              </Link>\n            </li>\n            <li>\n              <Link to={corsLink(cefConfig, \"/inStockAlerts\", \"dashboard\")} className=\"text-white-50\">\n                <span>{t(\"ui.storefront.menu.miniMenu.inStockAlerts\")}</span>\n              </Link>\n            </li>\n            <li className=\"last Orders\">\n              <Link to={corsLink(cefConfig, \"/orders\", \"dashboard\")} className=\"text-white-50\">\n                <span>{t(\"ui.storefront.storeDashboard.storeOrderHistory.OrderHistory\")}</span>\n              </Link>\n            </li>\n          </ul>\n        </div>\n        <div className=\"\n          order-6 col-6\n          order-sm-5 col-sm-6\n          order-md-4 col-md-auto\n          order-lg-4 col-lg-auto\n          order-xl-4 col-xl-auto\">\n          <h4 className=\"text-uppercase small text-light\">\n            {t(\"ui.storefront.storeDashboard.storeProfileEditor.Information\")}\n          </h4>\n          <ul className=\"links ps-3 small\">\n            <li>\n              <Link\n                to={corsLink(cefConfig, \"/\", \"contactUs\")}\n                className=\"text-white-50\"\n                title={t(\"ui.storefront.common.ContactUs\") as string}>\n                {t(\"ui.storefront.common.ContactUs\")}\n              </Link>\n            </li>\n            <li>\n              <Link\n                to={corsLink(cefConfig, \"/\", \"terms\")}\n                className=\"text-white-50\"\n                title={t(\"ui.storefront.common.TermsAndConditions\")}>\n                {t(\"ui.storefront.common.TermsAndConditions\")}\n              </Link>\n            </li>\n            <li>\n              <Link to={corsLink(cefConfig, \"/\", \"privacy\")}\n                className=\"text-white-50\"\n                title=\"Privacy\">\n                Privacy\n              </Link>\n            </li>\n            {/*\n              <li>\n                <a className=\"text-white-50\" ui-sref-plus uisrp-root=\"/Stores\" title=\"Our stores\" className=\"link-rss\">\n                  Our Stores\n                </a>\n              </li>\n            */}\n          </ul>\n        </div>\n        <div className=\"\n          order-7 col-12 xs-text-center\n          order-sm-7 col-sm-12 sm-text-center\n          order-md-7 col-md-auto\n          order-lg-7 col-lg-auto lg-ms-auto\n          order-xl-7 col-xl-6\n          col-tk-auto me-tk-auto\">\n          <FontAwesomeIcon icon={faCcPaypal as IconProp} className=\"fa-3x me-1\" />\n          <FontAwesomeIcon icon={faCcVisa as IconProp} className=\"fa-3x me-1\" />\n          <FontAwesomeIcon icon={faCcMastercard as IconProp} className=\"fa-3x me-1\" />\n          <FontAwesomeIcon icon={faCcAmex as IconProp} className=\"fa-3x me-1\" />\n          <FontAwesomeIcon icon={faCcDiscover as IconProp} className=\"fa-3x me-1\" />\n        </div>\n      </div>\n      <div id=\"footerBot\" className=\"row mt-3\">\n        <div className=\"col-12 text-center small\" id=\"copyright-entry\">\n          Copyright 2021 by Clarity Ventures |&nbsp;\n          <a\n            className=\"text-white-50\"\n            href=\"https://www.clarity-ventures.com/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n            Enterprise eCommerce By Clarity\n          </a>\n        </div>\n      </div>\n    </footer>\n  );\n};\n","/** @format */\n\nimport { NavMenu } from \"src/Navigation/NavMenu\";\nimport { Footer } from \"src/_shared/Footer\";\n\ninterface ILayoutProps {\n  children: React.ReactNode;\n}\n\nexport const Layout = (props: ILayoutProps): JSX.Element => <div>\n  <NavMenu />\n  <div className=\"container-tk main\">{props.children}</div>\n  <Footer />\n</div>;\n","/** @format */\n\nimport { Container } from \"react-bootstrap\";\n\nexport const Home = (): JSX.Element => <div>\n  <section className=\"section-featured\">\n    <Container className=\"my-5\">\n      <div className=\"head-section text-center\">\n        <h1 className=\"title\">Featured Products</h1>\n      </div>\n    </Container>\n  </section>\n</div>;\n","import { useEffect, useState } from \"react\";\nimport { Alert, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\n\ninterface ICartValidatorProps {\n  type: \"Cart\" | \"Quote Cart\";\n  // TODO: What does this do?\n  shift?: boolean;\n}\n\ninterface IMessageWithClass {\n  message: string;\n  alertVariant: string;\n}\n\nexport const CartValidator = (props: ICartValidatorProps): JSX.Element => {\n  const { type, shift } = props;\n\n  // eslint-disable-next-line array-bracket-spacing\n  const [errorMessages, setErrorMessages] = useState<IMessageWithClass[]>(null);\n  const [ updating, setUpdating ] = useState<boolean>(false);\n\n  const cart = useCart(type);\n  const cartMessages = cart?.Messages;\n\n  const { t } = useTranslation();\n\n  const resolveMessage = (item: string): Promise<IMessageWithClass> => new Promise((resolve, _reject) => {\n    switch (item.substring(0, item.indexOf(\"!\")).toUpperCase() || \"\") {\n      case \"SUCCESS\": {\n        resolve({ message: item, alertVariant: \"success\" });\n        break;\n      }\n      case \"WARNING\": {\n        if (shift) {\n          resolve({ message: item.replace(\"WARNING\", \"ACCEPTED\"), alertVariant: \"success\" });\n        } else {\n          resolve({ message: item, alertVariant: \"warning\" });\n        }\n        break;\n      }\n      case \"ERROR\": {\n        if (\n          item !== \"ERROR! There are no active items in this cart.\"\n            && item !== \"ERROR! There is no cart to test\"\n        ) {\n          if (shift) {\n            resolve({ message: item.replace(\"ERROR\", \"WARNING\"), alertVariant: \"warning\" });\n          } else {\n            resolve({ message: item, alertVariant: \"danger\" });\n          }\n        }\n        if (item === \"ERROR! Some products have role restrictions.\") {\n          resolve({\n            message: t(\"ui.storefront.cartValidator.RoleRestrictions\"),\n            alertVariant: \"danger\"\n          });\n        }\n        break;\n      }\n      default: {\n        break;\n      }\n    }\n  });\n\n  const buildErrorMessages = async (): Promise<void> => {\n    setErrorMessages([]);\n    if (!cart || !cartMessages) {\n      return;\n    }\n    if (!updating) {\n      setUpdating(true);\n      await setTimeout(() => {\n        Promise.all(cartMessages.map(x => resolveMessage(x))).then(\n          (rarr: IMessageWithClass[]) => {\n            if (!rarr || !Array.isArray(rarr)) {\n              return;\n            }\n            setErrorMessages(rarr);\n            setUpdating(false);\n          }\n        );\n      }, 250);\n    }\n  };\n\n  useEffect(() => {\n    buildErrorMessages();\n  }, [ cart, cartMessages ]);\n\n  if (!errorMessages) {\n    return null;\n  }\n\n  return (\n    <Row>\n      <Col xs={12}>\n        <div className=\"alerts\" id=\"alertCartValidationMessages\">\n          {errorMessages.map(messageData => <div key={messageData.message}>\n            <Alert variant={messageData.alertVariant}>\n              {messageData.message}\n            </Alert>\n          </div>)}\n        </div>\n      </Col>\n    </Row>\n  );\n};\n","import { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ConfirmationModal, Modal } from \"src/_shared/modals\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\n\ninterface IRemoveDiscountButtonProps {\n  discount: AppliedCartItemDiscountModel;\n  btnVariant?: string;\n  btnClasses?: string;\n  btnIdPrefix: string;\n  labelIdPrefix: string;\n  idSuffix: string;\n  hideText?: boolean;\n}\n\nexport const RemoveDiscountButton = (props: IRemoveDiscountButtonProps): JSX.Element => {\n  const { discount, btnVariant, btnClasses, btnIdPrefix, labelIdPrefix, idSuffix, hideText } = props;\n\n  const [ showRemoveDiscountConfirmationModal, setShowRemoveDiscountConfirmationModal ]\n    = useState<boolean>(false);\n  const [ showDiscountResponseModal, setShowDiscountResponseModal ] = useState<boolean>(false);\n  const [ discountResponseModalMessage, setDiscountResponseModalMessage ] = useState<string>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const cartFactory = useCartFactory();\n\n  const removeCartItemDiscount = (discountI: AppliedCartItemDiscountModel): void => {\n    setRunning();\n    cartFactory.removeDiscount(ServiceStrings.carts.types.cart, discountI)\n      .then(() => {\n        setShowRemoveDiscountConfirmationModal(false);\n        finishRunning();\n      })\n      .catch(err => {\n        setShowRemoveDiscountConfirmationModal(false);\n        setShowDiscountResponseModal(true);\n        setDiscountResponseModalMessage(\n          t(\"ui.storefront.cart.RemoveDiscount.UnableToRemoveDiscount\")\n        );\n        finishRunning(true, err);\n      });\n  };\n\n  const { DiscountValueType, DiscountValue } = discount;\n\n  return (\n    <>\n      <ConfirmationModal\n        show={showRemoveDiscountConfirmationModal}\n        onCancel={() => setShowRemoveDiscountConfirmationModal(false)}\n        onConfirm={() => removeCartItemDiscount(discount)}\n        size=\"md\"\n        confirmBtnLabel={t(\"ui.storefront.common.Yes\")}\n        cancelBtnLabel={t(\"ui.storefront.common.No\")}>\n        {viewState.running && <LoadingWidget overlay={true} />}\n        {t(\"ui.storefront.discounts.AreYouSureYouWantToRemoveThisDiscount\")}\n      </ConfirmationModal>\n      <Modal\n        show={showDiscountResponseModal}\n        onCancel={() => {\n          setShowDiscountResponseModal(false);\n          setDiscountResponseModalMessage(null);\n        }}\n        size=\"md\"\n        modalBodyClasses=\"p-0\">\n        <div className=\"p-3\">\n          {discountResponseModalMessage ?? t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\")}\n        </div>\n        <div className=\"modal-footer\">\n          <Button\n            variant=\"primary\"\n            onClick={() => {\n              setShowDiscountResponseModal(false);\n              setDiscountResponseModalMessage(null);\n            }}>\n            {t(\"ui.storefront.common.OK\")}\n          </Button>\n        </div>\n      </Modal>\n      <Button\n        variant={btnVariant ?? \"none\"}\n        className={btnClasses ?? \"top p-0 text-nowrap\"}\n        id={`${btnIdPrefix}_${idSuffix}`}\n        name={`${btnIdPrefix}_${idSuffix}`}\n        title={t(\"ui.storefront.cart.removeOrderDiscountFromCart\")}\n        aria-label={t(\"ui.storefront.cart.removeOrderDiscountFromCart\")}\n        onClick={() => setShowRemoveDiscountConfirmationModal(true)}>\n        {!hideText\n          && <>\n            <span className=\"text-success small\" id={`${labelIdPrefix}_${idSuffix}`}>\n              {DiscountValueType === 1\n                ? currencyFormatter.format(DiscountValue)\n                : `${DiscountValue}%`}\n            </span>\n            &nbsp;\n            <span className=\"small text-success\">{t(\"ui.storefront.common.Off\")}</span>\n            &nbsp;\n          </>\n        }\n        {/* @ts-ignore */}\n        <i className=\"fa-light fa-trash-can text-brand-orange\" />\n        <span className=\"sr-only\">{t(\"ui.storefront.cart.removeOrderDiscountFromCart\")}</span>\n      </Button>\n    </>\n  );\n};\n","import { Col, Row } from \"react-bootstrap\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IProductCardAttributesWidgetProps {\n  product: ProductModel;\n  attributes: GeneralAttributeModel[];\n}\n\nexport const ProductCardAttributesWidget = (\n  props: IProductCardAttributesWidgetProps\n): JSX.Element => {\n  const { product, attributes } = props;\n\n  if (!attributes || !product) {\n    return null;\n  }\n  return (\n    <Row>\n      {attributes\n        && attributes.map(attr => {\n          if (!product.SerializableAttributes || !product.SerializableAttributes[attr.CustomKey]?.Value) {\n            return null;\n          }\n          return (\n            <Col className=\"card-attr\"\n              key={`ListView${attr.CustomKey}`}\n              sm={5}>\n              <b>{attr.DisplayName || attr.Name || attr.CustomKey}</b>\n              <br />\n              <span>{product.SerializableAttributes[attr.CustomKey].Value}</span>\n            </Col>);\n        })}\n    </Row>\n  );\n};\n","import { AllHTMLAttributes } from \"react\";\nimport { Anchor } from \"react-bootstrap\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { removeMgLabelFromString } from \"src/_shared/common/Formatters\";\n\ninterface IProductCardNameWidgetProps extends AllHTMLAttributes<HTMLAnchorElement> {\n  productName: string;\n  productSeoUrl: string;\n  rows?: number;\n  index?: number;\n}\n\nexport const ProductCardNameWidget = (props: IProductCardNameWidgetProps): JSX.Element => {\n  const { productName, productSeoUrl, rows, index, ...remaining } = props;\n  const cefConfig = useCefConfig();\n  if (!productSeoUrl) {\n    return null;\n  }\n\n  return (\n    <Anchor\n      {...remaining}\n      id={`productCatalogDetailsLinkFor_${productName}`}\n      title={productName}\n      aria-label={productName}\n      href={corsLink(cefConfig, `/${productSeoUrl}`, \"productDetail\")}>\n      <span className={`rows-${rows ?? 2}`} data-sid={`cardProductName_${index}`}>\n        {removeMgLabelFromString(productName)}\n      </span>\n    </Anchor>\n  );\n};\n\nProductCardNameWidget.defaultProps = {\n  className: \"product-card-name\"\n};\n","import { BaseHTMLAttributes, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row, RowProps } from \"react-bootstrap\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { CalculatedPrices, ProductModel } from \"src/_api/cvApi.shared\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\ninterface IProductCardPricingWidgetProps extends BaseHTMLAttributes<RowProps> {\n  product: ProductModel;\n  displayStyle?: string;\n}\n\nexport const ProductCardPricingWidget = (props: IProductCardPricingWidgetProps): JSX.Element => {\n  const { product, displayStyle } = props;\n\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\n\n  const { viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n\n  if (viewState.running || !product || !product.readPrices || product.readPrices().loading) {\n    return <LoadingWidget />;\n  }\n\n  const showLoginRequired = cefConfig?.loginForPricing.enabled && !currentUser;\n\n  if (showLoginRequired) {\n    return (\n      <>\n        <Button\n          id=\"btLoginForPricing\"\n          variant=\"secondary\"\n          className=\"nav-link pointer p-0 text-capitalize\"\n          onClick={() => setShowLoginModal(true)}>\n          {t(\"ui.storefront.searchCatalog.loginToViewPricing\")}&#187;\n        </Button>\n        <LoginModal\n          show={showLoginModal}\n          onConfirm={() => {\n            setShowLoginModal(false);\n          }}\n          onCancel={() => setShowLoginModal(false)}\n        />\n      </>\n    );\n  }\n\n  let prices: CalculatedPrices = null;\n  if (\n    product?.ProductAssociations?.length\n    && product.ProductAssociations.every(p => p.readPrices)\n  ) {\n    const sortedProductAssociations = product.ProductAssociations.sort(associatedProduct => {\n      const prdt = associatedProduct.Slave as ProductModel;\n      const prdtPrices = prdt.readPrices();\n\n      return prdtPrices.sale ? prdtPrices.sale : prdtPrices.base;\n    });\n    // Cheapest?\n    const cheapestProduct = sortedProductAssociations[0].Slave as ProductModel;\n    prices = cheapestProduct.readPrices();\n  }\n  prices = product.readPrices();\n\n  if (displayStyle === \"multiLevel\") {\n    return (\n      <Row className={props.className} id=\"multiLevelPriceTextWrapper\">\n        {prices.haveMsrp\n          && <Col xs={12} className=\"mb-1\">\n            <div className=\"w-49 d-inline-block\">\n              {t(\"ui.storefront.product.detail.featuredProducts.listPrice\")}\n            </div>\n            <div className=\"w-49 d-inline-block text-end\">\n              {currencyFormatter.format(prices.msrp)}\n            </div>\n          </Col>\n        }\n        {prices.haveReduction\n          && <Col xs={12} className=\"mb-1\">\n            <div className=\"w-49 d-inline-block\">\n              {t(\"ui.storefront.product.detail.featuredProducts.ReductionPrice\")}\n            </div>\n            <div className=\"w-49 d-inline-block text-end\">\n              {currencyFormatter.format(prices.reduction)}\n            </div>\n          </Col>\n        }\n        {/* Store's normal selling price */}\n        {prices.haveBase\n          && <Col xs={12} className=\"mb-1\">\n            <div className={`bold w-49 d-inline-block ${prices.isSale ? \"strike-through\" : \"\"}`}>\n              {t(\"ui.storefront.product.detail.featuredProducts.ourPrice\")}\n            </div>\n            <div\n              className={`bold w-49 d-inline-block text-end ${\n                prices.isSale ? \"strike-through\" : \"\"\n              }`}>\n              {currencyFormatter.format(prices.base)}\n            </div>\n          </Col>\n        }\n        {/* Sale Price when on sale, or the normal selling price when not on sale */}\n        {prices.haveSale\n          && <Col xs={12} className=\"mb-1\">\n            <div className={`bold big w-49 d-inline-block ${prices.isSale ? \"text-danger\" : \"\"}`}>\n              {t(\n                prices.isSale ? \"ui.storefront.common.SalePrice\" : \"ui.storefront.catalog.YourPrice\"\n              )}\n            </div>\n            <div\n              className={`bold big w-49 d-inline-block text-end ${\n                prices.isSale ? \"text-danger\" : \"\"\n              }`}>\n              {currencyFormatter.format(prices.isSale ? prices.sale : prices.base)}\n            </div>\n          </Col>\n        }\n        {/* Savings amount from normal selling price (or list if set) */}\n        <Col xs={12} className=\"mb-1\">\n          <div className=\"w-49 d-inline-block italic\">\n            {t(\"ui.storefront.common.Saving.Plural\")}\n          </div>\n          {!prices.isSale && <div className=\"w-49 d-inline-block italic text-end\">&dash;</div>}\n          {prices.isSale\n            && <div className=\"w-49 d-inline-block italic text-end\">\n              <span>{currencyFormatter.format(prices.amountOff)}</span>&nbsp;\n              <span>{Math.round(prices.percentOff)}</span>%\n            </div>\n          }\n        </Col>\n      </Row>\n    );\n  }\n\n  return (\n    <Row className={props.className}\n      style={props.style}\n      id=\"sideBySidePriceTextWrapper\">\n      {!prices.haveBase && !prices.haveSale\n        && <Col xs={12} className=\"bold very-big\">\n          {t(\"ui.storefront.common.Free\")}\n        </Col>\n      }\n      {/* Store's normal selling price */}\n      {prices.haveBase\n        && <Col\n          xs={12}\n          id=\"ProductCardPrice\"\n          className={\n            prices.isSale\n              ? \"strike-through text-muted small\"\n              : \"bold very-big\"\n          }>\n          {currencyFormatter.format(prices.base)}\n          {prices.repeatAbbr && `/${prices.repeatAbbr}`}\n        </Col>\n      }\n      {/* Sale Price when on sale, hidden if not */}\n      {prices.isSale\n        && <Col xs={12}\n          id=\"ProductCardSalePrice\"\n          className=\"bold very-big text-danger\">\n          {currencyFormatter.format(prices.sale)}\n          {prices.repeatAbbr && `/${prices.repeatAbbr}`}\n        </Col>\n      }\n      {/* Savings amount from normal selling price (or list if set) */}\n      {prices.isSale\n        && <Col xs={12} className=\"italic small text-muted\">\n          <span>{currencyFormatter.format(prices.amountOff)}</span>&nbsp;/&nbsp;\n          <span>{Math.round(prices.percentOff)}</span>% {t(\"ui.storefront.common.Off\")}\n        </Col>\n      }\n    </Row>\n  );\n};\n\nProductCardPricingWidget.defaultProps = {\n  displayStyle: \"sideBySide\",\n  className: \"text-center product-pricing flex-column justify-content-center\",\n};\n","import { useTranslation } from \"react-i18next\";\nimport { removeMgLabelFromString } from \"src/_shared/common/Formatters\";\n\ninterface IProductCardSkuWidgetProps {\n  containerClassName?: string;\n  productID: number;\n  customKey: string;\n  hideLabels?: boolean;\n}\n\nexport const ProductCardSkuWidget = (props: IProductCardSkuWidgetProps): JSX.Element => {\n  const { containerClassName, productID, customKey, hideLabels } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <div className={`product-sku rows-1 ${containerClassName || \"\"}`}>\n      {!hideLabels\n        && <span id=\"CatalogProductCardSkuText\">{t(\"ui.storefront.cart.SKU\")}</span>\n      }\n      &nbsp;<span\n        id={`lblProductSku${productID}`}>\n        {removeMgLabelFromString(customKey)}\n      </span>\n    </div>\n  );\n};\n","import { Alert } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport _ from \"lodash\";\n\ninterface IProductCardStockWidgetProps {\n  product: ProductModel | SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>;\n  hideStock?: boolean;\n  countStoreStockOnly?: boolean;\n  alertClasses?: string;\n}\n\nexport const ProductCardStockWidget = (props: IProductCardStockWidgetProps): JSX.Element => {\n  const { product, hideStock, alertClasses } = props;\n\n  const { t } = useTranslation();\n  const { viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n\n  const hideStockInternal = !cefConfig.featureSet.inventory.enabled\n    || hideStock\n    || cefConfig.loginForInventory.enabled && !currentUser\n    || false;\n\n  const isVariantMaster = (product as ProductModel).TypeKey === \"VARIANT-MASTER\";\n  return (\n    <>\n      {!isVariantMaster\n      && !hideStockInternal\n      && !viewState.running\n      && _.isFunction(product.readInventory)\n      && !product.readInventory().loading\n        ? <>\n          {product.readInventory().IsUnlimitedStock\n            ? <Alert\n              variant=\"success\"\n              className={alertClasses ?? \"p-0 bg-transparent border-0 d-inline-block\"}\n              id={`InventoryUnlimitedStatusText_${product.CustomKey}`}>\n              {t(\"ui.storefront.common.Unlimited\")}\n            </Alert>\n            : <span>\n              {product.readInventory().IsOutOfStock\n                ? <>\n                  {product.readInventory().AllowBackOrder\n                    ? <Alert\n                      variant=\"warning\"\n                      className={alertClasses ?? \"p-0 bg-transparent border-0 d-inline-block\"}\n                      id={`InventoryBackorderStatusText_${product.CustomKey}`}>\n                      <span>{t(\"ui.storefront.common.OnBackorder\")}</span>\n                    </Alert>\n                    : <Alert\n                      variant=\"danger\"\n                      className={alertClasses ?? \"p-0 bg-transparent border-0 d-inline-block\"}\n                      id={`InventoryOutOfStockStatusText_${product.CustomKey}`}>\n                      <span>{t(\"ui.storefront.common.OutOfStock\")}</span>\n                    </Alert>\n                  }\n                </>\n                : <Alert variant=\"success\" className={alertClasses ?? \"p-0 bg-transparent border-0 d-inline-block\"}>\n                  &nbsp;\n                  <span id={`InventoryInStockStatusText_${product.CustomKey}`}>\n                    {t(\"ui.storefront.common.InStock\")}\n                  </span>\n                </Alert>\n              }\n            </span>\n          }\n          {viewState.running && <LoadingWidget overlay={true} message={viewState.waitMessage} />}\n        </>\n        : <Alert variant=\"success\" className={alertClasses ?? \"p-0 bg-transparent border-0 d-inline-block mb-2\"}>\n          &nbsp;\n          <span id={`InventoryInStockStatusText_${product.CustomKey}`}>\n            {t(\"ui.storefront.common.InStock\")}\n          </span>\n        </Alert>}\n    </>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"primary\":\"#4b4b4b\",\"secondary\":\"#6c757d\",\"success\":\"#31a746\",\"info\":\"#17a2b8\",\"warning\":\"#ffc107\",\"danger\":\"#dc3545\",\"primaryDark\":\"#3e3e3e\",\"secondaryDark\":\"#60686f\",\"successDark\":\"#2b933e\",\"infoDark\":\"#148ea1\",\"warningDark\":\"#edb100\",\"dangerDark\":\"#d32535\",\"light\":\"#f4f5f5\",\"medium\":\"#ced4da\",\"dark\":\"#1e242b\",\"white\":\"#fff\",\"blue\":\"#357bff\",\"indigo\":\"#6610f2\",\"purple\":\"#6f42c1\",\"pink\":\"#e6717c\",\"red\":\"#dc3545\",\"orange\":\"#fd7e14\",\"yellow\":\"#ffc107\",\"green\":\"#31a746\",\"teal\":\"#20c997\",\"cyan\":\"#17a2b8\",\"greenFade\":\"#e1f6e5\",\"darkBlue\":\"#153166\",\"tableBorderColor\":\"#ddd\",\"brand-orange\":\"#f28522\",\"gridBreakpointxs\":\"0\",\"gridBreakpointsm\":\"576px\",\"gridBreakpointmd\":\"768px\",\"gridBreakpointlg\":\"992px\",\"gridBreakpointxl\":\"1200px\",\"gridBreakpointtk\":\"2000px\",\"gridBreakpointfk\":\"3000px\",\"boxShadowSm\":\"0 .125rem .25rem rgba(26,27,27,.075)\",\"timerWidget\":\"ProductCardLotTimerWidget_timerWidget__I5cWg\",\"alert\":\"ProductCardLotTimerWidget_alert__pdt3Q\"};","import { useEffect, useState } from \"react\";\nimport Countdown, { CountdownRenderProps } from \"react-countdown\";\nimport { LotModel, ProductModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useBiddingFactory } from \"src/_shared/customHooks/useBiddingFactory\";\nimport classes from \"./ProductCardLotTimerWidget.module.scss\";\nimport { LotStatus, lotStatus } from \"./productCardBiddingFunctions\";\nimport { Alert } from \"react-bootstrap\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface IProductCardLotTimerWidgetProps {\n  product: ProductModel;\n}\n\nexport const ProductCardLotTimerWidget = (props: IProductCardLotTimerWidgetProps): JSX.Element => {\n  const [ lot, setLot ] = useState<LotModel>(null);\n  const biddingFactory = useBiddingFactory();\n  const cefConfig = useCefConfig();\n  const [ now, setNow ] = useState(new Date());\n  useEffect(() => {\n    if (biddingFactory && props.product?.LotID) {\n      // Subscribe to updates for this lot\n      biddingFactory.onLotUpdate(props.product.LotID, (newLot: LotModel) => {\n        setLot(newLot);\n      });\n    }\n  }, [ biddingFactory ]);\n\n  useEffect(() => {\n    const intervalId = setInterval(() => {\n      setNow(new Date());\n    }, 1000);\n\n    return () => {\n      clearInterval(intervalId);\n    };\n  }, []);\n\n  if (!cefConfig || !lot) {\n    return null;\n  }\n\n  const opensAtDate = lot.OpensAt && new Date(lot.OpensAt);\n  const closesAtDate = lot.ClosesAt && new Date(lot.ClosesAt);\n\n  // Return no timer if neither field is defined\n  if (!opensAtDate && !closesAtDate) {\n    return null;\n  }\n\n  // eslint-disable-next-line react/display-name\n  const renderer = (options?: any) => (data: CountdownRenderProps) => {\n    return <span>{data.days}d {data.hours}hr {data.minutes}min{options?.showSeconds && <> {data.seconds}s</>}</span>;\n  };\n\n  const getCountdown = () => {\n    const options: any = {};\n    // Not open yet\n    if (lotStatus(lot, now) === LotStatus.Opening) {\n      return (\n        <Alert className={classes.alert} variant=\"info\">\n          <div>Opens in:</div>\n          <strong><Countdown date={opensAtDate} renderer={renderer(options)} /></strong>\n        </Alert>\n      );\n    }\n\n    // Open, not closed\n    if (lotStatus(lot, now) === LotStatus.Open) {\n      let alertVariant = \"success\";\n      const closesAtDateMinusWarningThreshold = new Date(closesAtDate);\n      closesAtDateMinusWarningThreshold.setSeconds(\n        closesAtDateMinusWarningThreshold.getSeconds() - cefConfig.featureSet.auctions.bidEndsWarningThreshold\n      );\n      if (now >= closesAtDateMinusWarningThreshold) {\n        alertVariant = \"warning\";\n        options.showSeconds = true;\n      }\n      return (\n        <Alert className={classes.alert} variant={alertVariant}>\n          <div>Bid Ends:</div>\n          <strong>\n            <i className=\"fal fa-fw fa-clock\"></i>{\" \"}\n            <Countdown date={closesAtDate} renderer={renderer(options)} />\n          </strong>\n        </Alert>\n      );\n    }\n\n    // Closed\n    return null;\n  };\n\n  return (\n    <small className={classes.timerWidget}>\n      {getCountdown()}\n    </small>\n  );\n};\n","import _ from \"lodash\";\nimport { useTranslation } from \"react-i18next\";\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\n\nexport const SalesItemQuantityLine = (props: {\n    salesItem: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>,\n    excludeTotal?: boolean\n    packQuantity?: string\n    primeOrMojoQuantity?: string\n  }): JSX.Element => {\n  const { t } = useTranslation();\n\n  return (\n    <span>\n      { !props.excludeTotal\n        && <>{props.packQuantity\n          ? props.packQuantity\n          : props.primeOrMojoQuantity\n            ? props.primeOrMojoQuantity\n            : `${props.salesItem.TotalQuantity} `}</>\n      }\n      {_.isNumber(props.salesItem.QuantityBackOrdered) && props.salesItem.QuantityBackOrdered > 0\n        && <span className=\"text-nowrap\">\n          {`(${props.salesItem.QuantityBackOrdered ?? 0} ${t(\"ui.storefront.common.Backordered\")})`}\n        </span>\n      }\n    </span>\n  );\n};\n","import { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface ILoginForPricingProps {\n}\n\nexport const LoginForPricing = (props: ILoginForPricingProps): JSX.Element => {\n  const [ showLoginModal, setShowLoginModal ] = useState(false);\n\n  const { t } = useTranslation();\n\n  return (\n    <>\n      <LoginModal show={showLoginModal} onCancel={() => setShowLoginModal(false)} />\n      <Button\n        variant=\"link\"\n        className=\"nav-link p-0\"\n        id=\"btLoginForPricing\"\n        name=\"btLoginForPricing\"\n        onClick={() => setShowLoginModal(true)}\n        tabIndex={0}>\n        <span className=\"text-capitalize\">\n          {t(\"ui.storefront.searchCatalog.loginToViewPricing\")}\n        </span>\n        &nbsp;&#187;\n      </Button>\n    </>\n  );\n};\n","import { Dispatch, Fragment, SetStateAction, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Container, Row, Table } from \"react-bootstrap\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport {\n  AppliedCartItemDiscountModel,\n  CartModel,\n  GetPackSizesVariantDTO,\n  ProductModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { CartDiscountListItem } from \"src/Cart/views/CartDiscountListItem\";\nimport { RemoveDiscountButton } from \"src/Cart/controls/RemoveDiscountButton\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls/ProductCardActionButtonWidget\";\nimport { SalesItemQuantityLine } from \"src/_shared/salesGroup/SalesItemQuantityLine\";\nimport { LoginForPricing } from \"src/Cart/views/LoginForPricing\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\ninterface ICartTableWideScreenProps {\n  cartHasItems: boolean;\n  cartToUse: CartModel;\n  shippingDiscounts?: AppliedCartItemDiscountModel[];\n  orderDiscounts?: AppliedCartItemDiscountModel[];\n  onRemoveItemFromCartClicked: (productName: string, salesItemId: number) => void;\n  parentRunning?: boolean;\n  queuedIDs: number[];\n  // For use in non session carts (wish list, shopping list, etc.)\n  includeAddToCart?: boolean;\n  // Must be defined if you includeAddToCart\n  cartProducts?: { [id: string]: ProductModel };\n  excludeBackorderInfo?: boolean;\n  handlePackSizeChange?: (\n    variantLevelProduct: GetPackSizesVariantDTO,\n    item: SalesItemBaseModel<AppliedCartItemDiscountModel>\n  ) => Promise<void>;\n  handleSubscriptionToggle?: (\n    variantLevelProduct: GetPackSizesVariantDTO,\n    item: SalesItemBaseModel<AppliedCartItemDiscountModel>\n  ) => Promise<void>;\n  products?: ProductModel[];\n  packSizeResults?: { [id: number]: GetPackSizesVariantDTO[] };\n  setSubscriptionIsChecked?: Dispatch<SetStateAction<boolean>>;\n  subscriptionIsChecked?: boolean;\n  setShowSubscriptionOffer?: Function;\n  showSubscriptionOffer?: boolean;\n  isPrimeOrMojoInitial?: boolean;\n  isPrimeOrMojo?: boolean;\n}\n\nexport function getDiscountTotal(item: SalesItemBaseModel<AppliedCartItemDiscountModel>): number {\n  if (!item || !item.Discounts || !item.Discounts.length) {\n    return 0;\n  }\n  let total = 0;\n  item.Discounts.forEach((discount: AppliedCartItemDiscountModel) => {\n    total += discount.DiscountTotal;\n  });\n  return total;\n}\n\nexport const CartTableWideScreen = (props: ICartTableWideScreenProps): JSX.Element => {\n  const {\n    cartHasItems,\n    cartToUse,\n    shippingDiscounts,\n    orderDiscounts,\n    onRemoveItemFromCartClicked,\n    parentRunning,\n    queuedIDs,\n    handlePackSizeChange,\n    handleSubscriptionToggle,\n    products,\n    packSizeResults,\n    setSubscriptionIsChecked,\n    subscriptionIsChecked,\n    setShowSubscriptionOffer,\n    isPrimeOrMojoInitial,\n    isPrimeOrMojo,\n  } = props;\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n\n  const getPackResultsToUse = useCallback(\n    (itemProductID: number): GetPackSizesVariantDTO[] => {\n      if (!packSizeResults || !packSizeResults[itemProductID] || !products) {\n        return undefined;\n      }\n      const productToUse = products.find((product: { ID: number }) => product.ID === itemProductID);\n      let packResultsToUse = packSizeResults && packSizeResults[itemProductID];\n      const currentItemIsASubscriptionOption\n        = productToUse?.SerializableAttributes?.PurchaseOption?.Value === \"Subscription\";\n      if (currentItemIsASubscriptionOption) {\n        packResultsToUse = packResultsToUse?.filter(variant => variant.PurchaseOptions.some(\n          option => option.SerializableAttributes?.PurchaseOption?.Value === \"Subscription\"\n        ));\n      }\n      return packResultsToUse;\n    },\n    [ packSizeResults, cartToUse, products ]\n  );\n\n  return (\n    <Container fluid\n      className=\"cart-new-styles\"\n    >\n      <Row className=\"header-row ps-3\">\n        <Col lg={2} />\n        <Col lg={2}className=\"text-left\">{t(\"ui.storefront.common.Name\")}</Col>\n        <Col lg={2}className=\"text-left\">{t(\"ui.storefront.common.Price\")}</Col>\n        <Col lg={2}className=\"text-left\">{t(\"ui.storefront.common.Quantity\")}</Col>\n        <Col lg={3}className=\"text-left ps-4\">{t(\"ui.storefront.common.SpecialOffer\", \"Special Offer\")}</Col>\n        <Col lg={1} />\n      </Row>\n      <Row className=\"product-container mx-1 pb-1\">\n        {cartHasItems && products ? (\n          cartToUse.SalesItems?.map(\n            // eslint-disable-next-line complexity\n            (item: SalesItemBaseModel<AppliedCartItemDiscountModel>, itemIndex: number) => {\n              const DiscountTotal = getDiscountTotal(item);\n              const productUrl = corsLink(cefConfig, item.ProductSeoUrl, \"productDetail\");\n              const productToUse = products.find((product: { ID: number }) => product.ID === item.ProductID);\n              const serializableAttributes = productToUse ? productToUse.SerializableAttributes : {};\n              const packResultsToUse = getPackResultsToUse(item.ProductID);\n              const packLevelVariantOfCurrentItem = packResultsToUse?.find(variant => {\n                return (\n                  variant?.SerializableAttributes?.Dosage?.Value\n                    === productToUse?.SerializableAttributes?.Dosage?.Value\n                  // eslint-disable-next-line max-len\n                  && variant?.SerializableAttributes?.Count?.Value === productToUse?.SerializableAttributes?.Count?.Value\n                );\n              });\n              const itemsPackLevelHasSubscriptionOption = packLevelVariantOfCurrentItem?.PurchaseOptions.some(\n                option => option.SerializableAttributes?.PurchaseOption?.Value === \"Subscription\"\n              );\n              setShowSubscriptionOffer(itemsPackLevelHasSubscriptionOption);\n              const itemHasPackOptions = Boolean(productToUse?.SerializableAttributes?.Count?.Value);\n\n              return (\n                <Fragment key={item.ID}>\n                  <Col xs={6}\n                    sm={2}\n                    className=\"p-0\">\n                    <div className=\"p-2 image-container\">\n                      <span>\n                        <a\n                          href={productUrl}\n                          id={`cardProductImageThumbnail_${itemIndex}`}\n                          className=\"product-image d-flex justify-content-start\">\n                          <ImageWithFallback\n                            className=\"d-block product-image\"\n                            src={item.ProductPrimaryImage}\n                            alt={item.ProductName}\n                            imageResizerParamsBody={{\n                              maxwidth: 100,\n                              maxheight: 100,\n                              scale: \"both\",\n                              mode: \"pad\"\n                            }}\n                          />\n                        </a>\n                      </span>\n                    </div>\n                  </Col>\n                  <Col xs={6}\n                    sm={2}\n                    md={3}\n                    lg={2}\n                    className=\"d-flex\">\n                    <div className=\"align-self-center\">\n                      <span\n                        data-sid={`cartProductName_${itemIndex}`}\n                        id={`cartProductName_${itemIndex}`}>\n                        <ProductCardNameWidget\n                          className=\"cart-product-card-name\"\n                          rows={1}\n                          productName={item.ProductName}\n                          productSeoUrl={item.ProductSeoUrl}\n                        />\n                      </span>\n                      {item.Discounts && item.Discounts.length && (\n                        <Table\n                          borderless\n                          className=\"table-sm w-auto mb-0 rounded table-shadow-none\">\n                          <div>\n                            {item.Discounts.map((discount, discountIndex) => (\n                              <div key={discount.ID}>\n                                <div className=\"w-auto px-0\">\n                                  <span\n                                    className=\"small text-nowrap\"\n                                    id={`cartProductDiscountDescription_${`${itemIndex}.${discountIndex}`}`}>\n                                    {discount.SlaveName}\n                                  </span>\n                                </div>\n                                <div className=\"w-auto\">\n                                  {discount.DiscountIsAutoApplied ? (\n                                    <span>\n                                      <span\n                                        id={`cartProductDiscountValue_${`${itemIndex}.${discountIndex}`}`}\n                                        className=\"text-success small\">\n                                        {discount.DiscountValueType === 1\n                                          ? currencyFormatter.format(discount.DiscountValue)\n                                          : `${discount.DiscountValue}%`}\n                                      </span>\n                                      &nbsp;\n                                      <span className=\"text-success small\">{t(\"ui.storefront.common.Off\")}</span>\n                                    </span>\n                                  ) : (\n                                    <RemoveDiscountButton\n                                      discount={discount}\n                                      btnIdPrefix=\"btnRemoveDiscountFromItem\"\n                                      labelIdPrefix=\"cartProductDiscountValue\"\n                                      idSuffix={`${itemIndex}.${discountIndex}`}\n                                    />\n                                  )}\n                                </div>\n                              </div>\n                            ))}\n                          </div>\n                        </Table>\n                      )}\n                    </div>\n                  </Col>\n\n                  <Col xs={6}\n                    sm={2}\n                    md={3}\n                    lg={2}\n                    className=\"d-flex justify-content-start align-items-center pb-1\">\n                    <div>\n                      {parentRunning && queuedIDs.indexOf(item.ID) > -1\n                        ? <LoadingWidget size=\"lg\" innerClasses=\"p-0\" />\n                        : <>\n                          <div\n                            className={`d-block form-control-static cart-price price text-center  pt-8 ${\n                              (item.UnitSoldPrice\n                            && (item.UnitCorePrice || 0) !== item.UnitSoldPrice && item.UnitSoldPrice > 0)\n                          || (DiscountTotal && DiscountTotal < 0)\n                                ? \"strike-through text-disabled py-0 opacity-50\"\n                                : \"\"\n                            }`}\n                            id={`cartProductPrice${itemIndex}`}>\n                            {currencyFormatter.format((item.UnitCorePrice || 0))}\n                            {item.ProductRepeatTypeAbbreviation && `/${item.ProductRepeatTypeAbbreviation}`}\n                          </div>\n                        </>}\n                      {item.UnitSoldPrice\n                        && (item.UnitCorePrice || 0) !== item.UnitSoldPrice && item.UnitSoldPrice > 0 ? (\n                          <div\n                            className={`d-block form-control-static cart-price price text-center py-0 ${\n                              DiscountTotal && DiscountTotal < 0\n                                ? \"strike-through text-disabled\"\n                                : isPrimeOrMojoInitial ? \"text-primary\"\n                                  : \"\"\n                            }`}\n                            id={`cartProductPrice${itemIndex}`}>\n                            {currencyFormatter.format(item.UnitSoldPrice)}\n                            {item.ProductRepeatTypeAbbreviation && `/${item.ProductRepeatTypeAbbreviation}`}\n                          </div>\n                        ) : null}\n                      {DiscountTotal && DiscountTotal < 0 ? (\n                        <div\n                          className=\"d-block form-control-static cart-price price text-center text-success py-0\"\n                          id={`cartProductPrice${itemIndex}`}>\n                          {\n                            // eslint-disable-next-line @typescript-eslint/no-extra-parens, max-len\n                            currencyFormatter.format(\n                              (item.UnitSoldPrice\n                                || (item.UnitCorePrice || 0) || 0) + (DiscountTotal / item.TotalQuantity)\n                            )\n                          }\n                        </div>\n                      ) : null}\n                    </div>\n                  </Col>\n                  {itemHasPackOptions ? (\n                    <Col xs={6}\n                      sm={2}\n                      md={3}\n                      lg={2}\n                      className=\"d-flex justify-content-start align-items-center\">\n                      {isPrimeOrMojo ? (\n                        <div className=\"text-center\">{isPrimeOrMojoInitial\n                          ? \"60 Day Supply\" : \"30 Day Supply\"}</div>)\n                        : !packResultsToUse && (\n                          <div className=\"text-center\">\n                            <span>{item.TotalQuantity}</span>\n                          </div>\n                        )}\n                      {handlePackSizeChange && packResultsToUse && (\n                        <div>\n                          <div className=\"text-center\">\n                            <select\n                              className=\"cart-pack-size-qty-selector rounded p-2 border-medium text-center orange-carat\"\n                              disabled={parentRunning}\n                              value={\n                                packResultsToUse.find(\n                                  // eslint-disable-next-line max-len\n                                  option => option.SerializableAttributes.Count.Value === serializableAttributes?.Count?.Value\n                                )?.ID || \"\"\n                              }\n                              onChange={e => {\n                                // e.target.value is variant level ID\n                                handlePackSizeChange(\n                                  packResultsToUse.find(result => result.ID === Number(e.target.value)),\n                                  item\n                                );\n                              }}>\n                              {packResultsToUse.map(option => (\n                                <option\n                                  key={option.ID}\n                                  value={option.ID}>\n                                  {`${option?.SerializableAttributes?.Count?.Value}\n                                ${\" \"}\n                                ${t(\"ui.storefront.common.Pack\", \"Pack\")}`}\n                                </option>\n                              ))}\n                            </select>\n                          </div>\n                        </div>\n                      )}\n                    </Col>\n                  ) : (\n                    <Col xs={6}\n                      sm={2}\n                      md={3}\n                      lg={2}\n                      className=\"d-flex justify-content-start align-items-center\">\n                      <div>\n                        <div className=\"\">\n                          {isPrimeOrMojo\n                            ? (<div className=\"text-center\">{isPrimeOrMojoInitial\n                              ? \"60 Day Supply\" : \"30 Day Supply\"}\n                            </div>)\n                            : !props.includeAddToCart && (\n                              <div className=\"text-center\">{item.TotalQuantity}</div>\n                            )}\n                          {props.includeAddToCart && props.cartProducts && (\n                            <ProductCardActionButtonWidget\n                              initialQuantity={item.TotalQuantity}\n                              product={props.cartProducts[item.ProductID]}\n                            />\n                          )}\n                          {!props.excludeBackorderInfo && item.QuantityBackOrdered > 0 && (\n                            <div className=\"text-center\">\n                              <SalesItemQuantityLine\n                                salesItem={item}\n                                excludeTotal={true}\n                              />\n                            </div>\n                          )}\n                          {item.QuantityPreSold > 0 && (\n                            <div className=\"small mt-2\">\n                              <div>\n                                <div>\n                                  <div>{t(\"ui.storefront.common.PreSales\")}</div>\n                                  <div>{item.QuantityPreSold}</div>\n                                </div>\n                              </div>\n                            </div>\n                          )}\n                          {!cefConfig?.loginForPricing.enabled || currentUser?.Contact ? (\n                            <div className=\"d-block d-sm-none text-end\">\n                              <div\n                                className=\"d-block form-control-static fw-normal text-end\"\n                                id={`cartProductSubtotal_${itemIndex}`}>\n                                {currencyFormatter.format((item.ExtendedPrice\n                                  ?? (item.UnitCorePrice || 0)) + DiscountTotal)}\n                                {item.ProductRepeatTypeAbbreviation && `/${item.ProductRepeatTypeAbbreviation}`}\n                              </div>\n                            </div>\n                          ) : null}\n                          {cefConfig?.loginForPricing.enabled && !currentUser && (\n                            <div className=\"d-block d-sm-none\">\n                              <LoginForPricing />\n                            </div>\n                          )}\n                        </div>\n                      </div>\n                    </Col>\n                  )}\n\n                  {itemsPackLevelHasSubscriptionOption ? (\n                    parentRunning ? (\n                      <Col xs={12}\n                        lg={2}\n                        className=\"d-flex justify-content-start align-items-center\">\n                        <LoadingWidget/>\n                      </Col>\n                    ) : (\n                      <Col xs={12}\n                        lg={3}\n                        className=\"d-flex justify-content-center align-items-center py-2 py-lg-0\">\n                        <div>\n                          <div className=\"d-flex justify-content-center\">\n                            <div className=\"align-items-center d-flex form-check form-switch justify-content-center\">\n                              <input\n                                className=\"form-check-input cart-add-subscription-toggle\"\n                                type=\"checkbox\"\n                                role=\"switch\"\n                                id=\"AddSubscriptionToggle\"\n                                checked={subscriptionIsChecked}\n                                onChange={e => {\n                                  setSubscriptionIsChecked(current => {\n                                    const toggled = !current;\n                                    handleSubscriptionToggle(packLevelVariantOfCurrentItem, item);\n                                    return toggled;\n                                  });\n                                }}\n                              />\n                            </div>\n                            {itemsPackLevelHasSubscriptionOption && (\n                              <div className=\"ms-1\">\n                                <span className=\"d-block add-subscription\">\n                                  Subscribe and Save</span>\n                                <span className=\"small text-gray\">\n                                  {subscriptionIsChecked ? \"Save 10% and Free Shipping\" : \"\"}</span>\n                              </div>\n                            )}\n                          </div>\n                        </div>\n                      </Col>\n                    )\n                  ) : (\n                    <Col xs={12}\n                      lg={3}\n                      className=\"d-none d-sm-block align-content-center\">\n                      <div>\n                        <div className=\"text-left ps-2\">\n                          {isPrimeOrMojoInitial\n                            ? <span>First Month Free</span>\n                            // : isPrimeOrMojo\n                            //   ? <span className=\"fw-bold d-block\">Subscription Included\n                            //     <span className=\"fw-normal d-block\">10% Off and Free Shipping Billed Monthly\n                            //     </span></span>\n                            : <span>N/A</span>}\n                        </div>\n                      </div>\n                    </Col>\n                  )}\n                  <Col xs={12}\n                    lg={1}\n                    className=\"trash-container d-flex justify-content-center align-items-center\">\n                    <div className=\"text-brand-orange mx-auto my-2\">\n                      <Button\n                        className=\"text-brand-orange\"\n                        variant=\"link\"\n                        disabled={parentRunning}\n                        data-sid={`btnRemoveItem_${itemIndex}FromCart`}\n                        id={`btnRemoveItem_${itemIndex}FromCart`}\n                        name={`btnRemoveItem_${itemIndex}FromCart`}\n                        type=\"button\"\n                        title={t(\"ui.storefront.cart.removeItemFromCart\")}\n                        aria-label={t(\"ui.storefront.cart.removeItemFromCart\")}\n                        onClick={e => onRemoveItemFromCartClicked(item.ProductName, item.ID)}>\n                        {/* @ts-ignore */}\n                        <i className=\"fa-light fa-trash-can text-brand-orange\" />\n                        <span className=\"d-lg-none ms-2\">Remove item from cart</span>\n                      </Button>\n                    </div>\n                  </Col>\n                  {/* eslint-disable-next-line max-len */}\n                  {!props.excludeBackorderInfo\n                    && ((cefConfig?.featureSet.inventory.preSale.enabled && item.ProductAllowPreSale)\n                      || (cefConfig?.featureSet.inventory.backOrder.enabled && item.QuantityBackOrdered > 0)) && (\n                    <div className=\"border-top border-bottom border-medium\">\n                      <div\n                        className=\"align-middle\">\n                        {item.ProductAllowPreSale && (\n                          <Alert\n                            variant=\"warning\"\n                            className=\"mb-0 p-0\">\n                            <p className=\"mb-0\">\n                                This item in is pre-sales, orders with this item will be fulfilled once the item becomes\n                                available for normal sales. Mixed orders may be separated after purchase to fullfill\n                                based on availability.\n                            </p>\n                          </Alert>\n                        )}\n                        {item.QuantityBackOrdered > 0 && (\n                          <Alert\n                            variant=\"warning\"\n                            className=\"mb-0\">\n                            <p\n                              className=\"mb-0\"\n                              id=\"cartBackorderMessage\">\n                                This item is on back-order, orders with this item will be fulfilled once the item\n                                becomes available in stock. Mixed orders may be separated after purchase to fullfill\n                                based on availability.\n                            </p>\n                          </Alert>\n                        )}\n                      </div>\n                    </div>\n                  )}\n                </Fragment>\n              );\n            }\n          )\n        ) : (\n          <div className=\"border-top border-bottom border-medium\">\n            <div>\n              <label className=\"form-control-static fw-normal\">{t(\"ui.storefront.checkout.cartEmpty\")}</label>\n            </div>\n          </div>\n        )}\n      </Row>\n    </Container>\n  );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { Button, ListGroup, ListGroupItem } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\n\ninterface IDiscountsListProps {\n  cartType: string;\n}\n\nexport const DiscountsList = (props: IDiscountsListProps): JSX.Element => {\n  const [ removeDiscountConfirmationModalInfo, setRemoveDiscountConfirmationModalInfo ] = useState<{\n    discountToRemove?: AppliedCartItemDiscountModel;\n    show: boolean;\n  }>({\n    show: false,\n    discountToRemove: null,\n  });\n\n  const cart = useCart(props.cartType);\n\n  const currentUser = useCurrentUser();\n  const cartFactory = useCartFactory();\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const discounts = useMemo(() => {\n    if (!cefConfig.featureSet.discounts?.enabled\n      || cefConfig.loginForPricing && !currentUser.ID\n      || !cart?.Discounts?.length) {\n      return null;\n    }\n    return cart?.Discounts;\n  }, [ cart, currentUser ]);\n\n  const removeCartItemDiscount = useCallback((): void => {\n    setRunning();\n    cartFactory.removeDiscount(props.cartType, removeDiscountConfirmationModalInfo.discountToRemove)\n      .then(() => {\n        setRemoveDiscountConfirmationModalInfo({\n          show: false,\n          discountToRemove: null,\n        });\n        finishRunning();\n      })\n      .catch(err => {\n        setRemoveDiscountConfirmationModalInfo({\n          show: false,\n          discountToRemove: null,\n        });\n        finishRunning(true, t(\"ui.storefront.cart.RemoveDiscount.UnableToRemoveDiscount\"), null, true);\n      });\n  }, [ cartFactory, removeDiscountConfirmationModalInfo ]);\n\n  const onDeleteDiscountClicked = useCallback((discount: AppliedCartItemDiscountModel) => {\n    setRemoveDiscountConfirmationModalInfo({\n      show: true,\n      discountToRemove: discount,\n    });\n  }, []);\n\n  if (!cart?.Discounts?.length) {\n    return null;\n  }\n\n  return <ListGroup>\n    <ConfirmationModal\n      show={removeDiscountConfirmationModalInfo.show}\n      onCancel={() => {\n        setRemoveDiscountConfirmationModalInfo({\n          show: false,\n          discountToRemove: null,\n        });\n      }}\n      onConfirm={() => removeCartItemDiscount()}\n      size=\"md\"\n      confirmBtnLabel={t(\"ui.storefront.common.Yes\")}\n      cancelBtnLabel={t(\"ui.storefront.common.No\")}>\n      {viewState.running && <LoadingWidget overlay={true} />}\n      {t(\"ui.storefront.discounts.AreYouSureYouWantToRemoveThisDiscount\")}\n    </ConfirmationModal>\n    {discounts && discounts.map((d, i) => {\n      const { ID, SlaveName, DiscountIsAutoApplied } = d;\n      return <ListGroupItem\n        className=\"d-flex align-items-center border-0 p-0 bg-transparent\"\n        id={`btnRemoveDiscountFromItem_${i}`}\n        key={ID}>\n        <span className=\"small text-black-50\">\n          {t(\"ui.storefront.common.Applied\", \"Applied\")}:\n        </span>\n        <span className=\"border border-success ms-2 px-2 rounded text-success text-uppercase small\">\n          {SlaveName.length > 25 ? `${SlaveName.substring(0, 25)}...` : SlaveName}\n        </span>\n        {!DiscountIsAutoApplied && (\n          <Button\n            variant=\"default\"\n            className=\"px-1 py-0 small\"\n            title={t(\"ui.storefront.cart.removeDiscountFromItem\")}\n            aria-label={t(\"ui.storefront.cart.removeDiscountFromItem\")}\n            onClick={() => {\n              onDeleteDiscountClicked(d);\n            }}>\n            <i className=\"far fa-times fa-fw text-danger\" />\n            <span className=\"sr-only\">\n              {t(\"ui.storefront.cart.removeDiscountFromItem\")}\n            </span>\n          </Button>\n        )}\n      </ListGroupItem>;\n    })}\n  </ListGroup>;\n};\n\nexport default DiscountsList;\n","/* eslint-disable max-len */\nimport { Table } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { CartTotals } from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport DiscountsList from \"../../_shared/DiscountsList\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\n\ninterface ITotalsWidgetProps {\n  totals: CartTotals;\n  cartType?: \"Cart\" | \"Quote Cart\";\n  tableClasses?: string;\n  showHeader?: boolean;\n  hideShipping?: boolean;\n  hideHandling?: boolean;\n  hideFees?: boolean;\n  hideDiscounts?: boolean;\n  hideTaxes?: boolean;\n  padAlign?: boolean;\n  subscriptionIsChecked?: boolean;\n  corePrice?: number;\n  isPrimeOrMojoInitial?: boolean;\n}\n\n// eslint-disable-next-line complexity\nexport const TotalsWidget = (props: ITotalsWidgetProps): JSX.Element => {\n  const {\n    tableClasses,\n    totals,\n    cartType,\n    showHeader,\n    hideShipping,\n    hideHandling,\n    hideFees,\n    hideDiscounts,\n    hideTaxes,\n    padAlign,\n    subscriptionIsChecked,\n    corePrice,\n    isPrimeOrMojoInitial,\n  } = props;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  if (!totals) {\n    return null;\n  }\n\n  return (\n    <div className=\"totals-container\">\n      <Table\n        className={tableClasses ?? \"w-100\"}>\n        <colgroup>\n          <col className=\"w-auto\" />\n          <col className=\"w-auto\" />\n        </colgroup>\n        {showHeader && (\n          <thead>\n            <tr>\n              <th colSpan={2} className={`border-medium ${padAlign ? \"px-3\" : \"\"}`}>\n                {t(\"ui.storefront.cart.widgets.totalsWidget.Totals\")}\n              </th>\n            </tr>\n          </thead>\n        )}\n        <tbody>\n          <tr>\n            <th className={`border-medium fw-normal ${padAlign ? \"ps-3\" : \"\"}`} id=\"MiniCartSubtotalText\">\n              {t(\"ui.storefront.common.Subtotal\")}\n            </th>\n            <td className=\"strike-through opacity-50 text-end pe-5\">{\n              subscriptionIsChecked || isPrimeOrMojoInitial ? currencyFormatter.format(corePrice || 0.0) : null}</td>\n            <td className={`text-end ${padAlign ? \"pe-3\" : \"\"}`} id=\"cartTotalsWidgetSubtotal\">\n              {currencyFormatter.format(totals.SubTotal || 0.0)}\n            </td>\n          </tr>\n\n          <tr>\n            <th className={`border-medium fw-normal align-middle ${padAlign ? \"ps-3\" : \"\"}`} id=\"MiniCartDrVisitText\">\n              {t(\"ui.storefront.cart.DoctorVisit\", \"Doctor Visit\")}\n            </th>\n            <td className=\"strike-through opacity-50 text-end pe-5\">$50.00</td>\n            <td className={`text-end ${padAlign ? \"pe-3\" : \"\"}`} id=\"cartTotalsWidgetDrVisit\">\n              Free\n            </td>\n\n          </tr>\n          {cefConfig?.featureSet.shipping.enabled && !hideShipping\n            ? <tr>\n              <th className={`border-medium fw-normal ${padAlign ? \"ps-3\" : \"\"}`} id=\"CartTotalShippingText\">\n                Ground Shipping\n              </th>\n              {subscriptionIsChecked ? (\n                <><td className=\"strike-through opacity-50 text-end pe-5\">$10.00</td>\n                  <td className={ `text-end ${padAlign ? \"pe-3\" : \"\"}` }>Free</td></>\n              )\n                : (\n                  <>\n                    <td></td>\n                    <td className={`text-end ${padAlign ? \"pe-3\" : \"\"}`} id=\"cartTotalsWidgetShipping\">\n                      { !totals.Shipping && (window.location.pathname.includes(\"/Cart\")\n                    || window.location.pathname.includes(\"/Checkout\")) ? \"$10.00\"\n                        : currencyFormatter.format(totals.Shipping)}\n                    </td>\n                  </>\n                )}\n            </tr>\n            : null}\n          {!hideHandling && totals.Handling > 0\n            ? <tr>\n              <th className={`border-medium fw-normal ${padAlign ? \"ps-3\" : \"\"}`}>\n                {t(\"ui.storefront.common.Handling\")}\n              </th>\n              <td className={`text-end ${padAlign ? \"pe-3\" : \"\"}`} id=\"cartTotalsWidgetHandling\">\n                {currencyFormatter.format(totals.Handling || 0.0)}\n              </td>\n            </tr>\n            : null}\n          {!hideFees && totals.Fees > 0\n            ? <tr>\n              <th className={`border-medium fw-normal ${padAlign ? \"ps-3\" : \"\"}`}>\n                {t(\"ui.storefront.common.Fee.Plural\")}\n              </th>\n              <td className={`text-end ${padAlign ? \"pe-3\" : \"\"}`} id=\"cartTotalsWidgetFees\">\n                {currencyFormatter.format(totals.Fees || 0.0)}\n              </td>\n            </tr>\n            : null}\n          {cefConfig?.featureSet.discounts.enabled\n          && !hideDiscounts\n          && totals.Discounts !== 0\n            ? <>\n              <tr>\n                <th className={`border-medium fw-normal ${padAlign ? \"ps-3\" : \"\"}`} id=\"MiniCartDiscountsText\">\n                  <span className={`d-block ${props.cartType === ServiceStrings.carts.types.cart ? \"mb-2\" : \"\"}`}>\n                    {t(\"ui.storefront.common.DiscountAmount\", \"Discount Amount\")}\n                  </span>\n                  {props.cartType === ServiceStrings.carts.types.cart && <DiscountsList cartType={cartType} />}\n                </th>\n                <td className={`text-end ${padAlign ? \"pe-3\" : \"\"}`} id=\"cartTotalsWidgetDiscounts\">\n                  {currencyFormatter.format(Math.abs(totals.Discounts || 0.0))}\n                </td>\n              </tr>\n            </>\n            : null}\n          {cefConfig?.featureSet.taxes.enabled && !hideTaxes\n            ? <tr>\n              <th className={`border-medium fw-normal ${padAlign ? \"ps-3\" : \"\"}`} id=\"MiniCartTaxesText\">\n                {t(\"ui.storefront.cart.Taxes\")}\n              </th>\n              <td className={`text-end ${padAlign ? \"pe-3\" : \"\"}`} id=\"cartTotalsWidgetTaxes\">\n                {currencyFormatter.format(totals.Tax || 0.0)}\n              </td>\n            </tr>\n            : null}\n          <tr>\n            <th className={`border-medium fw-normal pt-2 ${padAlign ? \"ps-3\" : \"\"}`} id=\"MiniCartTotalText\">\n              {t(\"ui.storefront.common.GrandTotal\", \"Grand Total\")}\n            </th>\n            <td></td>\n            <td\n              className={`text-end border-medium pt-2 ${padAlign ? \"pe-3\" : \"\"}`}\n              id=\"cartTotalsWidgetTotal\">\n              {!totals.Shipping && !subscriptionIsChecked\n              && (window.location.pathname.includes(\"/Cart\")\n                    || window.location.pathname.includes(\"/Checkout\"))\n                ? currencyFormatter.format(totals.Total + 10.0)\n                : currencyFormatter.format(totals.Total || 0.0)}\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n    </div>\n  );\n};\n","/* eslint-disable camelcase */\n/* eslint-disable max-len */\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Col, Container, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { RemoveFromCartModal } from \"src/Cart/modals\";\nimport { CartValidator } from \"src/Cart/views/CartValidator\";\nimport { CartTableWideScreen } from \"./views/CartTableWideScreen\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel, GetPackSizesVariantDTO } from \"src/_api/cvApi._DtoClasses\";\nimport { TotalsWidget } from \"./views/TotalsWidget\";\nimport { trackEvent } from \"src/Klaviyo/klaviyo_helpers\";\n\ninterface ICartProps {\n  cartType: \"Quote Cart\" | \"Cart\";\n  includeQuickOrder?: boolean;\n}\n\ninterface IRemoveFromCartModalInfo {\n  show: boolean;\n  productName?: string;\n  productId?: number;\n}\n\nexport const Cart = (props: ICartProps): JSX.Element => {\n  const { cartType } = props;\n\n  const [ queuedIDs, setQueuedIDs ] = useState([]);\n  const [ removeFromCartModalInfo, setRemoveFromCartModalInfo ] = useState<IRemoveFromCartModalInfo>({\n    show: false\n  });\n  const [ products, setProducts ] = useState<ProductModel[]>(null);\n  const [ packSizeResults, setPackSizeResults ] = useState<{ [id: number]: GetPackSizesVariantDTO[] }>(null);\n  const [ subscriptionIsChecked, setSubscriptionIsChecked ] = useState<boolean>(null);\n  const [ showSubscriptionOffer, setShowSubscriptionOffer ] = useState<boolean>(false);\n  const [ selectedProduct, setSelectedProduct ] = useState<ProductModel>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const cart = useCart(cartType);\n  const cartFactory = useCartFactory();\n  const productFactory = useProductFactory();\n  const cefConfig = useCefConfig();\n  const isForQuoteCart = cartType === ServiceStrings.carts.types.quote;\n  const cartToUse = cart;\n\n  function cartHasItems() {\n    return Boolean(cartToUse?.SalesItems?.length);\n  }\n\n  const productIdsToUse: number[] = cartToUse?.SalesItems?.map(item => item.ProductID);\n\n  useEffect(() => {\n    if (!productFactory) {\n      return;\n    }\n    if (productIdsToUse) {\n      getProducts(productIdsToUse);\n      getPackSizeOptions(productIdsToUse);\n    }\n  }, [ cartToUse, productFactory ]);\n\n  async function getProducts(productIDs: number[]) {\n    const results = await Promise.all(productIDs?.map(id => productFactory.getProductByID(id)));\n    setProducts(results);\n  }\n\n  async function handlePackSizeChange(\n      variantLevelProduct: GetPackSizesVariantDTO,\n      item: SalesItemBaseModel<AppliedCartItemDiscountModel>\n  ) {\n    try {\n      setRunning();\n      const oldProduct = await productFactory.getProductByID(item.ProductID);\n      const purchaseOptionLevelNewProduct = variantLevelProduct.PurchaseOptions.find(\n        option => option.SerializableAttributes.Dosage?.Value === oldProduct.SerializableAttributes.Dosage?.Value\n          // eslint-disable-next-line max-len\n          && option.SerializableAttributes.PurchaseOption?.Value === oldProduct.SerializableAttributes.PurchaseOption?.Value\n      );\n      // TODO: verify purchaseOptionLevelNewProduct is truthy\n      const newProductPackLevel = await productFactory.getProductByID(purchaseOptionLevelNewProduct.ID);\n      await cartFactory.swapItemInCart(newProductPackLevel, item.ID, cartToUse);\n      finishRunning();\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  }\n\n  // Define the function to handle the click and trigger tracking\n  const handleProceedClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n    if (!cartHasItems() || viewState.running) {\n      // Prevent default behavior if button is disabled\n      e.preventDefault();\n      return;\n    }\n\n    // Trigger tracking event\n    trackEvent(\n      \"Started Checkout\",\n      {\n        \"Cart ID\": cart.ID,\n        \"Total Value\": cart.Totals.Total,\n        \"Items\": cart.SalesItems.map((i) => ({\n          \"Product ID\": i.ProductID,\n          \"Quantity\": i.Quantity,\n          \"ItemPrice\": i.UnitSoldPrice,\n        })),\n      }\n    );\n  };\n\n  async function getPackSizeOptions(productIDs: number[]) {\n    try {\n      setRunning();\n      const results = await productFactory.getPackSizesForPurchaseOptions(productIDs);\n      setPackSizeResults(results);\n      finishRunning();\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  }\n\n  useEffect(() => {\n    if (subscriptionIsChecked === null) {\n      if (isPrimeOrMojo && !isPrimeOrMojoInitial) {\n        setSubscriptionIsChecked(true);\n      } else {\n        setSubscriptionIsChecked(false);\n      }\n    }\n  }, [ subscriptionIsChecked ]);\n\n  const getPackResultsToUse = useCallback(\n    (itemProductID: number): GetPackSizesVariantDTO[] => {\n      if (!packSizeResults || !packSizeResults[itemProductID] || !products) {\n        return undefined;\n      }\n      const productToUse = products.find((product: { ID: number }) => product.ID === itemProductID);\n      let packResultsToUse = packSizeResults && packSizeResults[itemProductID];\n      const currentItemIsASubscriptionOption\n          = productToUse?.SerializableAttributes?.PurchaseOption?.Value === \"Subscription\";\n      if (currentItemIsASubscriptionOption) {\n        packResultsToUse = packResultsToUse?.filter(variant => variant.PurchaseOptions.some(\n          option => option.SerializableAttributes?.PurchaseOption?.Value === \"Subscription\"\n        ));\n      }\n      return packResultsToUse;\n    },\n    [ packSizeResults, cartToUse, products ]\n  );\n\n  const selectedItem = cartToUse && cartToUse.SalesItems && cartToUse?.SalesItems[0];\n\n  let packLevelVariantOfCurrentItem = null;\n\n  if (selectedItem) {\n    const productToUse = products && products?.find((product: { ID: number }) => product.ID === selectedItem.ProductID);\n\n    const packResultsToUse = getPackResultsToUse(selectedItem && selectedItem?.ProductID);\n\n    packLevelVariantOfCurrentItem = packResultsToUse?.find(variant => {\n      return (\n        variant?.SerializableAttributes?.Dosage?.Value\n        === productToUse?.SerializableAttributes?.Dosage?.Value\n        && variant?.SerializableAttributes?.Count?.Value === productToUse?.SerializableAttributes?.Count?.Value\n      );\n    });\n  }\n\n  async function handleSubscriptionToggle(\n      variantLevelProduct: GetPackSizesVariantDTO,\n      item: SalesItemBaseModel<AppliedCartItemDiscountModel>\n  ) {\n    try {\n      setSubscriptionIsChecked((prev) => !prev);\n      setRunning();\n      const oldProduct = await productFactory.getProductByID(item.ProductID);\n      // TODO: if more purchase options get added in the future, this needs to be updated\n      const purchaseOptionLevelNewProduct = variantLevelProduct.PurchaseOptions.find(\n        // eslint-disable-next-line max-len\n        option => option.SerializableAttributes.PurchaseOption?.Value === (oldProduct.SerializableAttributes.PurchaseOption?.Value === \"Subscription\" ? \"One-Time\" : \"Subscription\")\n        && option.SerializableAttributes.Dosage?.Value === oldProduct.SerializableAttributes.Dosage?.Value\n      );\n      // // TODO: verify purchaseOptionLevelNewProduct is truthy\n      const newProductPackLevel = await productFactory.getProductByID(purchaseOptionLevelNewProduct.ID);\n      await cartFactory.swapItemInCart(newProductPackLevel, item.ID, cartToUse);\n      finishRunning();\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  }\n\n  const removeCartItemByID = (ID: number): void => {\n    setRunning();\n    cartFactory\n      .removeItemFromCart(cartType, ID)\n      .then(() => {\n        finishRunning();\n        setRemoveFromCartModalInfo({ show: false });\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  const orderDiscounts = cart?.Discounts ? cart.Discounts.filter(d => d.DiscountTypeID === 0) : [];\n  const shippingDiscounts = cart?.Discounts ? cart.Discounts.filter(d => d.DiscountTypeID === 2) : [];\n\n  const corePrice = cartToUse && cartToUse?.SalesItems ? cartToUse?.SalesItems[0]?.UnitCorePrice : 0;\n\n  const checkIfPrimeOrMojoInitial = (productName: string) => {\n    return (/(?:Prime|Mojo).*Initial/iu).test(productName);\n  };\n\n  const isPrimeOrMojo = cartToUse && cartToUse?.SalesItems ? cartToUse?.SalesItems[0]?.ProductName.includes(\"Prime\")\n  || cartToUse && cartToUse?.SalesItems[0]?.ProductName.includes(\"Mojo\") : false;\n\n  const isPrimeOrMojoInitial = checkIfPrimeOrMojoInitial(cartToUse && cartToUse?.SalesItems && cartToUse.SalesItems[0]?.ProductName);\n\n  useEffect(() => {\n    if (products) {\n      setSelectedProduct(products[0]);\n    }\n  }, [ products ]);\n\n  useEffect(() => {\n    if (selectedProduct && selectedProduct.TypeKey === \"SUBSCRIPTION\") {\n      setSubscriptionIsChecked(true);\n    }\n  }, [ selectedProduct ]);\n\n  const trackRemoveSubscription = () => {\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push({\n      event: \"subscription_removed\"\n    });\n  };\n\n  const trackInitiateCheckout = () => {\n    window.dataLayer = window.dataLayer || [];\n    const event = {\n      event: \"begin_checkout\",\n      ecommerce: {\n        currency: \"USD\",\n        value: cartToUse?.Totals?.Total,\n        items: [\n          {\n            item_id: cartToUse?.SalesItems[0]?.ProductID,\n            item_name: cartToUse?.SalesItems[0]?.ProductName,\n            price: cartToUse?.Totals?.Total,\n            quantity: cartToUse?.SalesItems[0]?.TotalQuantity\n          }\n        ]\n      }\n    };\n    window.dataLayer.push(event);\n  };\n\n  if (!cart || cart.Loading) {\n    return <LoadingWidget/>;\n  }\n\n  return (\n    <section className=\"section-cart\" id=\"cart-new-styles\">\n      <Container className=\"my-3 position-relative\">\n        <Row>\n          <div className=\"mt-4 small\">\n            <a href=\"/\" className=\"text-dark\">{t(\"ui.storefront.common.Home\", \"Home\")}</a>\n            <span>&nbsp;/&nbsp;</span>\n            <span className=\"text-primary\">{t(\"ui.storefront.cart.MyCart\", \"MyCart\")}</span>\n          </div>\n        </Row>\n        <Row className=\"mb-4\">\n          <Col xs={12}>\n            <h1\n              className=\"mt-3\"\n              id=\"CartPageTitle\">\n              {isForQuoteCart ? t(\"ui.storefront.cart.QuoteCart\") : t(\"ui.storefront.cart.microCart.MyCart\")}\n            </h1>\n            {cartHasItems()\n            && (<div>\n              <p className=\"mb-0\">Please note that to ensure a smooth checkout experience, only one product can be purchased per order.</p>\n              <p>You won’t be able to add other items to your cart while proceeding with this purchase.</p>\n            </div>)}\n          </Col>\n          <Col xs={12}>\n            <CartValidator type={cart ? (cart.TypeName as \"Cart\") : \"Cart\"} />\n          </Col>\n        </Row>\n        <Row>\n          <CartTableWideScreen\n            cartHasItems={cartHasItems()}\n            cartToUse={cartToUse}\n            orderDiscounts={orderDiscounts}\n            shippingDiscounts={shippingDiscounts}\n            onRemoveItemFromCartClicked={(productName, salesItemId) => setRemoveFromCartModalInfo({\n              show: true,\n              productName,\n              productId: salesItemId\n            })\n            }\n            queuedIDs={queuedIDs}\n            parentRunning={viewState.running}\n            handlePackSizeChange={handlePackSizeChange}\n            handleSubscriptionToggle={handleSubscriptionToggle}\n            products={products}\n            packSizeResults={packSizeResults}\n            setSubscriptionIsChecked={setSubscriptionIsChecked}\n            subscriptionIsChecked={subscriptionIsChecked}\n            setShowSubscriptionOffer={setShowSubscriptionOffer}\n            showSubscriptionOffer={showSubscriptionOffer}\n            isPrimeOrMojo={isPrimeOrMojo}\n            isPrimeOrMojoInitial={isPrimeOrMojoInitial}\n          />\n        </Row>\n        <Row className=\"cart-collaterals\">\n          <Col />\n          <Col />\n          <Col\n            xs=\"12\"\n            sm=\"5\"\n            className=\"totals my-2\">\n            {cartToUse.Totals && cartHasItems() && (\n              <>\n                <h5 data-sid=\"ShoppingCartTotalText\">{t(\"ui.storefront.cart.shoppingCartTotal\")}</h5>\n\n                <TotalsWidget\n                  totals={cartToUse?.Totals}\n                  cartType={cartType}\n                  subscriptionIsChecked={subscriptionIsChecked}\n                  corePrice={corePrice}\n                  isPrimeOrMojoInitial={isPrimeOrMojoInitial}\n                />\n              </>\n            )}\n            <ul className=\"list-unstyled ps-0\">\n              {showSubscriptionOffer && !subscriptionIsChecked && cartHasItems()\n              && (<li>\n                <div className=\"discount-container mb-3 px-4 py-3\">\n                  <div className=\"d-flex\">\n                    <div>\n                      <p className=\"fw-semibold mb-0\">\n                        {t(\"ui.storefront.cart.FreeShipping10PercentOff\", \"FREE Shipping and 10% OFF\")}</p>\n                      <span className=\"small fw-light\">\n                        {t(\n                          \"ui.storefront.cart.SubscribeToAProduct\",\n                          \"Subscribe to a product you'll immediately save 10% and get free shipping for that item!\"\n                        )}\n                      </span>\n                    </div>\n\n                    <div className=\"align-items-center d-flex form-check form-switch justify-content-center\">\n                      <input\n                        className=\"form-check-input cart-add-subscription-toggle\"\n                        type=\"checkbox\"\n                        role=\"switch\"\n                        id=\"AddSubscriptionToggle\"\n                        checked={subscriptionIsChecked}\n                        onChange={e => {\n                          setSubscriptionIsChecked(current => {\n                            const toggled = !current;\n                            handleSubscriptionToggle(packLevelVariantOfCurrentItem, selectedItem);\n                            return toggled;\n                          });\n                        }}\n                      />\n                    </div>\n                  </div>\n                </div>\n              </li>\n              )}\n\n              {cartHasItems() && (<li className=\"py-2\">\n                <a\n                  onClick={() => {\n                    !subscriptionIsChecked && trackRemoveSubscription();\n                    trackInitiateCheckout();\n                  } }\n                  href={\n                    cartHasItems() ? corsLink(cefConfig, \"/\", cartType === \"Cart\" ? \"checkout\" : \"submitQuote\") : \"#\"\n                  }\n                  data-sid=\"btnProceedToCheckout\"\n                  className={`btn-checkout btn btn-primary underline-hover-none w-100 text-white${\n                    !cartHasItems() || viewState.running ? \" disabled\" : \"\"\n                  }`}>\n                  {t(cartType === \"Cart\" ? \"ui.storefront.cart.proceedToCheckout\" : \"ui.storefront.common.SubmitQuote\")}\n                </a>\n              </li>\n              )}\n            </ul>\n          </Col>\n        </Row>\n      </Container>\n      <RemoveFromCartModal\n        productName={removeFromCartModalInfo.productName}\n        show={removeFromCartModalInfo.show}\n        onConfirm={() => removeCartItemByID(removeFromCartModalInfo.productId)}\n        onCancel={() => setRemoveFromCartModalInfo({ show: false })}\n        parentRunning={viewState.running}\n        cartTypeText={cartType}\n      />\n    </section>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"compareTable\":\"Compare_compareTable__ECDg6\"};","/** @format */\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface CompareTableProps {\n  compareProducts: ProductModel[];\n  attributes: GeneralAttributeModel[];\n  cefConfig: CEFConfig;\n}\n\ntype TProductKey = keyof ProductModel;\nexport function getRowTitles(compareProducts: ProductModel[], attributes: GeneralAttributeModel[]): TProductKey[] {\n  const rows: TProductKey[] = [];\n  compareProducts.forEach(product => {\n    const keys: TProductKey[] = Object.keys(product) as TProductKey[];\n    keys.forEach(key => {\n      if (skipKeys.indexOf(key) > -1) {\n        return;\n      }\n      if (rows.indexOf(key) > -1) {\n        return;\n      }\n      if (key === \"SerializableAttributes\") {\n        const attrKeys = Object.keys(product.SerializableAttributes);\n        attrKeys.forEach(attrKey => {\n          if (!attributes?.length) {\n            return;\n          }\n          if (!product.SerializableAttributes[attrKey].Value) {\n            return;\n          }\n          // Not a comparable attribute\n          if (!attributes?.find(x => x.CustomKey === attrKey)) {\n            return;\n          }\n          if (rows.indexOf(`SerializableAttributes.${attrKey}` as TProductKey) > -1) {\n            return;\n          }\n          rows.push(`SerializableAttributes.${attrKey}` as TProductKey);\n        });\n        return;\n      }\n      rows.push(key);\n    });\n  });\n  return rows;\n}\n\nconst skipKeys = [\n  // Explicitly called out so don't iterate over\n  \"CustomKey\",\n  \"Name\",\n  \"Description\",\n  \"ShortDescription\",\n  \"Width\",\n  \"WidthUnitOfMeasure\",\n  \"Depth\",\n  \"DepthUnitOfMeasure\",\n  \"Height\",\n  \"HeightUnitOfMeasure\",\n  \"Weight\",\n  \"WeightUnitOfMeasure\",\n  // General Skips\n  \"ID\",\n  \"Active\",\n  \"CreatedDate\",\n  \"UpdatedDate\",\n  \"Hash\",\n  \"JsonAttributes\",\n  \"jsonAttributes\",\n  \"Type\",\n  \"TypeID\",\n  \"TypeKey\",\n  \"TypeName\",\n  \"TypeDisplayName\",\n  \"TypeSortOrder\",\n  \"Status\",\n  \"StatusID\",\n  \"StatusKey\",\n  \"StatusName\",\n  \"StatusDisplayName\",\n  \"StatusSortOrder\",\n  \"Accounts\",\n  \"Vendors\",\n  \"Manufacturers\",\n  \"ProductAssociations\",\n  \"ProductInventoryLocationSections\",\n  \"ProductPricePoints\",\n  \"ProductsAssociatedWith\",\n  \"ProductSubscriptionTypes\",\n  \"ProductFiles\",\n  \"ProductImages\",\n  \"PrimaryImageFileName\",\n  \"ImageFileName\",\n  \"IsEligibleForReturn\",\n  \"Stores\",\n  \"Images\",\n  \"StoredFiles\",\n  \"SortOrder\",\n  \"KitQuantityOfParent\",\n  \"KitCapacity\",\n  \"KitBaseQuantityPriceMultiplier\",\n  \"IsFreeShipping\",\n  \"IsShippingRestricted\",\n  \"ProductCategories\",\n  \"SeoUrl\",\n  \"SeoDescription\",\n  \"SeoKeywords\",\n  \"SeoPageTitle\",\n  \"Package\",\n  \"PackageID\",\n  \"PackageKey\",\n  \"PackageName\",\n  \"MasterPack\",\n  \"MasterPackID\",\n  \"MasterPackKey\",\n  \"MasterPackName\",\n  \"Pallet\",\n  \"PalletID\",\n  \"PalletKey\",\n  \"PalletName\",\n  \"ProductRestrictions\",\n  \"IsVisible\",\n  \"IsTaxable\",\n  \"IsDiscontinued\",\n  \"AllowBackOrder\",\n  \"IsUnlimitedStock\",\n  \"StockQuantity\",\n  \"StockQuantityAllocated\",\n  \"StockQuantityPreSold\",\n  \"TotalPurchasedAmount\",\n  \"TotalPurchasedQuantity\",\n  \"DocumentRequiredForPurchaseOverrideFeeIsPercent\",\n  \"MustPurchaseInMultiplesOfAmountOverrideFeeIsPercent\",\n  \"ProductNotifications\",\n  \"AllowPreSale\",\n  \"DropShipOnly\",\n  \"NothingToShip\",\n  \"ShippingLeadTimeIsCalendarDays\",\n  \"RequiresRolesList\",\n  \"RequiresRolesListAlt\",\n  // Properties and functions that extend in Angular\n  \"inventoryObject\",\n  \"isOutOfStock\",\n  \"countStock\",\n  \"quantity\",\n  \"CurrentShipOption\",\n  \"readPrices\",\n  \"$_rawPrices\",\n  \"readInventory\",\n  \"$_rawInventory\"\n];\n","/* eslint-disable @typescript-eslint/no-extra-parens */\n/* eslint-disable max-len */\n/* eslint-disable arrow-body-style */\nimport { Fragment, useEffect, useState } from \"react\";\nimport { Anchor, Button, Carousel, Col, Container, Row, Table } from \"react-bootstrap\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport Interweave from \"interweave\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { camelCaseToHumanReadable } from \"src/_shared/common/Formatters\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls/ProductCardActionButtonWidget\";\nimport { ProductCardNameWidget, ProductCardPricingWidget, ProductCardSkuWidget, ProductCardStockWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport classes from \"src/Catalog/views/Compare.module.scss\";\nimport cvApi from \"src/_api/cvApi\";\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { CompareTableProps, getRowTitles } from \"src/Catalog/views/CompareFunctions\";\nimport promiser from \"src/_shared/Promiser\";\nimport _ from \"lodash\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\n\nexport const Compare = (): JSX.Element => {\n  const [ compareProducts, setCompareProducts ] = useState<ProductModel[]>([]);\n  // TODO: const [ pages, setPages ] = useState(null);\n  const [ attributes, setAttributes ] = useState<GeneralAttributeModel[]>([]);\n  const [ carouselIndex, setCarouselIndex ] = useState(0);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const productFactory = useProductFactory();\n  const compareCart = useCart(ServiceStrings.carts.types.compare);\n\n  useEffect(() => {\n    if (compareCart?.SalesItems?.length\n      && cefConfig\n      && productFactory) {\n      getCompareCartItemProductsByIDs();\n    }\n  }, [ compareCart, cefConfig, productFactory ]);\n\n  useEffect(() => {\n    loadAttributes();\n    return () => {\n      setAttributes([]);\n    };\n  }, []);\n\n  async function getCompareCartItemProductsByIDs() {\n    setRunning();\n    try {\n      const products = await productFactory.getProductsByIDs(compareCart.SalesItems.map(x => x.ProductID));\n      setCompareProducts(products);\n      finishRunning();\n    } catch (err) {\n      console.error(err);\n      finishRunning(true, \"Failed to get compare cart item products\");\n    }\n  }\n\n  function loadAttributes(): void {\n    setRunning();\n    const args = {\n      Active: true,\n      AsListing: true,\n      HideFromStorefront: false,\n      IsComparable: true,\n    };\n    const promiserKey = `GetGeneralAttributes(${JSON.stringify(args)})`;\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.attributes.GetGeneralAttributes(args)\n    )\n      .then(res => {\n        if (!res?.data?.Results?.length) {\n          finishRunning(true, \"Failed to fetch general attributes\");\n          return;\n        }\n        setAttributes(res.data.Results);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(err);\n      });\n  }\n\n  const handleSelect = (selectedIndex: number, e: any) => {\n    setCarouselIndex(selectedIndex);\n  };\n\n  if (!compareCart?.SalesItems?.length || !compareProducts?.length) {\n    return (\n      <Row>\n        <Col sm={12}>\n          <LoadingWidget />\n        </Col>\n      </Row>\n    );\n  }\n\n  return (\n    <Fragment>\n      <Row>\n        <Col>\n          <h2>{t(\"ui.storefront.searchCatalog.compareProduct.Plural\")}</h2>\n        </Col>\n        <Col sm=\"auto\">\n          <Link className=\"btn btn-secondary text-de\"\n            to={corsLink(cefConfig, \"/\", \"catalog\")}>\n            {t(\"ui.storefront.searchCatalog.BackToResults\")}\n          </Link>\n        </Col>\n      </Row>\n      {viewState.hasError\n        && <Row>\n          <Col xs={12}>\n            <ErrorView viewState={viewState} />\n          </Col>\n        </Row>\n      }\n      <Carousel\n        // null to not automatically cycle\n        interval={null}\n        variant=\"dark\"\n        activeIndex={carouselIndex}\n        onSelect={handleSelect}\n        indicators={false}>\n        {_.chunk(compareProducts, 3).map((chunk, index) => {\n          return (\n            // eslint-disable-next-line react/no-array-index-key\n            <Carousel.Item key={`CarouselItem_CompareTable_${index}`}>\n              <Container>\n                <CompareTable\n                  compareProducts={chunk}\n                  attributes={attributes}\n                  cefConfig={cefConfig} />\n              </Container>\n            </Carousel.Item>\n          );\n        })}\n      </Carousel>\n    </Fragment>\n  );\n};\n\nconst CompareTable = (props: CompareTableProps): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const cartFactory = useCartFactory();\n\n  return (\n    <Table\n      striped\n      hover\n      size=\"sm\"\n      className={classes.compareTable}>\n      <thead>\n        <tr>\n          <th\n            className=\"w-28 sm-w-28 md-w-20 lg-w-20 xl-w-20 tk-w-20 fk-w-20\"\n            id=\"CompareSpecificationsText\">\n            {t(\"ui.storefront.product.detail.productDetails.Specifications\")}\n          </th>\n          {props.compareProducts.map((product, index) => {\n            const { ID, SeoUrl, Name } = product;\n            return (\n              <th\n                key={ID}\n                className=\"w-33 sm-w-33 md-w-25 lg-w-25 xl-w-25 tk-w-25 fk-w-25 compare-text compare-title text-center\">\n                <ProductCardNameWidget\n                  productName={Name}\n                  productSeoUrl={SeoUrl}\n                />\n              </th>\n            );\n          })}\n        </tr>\n      </thead>\n      <tbody>\n        <tr>\n          <td id=\"CompareImageText\">{t(\"ui.storefront.searchCatalog.compare.Image\")}</td>\n          {props.compareProducts.map(product => {\n            return (\n              <td key={product.ID}>\n                <div>\n                  <Anchor\n                    href={corsLink(cefConfig, `/${product.SeoUrl}`, \"productDetail\")}>\n                    <ImageWithFallback\n                      className=\"img-fluid d-block mx-auto\"\n                      imageResizerParamsBody={{\n                        width: 200,\n                        height: 200\n                      }}\n                      src={product.PrimaryImageFileName}\n                      alt={product.Name}\n                    />\n                  </Anchor>\n                </div>\n              </td>\n            );\n          })}\n        </tr>\n        <tr>\n          <td id=\"CompareSummaryText\">{t(\"ui.storefront.userDashboard2.controls.salesDetail.Summary\")}</td>\n          {props.compareProducts.map(product => {\n            return (\n              <td key={product.ID}>\n                <em className=\"compare-text\">{product.ShortDescription}</em>\n              </td>\n            );\n          })}\n        </tr>\n        <tr>\n          <td id=\"CompareSkuText\">{t(\"ui.storefront.cart.SKU\")}</td>\n          {props.compareProducts.map(product => {\n            return (\n              <td key={`compareCartSku_${product.ID}`}>\n                <ProductCardSkuWidget\n                  productID={product.ID}\n                  customKey={product.CustomKey}\n                />\n              </td>\n            );\n          })}\n        </tr>\n        <tr>\n          <td id=\"CompareDimensionsText\">{t(\"ui.storefront.searchCatalog.compare.Dimensions\")}</td>\n          {props.compareProducts.map(product => {\n            const { ID } = product;\n            const widthExists = !isNaN(product.Width);\n            const depthExists = !isNaN(product.Depth);\n            const weightExists = !isNaN(product.Weight);\n            if (widthExists || depthExists || weightExists) {\n              return (\n                <td\n                  key={ID}\n                  className=\"compare-text\">\n                  <table className=\"table table-bordered mb-0\">\n                    <tbody>\n                      {/* Account for 0 */}\n                      {widthExists ? (\n                        <tr>\n                          <th>{t(\"ui.storefront.storeDashboard.storeProductEditor.Width\")}</th>\n                          <th>{`${product.Width} ${product.WidthUnitOfMeasure}`}</th>\n                        </tr>\n                      ) : null}\n                      {depthExists ? (\n                        <tr>\n                          <th>{t(\"ui.storefront.storeDashboard.storeProductEditor.Depth\")}</th>\n                          <th>{`${product.Depth} ${product.DepthUnitOfMeasure}`}</th>\n                        </tr>\n                      ) : null}\n                      {weightExists ? (\n                        <tr>\n                          <th>{t(\"ui.storefront.storeDashboard.storeProductEditor.Weight\")}</th>\n                          <th>{`${product.Weight} ${product.WeightUnitOfMeasure}`}</th>\n                        </tr>\n                      ) : null}\n                    </tbody>\n                  </table>\n                </td>\n              );\n            }\n            return (\n              <td key={ID}>\n                <table className=\"table table-bordered mb-0\">\n                  <tbody>\n                    <tr>\n                      <td>{t(\"ui.storefront.searchCatalog.filters.None\")}</td>\n                    </tr>\n                  </tbody>\n                </table>\n              </td>\n            );\n          })}\n        </tr>\n        {getRowTitles(props.compareProducts, props.attributes).map(title => {\n          const titleNoPrefix = title.replace(\"SerializableAttributes.\", \"\");\n          return (\n            <tr key={title}>\n              <td>{camelCaseToHumanReadable(title.replace(\"SerializableAttributes.\", \"\"))}</td>\n              {props.compareProducts.map(product => {\n                const { ID, SerializableAttributes } = product;\n                return (\n                  <td key={ID}>\n                    {\n                      <Interweave\n                        content={\n                          title.startsWith(\"SerializableAttributes.\") && SerializableAttributes[titleNoPrefix]\n                            ? `${SerializableAttributes[titleNoPrefix].Value} ${SerializableAttributes[titleNoPrefix].UofM}`\n                            : product[title]\n                              ? product[title].toString()\n                              : \"\"\n                        }\n                      />\n                    }\n                  </td>\n                );\n              })}\n            </tr>\n          );\n        })}\n      </tbody>\n      <tbody>\n        {props.cefConfig?.featureSet.inventory.enabled && (\n          <tr>\n            <td id=\"CompareCartStockText\">{t(\"ui.storefront.searchCatalog.compare.Stock\")}</td>\n            {props.compareProducts.map(product => <td key={`CompareCartStock_${product.ID}`}><ProductCardStockWidget product={product} /></td>)}\n          </tr>\n        )}\n        {props.cefConfig?.featureSet.pricing.enabled && (\n          <tr>\n            <td id=\"ComparePriceText\">{t(\"ui.storefront.common.Price\")}</td>\n            {props.compareProducts.map(product => {\n              return (\n                <td key={product.ID} style={{ verticalAlign: \"middle\" }}>\n                  <ProductCardPricingWidget product={product} />\n                </td>\n              );\n            })}\n          </tr>\n        )}\n        <tr>\n          <td></td>\n          {props.compareProducts.map(product => (\n            <td key={product.ID}>\n              <ProductCardActionButtonWidget product={product} />\n            </td>\n          ))}\n        </tr>\n        <tr>\n          <td></td>\n          {props.compareProducts.map(product => (\n            <td\n              key={product.ID}\n              className=\"text-center\">\n              <Button\n                variant=\"link\"\n                className=\"btn-block text-danger compare-cart-product-remove\"\n                onClick={() => cartFactory.removeFromCompare(product.ID)}>\n                <i className=\"fal fa-fw fa-trash fa-lg me-2\" aria-hidden=\"true\" />\n                <span id=\"btnRemoveFromCompareCart\">{t(\"ui.storefront.common.Compare.RemoveFrom\")}</span>\n              </Button>\n            </td>\n          ))}\n        </tr>\n      </tbody>\n    </Table>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Anchor, Button, Card } from \"react-bootstrap\";\nimport { IPCCWLayoutProps } from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport const PCCWOverlayLayout = (props: IPCCWLayoutProps): JSX.Element => {\n  const { product, items } = props;\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const productIsMaster = product.TypeName.toLowerCase() === \"variant master\";\n\n  if (productIsMaster) {\n    return (\n      <Card className=\"card-img-top bg-white border-0\">\n        <div\n          className=\"product-image d-flex justify-content-center\"\n          id={`cartProductImageThumbnail${product.ID}`}>\n          <Anchor href={corsLink(cefConfig, `/${product.SeoUrl}`, \"productDetail\")}>\n            <ImageWithFallback\n              className=\"img-fluid d-block\"\n              src={product.PrimaryImageFileName}\n              alt={product.Name}\n              imageResizerParamsBody={{\n                maxwidth: 300,\n                maxheight: 300,\n                scale: \"both\",\n                mode: \"pad\"\n              }}\n            />\n          </Anchor>\n        </div>\n      </Card>\n    );\n  }\n\n  return (\n    <Card className=\"card-img-top bg-white border-0\">\n      <div className=\"image-with-control-overlay\">\n        <div\n          className=\"product-image justify-content-center\"\n          id={`cartProductImageThumbnail${product.ID}`}>\n          <Anchor\n            href={corsLink(cefConfig, `/${product.SeoUrl}`, \"productDetail\")}>\n            <ImageWithFallback\n              className=\"img-fluid d-block\"\n              imageResizerParamsBody={{\n                width: 300,\n                height: 300\n              }}\n              src={product.PrimaryImageFileName}\n              alt={product.Name}\n            />\n          </Anchor>\n        </div>\n        {items?.some(x => !x.hide) && (\n          <div className=\"text-center image-overlay-controls p-3 bg-transparent\">\n            <>\n              {items\n                .filter(x => !x.hide)\n                .map(item => {\n                  const { idPrefix, titleKey, onClick, icon } = item;\n                  return (\n                    <Button\n                      variant=\"secondary\"\n                      className=\"rounded text-decoration-none d-flex align-items-center mt-1 o-80\"\n                      key={titleKey}\n                      id={`${idPrefix}${product.ID}`}\n                      title={t(titleKey)}\n                      aria-label={t(titleKey)}\n                      onClick={onClick}>\n                      {item.icon && <div className=\"d-inline-block\">{icon}</div>}\n                      {item.iconString && <i className={`my-1 ${item.iconString}`}></i>}\n                      <span style={{ paddingLeft: \"0.75rem\" }}>{t(titleKey)}</span>\n                    </Button>\n                  );\n                })}\n            </>\n          </div>\n        )}\n      </div>\n    </Card>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Button, ButtonGroup } from \"react-bootstrap\";\nimport { IPCCWLayoutProps } from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\n\nexport const PCCWHorizontalLayout = (props: IPCCWLayoutProps): JSX.Element => {\n  const { product, items } = props;\n  const { t } = useTranslation();\n\n  const productIsMaster = product.TypeName.toLowerCase() === \"variant master\";\n\n  return (\n    <ButtonGroup className=\"justify-content-between w-100\">\n      {items.map((item): JSX.Element => {\n        const { hide, hideI, idPrefix, titleKey, onClick, icon } = item;\n        if (!hide) {\n          return (\n            <Button\n              variant=\"link\"\n              className=\"wrap text-decoration-none\"\n              disabled={Boolean(productIsMaster)}\n              id={`${idPrefix}${product.ID}`}\n              key={titleKey}\n              title={t(titleKey)}\n              aria-label={t(titleKey)}\n              onClick={onClick}>\n              {icon}\n              {!hideI && <br />}\n            </Button>\n          );\n        }\n        return <Button className=\"d-none\" key={titleKey} />;\n      })}\n    </ButtonGroup>\n  );\n};\n","import { IPCCWLayoutProps } from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, ListGroup } from \"react-bootstrap\";\n\nexport const PCCWVerticalLayout = (props: IPCCWLayoutProps): JSX.Element => {\n  const { product, items } = props;\n  const { t } = useTranslation();\n\n  const productIsMaster = product?.TypeName?.toLowerCase() === \"variant master\";\n\n  return (\n    <ListGroup as=\"ul\" className=\"list-unstyled\">\n      {items\n        .filter(x => !x.hide)\n        .map(item => {\n          const { idPrefix, titleKey, onClick, icon } = item;\n          return (\n            <ListGroup.Item key={titleKey} className=\"p-0 border-0\">\n              <Button\n                variant=\"outline-dark\"\n                className=\"border-0 w-100 d-flex align-items-center\"\n                disabled={Boolean(productIsMaster)}\n                id={`${idPrefix}${product.ID}`}\n                title={t(titleKey)}\n                aria-label={t(titleKey)}\n                onClick={onClick}>\n                { icon && <div className=\"d-inline-block px-2\">{icon}</div> }\n                { item.iconString && <i className={`me-1 fa-fw ${item.iconString}`}></i> }\n                <span>{t(titleKey)}</span>\n              </Button>\n            </ListGroup.Item>\n          );\n        })}\n    </ListGroup>\n  );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Form } from \"react-bootstrap\";\nimport { ProductModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { Modal } from \"src/_shared/modals/Modal\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useShoppingLists } from \"src/_redux/slices/cartSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\n\ninterface IAddToShoppingListModalProps {\n  show: boolean;\n  onCancel: Function;\n  product: ProductModel;\n  productID?: number;\n  productName?: string;\n  includeSwitchToCreateBtn?: boolean;\n  onSwitchToCreateButtonClicked?: () => void;\n  customConfirmMessage?: string;\n  clearCustomConfirmMessage?: () => void;\n}\n\nconst nullOptionKey = \"ui.storefront.userDashboard2.controls.addToShoppingList.SelectAShoppingList\";\n\nexport const AddToShoppingListModal = (props: IAddToShoppingListModalProps): JSX.Element => {\n  const {\n    show,\n    onCancel,\n    product,\n    includeSwitchToCreateBtn,\n    onSwitchToCreateButtonClicked,\n    customConfirmMessage,\n    clearCustomConfirmMessage,\n  } = props;\n\n  const [ selectedShoppingListName, setSelectedShoppingListName ] = useState<string>(nullOptionKey);\n  const [ itemIsIncludedInList, setItemIsIncludedInList ] = useState<boolean>(false);\n  const [ showConfirmMessage, setShowConfirmMessage ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cartFactory = useCartFactory();\n  const currentUser = useCurrentUser();\n  const shoppingLists = useShoppingLists();\n\n  useEffect(() => {\n    if (clearCustomConfirmMessage) {\n      clearCustomConfirmMessage();\n    }\n    return () => {\n      if (clearCustomConfirmMessage) {\n        clearCustomConfirmMessage();\n      }\n    };\n  }, [ show, selectedShoppingListName, itemIsIncludedInList, showConfirmMessage ]);\n\n  useEffect(() => {\n    if (show && currentUser.ID > 0) {\n      setSelectedShoppingListName(nullOptionKey);\n      setShowConfirmMessage(false);\n    }\n  }, [ show, currentUser ]);\n\n  function checkIfItemIsInCart(TypeName: string): void {\n    setRunning();\n    cartFactory\n      .checkIfItemIsInStaticCart(TypeName, product.ID)\n      .then(res => {\n        setItemIsIncludedInList(res);\n        finishRunning();\n      })\n      .catch(err => {\n        console.error(err);\n        finishRunning(true, err);\n      });\n  }\n\n  const onAddToListClicked = () => {\n    cartFactory\n      .addItemToStaticCart(selectedShoppingListName, product.ID, 1)\n      .then(() => {\n        setShowConfirmMessage(true);\n      })\n      .catch(err => console.error(err));\n  };\n\n  return (\n    <Fragment>\n      <Modal\n        title={t(\"ui.storefront.userDashboard2.controls.addToShoppingList.SelectAShoppingList\")}\n        onCancel={onCancel}\n        show={show}\n        size=\"md\">\n        <Form.Select\n          className=\"mb-3 ng-pristine ng-untouched ng-valid ng-empty\"\n          id=\"shoppingListSelect\"\n          name=\"shoppingListSelect\"\n          onChange={e => {\n            if (e.target.value === nullOptionKey) {\n              setItemIsIncludedInList(false);\n            } else {\n              checkIfItemIsInCart(e.target.value);\n            }\n            setSelectedShoppingListName(e.target.value);\n            if (showConfirmMessage) {\n              setShowConfirmMessage(false);\n            }\n          }}\n          value={selectedShoppingListName}>\n          <option value={nullOptionKey}>\n            {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.SelectAShoppingList\")}\n          </option>\n          {shoppingLists?.map(shoppingList => {\n            const { Name, ID } = shoppingList;\n            return (\n              <option key={ID} value={Name}>\n                {Name}\n              </option>\n            );\n          })}\n        </Form.Select>\n        {showConfirmMessage || customConfirmMessage\n          ? <Alert variant=\"success\" id=\"ShoppingListModalNameText\">\n            {customConfirmMessage\n              ?? `${\n                product.Name || product.CustomKey\n              } has been added to ${selectedShoppingListName}`}\n            &nbsp;\n          </Alert>\n          : null}\n        <div className=\"d-flex justify-content-end align-items-center gap-1\">\n          <Button\n            variant=\"secondary\"\n            className=\"ng-scope\"\n            id=\"closeSelectShoppingListModal\"\n            onClick={() => onCancel()}>\n            {t(\"ui.storefront.userDashboard2.controls.createShoppingList.BackToExistingLists\")}\n          </Button>\n          {includeSwitchToCreateBtn\n            && <Button\n              variant=\"secondary\"\n              className=\"ng-scope\"\n              id=\"btnModalCreateShoppingList\"\n              name=\"btnModalCreateShoppingList\"\n              onClick={() => onSwitchToCreateButtonClicked()}>\n              {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.CreateAndAddAnother\")}\n            </Button>\n          }\n          {itemIsIncludedInList\n            ? <Button\n              variant=\"primary\"\n              className=\"ng-scope\"\n              id=\"addToShoppingListModalBtn\"\n              disabled={true}>\n              {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.AlreadyInThisList\")}\n            </Button>\n            : <Button\n              variant=\"primary\"\n              className=\"ng-scope\"\n              id=\"addToShoppingListModalBtn\"\n              disabled={selectedShoppingListName === nullOptionKey}\n              onClick={onAddToListClicked}>\n              {t(\"ui.storefront.userDashboard2.controls.addToShoppingList.AddToList\")}\n            </Button>\n          }\n        </div>\n        {viewState.hasError && <ErrorView viewState={viewState} />}\n      </Modal>\n    </Fragment>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Alert, Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\nimport { useShoppingLists } from \"src/_redux/slices/cartSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\n\ninterface ICreateShoppingListModalProps {\n  show: boolean;\n  onCancel: () => void;\n  onConfirm?: (newListName: string, isFirstList?: boolean) => void;\n  cancelBtnLabel?: string;\n  displayMessageOnConfirm?: boolean;\n  productToAddAfterCreation?: ProductModel;\n}\n\nexport const CreateShoppingListModal = (props: ICreateShoppingListModalProps): JSX.Element => {\n  const [ listName, setListName ] = useState<string>(\"\");\n  const [ listNameTouched, setListNameTouched ] = useState<boolean>(false);\n  const [ showConfirmMessage, setShowConfirmMessage ] = useState<boolean>(false);\n  const [ confirmationMessage, setConfirmationMessage ] = useState<string>(null);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cartFactory = useCartFactory();\n  const shoppingLists = useShoppingLists();\n\n  const {\n    show,\n    onCancel,\n    onConfirm,\n    cancelBtnLabel,\n    displayMessageOnConfirm,\n    productToAddAfterCreation\n  } = props;\n\n  useEffect(() => {\n    if (show) {\n      setShowConfirmMessage(false);\n      setListName(\"\");\n      setListNameTouched(false);\n    }\n  }, [ show ]);\n\n  const handlePostConfirm = () => {\n    if (displayMessageOnConfirm && onConfirm) {\n      setShowConfirmMessage(true);\n      // Briefly show confirm message, then let parent handle\n      setTimeout(() => {\n        onConfirm(listName, shoppingLists.length === 1);\n      }, 1000);\n    } else if (onConfirm) {\n      onConfirm(listName, shoppingLists.length === 1);\n    }\n    setConfirmationMessage(\n      `${listName} ${t(\n        \"ui.storefront.userDashboard2.controls.createShoppingList.HasBeenCreated\"\n      )}`\n    );\n    setListName(\"\");\n    setListNameTouched(false);\n  };\n\n  const onConfirmClicked = () => {\n    setRunning();\n    cartFactory\n      .createShoppingList(listName)\n      .then(() => {\n        if (productToAddAfterCreation) {\n          return cartFactory.addItemToStaticCart(listName, productToAddAfterCreation.ID, 1);\n        }\n        return Promise.resolve();\n      })\n      .then(() => {\n        // Will call finishRunning\n        handlePostConfirm();\n      })\n      .catch(() => {\n        finishRunning(true, \"Failed to create new shopping list\");\n      });\n  };\n\n  const onListNameChanged = (val: string): void => {\n    if (!listNameTouched) {\n      setListNameTouched(true);\n    }\n    if (confirmationMessage) {\n      setConfirmationMessage(null);\n    }\n    setListName(val);\n  };\n\n  return (\n    <ConfirmationModal\n      show={show}\n      title=\"Create List\"\n      confirmBtnLabel=\"Create List\"\n      onConfirm={onConfirmClicked}\n      confirmDisabled={!listName.length}\n      confirmBtnVariant=\"success\"\n      confirmBtnClasses=\"text-white\"\n      cancelBtnLabel={cancelBtnLabel ?? \"Cancel\"}\n      onCancel={onCancel}\n      cancelBtnVariant=\"secondary\"\n      size=\"md\">\n      <Form.Group className=\"has-error mb-2\">\n        <Form.Label htmlFor=\"txtModalShoppingListCreateName\">\n          <span>\n            {t(\"ui.storefront.userDashboard2.controls.createShoppingList.NewShoppingListName\")}\n          </span>\n          <span className=\"text-danger\">&nbsp;*</span>\n        </Form.Label>\n        <InputGroup>\n          <Form.Control\n            type=\"text\"\n            className=\"rounded-end\"\n            id=\"txtModalShoppingListCreateName\"\n            maxLength={128}\n            onChange={e => onListNameChanged(e.target.value)}\n            value={listName}\n          />\n          {!listName.length && listNameTouched\n            ? <InputGroup.Text className=\"w-100 pt-1 ps-1\">\n              <span className=\"text-danger\">\n                {t(\"ui.storefront.common.validation.ThisFieldIsRequired\")}\n              </span>\n            </InputGroup.Text>\n            : null}\n        </InputGroup>\n      </Form.Group>\n      {showConfirmMessage && confirmationMessage\n        ? <Alert variant=\"success\" id=\"ShoppingListModalNameText\">\n          {confirmationMessage}\n        </Alert>\n        : null}\n      {viewState.hasError && <ErrorView viewState={viewState} />}\n    </ConfirmationModal>\n  );\n};\n","import { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { Modal } from \"src/_shared/modals\";\nimport { NumberInputFormGroup } from \"src/_shared/forms/formGroups\";\n\ninterface IAddToInStockAlertsModalFormData {\n  nudQIMQuantity: number;\n}\n\ninterface IAddToInStockAlertsModalProps {\n  show: boolean;\n  onCancel: () => void;\n  onConfirm: (desiredQuantity: number) => void;\n}\n\nexport const AddToInStockAlertsModal = (props: IAddToInStockAlertsModalProps): JSX.Element => {\n  const { show, onCancel, onConfirm } = props;\n  const { register, formState, handleSubmit } = useForm<IAddToInStockAlertsModalFormData>();\n  const { t } = useTranslation();\n\n  const handleCancel = () => {\n    onCancel();\n  };\n\n  const handleConfirm: SubmitHandler<IAddToInStockAlertsModalFormData> = data => {\n    const desiredQuantity = data.nudQIMQuantity;\n    onConfirm(desiredQuantity);\n  };\n\n  return (\n    <Modal\n      show={show}\n      onCancel={onCancel}\n      size=\"sm\"\n      showHeader={true}\n      title={t(\"ui.storefront.product.catalog.requestedQuantityForNotification\")}>\n      <Form onSubmit={handleSubmit(handleConfirm)}>\n        <Row>\n          <NumberInputFormGroup\n            register={register}\n            formIdentifier=\"nudQIMQuantity\"\n            errors={formState.errors}\n            min={1}\n          />\n        </Row>\n        <Row className=\"mt-2\">\n          <Col xs={12}>\n            <div className=\"d-flex justify-content-end gap-2\">\n              <Button variant=\"secondary\"\n                onClick={handleCancel}\n                id=\"btnQIMCancel\"\n                name=\"btnQIMCancel\">\n                {t(\"ui.storefront.common.Cancel\")}\n              </Button>\n              <Button\n                variant=\"primary\"\n                type=\"submit\"\n                id=\"btnQIMOk\"\n                name=\"btnQIMOk\"\n                title={t(\"ui.storefront.userDashboard2.controls.salesReturnCreate\")}\n                aria-label={t(\"ui.storefront.userDashboard2.controls.salesReturnCreate\")}>\n                {t(\"ui.storefront.userDashboard2.controls.salesReturnCreate\")}\n              </Button>\n            </div>\n          </Col>\n        </Row>\n      </Form>\n    </Modal>\n  );\n};\n","/* eslint-disable capitalized-comments */\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\nimport { PCCWOverlayLayout } from \"src/Catalog/controls/ProductCardControlsWidget/PCCWOverlayLayout\";\nimport { PCCWHorizontalLayout } from \"src/Catalog/controls/ProductCardControlsWidget/PCCWHorizontalLayout\";\nimport { PCCWVerticalLayout } from \"src/Catalog/controls/ProductCardControlsWidget/PCCWVerticalLayout\";\nimport { AddToShoppingListModal } from \"src/Dashboard/ShoppingList/AddToShoppingListModal\";\nimport {\n  IProductCardControl,\n  IProductCardControlsWidgetProps\n} from \"src/Catalog/controls/ProductCardControlsWidget/_ProductCardControlsWidgetTypes\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\nimport { CreateShoppingListModal } from \"src/Dashboard/ShoppingList/CreateShoppingListModal\";\nimport { AddToInStockAlertsModal } from \"src/Catalog/controls/ProductCardControlsWidget/AddToInStockAlertsModal\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCart, useShoppingLists } from \"src/_redux/slices/cartSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\nexport const ProductCardControlsWidget = (props: IProductCardControlsWidgetProps): JSX.Element => {\n  const {\n    product,\n    // TODO: inventory,\n    render,\n    hideFavoritesList,\n    hideWishList,\n    hideNotifyMe,\n    hideCompare,\n    // TODO: hideI,\n    hideShoppingList,\n    // shoppingLists,\n    // From Redux\n    // favoritesList,\n    // From Redux\n    // wishList,\n    // From Redux\n    // notifyMe,\n    // From Redux\n    // compareCart,\n  } = props;\n\n  const [ removeConfirmationModalData, setRemoveConfirmationModalData ] = useState({\n    show: false,\n    type: \"\",\n    onConfirm: () => {\n      // Do Nothing\n    }\n  });\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\n  const [ showGoToCompareViewModal, setShowGoToCompareViewModal ] = useState<boolean>(false);\n  const [ showCreateShoppingListModal, setShowCreateShoppingListModal ] = useState<boolean>(false);\n  const [ showAddToShoppingListModal, setShowAddToShoppingListModal ] = useState<boolean>(false);\n  const [ showAddToInStockModal, setShowAddToInStockModal ] = useState<boolean>(false);\n  const [ addToShoppingListPending, setAddToShoppingListPending ] = useState<boolean>(false);\n  const [ addToShoppinglistCustomConfirmMessage, setAddToShoppingListCustomConfirmMessage ] = useState<string>(null);\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n  const favoritesList = useCart(\n    ServiceStrings.carts.types.favorites,\n    cefConfig.featureSet.carts.favoritesList.enabled\n  );\n  const wishList = useCart(\n    ServiceStrings.carts.types.wishList,\n    cefConfig.featureSet.carts.wishList.enabled\n  );\n  const notifyMe = useCart(\n    ServiceStrings.carts.types.notifyMe,\n    cefConfig.featureSet.carts.notifyMeWhenInStock.enabled\n  );\n  const compareCart = useCart(\n    ServiceStrings.carts.types.compare,\n    cefConfig.featureSet.carts.compare.enabled\n  );\n  const shoppingLists = useShoppingLists();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const cartFactory = useCartFactory();\n\n  if (!product) {\n    return <div></div>;\n  }\n\n  let isFavorite = false;\n  let favoritesListTitleKey = \"ui.storefront.common.Favorites.AddTo\";\n  if (favoritesList?.SalesItems && Array.isArray(favoritesList?.SalesItems)) {\n    isFavorite = Boolean(favoritesList?.SalesItems.find(fi => fi.ProductID === product.ID));\n    if (isFavorite) {\n      favoritesListTitleKey = \"ui.storefront.common.Favorites.RemoveFrom\";\n    }\n  }\n\n  let isWish = false;\n  let wishListTitleKey = \"ui.storefront.common.WishList.AddTo\";\n  if (wishList?.SalesItems && Array.isArray(wishList?.SalesItems)) {\n    isWish = Boolean(wishList?.SalesItems.find(wi => wi.ProductID === product.ID));\n    if (isWish) {\n      wishListTitleKey = \"ui.storefront.common.WishList.RemoveFrom\";\n    }\n  }\n\n  let isNotifyMeItem = false;\n  let notifyMeTitleKey = \"ui.storefront.common.InStockAlert.Add\";\n  if (notifyMe?.SalesItems && Array.isArray(notifyMe?.SalesItems)) {\n    isNotifyMeItem = Boolean(notifyMe?.SalesItems.find(ni => ni.ProductID === product.ID));\n    if (isNotifyMeItem) {\n      notifyMeTitleKey = \"ui.storefront.common.InStockAlert.Remove\";\n    }\n  }\n\n  let isCompare = false;\n  let compareTitleKey = \"ui.storefront.common.Compare.AddTo\";\n  if (compareCart?.SalesItems && Array.isArray(compareCart?.SalesItems)) {\n    isCompare = Boolean(compareCart?.SalesItems.find(ci => ci.ProductID === product.ID));\n    if (isCompare) {\n      compareTitleKey = \"ui.storefront.common.Compare.RemoveFrom\";\n    }\n  }\n\n  function resetRemoveConfirmationModal() {\n    setRemoveConfirmationModalData({\n      show: false,\n      type: \"\",\n      onConfirm: () => {\n        // Do Nothing\n      }\n    });\n  }\n\n  function addItemToList(TypeName: string) {\n    setRunning();\n    cartFactory.addItemToStaticCart(TypeName, product.ID, 1)\n      .then(() => {\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to add item to list\");\n      });\n  }\n\n  function removeItemFromList(TypeName: string) {\n    setRunning();\n    cartFactory.removeItemFromStaticCart(TypeName, product.ID)\n      .then(() => {\n        resetRemoveConfirmationModal();\n        finishRunning();\n      })\n      .catch(err => {\n        resetRemoveConfirmationModal();\n        console.error(err);\n        finishRunning(true, err.message || \"Failed to remove item from list\");\n      });\n  }\n\n  function toggle(isInList: boolean, TypeName: string) {\n    if (isInList) {\n      setRemoveConfirmationModalData({\n        show: true,\n        type: TypeName,\n        onConfirm: () => removeItemFromList(TypeName)\n      });\n    } else if (currentUser.CustomKey) {\n      addItemToList(TypeName);\n    } else {\n      setShowLoginModal(true);\n    }\n  }\n\n  function addItemToInStockAlerts(desiredQuantity: number, closeModalOnSuccess: boolean = true): void {\n    setRunning();\n    cartFactory.addItemToStaticCart(ServiceStrings.carts.types.notifyMe, product.ID, desiredQuantity)\n      .then(() => {\n        if (closeModalOnSuccess) {\n          setShowAddToInStockModal(false);\n        }\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || `Failed to add item to ${ServiceStrings.carts.types.notifyMe}`);\n      });\n  }\n\n  function addItemToCompareCart() {\n    setRunning();\n    cartFactory.addToCompare(product.ID)\n      .then(() => {\n        if (compareCart) {\n          setShowGoToCompareViewModal(true);\n        }\n        finishRunning();\n      })\n      .catch(err => {\n        console.error(err);\n        finishRunning(true, err.message || \"Failed to add item to compare cart\");\n      });\n  }\n\n  function removeItemFromCompareCart() {\n    setRunning();\n    cartFactory.removeFromCompare(product.ID)\n      .then(() => {\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to remove item from compare cart\");\n      });\n  }\n\n  function toggleCompareItem() {\n    if (isCompare) {\n      removeItemFromCompareCart();\n    } else {\n      addItemToCompareCart();\n    }\n  }\n\n  const renderContent = () => {\n    const items: IProductCardControl[] = [\n      {\n        hide: hideFavoritesList\n          || !cefConfig.featureSet.carts.favoritesList.enabled\n          || !Boolean(currentUser.ID)\n          || product.TypeKey === \"VARIANT-MASTER\",\n        iconString: \"fal fa-fw fa-star\",\n        idPrefix: \"btnAddToFavoritesListProduct\",\n        isSelected: isFavorite,\n        onClick: () => toggle(isFavorite, \"Favorites List\"),\n        titleKey: favoritesListTitleKey\n      },\n      {\n        hide: hideWishList\n          || !cefConfig.featureSet.carts.wishList.enabled\n          || !Boolean(currentUser.ID)\n          || product.TypeKey === \"VARIANT-MASTER\",\n        iconString: \"fal fa-fw fa-heart\",\n        idPrefix: \"btnAddToWishListProduct\",\n        isSelected: isWish,\n        onClick: () => toggle(isWish, \"Wish List\"),\n        titleKey: wishListTitleKey\n      },\n      {\n        hide: hideNotifyMe\n          || product.readInventory && !product.readInventory().IsOutOfStock\n          || !cefConfig.featureSet.carts.notifyMeWhenInStock.enabled,\n        iconString: \"fal fa-fw fa-bell\",\n        idPrefix: \"btnAddToNotifyMeListProduct\",\n        isSelected: isNotifyMeItem,\n        onClick: () => {\n          if (!currentUser) {\n            setShowLoginModal(true);\n            return;\n          }\n          if (isNotifyMeItem) {\n            toggle(true, ServiceStrings.carts.types.notifyMe);\n          } else {\n            setShowAddToInStockModal(true);\n          }\n        },\n        titleKey: notifyMeTitleKey\n      },\n      {\n        hide: hideCompare || !cefConfig.featureSet.carts.compare.enabled || product.TypeKey === \"VARIANT-MASTER\",\n        iconString: \"far fa-fw fa-sliders-h\",\n        idPrefix: \"btnAddToCompareListProduct\",\n        isSelected: isCompare,\n        onClick: () => toggleCompareItem(),\n        titleKey: compareTitleKey\n      },\n      {\n        hide: hideShoppingList || !currentUser || product.TypeKey === \"VARIANT-MASTER\",\n        iconString: \"fal fa-fw fa-clipboard-list\",\n        idPrefix: \"btnAddToShoppingListProduct\",\n        isSelected: false,\n        onClick: () => {\n          if (currentUser?.Contact) {\n            if (shoppingLists?.length) {\n              setShowAddToShoppingListModal(true);\n            } else {\n              setShowCreateShoppingListModal(true);\n            }\n          } else {\n            setAddToShoppingListPending(true);\n            setShowLoginModal(true);\n          }\n        },\n        titleKey: \"ui.storefront.product.detail.productDetails.addToShoppingList\"\n      }\n    ];\n\n    const layoutProps = {\n      product,\n      items,\n      running: viewState.running\n    };\n\n    switch (render) {\n      case \"overlay\": {\n        return <PCCWOverlayLayout {...layoutProps} />;\n      }\n      case \"horizontal\": {\n        return <PCCWHorizontalLayout {...layoutProps} />;\n      }\n      case \"vertical\": {\n        return <PCCWVerticalLayout {...layoutProps} />;\n      }\n      default: {\n        return <PCCWHorizontalLayout {...layoutProps} />;\n      }\n    }\n  };\n\n  return (\n    <div className=\"position-relative\">\n      <ConfirmationModal\n        show={removeConfirmationModalData.show}\n        title={t(\"ui.storefront.common.RemoveItem\")}\n        confirmBtnLabel={t(\"ui.storefront.common.RemoveItem\")}\n        onConfirm={removeConfirmationModalData.onConfirm}\n        onCancel={resetRemoveConfirmationModal}>\n        <p>\n          {t(\"ui.storefront.cart.AreYouSureYouWantToRemove\")} <strong>{product.Name}</strong> from\n          your <strong className=\"text-capitalize\">{removeConfirmationModalData.type}</strong>?\n        </p>\n      </ConfirmationModal>\n      <ConfirmationModal\n        show={showGoToCompareViewModal}\n        title={t(\"ui.storefront.common.PleaseConfirm\")}\n        onConfirm={() => {\n          window.location.href = corsLink(\n            cefConfig,\n            `${cefConfig.routes.catalog.root}/${ServiceStrings.carts.kinds.compare}`,\n            \"catalog\"\n          );\n        }}\n        onCancel={() => setShowGoToCompareViewModal(false)}>\n        <p>{t(\"ui.storefront.product.widgets.compare.CompareModalConfirmationMessage\")}</p>\n      </ConfirmationModal>\n      <AddToInStockAlertsModal\n        show={showAddToInStockModal}\n        onCancel={() => setShowAddToInStockModal(false)}\n        onConfirm={desiredQuantity => {\n          addItemToInStockAlerts(desiredQuantity);\n        }} />\n      {!hideShoppingList && currentUser\n        && <>\n          <AddToShoppingListModal\n            show={showAddToShoppingListModal}\n            onCancel={() => setShowAddToShoppingListModal(false)}\n            product={product}\n            includeSwitchToCreateBtn={true}\n            onSwitchToCreateButtonClicked={() => {\n              setShowAddToShoppingListModal(false);\n              setShowCreateShoppingListModal(true);\n            }}\n            customConfirmMessage={addToShoppinglistCustomConfirmMessage}\n            clearCustomConfirmMessage={() => setAddToShoppingListCustomConfirmMessage(null)}\n          />\n          <CreateShoppingListModal\n            show={showCreateShoppingListModal}\n            onCancel={() => setShowCreateShoppingListModal(false)}\n            productToAddAfterCreation={product}\n            onConfirm={(newShoppingListName?: string, isFirstList?: boolean) => {\n              if (isFirstList) {\n                setShowAddToShoppingListModal(true);\n                setShowCreateShoppingListModal(false);\n                setAddToShoppingListCustomConfirmMessage(\n                  `${product.Name || product.CustomKey} has been added to ${newShoppingListName}`\n                );\n              }\n            }}\n            displayMessageOnConfirm={true}\n          />\n        </>\n      }\n      {renderContent()}\n      {props.children}\n      <LoginModal\n        show={showLoginModal}\n        onConfirm={() => {\n          setShowLoginModal(false);\n          if (addToShoppingListPending) {\n            setAddToShoppingListPending(false);\n            setShowAddToShoppingListModal(true);\n          }\n        }}\n        onCancel={() => setShowLoginModal(false)}\n      />\n    </div>\n  );\n};\n","import { Card, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\nimport {\n  ProductCardLotTimerWidget,\n  ProductCardNameWidget,\n  ProductCardPricingWidget,\n  ProductCardSkuWidget,\n  ProductCardStockWidget\n} from \"src/Catalog/views/ProductCardWidgets\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { AddToCartButton } from \"../../Cart/controls/AddToCartButton\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\nexport interface IProductCardProps {\n  addToCartAsLink?: boolean;\n  product: ProductModel;\n  customClasses?: string;\n  hideCompare?: boolean;\n  hideShortDescription?: boolean;\n  hideSku?: boolean;\n  hideWatchList?: boolean;\n  hideLabels?: boolean;\n  hideStock?: boolean;\n  countStoreStockOnly?: boolean;\n  index: number;\n}\n\nexport const ProductCard = (props: IProductCardProps): JSX.Element => {\n  const {\n    addToCartAsLink,\n    product,\n    customClasses,\n    hideShortDescription,\n    hideSku,\n    // TODO: use hideLabels,\n    hideStock,\n    hideCompare,\n    countStoreStockOnly\n    // TODO: use index\n  } = props;\n\n  const { CustomKey, ID, Name, SeoUrl, ShortDescription } = product;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  return (\n    <div key={ID}\n      className={`catalog-result-card ${customClasses ?? \"col mb-3\"}`}\n      data-sid=\"catalog-result-card\">\n      <Card className=\"h-100 border-medium rounded-4 overflow-hidden\">\n        <ProductCardControlsWidget\n          product={product}\n          render=\"overlay\"\n          hideShoppingList={!cefConfig.featureSet.carts.shoppingLists.enabled}\n          hideCompare={hideCompare}>\n          {_.isNumber(product.LotID) && <ProductCardLotTimerWidget product={product} />}\n        </ProductCardControlsWidget>\n        <Card.Body className=\"pt-3 pb-0 px-3 d-flex flex-column\">\n          {SeoUrl && (\n            <Card.Title as=\"span\">\n              <ProductCardNameWidget\n                productName={Name}\n                productSeoUrl={SeoUrl}\n                className=\"text-black fw-normal text-capitalize h5 mb-0\"\n              />\n            </Card.Title>\n          )}\n          {!hideShortDescription\n            && ShortDescription\n            && (\n              <Card.Text className=\"mt-1 mb-4\">\n                <span className=\"rows-2 small\" id={`cardProductShortDesc_${ID}`}>\n                  {ShortDescription}\n                </span>\n              </Card.Text>\n            )}\n          <Row className=\"position-relative gx-0 flex-grow-1 align-items-end\">\n            <Col\n              xs={12}\n              sm={5}\n              className=\"d-flex flex-column justify-content-center\">\n              {!hideSku && (\n                <ProductCardSkuWidget\n                  productID={ID}\n                  customKey={CustomKey}\n                  containerClassName=\"small\"\n                />\n              )}\n              {!hideStock && (\n                <div className=\"product-card-stock-wrapper\">\n                  <ProductCardStockWidget\n                    product={product}\n                    countStoreStockOnly={countStoreStockOnly}\n                    alertClasses=\"small ms-1 px-1 py-0 w-fit-content bg-transparent\"\n                  />\n                  {product?.readInventory && product.readInventory().loading\n                    ? <LoadingWidget overlay={true} />\n                    : null}\n                </div>\n              )}\n            </Col>\n            <Col xs={12} sm={7}>\n              {!product.LotID && <ProductCardPricingWidget\n                className=\"text-end product-pricing flex-column justify-content-center text-nowrap\"\n                product={product}\n              />}\n            </Col>\n          </Row>\n        </Card.Body>\n        <Card.Footer className=\"py-3 bg-transparent border-0\">\n          {addToCartAsLink\n            ? (\n              <a\n                className=\"btn btn-primary w-100\"\n                href={\n                  corsLink(\n                    cefConfig,\n                    `${cefConfig.routes.productDetail.root}/${SeoUrl}`,\n                    \"productDetail\"\n                  )\n                }>\n                {t(\"ui.storefront.catalog.addToCartButton.OrderNow\", \"Order Now\")}\n              </a>\n            )\n            : (\n              <AddToCartButton\n                product={product}\n                quantity={1}\n                btnVariant=\"primary\"\n                excludeQuoteCart={true}\n                label={t(\"ui.storefront.catalog.addToCartButton.OrderNow\", \"Order Now\")}\n              />\n            )}\n        </Card.Footer>\n      </Card>\n    </div>\n  );\n};\n","import { Alert, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const AlertInfoNoResults = (): JSX.Element => {\n  const { t } = useTranslation();\n\n  return (\n    <Row>\n      <Col xs={12}>\n        <Alert variant=\"info\" className=\"d-flex align-items-center\">\n          <i className=\"fal fa-fw fa-3x fa-question-circle me-3 \" />\n          <b>{t(\"ui.storefront.searchCatalog.alerts.Sorry.Exclamation\")}</b>\n          &nbsp;\n          <span>{t(\"ui.storefront.searchCatalog.alerts.NoResultsFound.Message\")}</span>\n        </Alert>\n      </Col>\n    </Row>\n  );\n};\n","/** @format */\n\nimport React, { UIEvent, useState } from \"react\";\nimport { Row } from \"react-bootstrap\";\nimport { ProductModel } from \"src/_api/cvApi._DtoClasses\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductCard } from \"./ProductCard\";\nimport { AlertInfoNoResults } from \"src/Catalog/controls/AlertInfoNoResults\";\n\n// eslint-disable-next-line no-undef\nlet timeoutHolder: NodeJS.Timeout = null;\n\ninterface ICatalogGridViewProps {\n  products: Array<ProductModel>;\n  onScrollToBottom?: Function;\n  useInfinite?: boolean;\n  parentRunning?: boolean;\n}\n\nexport const CatalogGridView = ({\n  products,\n  onScrollToBottom,\n  useInfinite,\n  parentRunning\n}: ICatalogGridViewProps): JSX.Element => {\n  const [ canCallScrollFn, setCanCallScrollFn ] = useState(true);\n\n  const style: React.CSSProperties = {};\n  if (useInfinite) {\n    style.maxHeight = \"70vh\";\n    style.overflowY = \"scroll\";\n    style.overflowX = \"hidden\";\n  }\n\n  return (\n    <div\n      className=\"grid-body\"\n      style={style}\n      onScroll={(event: UIEvent<HTMLDivElement>) => {\n        const { currentTarget } = event;\n        const { scrollHeight, scrollTop, clientHeight } = currentTarget;\n        const bottom = scrollHeight - Math.ceil(scrollTop) - 50 < clientHeight;\n        if (useInfinite && bottom && onScrollToBottom && canCallScrollFn) {\n          onScrollToBottom();\n          setCanCallScrollFn(false);\n          timeoutHolder = setTimeout(() => {\n            setCanCallScrollFn(true);\n            clearTimeout(timeoutHolder);\n          }, 2000);\n        }\n      }}>\n      <Row xs={2}\n        sm={2}\n        md={2}\n        lg={3}\n        xl={3}\n        className=\"row-cols-fk-6 row-cols-tk-5 gy-4\">\n        {products ? products.map((product, index) => <ProductCard product={product}\n          hideSku={true}\n          addToCartAsLink={true}\n          key={product.ID}\n          index={index} />) : null}\n      </Row>\n      {!products?.length && !parentRunning && <AlertInfoNoResults />}\n      {parentRunning ? <LoadingWidget /> : null}\n    </div>\n  );\n};\n","import { UIEvent, useState } from \"react\";\nimport { Card, Col, Row } from \"react-bootstrap\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls/ProductCardActionButtonWidget\";\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { AlertInfoNoResults } from \"src/Catalog/controls/AlertInfoNoResults\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\nimport {\n  ProductCardAttributesWidget,\n  ProductCardNameWidget,\n  ProductCardPricingWidget,\n  ProductCardSkuWidget,\n  ProductCardStockWidget\n} from \"src/Catalog/views/ProductCardWidgets\";\n\n// eslint-disable-next-line no-undef\nlet timeoutHolder: NodeJS.Timeout = null;\n\ninterface ICatalogListViewProps {\n  products: ProductModel[];\n  onScrollToBottom?: Function;\n  useInfinite?: boolean;\n  parentRunning?: boolean;\n  allAttributes?: GeneralAttributeModel[];\n}\n\nexport const CatalogListView = (props: ICatalogListViewProps): JSX.Element => {\n  const { products, onScrollToBottom, useInfinite, parentRunning } = props;\n  const [ canCallScrollFn, setCanCallScrollFn ] = useState(true);\n\n  const cefConfig = useCefConfig();\n\n  const style: React.CSSProperties = {};\n  if (useInfinite) {\n    style.maxHeight = \"40vh\";\n    style.overflowY = \"scroll\";\n    style.overflowX = \"hidden\";\n  }\n\n  return (\n    <div\n      className=\"list-body\"\n      style={style}\n      onScroll={(event: UIEvent<HTMLDivElement>) => {\n        const { currentTarget } = event;\n        const { scrollHeight, scrollTop, clientHeight } = currentTarget;\n        const bottom = scrollHeight - Math.ceil(scrollTop) - 50 < clientHeight;\n        if (useInfinite && bottom && onScrollToBottom && canCallScrollFn) {\n          onScrollToBottom();\n          setCanCallScrollFn(false);\n          timeoutHolder = setTimeout(() => {\n            setCanCallScrollFn(true);\n            clearTimeout(timeoutHolder);\n          }, 2000);\n        }\n      }}>\n      <Row id=\"results-list\">\n        {products.map((product, index) => <Col xs={12}\n          className=\"catalog-result-card mb-3 product\"\n          key={product.ID}>\n          <Card className=\"border-0\">\n            <Card.Body as={Row}>\n              <Col sm={4}>\n                <Card.Body className=\"h-100 d-flex flex-column justify-content-between\">\n                  <ProductCardControlsWidget\n                    product={product}\n                    render=\"overlay\"\n                    hideShoppingList={cefConfig?.featureSet.carts.shoppingLists.enabled}\n                  />\n                  <Row>\n                    <Card.Text className=\"card-price my-1\">\n                      <ProductCardPricingWidget product={product} />\n                    </Card.Text>\n                  </Row>\n                  <Row>\n                    <Card.Text className=\"action-button my-1\">\n                      <ProductCardActionButtonWidget product={product} buttonView=\"addToCart\" />\n                    </Card.Text>\n                  </Row>\n                </Card.Body>\n              </Col>\n              <Col sm={8}>\n                <Row>\n                  <Col xs={12}>\n                    <Card.Title>\n                      <ProductCardNameWidget productName={product.Name}\n                        productSeoUrl={product.SeoUrl}\n                        index={index} />\n                    </Card.Title>\n                    <Card.Text className=\"mb-0\">\n                      <ProductCardSkuWidget\n                        productID={product.ID}\n                        customKey={product.CustomKey}\n                      />\n                    </Card.Text>\n                    <Card.Text as={() => <ProductCardStockWidget product={product} />} />\n                  </Col>\n                  <Card.Text className=\"my-1\">\n                    <span className=\"rows-2 small\" id=\"cardProductShortDesc_\">\n                      {product.ShortDescription}\n                    </span>\n                  </Card.Text>\n                </Row>\n                {props.allAttributes?.filter(attr => !attr.HideFromCatalogViews).length\n                  && <Row>\n                    <Col sm={12}>\n                      <Row>\n                        <ProductCardAttributesWidget\n                          product={product}\n                          attributes={props.allAttributes\n                            .filter(attr => !attr.HideFromCatalogViews)\n                            .sort((a, b) => (a.SortOrder ?? 0) - (b.SortOrder ?? 0))}\n                        />\n                      </Row>\n                    </Col>\n                  </Row>\n                }\n              </Col>\n            </Card.Body>\n          </Card>\n          <hr />\n        </Col>)}\n      </Row>\n      {!products?.length && !parentRunning && <AlertInfoNoResults />}\n      {parentRunning ? <LoadingWidget /> : null}\n    </div>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"cvgrid\":\"CVGrid_cvgrid__Ys8QM\",\"dateInput\":\"CVGrid_dateInput__dzGrt\"};","/**\n * @file React/src/_shared/customHooks/useEffectSkipFirst.ts\n * @author Copyright (c) 2022-2023 clarity-ventures.com. All rights reserved.\n * @desc useEffectSkipFirst hook\n */\nimport { useEffect, useRef } from \"react\";\n\nfunction useEffectSkipFirst(fn: Function, arr: any[]): any {\n  const isFirst = useRef(true);\n\n  useEffect(() => {\n    if (isFirst.current) {\n      isFirst.current = false;\n      return undefined;\n    }\n\n    return fn();\n  }, arr);\n}\n\nexport default useEffectSkipFirst;\n","/* eslint-disable max-len */\n/* eslint-disable object-shorthand */\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { SortableContainer, SortableElement } from \"react-sortable-hoc\";\nimport { arrayMoveImmutable } from \"array-move\";\nimport { BaseModel } from \"../../_api/cvApi.shared\";\nimport { ICVGridColumnProps } from \"./CVGrid\";\nimport useEffectSkipFirst from \"../customHooks/useEffectSkipFirst\";\nimport { useViewState } from \"../customHooks/useViewState\";\nimport { useCurrentUser } from \"../../_redux/slices/authSlice\";\nimport { useAuthFactory } from \"../../_redux/factories/authFactory\";\n\ninterface IAttribute {\n  columnTitle: string;\n  show: boolean;\n  onChange: () => void;\n  hideable: boolean;\n}\n\ninterface SortableItemProps {\n  attribute: IAttribute;\n  index: number;\n}\n\nexport interface IAttributeColumnHeader {\n  columnTitle: string;\n  show: boolean;\n  hideable: boolean;\n}\n\ninterface IColumnEditorModalProps {\n  columnHeaders: IAttributeColumnHeader[];\n  setColumnHeaders: React.Dispatch<React.SetStateAction<IAttributeColumnHeader[]>>;\n  showColumnEditorModal: boolean;\n  setShowColumnEditorModal: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport const ColumnEditorModal = (props: IColumnEditorModalProps): JSX.Element => {\n  const { columnHeaders, setColumnHeaders, showColumnEditorModal, setShowColumnEditorModal } = props;\n\n  const { t } = useTranslation();\n  const arrayMove: any = arrayMoveImmutable;\n\n  const onSortEnd = ({ oldIndex, newIndex }: any) => {\n    setColumnHeaders((prevcolumnHeaders: IAttributeColumnHeader[]) => {\n      return arrayMove(prevcolumnHeaders, oldIndex, newIndex);\n    });\n  };\n\n  const handleCheckboxChange = (columnTitle: string) => {\n    const updatedcolumnHeaders = columnHeaders.map((attribute: IAttributeColumnHeader) => {\n      if (attribute.columnTitle === columnTitle) {\n        return { ...attribute, show: !attribute.show };\n      }\n      return attribute;\n    });\n    setColumnHeaders(updatedcolumnHeaders);\n  };\n\n  return (\n    <Modal show={showColumnEditorModal} onCancel={() => setShowColumnEditorModal(false)}>\n      <h2 className=\"mb-3 bg-primary p-3 d-1 text-white\">Column Editor</h2>\n      <div className=\"p-3\">\n        <h5 className=\"p-2 fw-bold\">Select the columns you would like to display in the Catalog.</h5>\n        <h5 className=\"p-2 fw-bold\"><i className=\"far fa-fw fa-arrows-v me-2\"/>Drag and drop to reorder the columns.</h5>\n        <hr />\n        <SortableItemContainer onSortEnd={onSortEnd}>\n          {columnHeaders.map((attribute: IAttributeColumnHeader, index: number) => {\n            const { columnTitle, show } = attribute;\n            return <SortableItem\n              key={columnTitle + index.toString()}\n              index={index}\n              attribute={{\n                show: show,\n                columnTitle: columnTitle,\n                hideable: attribute.hideable,\n                onChange: () => handleCheckboxChange(columnTitle)\n              }}\n            />;\n          })}\n        </SortableItemContainer>\n        <div className=\"d-flex justify-content-end\">\n          <Button variant=\"primary btn-lg\" onClick={() => setShowColumnEditorModal(false)}>\n            {t(\"common.OK\")}\n          </Button>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\n// SortableItem Component\nconst SortableItem = SortableElement<SortableItemProps>(({ attribute }: any) => {\n  const { show, columnTitle, onChange } = attribute;\n\n  return <label className=\"fs-5 p-2 bg-light d-block my-2 sortable-item\" style={{ zIndex: \"99999\" }}>\n    {attribute.hideable && <input className=\"form-check-input mx-2\"\n      type=\"checkbox\"\n      checked={show}\n      onChange={onChange} />}\n    {columnTitle}\n  </label>;\n});\n\n// SortableItemContainer Component\nconst SortableItemContainer = SortableContainer(({ children }: any) => <div>{children}</div>);\n\nexport const ColumnEditor = <TData extends BaseModel>(\n  props: {\n      columns: ICVGridColumnProps<TData>[],\n      setColumns: React.Dispatch<React.SetStateAction<ICVGridColumnProps<TData>[]>>,\n      name: string,\n    }\n): JSX.Element => {\n  const [ showColumnEditorModal, setShowColumnEditorModal ] = useState<boolean>(false);\n  const [ columnHeaders, setColumnHeaders ] = useState<Array<IAttributeColumnHeader>>(\n    props.columns.map(col => ({ columnTitle: col.title, show: !col.hideCell, hideable: col.hideable !== false }))\n  );\n  const ranAtLeastOnce = useRef(false);\n  const currentUser = useCurrentUser();\n  const authFactory = useAuthFactory();\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  function isEqualOrder(array1: any[], array2: any[]): boolean {\n    if (array1.length !== array2.length) {\n      return false;\n    }\n    for (let i = 0; i < array1.length; i++) {\n      if (array1[i].columnTitle !== array2[i].columnTitle) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  // Load from backend when the component mounts and currentUser is valid\n  useEffect(() => {\n    if (currentUser.ID\n      && !currentUser.Loading\n      && currentUser.SerializableAttributes\n      && currentUser.SerializableAttributes[`CVGrid_${props.name}_Order`]) {\n      const savedOrder = JSON.parse(currentUser.SerializableAttributes[`CVGrid_${props.name}_Order`].Value);\n\n      // Check if the number of columns from props.columns is different from the saved order\n      if (savedOrder.length !== props.columns.length) {\n        // If there's a difference, reset the order to be the default\n        setColumnHeaders(props.columns.map(col => ({ columnTitle: col.title, show: !col.hideCell, hideable: col.hideable !== false })));\n        return;\n      }\n      // Ensure that the saved order matches the current set of columns\n      if (!isEqualOrder(savedOrder, columnHeaders)) {\n        setColumnHeaders(savedOrder);\n      }\n    }\n  }, [ currentUser, props.columns ]);\n\n  const saveAttributes = async () => {\n    if (currentUser.ID && !currentUser.Loading && !viewState.running) {\n      // This is to prevent this effect from saving over the user's settings if they log in while on a page with a sortable cvGrid\n      if (!ranAtLeastOnce.current) {\n        ranAtLeastOnce.current = true;\n        return;\n      }\n      const newSerializableAttributes = { ...currentUser.SerializableAttributes };\n      const newOrderValue = JSON.stringify(columnHeaders);\n      if (!newSerializableAttributes[`CVGrid_${props.name}_Order`] || newSerializableAttributes[`CVGrid_${props.name}_Order`].Value !== newOrderValue) {\n        newSerializableAttributes[`CVGrid_${props.name}_Order`] = {\n          ID: newSerializableAttributes[`CVGrid_${props.name}_Order`]?.ID ?? -1,\n          Value: newOrderValue,\n        };\n        try {\n          setRunning();\n          await authFactory.updateCurrentUser({\n            ...currentUser,\n            SerializableAttributes: newSerializableAttributes\n          });\n          finishRunning();\n        } catch (err) {\n          finishRunning(true, err);\n        }\n      }\n    }\n  };\n\n  // Save to backend when columnHeaders changes\n  useEffect(() => {\n    if (!authFactory) {\n      return;\n    }\n    saveAttributes();\n  }, [ columnHeaders, authFactory ]);\n\n  useEffectSkipFirst(() => {\n    props.setColumns(prev => {\n      const orderLookup: {[key: string]: number} = {};\n      columnHeaders.forEach((header, index) => {\n        orderLookup[header.columnTitle] = index;\n      });\n\n      const next = prev.map(column => ({ ...column }));\n      next.sort((a, b) => {\n        const aOrder = orderLookup[a.title];\n        const bOrder = orderLookup[b.title];\n\n        if (aOrder === undefined) {\n          return 1;\n        }\n        if (bOrder === undefined) {\n          return -1;\n        }\n\n        return aOrder - bOrder;\n      });\n\n      for (const column of next) {\n        const correspondingHeader = columnHeaders.find(header => header.columnTitle === column.title);\n        if (correspondingHeader && correspondingHeader.show === false) {\n          column.hideCell = true;\n        } else {\n          column.hideCell = false;\n        }\n      }\n\n      return next;\n    });\n  }, [ columnHeaders ]);\n\n  return <>\n    <ColumnEditorModal\n      showColumnEditorModal={showColumnEditorModal}\n      setShowColumnEditorModal={setShowColumnEditorModal}\n      columnHeaders={columnHeaders}\n      setColumnHeaders={setColumnHeaders}\n    />\n    <div className=\"text-end\">\n      <Button\n        onClick={() => setShowColumnEditorModal(true)}\n        className=\"text-info fw-bold\"\n        variant=\"link\">\n        {t(\"product.catalog.results.columnEditor.editColumns\", \"Edit Columns\")}\n      </Button>\n    </div>\n  </>;\n};\n","import { Button, Col, Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ICVGridToolbarFilterBtns } from \"./_CVGridToolbarFilterTypes\";\n\n// eslint-disable-next-line max-len\nexport const CVGridToolbarFilterBtns = (props: ICVGridToolbarFilterBtns): JSX.Element => {\n  const { onCallFilterClicked, onResetClicked, isFilterColumnsAvailable } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    isFilterColumnsAvailable && (\n      <Form.Group\n        as={Col}\n        sm=\"auto\"\n        className=\"search-bar\">\n        <Form.Label>&nbsp;</Form.Label>\n        <InputGroup>\n          <Button\n            variant=\"secondary\"\n            id=\"btnGridFilter\"\n            onClick={event => {\n              event.preventDefault();\n              return onCallFilterClicked();\n            }}\n            title=\"Filter\">\n            <i className=\"fal fa-fw fa-filter fa-sm\" />\n            <span className=\"sr-only\">{t(\"common.Filter\")}</span>\n          </Button>\n          <Button\n            variant=\"secondary\"\n            className=\"ms-1\"\n            id=\"btnGridFilterReset\"\n            onClick={() => onResetClicked()}>\n            <i\n              className=\"fal fa-fw fa-redo fa-sm\"\n              aria-hidden=\"true\"\n            />\n            <span className=\"sr-only\">{t(\"common.Reset\")}</span>\n          </Button>\n        </InputGroup>\n      </Form.Group>\n    )\n  );\n};\n","import React, { Children, ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Button, Col, Form, InputGroup, Pagination, Row, Table } from \"react-bootstrap\";\nimport { DateTime } from \"luxon\";\nimport { BaseModel, IHttpPromise, PagedResultsBase } from \"src/_api/cvApi.shared\";\nimport { BaseSearchModel } from \"src/_api/cvApi._DtoClasses\";\nimport promiser from \"src/_shared/Promiser\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\n// @ts-ignore\nimport classes from \"./CVGrid.module.scss\";\nimport { useDebounce } from \"src/_shared/customHooks/useDebounce\";\nimport { ColumnEditor } from \"src/_shared/CVGrid/ColumnEditor\";\nimport { CVGridToolbarFilterBtns } from \"src/_shared/CVGrid/ToolbarFilterComponents/CVGridToolbarFilterBtns\";\nimport _ from \"lodash\";\nimport { useTranslation } from \"react-i18next\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\n\ntype DataReader<TData extends BaseModel, TDataProps extends BaseSearchModel> = (\n  prop: TDataProps\n) => IHttpPromise<PagedResultsBase<TData>>;\n\nexport interface ICVGrid2Props<TData extends BaseModel, TDataProps extends BaseSearchModel> {\n  /**\n   * A method that accepts the current filters and returns a promise of the new paginated data.\n   * Alternatively you can simply provide the array of objects to show and handle loading it yourself.\n   */\n  data: DataReader<TData, TDataProps> | PagedResultsBase<TData> | TData[];\n  /**\n   * Differentiates cv grids - used in the promiser keys inside the cv grid to prevent them from\n   * accidentally sharing data\n   */\n  name?: string;\n  /**\n   * Initial search filters to apply\n   */\n  initialFilters?: TDataProps;\n  /**\n   * List of allowed page size options\n   */\n  pageSizes?: number[];\n\n  /**\n   * The page count\n   */\n  pageCount?: number;\n  /**\n   * Children of the grid - only columns, filters, and expanded row renderers are used!\n   */\n  children?: ReactNode;\n  /**\n   * Optional callback when the data query is changed.\n   */\n  onQueryChange?: (query: TDataProps) => void;\n  /**\n   * Set this to true to show column editor\n   */\n  sortable?: boolean;\n  /**\n   * Set this to true to hide pagination\n   */\n  hidePaging?: boolean;\n  /**\n   * Set this to true to show a paging label (e.g. \"1-3 of 3 items\")\n   * Does not depend on hidePaging\n   */\n  showPagingLabel?: boolean;\n  extraRow?: {\n    /**\n     * A lambda returning the condition for rendering a second row\n     * for one data item\n     * e.g. order => order.StatusKey === \"Pending\"\n     */\n    condition?: (arg: TData) => boolean;\n    /**\n     * The element to render if the above condition is met\n     */\n    element?: (arg: TData) => React.ReactNode;\n    /**\n     * The amount of columns the extra row should span\n     * Starts at the end and stacks to the start\n     */\n    cols?: number;\n  };\n  /**\n   * Set this to true to removed the striped effect on the table\n   */\n  noStripes?: boolean;\n  /**\n   * Apply css classes to the CVGrid table\n   */\n  tableClasses?: string;\n      /**\n     * Boolean to determine if Filter buttons should be displayed\n     */\n  hideFilterButtons?: boolean;\n}\n\ninterface ICVGridSubComponentBase {\n  /**\n   * Internal use only - do not set this.\n   */\n  __type: string;\n}\n\nexport interface ICVGridColumnProps<TData extends BaseModel> extends ICVGridSubComponentBase {\n  /**\n   * The header title of the column.\n   */\n  title: string;\n  /**\n   * The property to bind to on the row item. This can support subobjects, eg. \"Totals.Total\"\n   */\n  binding?: string;\n  /**\n   * The fallback value to display if the binding value returns undefined or null\n   */\n  fallback?: string | ReactNode;\n  /**\n   * The format to apply to the displayed value\n   */\n  format?: \"text\" | \"currency\" | \"date\" | \"time\" | \"datetime\" | ((raw: string) => string);\n  /**\n   * The Luxon based time format string\n   * example: \"LLL dd yyyy\", Apr 04 1998\n   */\n  dateFormat?: string;\n  /**\n   * CSS classes to apply to td elements of this column\n   */\n  tdClass?: string;\n  /**\n   * CSS classes to apply to the th element of this column\n   */\n  thClass?: string;\n  /**\n   * Set this to true to hide the header text (note: title is still required!)\n   */\n  hideHeader?: boolean;\n  /**\n   * Set this to true to hide the cell and also its corresponding header\n   */\n  hideCell?: boolean;\n  /**\n   * Default true, set this to false disable hiding this column in the Column Editor\n   */\n  hideable?: boolean;\n  /**\n   * Configure children of this element to specify custom rendering behavior\n   */\n  children?: (data: TData) => ReactNode;\n}\n\nexport interface ICVGridFilterProps extends ICVGridSubComponentBase {\n  /**\n   * The title of the filter (used as the label, and an iterator key, so it must be unique)\n   */\n  title: string;\n  /**\n   * Placeholder for the filter if applicable, fallback placeholder is title\n   */\n  placeholder?: string;\n  /**\n   * The type of the filter\n   */\n  type: \"number\" | \"string\" | \"minmaxdate\" | \"select\";\n  /**\n   * The property this filter sets on the search DTO\n   */\n  filterProperty: string;\n  /**\n   * Options to display, if the type is \"select\".\n   * This can be a direct array, a Promise that returns an array, or a function that returns\n   * a promise that returns an array.\n   */\n  options?: any[] | Promise<any[]> | (() => Promise<any[]>);\n  /**\n   * Set the default selected option in a select filter to something other than All\n   */\n  defaultOptionTitle?: string;\n  /**\n   * The property to use as the value of the select options. If null, the value is the option itself.\n   */\n  optionKey?: string;\n  /**\n   * The property to use as the title of the select options. If null, the value is the option itself.\n   * Can also be a function that accepts the object and returns a string, for custom logic.\n   */\n  optionTitle?: string | ((value: any) => string);\n}\n\ninterface ICVGridFilterHeaderProps<TDataProps extends BaseSearchModel> extends ICVGridFilterProps {\n  callback: (data: Partial<TDataProps>) => void;\n  name: string;\n}\n\nexport interface ICVGridExpandedRowProps<TData extends BaseModel> extends ICVGridSubComponentBase {\n  children: (data: TData) => ReactNode;\n}\n\nexport const CVGrid = <TData extends BaseModel, TDataProps extends BaseSearchModel>(\n  props: ICVGrid2Props<TData, TDataProps>\n): JSX.Element => {\n  const startingProps: TDataProps = {\n    Paging: { Size: props.pageSizes[0], StartIndex: 1 },\n    ...props.initialFilters\n  };\n  const [ columns, setColumns ] = useState<ICVGridColumnProps<TData>[]>([]);\n  const [ filters, setFilters ] = useState<ICVGridFilterProps[]>([]);\n  const [ expandedRenderer, setExpandedRenderer ] = useState<ICVGridExpandedRowProps<TData>>();\n  const [ requestData, setRequestData ] = useState<TDataProps>(startingProps);\n  const [ data, setData ] = useState<PagedResultsBase<TData>>();\n  const [ expandedID, setExpandedID ] = useState<number>();\n  const [ resetKey, setResetKey ] = useState(0);\n  const hideFilterButtons = props.hideFilterButtons;\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  useEffect(() => {\n    if (!props.data) {\n      return;\n    }\n    if (Array.isArray(props.data)) {\n      const newData = {\n        Results: props.data,\n        TotalPages: 1,\n        TotalCount: props.data.length,\n        CurrentPage: 0,\n        CurrentCount: props.data.length\n      };\n      setData(newData);\n      return;\n    }\n    if (_.has(props.data, \"Results\")) {\n      setData(props.data as PagedResultsBase<TData>);\n    }\n  }, [ props.data ]);\n\n  useEffect(() => {\n    if (!props.children) {\n      return;\n    }\n    const cols: ICVGridColumnProps<TData>[] = [];\n    const fils: ICVGridFilterProps[] = [];\n    Children.forEach(props.children, child => {\n      if (\n        !child\n        || typeof child === \"string\"\n        || typeof child === \"number\"\n        || typeof child === \"boolean\"\n        || !Object.hasOwn(child, \"props\")\n      ) {\n        return;\n      }\n      // @ts-ignore validating that \"props\" exists above\n      const childProps = child.props as ICVGridSubComponentBase;\n      // eslint-disable-next-line no-underscore-dangle\n      const childType = childProps.__type;\n      if (childType === \"Column\") {\n        const columnProps = childProps as ICVGridColumnProps<TData>;\n        cols.push(columnProps);\n      }\n      if (childType === \"Filter\") {\n        // @ts-ignore\n        const filterProps = childProps as ICVGridFilterProps;\n        fils.push(filterProps);\n      }\n      if (childType === \"ExpandedRow\") {\n        // @ts-ignore\n        const expandedRowProps = childProps as ICVGridExpandedRowProps<TData>;\n        setExpandedRenderer(expandedRowProps);\n      }\n    });\n    setColumns(cols);\n    setFilters(fils);\n  }, [ props.children ]);\n\n  useEffect(() => {\n    // Call the optional query callback when a filter changes\n    if (props.onQueryChange) {\n      props.onQueryChange(requestData);\n    }\n    if (Array.isArray(props.data)\n      || _.has(props?.data, \"Results\")\n      || !props.data) {\n      // Skip loading if the provided data is raw\n      return;\n    }\n    setRunning();\n    const promiserKey = `cvGrid:${props.name}:${JSON.stringify(requestData)}`;\n    promiser\n      .resolve(promiserKey, () => (props.data as DataReader<TData, TDataProps>)(requestData))\n      .then(r => {\n        setData(r.data);\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  }, [ requestData ]);\n\n  const goToPage = (page: number) => {\n    setRequestData(prev => ({ ...prev, Paging: { ...prev.Paging, StartIndex: page } }));\n  };\n\n  const setPageSize = (pageSize: number) => {\n    setRequestData(prev => ({ ...prev, Paging: { ...prev.Paging, Size: pageSize } }));\n  };\n\n  const toggleExpandedID = (id: number) => {\n    if (expandedID === id) {\n      setExpandedID(null);\n    } else {\n      setExpandedID(id);\n    }\n  };\n\n  const toFormattedDate = useCallback((dateArg: Date | string, format: string): string => {\n    if (typeof dateArg !== \"string\" && !(dateArg instanceof Date)) {\n      return dateArg;\n    }\n    let d = dateArg;\n    if (typeof dateArg === \"string\") {\n      d = new Date(dateArg);\n    }\n\n    return DateTime.fromJSDate(d as Date).toFormat(format);\n  }, []);\n\n  const renderCell = (row: TData, column: ICVGridColumnProps<TData>) => {\n    if (column.children) {\n      return column.children(row);\n    }\n    if (column.binding) {\n      // Traverse through \".\" characters to allow binding to subobjects\n      const value = column.binding.split(\".\").reduce((prev, cur) => (prev && prev[cur] ? prev[cur] : null), row as any);\n      if (!value) {\n        return column.fallback;\n      }\n      switch (column.format) {\n        case \"text\": {\n          return value.toString();\n        }\n        case \"date\": {\n          return toFormattedDate(value, column.dateFormat ?? \"dd MMM yyyy\");\n        }\n        case \"time\": {\n          return toFormattedDate(value, column.dateFormat ?? \"hh:mm:ss a\");\n        }\n        case \"datetime\": {\n          return toFormattedDate(value, column.dateFormat ?? \"y MMM dd hh:mm a\");\n        }\n        case \"currency\": {\n          return currencyFormatter.format(value);\n        }\n        default: {\n          if (column.format) {\n            return column.format(value);\n          }\n          return value;\n        }\n      }\n    }\n    return \"\";\n  };\n\n  const renderPagination = () => {\n    const page = requestData?.Paging?.StartIndex ?? 1;\n    const pageCount = props?.pageCount ?? data?.TotalPages ?? 1;\n    let minPage = Math.max(page - 2, 1);\n    const maxPage = Math.min(minPage + 5, pageCount + 1);\n    minPage = Math.max(maxPage - 5, 1);\n    return (\n      <Pagination className=\"cv-grid-pagination ms-2 my-0\">\n        <Pagination.First\n          disabled={page === 1}\n          onClick={() => goToPage(1)}\n        />\n        <Pagination.Prev\n          disabled={page === 1}\n          onClick={() => goToPage(page - 1)}\n        />\n        {[ ...Array(maxPage - minPage || 1).keys() ].map(pn => (\n          <Pagination.Item\n            key={pn + minPage}\n            active={page === pn + minPage}\n            onClick={() => goToPage(pn + minPage)}>\n            {pn + minPage}\n          </Pagination.Item>\n        ))}\n        <Pagination.Next\n          disabled={page === pageCount}\n          onClick={() => goToPage(page + 1)}\n        />\n        <Pagination.Last\n          disabled={page === pageCount}\n          onClick={() => goToPage(pageCount)}\n        />\n      </Pagination>\n    );\n  };\n\n  const onFilterUpdated = (update: Partial<TDataProps>): void => {\n    const newFilter: TDataProps = {\n      ...requestData,\n      ...update,\n      Paging: {\n        ...requestData.Paging,\n        StartIndex: requestData.Paging.StartIndex ?? 1\n      }\n    };\n    setRequestData(newFilter);\n  };\n\n  const onCallFilterClicked = (): void => {\n    // Don't use promiser here, force re-filter\n    if (props.onQueryChange) {\n      props.onQueryChange(requestData);\n    }\n    if (Array.isArray(props.data)\n      || _.has(props?.data, \"Results\")\n      || !props.data) {\n      // Skip loading if the provided data is raw\n      return;\n    }\n    setRunning();\n    (props.data as DataReader<TData, TDataProps>)(requestData)\n      .then(r => {\n        setData(r.data);\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  };\n\n  return (\n    <div className=\"position-relative\">\n      {(viewState.running || !props.data) && <LoadingWidget overlay />}\n      {/* if props?.data is raw, assume parent is handling error */}\n      {viewState.hasError && !Array.isArray(props?.data) && !_.has(props?.data, \"Results\") && (\n        <ErrorView\n          viewState={viewState}\n          componentName=\"CVGrid\"\n        />\n      )}\n\n      {Boolean(filters.length) && (\n        <Row className=\"mb-2 mt-3 pb-3\">\n          {filters.map(filter => {\n            const isDate = filter.type === \"minmaxdate\";\n            const filterKey = `${filter.filterProperty}-${resetKey}`;\n            if (isDate) {\n              return <Col\n                key={filterKey}\n                xs={12}\n                sm=\"auto\">\n                <HeaderFilter<TDataProps>\n                  {...filter}\n                  callback={onFilterUpdated}\n                  name={props.name}\n                  key={filterKey}\n                />\n              </Col>;\n            }\n            return (\n              <Col\n                key={filterKey}\n                xs={12}\n                sm={6}\n                md=\"auto\"\n                className=\"col-tk mt-4 mb-0 filters\">\n                <HeaderFilter<TDataProps>\n                  {...filter}\n                  callback={onFilterUpdated}\n                  name={props.name}\n                  key={filterKey}\n                />\n              </Col>\n            );\n          })}\n          {!hideFilterButtons\n            && <CVGridToolbarFilterBtns\n              isFilterColumnsAvailable={Boolean(filters.length)}\n              onCallFilterClicked={onCallFilterClicked}\n              onResetClicked={() => {\n                setRequestData(startingProps);\n                setResetKey(prevKey => prevKey + 1);\n              }}\n            />\n          }\n          {hideFilterButtons && (\n            <Col xs={12}\n              sm={6}\n              md=\"auto\"\n              className=\"col-tk mt-4 pt-3 mb-0 filters\">\n              <Button\n                className=\"border-0 rounded-circle d-flex align-items-center justify-content-center\"\n                style={{ width: \"44px\", height: \"44px\" }}\n                size=\"lg\"\n                onClick={() => {\n                  setRequestData({ ...startingProps, StatusID: 14 });\n                  setResetKey(prevKey => prevKey + 1);\n                }}\n              >\n                <i className=\"fa-solid fa-rotate-right\"></i>\n              </Button>\n            </Col>)\n          }\n        </Row>\n      )}\n      <Row>\n        <Col>\n          {props.sortable === true && columns.length > 0 && (\n            <ColumnEditor<TData>\n              columns={columns}\n              setColumns={setColumns}\n              name={props.name}\n            />\n          )}\n          <Table\n            className={`${props.tableClasses ?? \"shadow\"} ${classes.cvgrid}`}\n            striped={!props.noStripes}\n            hover\n            responsive>\n            <thead>\n              <tr>\n                {columns.map(\n                  col => !col.hideCell && (\n                    <th\n                      key={col.title}\n                      className={col.thClass}>\n                      {!col.hideHeader && col.title}\n                    </th>\n                  )\n                )}\n              </tr>\n            </thead>\n            <tbody>\n              {!Boolean(data?.Results)\n                || (!Boolean(data?.Results.length) && (\n                  <tr>\n                    <td colSpan={columns.length}>No Results</td>\n                  </tr>\n                ))}\n              {Boolean(data?.Results.length)\n                && data.Results.map((row, index) => (\n                  <React.Fragment key={row.SubscriptionID ?? row.ID ?? `grid_${index}`}>\n                    <tr\n                      className=\"align-middle\"\n                      onClick={() => toggleExpandedID(row.ID)}>\n                      {columns.map(\n                        col => !col.hideCell && (\n                          <td\n                            key={col.title}\n                            className={col.tdClass}>\n                            {renderCell(row, col)}\n                          </td>\n                        )\n                      )}\n                    </tr>\n                    {expandedID === row.ID && expandedRenderer && (\n                      <tr>\n                        <td colSpan={columns.length}>{expandedRenderer.children(row)}</td>\n                      </tr>\n                    )}\n                    {_.isObject(props.extraRow) && props.extraRow.condition(row) && (\n                      <tr>\n                        {props.extraRow.cols ? (\n                          <>\n                            {Array(columns.length - props.extraRow.cols)\n                              .fill(null)\n                              .map((_n, i) => (\n                                // eslint-disable-next-line react/no-array-index-key\n                                <td key={i}></td>\n                              ))}\n                            <td colSpan={props.extraRow.cols}>{props.extraRow.element(row)}</td>\n                          </>\n                        ) : (\n                          <td>{props.extraRow.element(row)}</td>\n                        )}\n                      </tr>\n                    )}\n                  </React.Fragment>\n                ))}\n            </tbody>\n            {(!props.hidePaging || props.showPagingLabel) && (\n              <tfoot className=\"cv-grid-table-footer\">\n                <tr>\n                  <td\n                    colSpan={columns.length}\n                    className=\"p-0\">\n                    <div className=\"d-flex float-end justify-content-between w-100 cv-grid-table-footer-bg-color\">\n                      {props.hidePaging ? <span></span> : renderPagination()}\n                      <div className=\"d-flex align-items-center\">\n                        {!props.hidePaging && (\n                          <Form.Select\n                            className=\"border-0 cv-grid-table-footer-bg-color\"\n                            value={requestData?.Paging?.Size ?? startingProps.Paging.Size}\n                            onChange={e => setPageSize(parseInt(e.target.value))}>\n                            {props.pageSizes.map(size => (\n                              <option\n                                key={size}\n                                value={size}>\n                                {size} rows\n                              </option>\n                            ))}\n                          </Form.Select>\n                        )}\n                        {/* bnt class used just for padding */}\n                        {props.showPagingLabel && _.has(props.data, \"Results\") && (\n                          <PagingLabel data={props.data as PagedResultsBase<TData>} />\n                        )}\n                      </div>\n                    </div>\n                  </td>\n                </tr>\n              </tfoot>\n            )}\n          </Table>\n        </Col>\n      </Row>\n    </div>\n  );\n};\n\ninterface IPagingLabelProps<T> {\n  data: PagedResultsBase<T>;\n}\n\nfunction PagingLabel<T>(props: IPagingLabelProps<T>): JSX.Element {\n  const { CurrentPage, CurrentCount, TotalCount } = props.data;\n\n  const { t } = useTranslation();\n\n  return (\n    <span className=\"btn text-black-50\">\n      {/* eslint-disable-next-line no-mixed-operators */}\n      {(CurrentPage - 1) * CurrentCount + 1}\n      &nbsp;-&nbsp;\n      {CurrentPage * CurrentCount >= TotalCount ? TotalCount : CurrentPage * CurrentCount}\n      &nbsp;of&nbsp;\n      {TotalCount}&nbsp;{t(\"ui.storefront.common.Items\", \"Items\")}\n    </span>\n  );\n}\n\nconst Column = <TData extends BaseModel>(props: ICVGridColumnProps<TData>): JSX.Element => {\n  return null;\n};\n\nconst Filter = (props: ICVGridFilterProps): JSX.Element => {\n  return null;\n};\n\nconst ExpandedRowRenderer = <TData extends BaseModel>(props: ICVGridExpandedRowProps<TData>): JSX.Element => {\n  return null;\n};\n\nconst HeaderFilter = <TDataProps extends BaseSearchModel>(props: ICVGridFilterHeaderProps<TDataProps>): JSX.Element => {\n  const [ finalOptions, setFinalOptions ] = useState<any[]>();\n  const [ selectedValue, setSelectedValue ] = useState<any>();\n  const [ haveHandledDefault, setHaveHandledDefault ] = useState(false);\n  const [ min, setMin ] = useState<string>();\n  const [ max, setMax ] = useState<string>();\n\n  const startDateInputRef = useRef(null);\n  const endDateInputRef = useRef(null);\n\n  const getDebounceDuration = () => {\n    switch (props.type) {\n      case \"select\":\n        return 0;\n      case \"minmaxdate\":\n        return 1000;\n      default:\n        return 500;\n    }\n  };\n\n  const debouncedValue = useDebounce(selectedValue, getDebounceDuration());\n\n  useEffect(() => {\n    if (props.options) {\n      const handleDefault = (ops: any[]) => {\n        if (haveHandledDefault && !props.defaultOptionTitle) {\n          return;\n        }\n        setHaveHandledDefault(true);\n        if (!props.defaultOptionTitle) {\n          return;\n        }\n        const chosen = ops.find(\n          x => x.Name === props.defaultOptionTitle\n            || x.DisplayName === props.defaultOptionTitle\n            || x.CustomKey === props.defaultOptionTitle\n            || x[props.optionKey] === props.defaultOptionTitle\n        );\n        if (!chosen) {\n          setSelectedValue({ [props.filterProperty]: null });\n        } else {\n          setSelectedValue({ [props.filterProperty]: chosen[props.optionKey] });\n        }\n      };\n      if (Array.isArray(props.options)) {\n        setFinalOptions(props.options);\n        handleDefault(props.options);\n        return;\n      }\n      let promise: Promise<any[]> = undefined;\n      if (props.options instanceof Promise) {\n        promise = props.options;\n      } else {\n        const promiserKey = `cvGrid:filter:${props.name}:${props.title}`;\n        promise = promiser.resolve(promiserKey, props.options);\n      }\n      promise.then(r => {\n        setFinalOptions(r);\n        handleDefault(r);\n      });\n    }\n  }, [ props.options ]);\n\n  useEffect(() => {\n    const property = props.filterProperty === \"CreatedDate\" ? \"UpdatedOrCreatedDate\" : props.filterProperty;\n    const minKey = `Min${property}`;\n    const maxKey = `Max${property}`;\n    setSelectedValue({ [minKey]: min, [maxKey]: max });\n  }, [ min, max ]);\n\n  useEffect(() => {\n    props.callback(debouncedValue);\n  }, [ debouncedValue ]);\n\n  const getOptionKey = (opt: any) => {\n    if (props.optionKey) {\n      return opt[props.optionKey];\n    }\n    return opt;\n  };\n\n  const getOptionTitle = (opt: any) => {\n    if (!props.optionTitle) {\n      return opt;\n    }\n    if (typeof props.optionTitle === \"string\") {\n      return opt[props.optionTitle];\n    }\n    return props.optionTitle(opt);\n  };\n\n  let element: ReactNode = null;\n  switch (props.type) {\n    case \"string\":\n      element = (\n        <Form.Control\n          type=\"text\"\n          placeholder={props.placeholder || props.title}\n          value={(selectedValue && selectedValue[props.filterProperty]) ?? \"\"}\n          onChange={e => setSelectedValue({ [props.filterProperty]: e.target.value })}\n        />\n      );\n      break;\n    case \"number\":\n      element = (\n        <Form.Control\n          type=\"number\"\n          placeholder={props.placeholder || props.title}\n          value={(selectedValue && selectedValue[props.filterProperty]) ?? \"\"}\n          onChange={e => setSelectedValue({ [props.filterProperty]: e.target.value })}\n        />\n      );\n      break;\n    case \"select\":\n      element = (\n        <Form.Select\n          disabled={!finalOptions?.length}\n          value={(selectedValue && selectedValue[props.filterProperty]) ?? \"\"}\n          onChange={e => setSelectedValue({ [props.filterProperty]: e.target.value })}>\n          <option value=\"\">All</option>\n          {Boolean(finalOptions?.length)\n            && finalOptions.map(opt => (\n              <option\n                key={getOptionKey(opt)}\n                value={getOptionKey(opt)}>\n                {getOptionTitle(opt)}\n              </option>\n            ))}\n        </Form.Select>\n      );\n      break;\n    case \"minmaxdate\":\n      element = (\n        <div\n          className=\"datepicker d-flex align-items-center mb-2 mb-lg-0\"\n          data-datepicker='{\"rangepicker\": true}'>\n          <span className=\"\">From date\n            <InputGroup className=\"date-input-group\">\n              {/* <Button\n              variant=\"default\"\n              bsPrefix=\"null\"\n              className=\"position-absolute input-group-text\"\n              style={{ zIndex: 4, height: \"100%\", left: \"-1px\" }}\n              onClick={() => {\n                if (startDateInputRef.current) {\n                  // @ts-ignore\n                  startDateInputRef.current.showPicker();\n                }\n              }}>\n              <i\n                className=\"far fa-fw fa-calendar fa-fw\"\n                style={{ zIndex: 2 }}></i>\n            </Button> */}\n\n              <Form.Control\n                className={`${classes.dateInput} p-2`}\n                type=\"date\"\n                placeholder=\"00/00/0000\"\n                aria-label=\"date-in\"\n                data-datepicker-from='{\"minDate\":0}'\n                value={min ?? \"\"}\n                ref={startDateInputRef}\n                onChange={e => {\n                  let newMinDate = \"\";\n                  if (DateTime.fromFormat(e.target.value, \"y-LL-dd\").isValid) {\n                    newMinDate = e.target.value;\n                  }\n                  setMin(newMinDate);\n                }}\n              />\n\n            </InputGroup>\n          </span>\n          <span className=\"mt-0\">To date\n            <InputGroup className=\"date-input-group\">\n              {/* <Button\n              variant=\"default\"\n              bsPrefix=\"null\"\n              className=\"position-absolute input-group-text\"\n              style={{ zIndex: 4, height: \"100%\", left: \"-1px\" }}\n              onClick={() => {\n                if (startDateInputRef.current) {\n                  // @ts-ignore\n                  startDateInputRef.current.showPicker();\n                }\n              }}>\n              <i\n                className=\"far fa-fw fa-calendar fa-fw\"\n                style={{ zIndex: 2 }}></i>\n            </Button> */}\n              <Form.Control\n                className={`${classes.dateInput} p-2`}\n                type=\"date\"\n                placeholder=\"00/00/0000\"\n                aria-label=\"date-to\"\n                data-datepicker-to='{\"maxDate\":10}'\n                value={max ?? \"\"}\n                ref={endDateInputRef}\n                onChange={e => {\n                  let newMaxDate = \"\";\n                  if (DateTime.fromFormat(e.target.value, \"y-LL-dd\").isValid) {\n                    newMaxDate = e.target.value;\n                  }\n                  setMax(newMaxDate);\n                }}\n              />\n            </InputGroup>\n          </span>\n        </div>\n      );\n      break;\n    default:\n      break;\n  }\n\n  return (\n    <div>\n      <Form.Label>{props.title}</Form.Label>\n      {element}\n    </div>\n  );\n};\n\nCVGrid.Column = Column;\nColumn.defaultProps = {\n  __type: \"Column\"\n};\nCVGrid.Filter = Filter;\nFilter.defaultProps = {\n  __type: \"Filter\"\n};\nCVGrid.ExpandedRow = ExpandedRowRenderer;\nExpandedRowRenderer.defaultProps = {\n  __type: \"ExpandedRow\"\n};\nCVGrid.defaultProps = {\n  pageSizes: [ 8, 16, 24 ]\n};\n","import { useEffect, useState } from \"react\";\n\nexport const useDebounce = <T>(value: T, delay?: number): T => {\n  const [ debouncedValue, setDebouncedValue ] = useState<T>(value);\n\n  useEffect(() => {\n    const timer = setTimeout(() => setDebouncedValue(value), delay ?? 500);\n\n    return () => {\n      clearTimeout(timer);\n    };\n  }, [ value, delay ]);\n\n  return debouncedValue;\n};\n","import React, { UIEvent, useState } from \"react\";\nimport { Anchor, Card, Col, Row } from \"react-bootstrap\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { CartModel, GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\nimport {\n  ProductCardNameWidget,\n  ProductCardPricingWidget,\n  ProductCardSkuWidget,\n  ProductCardStockWidget\n} from \"src/Catalog/views/ProductCardWidgets\";\nimport { AlertInfoNoResults } from \"src/Catalog/controls/AlertInfoNoResults\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\n// eslint-disable-next-line no-undef\nlet timeoutHolder: NodeJS.Timeout = null;\n\ninterface ICatalogTableViewProps {\n  products: Array<ProductModel>;\n  onScrollToBottom?: Function;\n  useInfinite?: boolean;\n  parentRunning?: boolean;\n  cart?: CartModel;\n  allAttributes?: GeneralAttributeModel[];\n}\n\nexport const CatalogTableView = (props: ICatalogTableViewProps): JSX.Element => {\n  const { products, onScrollToBottom, useInfinite, parentRunning } = props;\n\n  const [ canCallScrollFn, setCanCallScrollFn ] = useState(true);\n  const cefConfig = useCefConfig();\n\n  const style: React.CSSProperties = {};\n  if (useInfinite) {\n    style.maxHeight = \"30vh\";\n    style.overflowY = \"scroll\";\n    style.overflowX = \"hidden\";\n  }\n\n  const columns = [\n    <CVGrid.Column key=\"Image\"\n      title=\"Image\"\n      hideHeader={true}>\n      {(product: ProductModel) => (<Anchor\n        href={corsLink(cefConfig, `/${product.SeoUrl}`, \"productDetail\")}\n        id={`cardProductImageThumbnail_${product.ID}`}\n        className=\"product-image d-flex justify-content-center\">\n        <ImageWithFallback\n          className=\"d-block\"\n          src={product.PrimaryImageFileName}\n          alt={product.Name}\n          imageResizerParamsBody={{\n            maxwidth: 100,\n            maxheight: 100,\n            scale: \"both\",\n            mode: \"pad\"\n          }} />\n      </Anchor>)}\n    </CVGrid.Column>,\n    <CVGrid.Column\n      key=\"Name\"\n      title=\"Name\">\n      {(product: ProductModel) => (<Card.Title as=\"span\">\n        <ProductCardNameWidget productName={product.Name}\n          productSeoUrl={product.SeoUrl}\n          index={product.ID} />\n      </Card.Title>\n      )}\n    </CVGrid.Column>,\n    <CVGrid.Column\n      key=\"SKU\"\n      title=\"SKU\"\n    >\n      {(product: ProductModel) => (<div className=\"product-sku rows-1\">\n        <ProductCardSkuWidget productID={product.ID} customKey={product.CustomKey} />\n      </div>)}\n    </CVGrid.Column>,\n    <CVGrid.Column\n      key=\"Stock\"\n      title=\"Stock\"\n    >\n      {(product: ProductModel) => (<ProductCardStockWidget product={product} />)}\n    </CVGrid.Column>,\n    <CVGrid.Column\n      key=\"Price\"\n      title=\"Price\"\n    >\n      {(product: ProductModel) => (<ProductCardPricingWidget product={product}\n        displayStyle=\"sideBySide\" />)}\n    </CVGrid.Column>,\n    <CVGrid.Column\n      key=\"Add To Cart\"\n      title=\"Add To Cart\"\n      tdClass=\"w-15\"\n      hideHeader\n      hideable={false}>\n      {(product: ProductModel) => (<ProductCardActionButtonWidget\n        product={product}\n        addToCartBtnClasses=\"btn btn-success text-white\"\n        excludeQuoteCart={true}\n        index={product.ID} />)}\n    </CVGrid.Column>,\n    ...props.allAttributes?.reduce((accu, attr) => {\n      if (attr.CanBeTableColumn) {\n        accu.push(\n          <CVGrid.Column title={attr.Name}\n            key={attr.Name}\n            hideHeader={false}\n            hideCell={true}>\n            {(product: ProductModel) => (<span>{product.SerializableAttributes[attr.Name]?.Value}</span>)}\n          </CVGrid.Column>\n        );\n      }\n      return accu;\n    }, []) ?? []\n  ];\n  return (\n    <div\n      className=\"table-body\"\n      style={style}\n      onScroll={(event: UIEvent<HTMLDivElement>) => {\n        const { currentTarget } = event;\n        const { scrollHeight, scrollTop, clientHeight } = currentTarget;\n        const bottom = scrollHeight - Math.ceil(scrollTop) - 50 < clientHeight;\n        if (useInfinite && bottom && onScrollToBottom && canCallScrollFn) {\n          onScrollToBottom();\n          setCanCallScrollFn(false);\n          timeoutHolder = setTimeout(() => {\n            setCanCallScrollFn(true);\n            clearTimeout(timeoutHolder);\n          }, 2000);\n        }\n      }}>\n      {Boolean(products?.length)\n        && <Row id=\"results-table\">\n          <Col xs=\"12\">\n            <CVGrid\n              name=\"productcatalog\"\n              data={products}\n              sortable={true}>\n              {columns}\n            </CVGrid>\n          </Col>\n        </Row>\n      }\n      {!products?.length && !parentRunning && <AlertInfoNoResults />}\n      {parentRunning ? <LoadingWidget /> : null}\n    </div>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { CategoryModel } from \"src/_api/cvApi.shared\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface ICategoryLandingPageViewProps {\n  onCategoryClicked: Function;\n  currentCategory: CategoryModel;\n}\n\nexport const CategoryLandingPageView = (props: ICategoryLandingPageViewProps): JSX.Element => {\n  const { onCategoryClicked, currentCategory } = props;\n  const cefConfig = useCefConfig();\n\n  const { t } = useTranslation();\n\n  if (!_.isObject(cefConfig)) {\n    return null;\n  }\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <h4>\n            {t(\"ui.storefront.catalog.ShopResultsFor\")}{\" \"}\n            <strong>\n              {currentCategory.Name}\n            </strong>\n          </h4>\n        </Col>\n      </Row>\n      <Row>\n        {currentCategory?.Children && currentCategory?.Children.map((child: CategoryModel) => <Col xs={12}\n          sm={6}\n          lg={4}\n          key={child.CustomKey}>\n          <Button\n            className=\"px-3\"\n            variant=\"\"\n            style={{ fontWeight: \"bold\" }}\n            onClick={() => onCategoryClicked(child.SeoUrl)}>\n            <ImageWithFallback\n              kind=\"categories\"\n              src={child.PrimaryImageFileName}\n              className=\"img-fluid\"\n              imageResizerParamsBody={{ height: 200, width: 200 }}\n            />\n            <h4 className=\"dropdown-tertiary-header my-2\">\n              <a className=\"bold\" href={corsLink(cefConfig, `/${child.SeoUrl}`, \"catalog\")}>\n                <span className=\"text-capitalize\">{child.DisplayName ?? child.Name}</span>\n              </a>\n            </h4>\n          </Button>\n        </Col>)}\n      </Row>\n    </>\n  );\n};\n","/** @format */\n\nimport { Col } from \"react-bootstrap\";\nimport Interweave from \"interweave\";\nimport { CategoryModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface ICategoryLandingPageHeaderProps {\n  currentCategory: CategoryModel;\n}\n\nexport const CategoryLandingPageHeader = (props: ICategoryLandingPageHeaderProps): JSX.Element => {\n  const { currentCategory } = props;\n\n  return (\n    // If currentCat.header != null, show it, otherwise show nothing\n    <>\n      {currentCategory?.HeaderContent\n        ? <Col xs={12} className=\"cat-header\">\n          <Interweave content={currentCategory?.HeaderContent} />\n        </Col> : null\n      }\n    </>\n  );\n};\n","/** @format */\n\nimport { CategoryModel } from \"src/_api/cvApi._DtoClasses\";\nimport Interweave from \"interweave\";\n\ninterface ICategoryLandingPageSidebarProps {\n  currentCategory: CategoryModel;\n}\n\nexport const CategoryLandingPageSidebar = (props: ICategoryLandingPageSidebarProps): JSX.Element => {\n  const { currentCategory } = props;\n  return (\n    <>\n      {currentCategory?.SidebarContent\n        ? <div className=\"cat-side-content\">\n          <Interweave content={currentCategory?.SidebarContent} />\n        </div> : null\n      }\n    </>\n  );\n};\n","/** @format */\n\nimport { CategoryModel } from \"src/_api/cvApi._DtoClasses\";\nimport Interweave from \"interweave\";\n\ninterface ICategoryLandingPageFooterProps {\n  currentCategory: CategoryModel;\n}\n\nexport const CategoryLandingPageFooter = (props: ICategoryLandingPageFooterProps): JSX.Element => {\n  const { currentCategory } = props;\n\n  return (\n    // If currentCat.header != null, show it, otherwise show nothing\n    <>\n      {currentCategory?.FooterContent\n        ? <div className=\"cat-side-content\">\n          <Interweave content={currentCategory?.FooterContent} />\n        </div> : null\n      }\n    </>\n  );\n};\n","import React, { useState } from \"react\";\nimport { Carousel as BootstrapCarousel } from \"react-bootstrap\";\n\ninterface ICarouselProps {\n  items: React.ReactNode[];\n  showPagination?: boolean;\n  hideArrows?: boolean;\n}\n\nexport const Carousel = (props: ICarouselProps): JSX.Element => {\n  const { items, showPagination, hideArrows } = props;\n  const [ activeSlideIndex, setActiveSlideIndex ] = useState<number>(0);\n\n  if (!items) {\n    return null;\n  }\n\n  return (\n    <BootstrapCarousel\n      className=\"col-12\"\n      controls={true}\n      indicators={Boolean(showPagination)}\n      wrap={true}\n      prevIcon={\n        hideArrows\n          ? null\n          : <i className=\"fal fa-fw fa-chevron-left fa-2x text-dark\" />\n      }\n      nextIcon={\n        hideArrows\n          ? null\n          : <i className=\"fal fa-fw fa-chevron-right fa-2x text-dark\" />\n      }\n      activeIndex={activeSlideIndex}\n      onSelect={(selectedIndex, _e) => setActiveSlideIndex(selectedIndex)}\n      interval={null}>\n      {\n        // @ts-ignore TODO: use a better key\n        items.map(item => <BootstrapCarousel.Item className=\"px-5\" key={item.key}>\n          {item}\n        </BootstrapCarousel.Item>)}\n    </BootstrapCarousel>\n  );\n};\n","/** @format */\n\nimport React, { ReactNode } from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { Carousel } from \"src/_shared/common/Carousel\";\nimport { BaseModel } from \"src/_api/cvApi.shared\";\nimport _ from \"lodash\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\ninterface ICarouselProps<T extends BaseModel> {\n  items: T[];\n  showPagination?: boolean;\n  hideArrows?: boolean;\n  children?: ReactNode;\n}\n\nexport const SubCategoryCarousel = <T extends BaseModel, >(props: ICarouselProps<T>): JSX.Element => {\n  const { items } = props;\n  const cefConfig = useCefConfig();\n  if (!_.isObject(cefConfig)) {\n    return null;\n  }\n\n  return (\n    <section\n      className=\"position-relative text-center text-md-start\"\n      aria-label=\"Hero card section\">\n      <Carousel\n        items={\n          _.chunk(items, 4)\n            .map((chunk, index): JSX.Element => <Row key={`chunk_${_.first(chunk).ID}`}>\n              {chunk.map(child => {\n                return <Col\n                  key={`child_${child.ID}`}\n                  xs={6}\n                  sm={3}>\n                  <div className=\"d-flex flex-column align-items-center \">\n                    <a href={corsLink(cefConfig, `/${child.SeoUrl}`, \"catalog\")}>\n                      <ImageWithFallback\n                        kind=\"categories\"\n                        src={child.PrimaryImageFileName}\n                        imageResizerParamsBody={{\n                          maxHeight: 200,\n                          maxWidth: 200,\n                          scale: \"both\",\n                          mode: \"pad\"\n                        }}\n                      />\n                    </a>\n                    <h4 className=\"dropdown-tertiary-header my-2\">\n                      <a\n                        className=\"bold\"\n                        href={corsLink(cefConfig, `/${child.SeoUrl}`, \"catalog\")}>\n                        <span className=\"text-capitalize\">{child.Name}</span>\n                      </a>\n                    </h4>\n                  </div>\n                </Col>;\n              })}\n            </Row>)\n        }\n      />\n    </section>\n  );\n};\n","import { Button, Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { faTable, faThLarge, faThList, IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\n\nconst formatOptions: { format: string; icon: IconDefinition }[] = [\n  { format: \"grid\", icon: faThLarge },\n  { format: \"table\", icon: faTable },\n  { format: \"list\", icon: faThList }\n];\n\nexport interface ICatalogViewButtonSwitchProps {\n  pageFormat: string;\n  onFormatBtnClicked: (format: string) => void;\n}\n\nexport const CatalogFormatSwitch = (props: ICatalogViewButtonSwitchProps): JSX.Element => {\n  const { pageFormat, onFormatBtnClicked } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Form.Group>\n      <Form.Label>{t(\"ui.storefront.common.View\")}</Form.Label>\n      <InputGroup>\n        {formatOptions.map(option => {\n          const { format } = option;\n          return (\n            <Button\n              type=\"button\"\n              variant={pageFormat === option.format ? \"outline-primary\" : \"\"}\n              className=\"rounded\"\n              key={option.format}\n              onClick={e => onFormatBtnClicked(option.format)}>\n              <i className={`fal fa-lg ${\n                format === \"grid\"\n                  ? \"fa-grid-2\"\n                  : format === \"table\"\n                    ? \"fa-table\" : \"fa-list\"}`}\n              aria-hidden=\"true\" />\n              <span className=\"text-capitalize\">&nbsp;{option.format}</span>\n            </Button>\n          );\n        })}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","import { Button, Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\n\nconst sizeOptions = [ 9, 18, 27 ];\n\nexport interface ICatalogSizeSwitchProps {\n  pageSize: number;\n  onPageSizeClicked: (size: number) => void;\n}\n\nexport const CatalogSizeSwitch = (props: ICatalogSizeSwitchProps): JSX.Element => {\n  const { pageSize, onPageSizeClicked } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Form.Group>\n      <Form.Label>{t(\"ui.storefront.product.catalog.controls.itemsPerPage.Show\")}</Form.Label>\n      <InputGroup className=\"flex-nowrap\">\n        {sizeOptions.map((num): JSX.Element => <Button\n          variant={pageSize === num ? \"outline-primary\" : \"\"}\n          className=\"rounded\"\n          type=\"button\"\n          key={num.toString()}\n          onClick={() => onPageSizeClicked(num)}>\n          {num}\n        </Button>)}\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","import { Form, FormSelect, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\n\nconst sortOptions = [\n  \"Relevance\",\n  \"Popular\",\n  \"Recent\",\n  \"Name Ascending\",\n  \"Name Descending\",\n  \"Pricing Ascending\",\n  \"Pricing Descending\",\n  \"Rating Ascending\",\n  \"Rating Descending\",\n  \"Defined\"\n];\n\nexport interface ICatalogSortBySwitchProps {\n  sort: any;\n  onSortByChanged: (sort: string) => void;\n}\n\nexport const CatalogSortBySwitch = (props: ICatalogSortBySwitchProps): JSX.Element => {\n  const { sort, onSortByChanged } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <div className=\"items-searchCatalogResultsSortCtrl-option\">\n      <Form.Group>\n        <Form.Label>\n          <span>\n            {t(\"ui.storefront.product.catalog.controls.searchCatalogResultsSortCtrl.sortBy\")}\n          </span>\n        </Form.Label>\n        <InputGroup>\n          <FormSelect\n            id=\"sort\"\n            aria-label=\"sort\"\n            value={sort}\n            onChange={e => onSortByChanged(e.target.value)}>\n            {sortOptions.map((str): JSX.Element => {\n              const strNoSpaces = str.split(\" \").join(\"\");\n              return <option key={str}\n                label={str}\n                value={strNoSpaces}></option>;\n            })}\n          </FormSelect>\n        </InputGroup>\n      </Form.Group>\n    </div>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"noBefore\":\"Breadcrumbs_noBefore__Zr7iE\"};","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { useEffect, useState } from \"react\";\nimport { Breadcrumb, Col } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { AggregateTree, CategoryModel } from \"src/_api/cvApi._DtoClasses\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport classes from \"src/_shared/Breadcrumbs.module.scss\";\n\ninterface IBreadcrumbsProps {\n  currentCategorySeoUrl: string;\n  currentQuery: string;\n  categoriesTree: AggregateTree;\n  categoriesBySeoUrl: Record<string, CategoryModel>;\n  categoriesByNamePipeKey: Record<string, CategoryModel>;\n  onCategoryClicked: (seoUrl: string) => void;\n}\n\nexport const Breadcrumbs = (props: IBreadcrumbsProps): JSX.Element => {\n  const {\n    currentCategorySeoUrl,\n    currentQuery,\n    categoriesTree,\n    categoriesBySeoUrl,\n    categoriesByNamePipeKey,\n    onCategoryClicked\n  } = props;\n\n  const [ breadcrumbsFromCatTree, setBreadcrumbsFromCatTree ] = useState<string[]>([]);\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  function showQueryOnly(): boolean {\n    return currentQuery && !currentCategorySeoUrl;\n  }\n\n  function queryAndCatExist(): boolean {\n    return Boolean(currentCategorySeoUrl) && Boolean(currentQuery);\n  }\n\n  useEffect(() => {\n    if (queryAndCatExist() || showQueryOnly()) {\n      return;\n    }\n    if (categoriesTree?.Children && currentCategorySeoUrl) {\n      const breadcrumbsList = getHeritageListForKey(categoriesTree, currentCategorySeoUrl);\n      if (!breadcrumbsList) {\n        // Invalid category\n        return;\n      }\n      const cleanedList = breadcrumbsList.filter(x => x !== undefined && x !== \"N/A\");\n      setBreadcrumbsFromCatTree(cleanedList);\n    } else {\n      setBreadcrumbsFromCatTree([]);\n    }\n  }, [ categoriesTree, currentCategorySeoUrl, currentQuery ]);\n\n  function n(category: CategoryModel | string, categoryTop: string = null, categoryMid: string = null): string {\n    if (!categoriesBySeoUrl || !categoriesByNamePipeKey) {\n      // Loading\n      return null;\n    }\n    if (!category) {\n      return null;\n    }\n    if (typeof category === \"string\") {\n      if (category in categoriesBySeoUrl) {\n        return n(categoriesBySeoUrl[category]);\n      }\n      if (category in categoriesByNamePipeKey) {\n        return n(categoriesByNamePipeKey[category]);\n      }\n      if (Boolean(categoryMid)) {\n        const full = `${categoryTop}/${categoryMid}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      if (Boolean(categoryTop)) {\n        const full = `${categoryTop}/${category}`;\n        if (full in categoriesBySeoUrl) {\n          return n(categoriesBySeoUrl[full]);\n        }\n      }\n      return \"Unknown Category\";\n    }\n    return category.DisplayName ?? category.Name;\n  }\n\n  return (\n    <Col sm={12} className=\"p-0 m-0 small\">\n      <Breadcrumb listProps={{ className: \"mb-0 mt-4\" }}>\n        <Breadcrumb.Item className=\"breadcrumbs-title\"\n          style={{ color: \"black !important\" }}\n          id=\"lblYouAreHereProducts\"\n          href={corsLink(cefConfig, cefConfig.routes.site.root, \"site\")}>\n          {\"Home /\"}\n        </Breadcrumb.Item>\n        <Breadcrumb.Item\n          className={`${classes.noBefore}`}\n          href={corsLink(cefConfig, \"/\", \"catalog\")}\n          id=\"breadCatalogRootLink\">\n          {t(\"ui.storefront.product.catalog.productCatalog.Catalog\")}\n        </Breadcrumb.Item>\n        {showQueryOnly()\n          ? <Breadcrumb.Item as=\"span\">\n            {t(\"ui.storefront.product.catalog.SearchResults\")}\n          </Breadcrumb.Item>\n          : breadcrumbsFromCatTree.map((crumb: string, index: number) => <Breadcrumb.Item\n            id=\"btnCategoryBreadcrumb\"\n            href=\"#\"\n            role=\"button\"\n            key={crumb}\n            className={`${index ? \"\" : \"ps-0\"}`}\n            onClick={() => onCategoryClicked(crumb)}>\n            {n(crumb)}\n          </Breadcrumb.Item>)\n        }\n      </Breadcrumb>\n    </Col>\n  );\n};\n\nfunction getHeritageListForKey(treeNode: AggregateTree, desiredSeoUrl: string): string[] {\n  if (treeNode.Key === desiredSeoUrl) {\n    return [ desiredSeoUrl ];\n  }\n  if (treeNode.Children) {\n    for (const child of treeNode.Children) {\n      const result: string[] = getHeritageListForKey(child, desiredSeoUrl);\n      if (result) {\n        return [ treeNode.Key, ...result ];\n      }\n    }\n  }\n  return null;\n}\n","/**\n * @file React/src/_shared/customHooks/useSortingFactory.tsx\n * @author Copyright (c) 2020-2023 clarity-ventures.com. All rights reserved.\n * @desc Sorting Factory hook\n */\n\nimport { useEffect, useState } from \"react\";\nimport { CalculatedSortOrder, ProductModel } from \"src/_api/cvApi.shared\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport interface ISortingFactory {\n  factoryAssign(product: ProductModel): ProductModel;\n  bulkFactoryAssign(products: ProductModel[]): ProductModel[];\n}\n\nexport class SortingFactory implements ISortingFactory {\n  factoryAssign(product: ProductModel): ProductModel {\n    if (product.readSortOrder) {\n      return product;\n    }\n    // eslint-disable-next-line dot-notation\n    product[\"$_rawSortOrder\"] = {\n      order: null,\n      loading: true\n    };\n    // eslint-disable-next-line dot-notation\n    product.readSortOrder = () => product[\"$_rawSortOrder\"];\n    // eslint-disable-next-line dot-notation\n    const sortOrder = product[\"$_rawSortOrder\"] as CalculatedSortOrder;\n    sortOrder.order = product.SortOrder ? product.SortOrder : null;\n    sortOrder.loading = false;\n    // eslint-disable-next-line dot-notation\n    product[\"$_rawSortOrder\"] = sortOrder;\n    return product;\n  }\n\n  bulkFactoryAssign(products: ProductModel[]): ProductModel[] {\n    return products.map(x => this.factoryAssign(x));\n  }\n}\n\nexport const useSortingFactory = (): ISortingFactory => {\n  const [ sortingFactory, setSortingFactory ] = useState(null);\n  const cefConfig = useCefConfig() as CEFConfig;\n  useEffect(() => {\n    // Not currently used by this factory.\n    // TODO: const reduxStore = store.getState();\n    if (!cefConfig) {\n      return;\n    }\n    // New up the class from above only once\n    const instance = new SortingFactory();\n    setSortingFactory(instance);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ cefConfig ]);\n  return sortingFactory;\n};\n","/**\n * @file React/src/_shared/customHooks/useRatingFactory.tsx\n * @author Copyright (c) 2020-2023 clarity-ventures.com. All rights reserved.\n * @desc Rating Factory hook\n */\n\nimport { useEffect, useState } from \"react\";\nimport { CalculatedRatings, ProductModel } from \"src/_api/cvApi.shared\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport cvApi from \"src/_api/cvApi\";\n\nexport interface IRatingFactory {\n    factoryAssign(product: ProductModel): Promise<ProductModel>;\n    bulkFactoryAssign(products: ProductModel[]): Promise<ProductModel[]>;\n}\n\nexport class RatingFactory implements IRatingFactory {\n  private readonly cefConfig?: CEFConfig;\n\n  private genBlankRatingsObj(): CalculatedRatings {\n    return {\n      value: null,\n      count: null,\n      reviews: null,\n      loading: true\n    };\n  }\n\n  async factoryAssign(product: ProductModel): Promise<ProductModel> {\n    if (product.readRatings) {\n      return product;\n    }\n    // eslint-disable-next-line camelcase\n    product.$_rawRatings = this.genBlankRatingsObj();\n    // TODO: MemCache the results by product ID so we can avoid repeat calls for same product\n    await cvApi.products.GetProductReview(product.ID).then(r => {\n      if (!r?.data) {\n        console.error(r && r.data);\n        return;\n      }\n      const ratings = product.$_rawRatings as CalculatedRatings;\n      // Assign updated values\n      ratings.value = r.data.Value;\n      ratings.count = r.data.Count;\n      ratings.reviews = r.data.Reviews;\n      // Finish\n      ratings.loading = false;\n      // eslint-disable-next-line camelcase\n      product.$_rawRatings = ratings;\n    });\n    return product;\n  }\n\n  bulkFactoryAssign(products: ProductModel[]): Promise<ProductModel[]> {\n    if (!this.cefConfig.featureSet.reviews.enabled) {\n      return new Promise((resolve, reject) => {\n        resolve(products);\n      });\n    }\n    if (!products || !products.length) {\n      const debugMsg = \"useRatingFactory.bulkFactoryAssign(products)\";\n      console.warn(`${debugMsg} No products provided to check ratings against`);\n      return Promise.reject(new Error(\"No products provided to check ratings against\"));\n    }\n    const processed: ProductModel[] = [];\n    const toProcess: ProductModel[] = [];\n    products.forEach(product => {\n      if (product.readRatings) {\n        processed.push(product);\n      } else {\n        // eslint-disable-next-line camelcase\n        product.$_rawRatings = this.genBlankRatingsObj();\n        product.readRatings = () => product.$_rawRatings;\n        toProcess.push(product);\n      }\n    });\n    if (!toProcess.length) {\n      return new Promise((resolve, reject) => {\n        resolve(processed);\n      });\n    }\n    return new Promise((resolve, reject) => {\n      cvApi.products.GetProductReviews({\n        i: toProcess.map(x => x.ID)\n      }).then(r => {\n        if (!r?.data) {\n          console.error(r && r.data);\n          return;\n        }\n        r.data.forEach(x => {\n          const product = toProcess.find(p => p.ID === x.ProductID);\n          let ratings = product.$_rawRatings as CalculatedRatings;\n          if (!ratings) {\n            ratings = { loading: true } as any;\n          }\n          ratings.value = x.Value;\n          ratings.count = x.Count;\n          ratings.reviews = x.Reviews;\n          ratings.loading = false;\n          // eslint-disable-next-line camelcase\n          product.$_rawRatings = ratings;\n          processed.push(product);\n        });\n        resolve(processed);\n      })\n        .catch(reject);\n    });\n  }\n\n  constructor(cefConfig: CEFConfig) {\n    this.cefConfig = cefConfig;\n  }\n}\n\nexport const useRatingFactory = (): IRatingFactory => {\n  const [ ratingFactory, setRatingFactory ] = useState(null);\n  const cefConfig = useCefConfig() as CEFConfig;\n  useEffect(() => {\n    // Not currently used by this factory.\n    // Const reduxStore = store.getState();\n    if (!cefConfig) {\n      return;\n    }\n    // New up the class from above only once\n    const instance = new RatingFactory(cefConfig);\n    setRatingFactory(instance);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ cefConfig ]);\n  return ratingFactory;\n};\n","/**\n * @file React/src/_shared/customHooks/usePrevious.ts\n * @author Copyright (c) 2023 clarity-ventures.com. All rights reserved.\n * @desc useEffectSkipFirst hook\n */\nimport { useEffect, useRef } from \"react\";\n\nexport const usePrevious = <T>(value: T, initialValue: T): T => {\n  const ref = useRef(initialValue);\n  useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n};\n\nexport default usePrevious;\n","/**\n * @file React/src/_shared/customHooks/useEffectDebugger.ts\n * @author Copyright (c) 2023 clarity-ventures.com. All rights reserved.\n * @desc useEffectSkipFirst hook\n */\nimport { useEffect } from \"react\";\nimport usePrevious from \"./usePrevious\";\n\nexport const useEffectDebugger\n  = (effectHook: () => void, dependencies: any[], dependencyNames: string[] = []): void => {\n    const previousDeps = usePrevious(dependencies, []);\n    const changedDeps = dependencies.reduce((accum, dependency, index) => {\n      if (dependency !== previousDeps[index]) {\n        const keyName = dependencyNames[index] || index;\n        return {\n          ...accum,\n          [keyName]: {\n            before: previousDeps[index],\n            after: dependency\n          }\n        };\n      }\n      return accum;\n    }, {});\n    if (Object.keys(changedDeps).length) {\n      console.log(\"[use-effect-debugger] \", changedDeps);\n    }\n    useEffect(effectHook, dependencies);\n  };\n\nexport default useEffectDebugger;\n","/**\n * @file React/src/_shared/customHooks/useEffectSkipFirstDebugger.ts\n * @author Copyright (c) 2022-2023 clarity-ventures.com. All rights reserved.\n * @desc useEffectSkipFirstDebugger hook\n */\nimport { useRef } from \"react\";\nimport useEffectDebugger from \"./useEffectDebugger\";\n\nfunction useEffectSkipFirstDebugger(effectHook: Function, dependencies: any[], dependencyNames: string[] = []): any {\n  const isFirst = useRef(true);\n\n  useEffectDebugger(() => {\n    if (isFirst.current) {\n      isFirst.current = false;\n      return undefined;\n    }\n\n    return effectHook();\n  }, dependencies, dependencyNames);\n}\n\nexport default useEffectSkipFirstDebugger;\n","/**\n * @file React/src/_shared/customHooks/catalog/useProductSearchViewModel.ts\n * @author Copyright (c) 2019-2023 clarity-ventures.com. All rights reserved.\n * @desc useProductSearchViewModel hook\n */\nimport { useEffect, useState } from \"react\";\nimport * as H from \"history\";\nimport {\n  ArrayParam,\n  DelimitedNumericArrayParam,\n  NumberParam,\n  StringParam,\n  UrlUpdateType,\n  useQueryParams,\n} from \"use-query-params\";\nimport { DecodedValueMap, QueryParamConfig, QueryParamConfigMap } from \"serialize-query-params\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ProductCatalogSearchForm, SearchSort } from \"src/_api/cvApi._DtoClasses\";\nimport { Dictionary, ProductSearchViewModel } from \"src/_api/cvApi.shared\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport _ from \"lodash\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport useEffectSkipFirstDebugger from \"../useEffectSkipFirstDebugger\";\n\nconst CustomJsonParam: QueryParamConfig<string, Dictionary<string[]>> = {\n  encode(any) {\n    if (any === null) {\n      return any;\n    }\n    let result = JSON.stringify(any);\n    if (!result) {\n      return result;\n    }\n    // Replace unescaped double quotes with single\n    result = result.replace(/(?<old>(?:^|[^\\\\])(?:\\\\{2})*)\"/gu, \"$1'\");\n    result = result.replace(/\\\\\\\\/gu, \"\\\\\\\"\");\n    return result;\n  },\n  decode(input) {\n    function getEncodedValue(inputI: string | string[]): string {\n      let inputToUse = inputI;\n      if (!(inputToUse instanceof Array)) {\n        // Replace single quotes with double quotes\n        inputToUse = (inputToUse ?? \"\").replace(/'/gu, \"\\\"\");\n      }\n      return inputToUse.toString();\n    }\n    const jsonStr = getEncodedValue(input);\n    if (jsonStr === null) {\n      return jsonStr;\n    }\n    let result = null;\n    try {\n      result = JSON.parse(jsonStr);\n    } catch (e) {\n      // Ignore errors, returning undefined\n    }\n    return result ?? \"\";\n  }\n};\n\nexport interface IParamsForSearchCatalogQPCMap extends QueryParamConfigMap {\n  [paramName: string]: QueryParamConfig<any, any>;\n  term?: typeof StringParam;\n  brandName?: typeof StringParam;\n  categoriesAny?: typeof ArrayParam;\n  categoriesAll?: typeof ArrayParam;\n  storeId?: typeof NumberParam;\n  storeIdsAny?: typeof DelimitedNumericArrayParam;\n  storeIdsAll?: typeof DelimitedNumericArrayParam;\n  priceRanges?: typeof ArrayParam;\n  ratingRanges?: typeof ArrayParam;\n  attributesAny?: typeof CustomJsonParam;\n  attributesAll?: typeof CustomJsonParam;\n}\n\nexport interface IParams {\n  catTop?: string;\n  catMid?: string;\n  catBot?: string;\n  format?: \"grid\" | \"list\" | \"table\";\n  sort?: SearchSort;\n  size?: number;\n  page?: number;\n}\n\nfunction isDefinedWithValue(input: any): boolean {\n  return input !== undefined && input !== null && input !== \"\";\n}\n\nfunction compareCustomJsonAttributes(previous: Dictionary<string[]>, current: Dictionary<string[]>): boolean {\n  return (JSON.stringify(previous) ?? \"\")\n    .replace(/\\\\\\\\/gu, \"\\\\\\\"\") === (JSON.stringify(current) ?? \"\")\n    .replace(/\\\\\\\\/gu, \"\\\\\\\"\");\n}\n\nexport function compareProductCatalogSearchForm(\n    previousForm: ProductCatalogSearchForm,\n    currentForm: ProductCatalogSearchForm\n): boolean {\n  if (!_.isObject(previousForm) || !(_.isObject(currentForm))) {\n    return false;\n  }\n  if (previousForm.PageFormat === currentForm.PageFormat\n    && previousForm.Page === currentForm.Page\n    && previousForm.PageSize === currentForm.PageSize\n    && previousForm.Sort === currentForm.Sort\n    && previousForm.Query === currentForm.Query\n    && previousForm.BrandName === currentForm.BrandName\n    && previousForm.Category === currentForm.Category\n    && previousForm.CategoryTop === currentForm.CategoryTop\n    && previousForm.CategoryMid === currentForm.CategoryMid\n    && JSON.stringify(previousForm.CategoriesAny?.sort()) === JSON.stringify(currentForm.CategoriesAny?.sort())\n    && JSON.stringify(previousForm.CategoriesAll?.sort()) === JSON.stringify(currentForm.CategoriesAll?.sort())\n    && previousForm.StoreID === currentForm.StoreID\n    && JSON.stringify(previousForm.StoreIDsAny?.sort()) === JSON.stringify(currentForm.StoreIDsAny?.sort())\n    && JSON.stringify(previousForm.StoreIDsAll?.sort()) === JSON.stringify(currentForm.StoreIDsAll?.sort())\n    && JSON.stringify(previousForm.PricingRanges?.sort()) === JSON.stringify(currentForm.PricingRanges?.sort())\n    && JSON.stringify(previousForm.RatingRanges?.sort()) === JSON.stringify(currentForm.RatingRanges?.sort())\n    && compareCustomJsonAttributes(previousForm.AttributesAny, currentForm.AttributesAny)\n    && compareCustomJsonAttributes(previousForm.AttributesAll, currentForm.AttributesAll)\n    && previousForm.PageSetSize === currentForm.PageSetSize) {\n    return true;\n  }\n  return false;\n}\n\nfunction getDefaultProductSearchViewModel(\n    cefConfig: CEFConfig,\n    urlParams: IParams,\n    params: DecodedValueMap<IParamsForSearchCatalogQPCMap>\n): ProductSearchViewModel {\n  const searchForm: ProductCatalogSearchForm = {\n    Page: isDefinedWithValue(urlParams.page) ? Number(urlParams.page) : 1,\n    PageFormat: isDefinedWithValue(urlParams.format)\n      ? urlParams.format\n      : isDefinedWithValue(cefConfig?.catalog.defaultFormat)\n        ? cefConfig.catalog.defaultFormat\n        : \"grid\",\n    PageSetSize: 5,\n    PageSize: isDefinedWithValue(urlParams.size)\n      ? Number(urlParams.size)\n      : isDefinedWithValue(cefConfig?.catalog.defaultPageSize)\n        ? Number(cefConfig.catalog.defaultPageSize)\n        : 9,\n    Sort: urlParams.sort\n      ? SearchSort[urlParams.sort as keyof typeof SearchSort]\n      : SearchSort.Relevance,\n  };\n  if (isDefinedWithValue(params.attributesAll)) {\n    searchForm.AttributesAll = params.attributesAll;\n  }\n  if (isDefinedWithValue(params.attributesAny)) {\n    searchForm.AttributesAny = params.attributesAny;\n  }\n  if (isDefinedWithValue(params.brandName)) {\n    searchForm.BrandName = params.brandName;\n  }\n  if (isDefinedWithValue(params.categoriesAll)) {\n    searchForm.CategoriesAll = params.categoriesAll;\n  }\n  if (isDefinedWithValue(params.categoriesAny)) {\n    searchForm.CategoriesAny = params.categoriesAny;\n  }\n  if (isDefinedWithValue(urlParams.catBot)) {\n    searchForm.Category = urlParams.catBot;\n  }\n  if (isDefinedWithValue(urlParams.catMid)) {\n    searchForm.CategoryMid = urlParams.catMid;\n  }\n  if (isDefinedWithValue(urlParams.catTop)) {\n    searchForm.CategoryTop = urlParams.catTop;\n  }\n  if (isDefinedWithValue(params.pricingRanges)) {\n    searchForm.PricingRanges = params.pricingRanges;\n  }\n  if (isDefinedWithValue(params.term)) {\n    searchForm.Query = params.term;\n  }\n  if (isDefinedWithValue(params.ratingRanges)) {\n    searchForm.RatingRanges = params.ratingRanges;\n  }\n  if (isDefinedWithValue(params.storeId)) {\n    searchForm.StoreID = Number(params.storeId);\n  }\n  if (isDefinedWithValue(params.storeIdsAll)) {\n    searchForm.StoreIDsAll = params.storeIdsAll;\n  }\n  if (isDefinedWithValue(params.storeIdsAn)) {\n    searchForm.StoreIDsAny = params.storeIdsAny;\n  }\n  Object.keys(searchForm).forEach(key => {\n    // TODO@JDW: Figure out how to have solid types while still having a string indexer\n    // @ts-ignore\n    if (searchForm[key] === undefined || searchForm[key] === \"\" || searchForm[key] === null) {\n      // @ts-ignore\n      delete searchForm[key];\n    }\n  });\n  return {\n    Documents: [],\n    ElapsedMilliseconds: 0,\n    Form: searchForm,\n    IsValid: false,\n    Total: 0,\n    TotalPages: 0,\n  };\n}\n\nfunction defaultViewModelParams(): IParamsForSearchCatalogQPCMap {\n  const retVal: IParamsForSearchCatalogQPCMap = {\n    attributesAll: CustomJsonParam,\n    attributesAny: CustomJsonParam,\n    brandName: StringParam,\n    categoriesAll: ArrayParam,\n    categoriesAny: ArrayParam,\n    location: StringParam,\n    priceRanges: ArrayParam,\n    ratingRanges: ArrayParam,\n    storeId: NumberParam,\n    storeIdsAll: DelimitedNumericArrayParam,\n    storeIdsAny: DelimitedNumericArrayParam,\n    term: StringParam,\n  };\n  return retVal;\n}\n\nfunction viewModelToUrlParams(cefConfig: CEFConfig, productSearchViewModel: ProductSearchViewModel) {\n  const retVal = {\n  } as IParams;\n  if (productSearchViewModel?.Form) {\n    if (isDefinedWithValue(productSearchViewModel.Form.PageFormat)\n      && productSearchViewModel.Form.PageFormat !== (cefConfig.catalog.defaultFormat ?? \"grid\")) {\n      retVal.format = productSearchViewModel.Form.PageFormat as \"grid\" | \"list\" | \"table\";\n    }\n    if (isDefinedWithValue(productSearchViewModel.Form.Page)\n      && productSearchViewModel.Form.Page !== 1) {\n      retVal.page = productSearchViewModel.Form.Page;\n    }\n    if (isDefinedWithValue(productSearchViewModel.Form.PageSize)\n      && productSearchViewModel.Form.PageSize !== (cefConfig.catalog.defaultPageSize ?? 9)) {\n      retVal.size = productSearchViewModel.Form.PageSize;\n    }\n    if (isDefinedWithValue(productSearchViewModel.Form.Sort)\n      && productSearchViewModel.Form.Sort !== (cefConfig.catalog.defaultSort ?? SearchSort.Relevance)) {\n      retVal.sort = productSearchViewModel.Form.Sort;\n    }\n    if (isDefinedWithValue(productSearchViewModel.Form.Category)) {\n      retVal.catBot = productSearchViewModel.Form.Category;\n    }\n    if (isDefinedWithValue(productSearchViewModel.Form.CategoryTop)) {\n      retVal.catTop = productSearchViewModel.Form.CategoryTop;\n    }\n    if (isDefinedWithValue(productSearchViewModel.Form.CategoryMid)) {\n      retVal.catMid = productSearchViewModel.Form.CategoryMid;\n    }\n  }\n  return retVal;\n}\n\nfunction viewModelToParams(productSearchViewModel: ProductSearchViewModel) {\n  // Have access to productSearchViewModel and latestValues\n  return (\n    latestParams: DecodedValueMap<IParamsForSearchCatalogQPCMap>\n  ): DecodedValueMap<IParamsForSearchCatalogQPCMap> => {\n    if (!productSearchViewModel) {\n      return latestParams;\n    }\n    const configMap: DecodedValueMap<IParamsForSearchCatalogQPCMap> = {\n    };\n    if (productSearchViewModel?.Form) {\n      if (isDefinedWithValue(productSearchViewModel.Form.AttributesAll)) {\n        configMap.attributesAll = productSearchViewModel.Form.AttributesAll;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.AttributesAny)) {\n        configMap.attributesAny = productSearchViewModel.Form.AttributesAny;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.BrandName)) {\n        configMap.brandName = productSearchViewModel.Form.BrandName;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.CategoriesAll)) {\n        configMap.categoriesAll = productSearchViewModel.Form.CategoriesAll;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.CategoriesAny)) {\n        configMap.categoriesAny = productSearchViewModel.Form.CategoriesAny;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.PricingRanges)) {\n        configMap.priceRanges = productSearchViewModel.Form.PricingRanges;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.Query)) {\n        configMap.term = productSearchViewModel.Form.Query;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.RatingRanges)) {\n        configMap.ratingRanges = productSearchViewModel.Form.RatingRanges;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.StoreID)) {\n        configMap.storeId = productSearchViewModel.Form.StoreID;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.StoreIDsAll)) {\n        configMap.storeIdsAll = productSearchViewModel.Form.StoreIDsAll;\n      }\n      if (isDefinedWithValue(productSearchViewModel.Form.StoreIDsAny)) {\n        configMap.storeIdsAny = productSearchViewModel.Form.StoreIDsAny;\n      }\n    }\n    return configMap;\n  };\n}\n\nconst usePathname = (history: H.History<H.LocationState>, cefConfig: CEFConfig, initialUrlParams: IParams) => {\n  let pathname = createPath(initialUrlParams);\n  function createPath(value: IParams) {\n    if (!isDefinedWithValue(value)) {\n      console.warn(\"IParams value is null, returning root\");\n      return \"/\";\n    }\n    let retVal = \"\";\n    if (isDefinedWithValue(value.catTop)) {\n      retVal += `/${value.catTop}`;\n    }\n    if (isDefinedWithValue(value.catMid)) {\n      retVal += `/${value.catMid}`;\n    }\n    if (isDefinedWithValue(value.catBot)) {\n      retVal += `/${value.catBot}`;\n    }\n    if (isDefinedWithValue(value.format) && value.format !== (cefConfig?.catalog?.defaultFormat ?? \"grid\")) {\n      retVal += `/format/${value.format}`;\n    }\n    if (isDefinedWithValue(value.sort) && value.sort !== (cefConfig?.catalog?.defaultSort ?? SearchSort.Relevance)) {\n      retVal += `/sort/${value.sort}`;\n    }\n    if (isDefinedWithValue(value.size) && value.size !== (cefConfig?.catalog?.defaultPageSize ?? 9)) {\n      retVal += `/size/${value.size}`;\n    }\n    if (isDefinedWithValue(value.page) && value.page !== 1) {\n      retVal += `/page/${value.page}`;\n    }\n    if (retVal === \"\") {\n      retVal = \"/\";\n    }\n    return retVal;\n  }\n  const setPathname = (newValue: IParams) => {\n    if (!isDefinedWithValue(cefConfig)) {\n      console.debug(\"ignoring pathname change attempt, cefConfig not init\", newValue);\n      return;\n    }\n    const retVal = createPath(newValue);\n    if (pathname === retVal) {\n      console.debug(\"ignoring pathname change attempt, same info\", pathname, retVal);\n      return;\n    }\n    console.log(\"setPathname\", pathname, retVal);\n    pathname = retVal;\n    // TODO: Set path in HTML5 url history\n    history.push(cefConfig.routes.catalog.root + retVal);\n  };\n  return {\n    pathname,\n    setPathname\n  };\n};\n\nexport const useProductSearchViewModel = (): [\n  ProductSearchViewModel,\n  React.Dispatch<React.SetStateAction<ProductSearchViewModel>>\n] => {\n  const cefConfig = useCefConfig();\n  const [ productSearchViewModel, setProductSearchViewModel ] = useState<ProductSearchViewModel>();\n  // @ts-ignore\n  const urlParams = useParams<IParams>();\n  const history = useHistory();\n  const { setPathname } = usePathname(history, cefConfig, urlParams);\n  const [ params, setParams ] = useQueryParams(defaultViewModelParams());\n\n  useEffect(() => {\n    if (!_.isObject(cefConfig)) {\n      return;\n    }\n    const defaultViewModel = getDefaultProductSearchViewModel(cefConfig, urlParams, params);\n    setProductSearchViewModel(defaultViewModel);\n  }, [ cefConfig ]);\n\n  useEffectSkipFirstDebugger(\n    () => {\n      setPathname(viewModelToUrlParams(cefConfig, productSearchViewModel));\n      setParams(viewModelToParams(productSearchViewModel), \"push\" as UrlUpdateType);\n    },\n    [\n      productSearchViewModel?.Form?.AttributesAll,\n      productSearchViewModel?.Form?.AttributesAny,\n      productSearchViewModel?.Form?.BrandName,\n      productSearchViewModel?.Form?.CategoriesAll,\n      productSearchViewModel?.Form?.CategoriesAny,\n      productSearchViewModel?.Form?.Category,\n      productSearchViewModel?.Form?.CategoryTop,\n      productSearchViewModel?.Form?.CategoryMid,\n      productSearchViewModel?.Form?.Page,\n      productSearchViewModel?.Form?.PageFormat,\n      productSearchViewModel?.Form?.PageSetSize,\n      productSearchViewModel?.Form?.PageSize,\n      productSearchViewModel?.Form?.PricingRanges,\n      productSearchViewModel?.Form?.Query,\n      productSearchViewModel?.Form?.RatingRanges,\n      productSearchViewModel?.Form?.Sort,\n      productSearchViewModel?.Form?.StoreID,\n      productSearchViewModel?.Form?.StoreIDsAll,\n      productSearchViewModel?.Form?.StoreIDsAny,\n    ],\n    [\n      \"productSearchViewModel?.Form?.AttributesAll\",\n      \"productSearchViewModel?.Form?.AttributesAny\",\n      \"productSearchViewModel?.Form?.BrandName\",\n      \"productSearchViewModel?.Form?.CategoriesAll\",\n      \"productSearchViewModel?.Form?.CategoriesAny\",\n      \"productSearchViewModel?.Form?.Category\",\n      \"productSearchViewModel?.Form?.CategoryTop\",\n      \"productSearchViewModel?.Form?.CategoryMid\",\n      \"productSearchViewModel?.Form?.Page\",\n      \"productSearchViewModel?.Form?.PageFormat\",\n      \"productSearchViewModel?.Form?.PageSetSize\",\n      \"productSearchViewModel?.Form?.PageSize\",\n      \"productSearchViewModel?.Form?.PricingRanges\",\n      \"productSearchViewModel?.Form?.Query\",\n      \"productSearchViewModel?.Form?.RatingRanges\",\n      \"productSearchViewModel?.Form?.Sort\",\n      \"productSearchViewModel?.Form?.StoreID\",\n      \"productSearchViewModel?.Form?.StoreIDsAll\",\n      \"productSearchViewModel?.Form?.StoreIDsAny\",\n    ]\n  );\n  return [\n    productSearchViewModel,\n    setProductSearchViewModel\n  ];\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Container, Pagination } from \"react-bootstrap\";\ninterface ICatalogPaginationControlsProps {\n  page: number;\n  pageSize: number;\n  total: number;\n  totalPages: number;\n  navigateToPage: Function;\n}\n\nexport const CatalogPaginationControls = (props: ICatalogPaginationControlsProps): JSX.Element => {\n  const { page, pageSize, total, totalPages, navigateToPage } = props;\n  const { t } = useTranslation();\n  const displayablePages = Math.min(totalPages, 5);\n\n  return (\n    <Container className=\"pagination-box text-center mt-4\">\n      <hr className=\"border\" />\n      <span className=\"showing\">\n        {t(\"ui.storefront.product.catalog.productCatalog.Showing\")}{\" \"}\n        <span className=\"show-card\">\n          {// eslint-disable-next-line @typescript-eslint/no-extra-parens\n            `${((page - 1) * pageSize) + 1} to ${page * pageSize >= total ? total : page * pageSize}`\n          }\n        </span>{\" \"}\n        {t(\"ui.storefront.common.Of.Lowercase\")}{\" \"}\n        <span className=\"show-or\">{total}</span>\n      </span>\n      <Pagination className=\"justify-content-center mt-2\">\n        <Pagination.First\n          disabled={page === 1}\n          aria-label={t(\"ui.storefront.searchCatalog.pageSelector.GoToFirstPage\")}\n          onClick={() => page > 1 && navigateToPage(1)}\n        />\n        <Pagination.Prev\n          disabled={page === 1}\n          aria-label={t(\"ui.storefront.searchCatalog.pageSelector.GoToPreviousPage\")}\n          onClick={() => page > 1 && navigateToPage(page - 1)}\n        />\n        {\n          Array(displayablePages)\n            .fill(null)\n            .map((el, index): JSX.Element => {\n              let num = 1;\n              if (totalPages > 2 && page > 2 && page <= totalPages - 2) {\n                num = page - 2;\n              }\n              if (totalPages > 2 && totalPages - 2 <= page) {\n                num = totalPages - (displayablePages - 1);\n              }\n              num += index;\n              return (\n                <Pagination.Item\n                  aria-label={t(\"ui.storefront.searchCatalog.pageSelector.GoToPage\")}\n                  active={page === num}\n                  onClick={() => navigateToPage(num)}\n                  key={num.toString()}>\n                  {num}\n                </Pagination.Item>\n              );\n            })\n        }\n        <Pagination.Next\n          disabled={page >= totalPages}\n          onClick={() => {\n            if (page < totalPages) {\n              navigateToPage(page + 1);\n            }\n          }}\n          aria-label={t(\"ui.storefront.searchCatalog.pageSelector.GoToNextPage\")}\n        />\n        <Pagination.Last\n          disabled={page >= totalPages}\n          onClick={() => {\n            if (page < totalPages) {\n              navigateToPage(totalPages);\n            }\n          }}\n          aria-label={t(\"ui.storefront.searchCatalog.pageSelector.GoToLastPage\")}\n        />\n      </Pagination>\n    </Container>\n  );\n};\n","/**\n * @file React/src/_shared/customHooks/useCatalogSortFactory.tsx\n * @author Copyright (c) 2020-2023 clarity-ventures.com. All rights reserved.\n * @desc Catalog Sorting Factory hook\n */\n\nimport { useEffect, useState } from \"react\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { SearchSort } from \"src/_api/cvApi._DtoClasses\";\nimport { Dictionary, ProductModel } from \"src/_api/cvApi.shared\";\n\nexport interface ICatalogSortFactory {\n    sort(sortBy: string, products: ProductModel[], hitScores: Dictionary<number>): ProductModel[];\n}\n\nexport class CatalogSortFactory implements ICatalogSortFactory {\n  sort(sortBy: string, products: ProductModel[], hitScores: Dictionary<number>): ProductModel[] {\n    // For below (as-is) y - x is descending (highest value will be first)\n    switch (sortBy) {\n      // Relevance\n      case SearchSort[SearchSort.Relevance]: {\n        if (!hitScores) {\n          return products;\n        }\n        return products.sort((x, y) => (hitScores[y.ID] ?? 0) - (hitScores[x.ID] ?? 0));\n      }\n      // Popular\n      case SearchSort[SearchSort.Popular]: {\n        return products.sort((x, y) => (y.TotalPurchasedQuantity ?? 0) - (x.TotalPurchasedQuantity ?? 0));\n      }\n      // Recent\n      case SearchSort[SearchSort.Recent]: {\n        return products.sort((x, y) => {\n          const xDate: string | number = x.UpdatedDate.toString()\n            ?? x.CreatedDate.toString()\n            ?? 0;\n          const yDate: string | number = y.UpdatedDate.toString()\n            ?? y.CreatedDate.toString()\n            ?? 0;\n          return new Date(yDate).getTime() - new Date(xDate).getTime();\n        });\n      }\n      // NameAscending\n      case SearchSort[SearchSort.NameAscending]: {\n        return products.sort((x, y) => x.Name.toUpperCase()\n          .localeCompare(y.Name.toUpperCase()));\n      }\n      // NameDescending\n      case SearchSort[SearchSort.NameDescending]: {\n        return products.sort((x, y) => y.Name.toUpperCase()\n          .localeCompare(x.Name.toUpperCase()));\n      }\n      // PricingAscending\n      case SearchSort[SearchSort.PricingAscending]: {\n        return products.sort((x, y) => (this.getProductPrice(x) ?? 0) - (this.getProductPrice(y) ?? 0));\n      }\n      // PricingDescending\n      case SearchSort[SearchSort.PricingDescending]: {\n        return products.sort((x, y) => (this.getProductPrice(y) ?? 0) - (this.getProductPrice(x) ?? 0));\n      }\n      // RatingAscending\n      case SearchSort[SearchSort.RatingAscending]: {\n        return products.sort((x, y) => (this.getProductRating(x) ?? 0) - (this.getProductRating(y) ?? 0));\n      }\n      // RatingDescending\n      case SearchSort[SearchSort.RatingDescending]: {\n        return products.sort((x, y) => (this.getProductRating(y) ?? 0) - (this.getProductRating(x) ?? 0));\n      }\n      // Defined\n      case SearchSort[SearchSort.Defined]: {\n        const productsWithSortOrder = products.filter(x => typeof this.getProductSortOrder(x) === \"number\");\n        productsWithSortOrder.sort((x, y) => this.getProductSortOrder(x) - this.getProductSortOrder(y));\n        const productsWithoutSortOrder = products.filter(x => !this.getProductSortOrder(x));\n        return [ ...productsWithSortOrder, ...productsWithoutSortOrder ];\n      }\n      // Default / Not Implemented\n      default: {\n        return products;\n      }\n    }\n  }\n\n  private getProductPrice(product: ProductModel): number | undefined {\n    const prices = product.readPrices();\n    if (prices) {\n      return prices.haveSale\n        ? prices.sale ?? undefined\n        : prices.base ?? undefined;\n    }\n    return undefined;\n  }\n\n  private getProductRating(product: ProductModel): number | undefined {\n    const ratings = product.readRatings();\n    if (ratings) {\n      return ratings.value;\n    }\n    return undefined;\n  }\n\n  private getProductSortOrder(product: ProductModel): number | undefined {\n    const sortOrders = product.readSortOrder();\n    if (sortOrders) {\n      return sortOrders.order;\n    }\n    return undefined;\n  }\n}\n\nexport const useCatalogSortFactory = (): ICatalogSortFactory => {\n  const [ catalogSortFactory, setCatalogSortFactory ] = useState(null);\n  const cefConfig = useCefConfig() as CEFConfig;\n  useEffect(() => {\n    if (!cefConfig) {\n      return;\n    }\n    // New up the class from above only once\n    const instance = new CatalogSortFactory();\n    setCatalogSortFactory(instance);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ cefConfig ]);\n  return catalogSortFactory;\n};\n","/**\n * @file React/src/_shared/customHooks/useCustomCompareEffect.ts\n * @author Copyright (c) 2019-2023 clarity-ventures.com. All rights reserved.\n * @desc useCustomCompareEffect hook\n */\nimport { useEffect, useRef } from \"react\";\n\nfunction useCustomCompareMemo<T>(value: T, equalFn: (prev: T, current: T) => boolean): T {\n  const ref = useRef<T>(value);\n\n  if (!equalFn(value, ref.current)) {\n    ref.current = value;\n  }\n\n  return ref.current;\n}\n\nfunction useCustomCompareEffect<T>(\n    create: () => void | (() => void),\n    input: T,\n    equal: (prev: T, current: T) => boolean\n): void {\n  useEffect(create, [ useCustomCompareMemo(input, equal) ]);\n}\n\nexport default useCustomCompareEffect;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from \"react\";\n// TODO: import { corsImageLink } from \"src/_shared/common/Cors\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n  CatalogGridView,\n  CatalogListView,\n  CatalogTableView,\n  CategoryLandingPageView\n} from \"./views\";\nimport {\n  CategoryLandingPageFooter,\n  CategoryLandingPageHeader,\n  CategoryLandingPageSidebar,\n  SubCategoryCarousel\n} from \"./views/CategoryLandingPageWidgets\";\nimport { CatalogFilters } from \"src/Catalog/controls/CatalogFilters\";\nimport {\n  CatalogFormatSwitch,\n  CatalogSizeSwitch,\n  CatalogSortBySwitch\n} from \"./controls/CatalogSwitchComponents\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { Breadcrumbs } from \"src/_shared/Breadcrumbs\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useSortingFactory } from \"src/_shared/customHooks/useSortingFactory\";\nimport { useRatingFactory } from \"src/_shared/customHooks/useRatingFactory\";\nimport {\n  compareProductCatalogSearchForm,\n  useProductSearchViewModel\n} from \"src/_shared/customHooks/catalog/useProductSearchViewModel\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { CatalogPaginationControls } from \"./controls/CatalogPaginationControls\";\nimport cvApi from \"src/_api/cvApi\";\nimport {\n  CategoryModel,\n  GeneralAttributeModel,\n  ProductCatalogSearchForm\n} from \"src/_api/cvApi._DtoClasses\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { useCatalogSortFactory } from \"src/_shared/customHooks/catalog/useCatalogSortFactory\";\nimport promiser from \"src/_shared/Promiser\";\nimport Interweave from \"interweave\";\nimport useCustomCompareEffect from \"src/_shared/customHooks/useCustomCompareEffect\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { SearchProductCatalogWithProviderDto } from \"src/_api/cvApi.Providers\";\n\nexport const CatalogBody = (): JSX.Element => {\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const productFactory = useProductFactory();\n  const sortingFactory = useSortingFactory();\n  const ratingFactory = useRatingFactory();\n  const catalogSortFactory = useCatalogSortFactory();\n  const showCatLandingPage = Boolean(cefConfig?.featureSet?.categoryLandingPages?.enabled);\n  const [ products, setProducts ] = useState<Array<ProductModel>>([]);\n  const [ allCategories, setCategories ] = useState<Array<CategoryModel>>([]);\n  const [ catsBySeoUrl, setCatsBySeoUrl ] = useState<Record<string, CategoryModel>>(undefined);\n  const [ catsByNamePipeKey, setCatsByNamePipeKey ] = useState<Record<string, CategoryModel>>(undefined);\n  const [ allAttributes, setAttributes ] = useState<Array<GeneralAttributeModel>>([]);\n  const [ productSearchViewModel, setProductSearchViewModel ] = useProductSearchViewModel();\n  const [ currentCategory, setCurrentCategory ] = useState<CategoryModel>();\n  const { t } = useTranslation();\n\n  const usingInfiniteScroll = cefConfig?.catalog.defaultPageSize === 0;\n\n  useEffect(() => {\n    if (!allCategories || !catsBySeoUrl || !catsByNamePipeKey) {\n      return;\n    }\n    const lookup = productSearchViewModel?.Form?.Category;\n    let currentCat: CategoryModel = catsBySeoUrl[lookup];\n    if (!currentCat) {\n      // Fallback to old metho\n      currentCat = catsByNamePipeKey[lookup];\n    }\n    setCurrentCategory(currentCat);\n  }, [ catsBySeoUrl, catsByNamePipeKey, productSearchViewModel?.Form?.Category ]);\n\n  useEffect(() => {\n    if (productSearchViewModel?.ResultIDs) {\n      getProductsByProductIDs();\n    }\n  }, [ cefConfig, productSearchViewModel?.ResultIDs ]);\n\n  useEffect(() => {\n    getCategories().finally();\n    getAttributes().finally();\n  }, []);\n\n  useCustomCompareEffect(\n    () => {\n      catalogSearch();\n    },\n    productSearchViewModel?.Form,\n    compareProductCatalogSearchForm\n  );\n\n  async function getProductsByProductIDs() {\n    try {\n      // Get base products\n      if (!productSearchViewModel?.ResultIDs?.length) {\n        setProducts([]);\n        return;\n      }\n      setRunning();\n      const IDsToUse = usingInfiniteScroll\n        ? productSearchViewModel?.ResultIDs?.slice(\n          (productSearchViewModel?.Form?.Page - 1) * productSearchViewModel?.Form?.PageSetSize,\n          // eslint-disable-next-line @typescript-eslint/no-extra-parens, max-len\n          ((productSearchViewModel?.Form?.Page - 1) * productSearchViewModel?.Form?.PageSetSize) + productSearchViewModel?.Form?.PageSetSize\n        )\n        : productSearchViewModel?.ResultIDs;\n      let newProducts = await productFactory.getProductsByIDs(IDsToUse);\n      if (cefConfig.featureSet.reviews.enabled) {\n        // Assign reviews / ratings\n        newProducts = await ratingFactory.bulkFactoryAssign(newProducts);\n      }\n      // Assign sort order / defined\n      newProducts = sortingFactory.bulkFactoryAssign(newProducts);\n      newProducts = catalogSortFactory.sort(\n        productSearchViewModel.Form.Sort.toString(),\n        newProducts,\n        productSearchViewModel.HitsMetaDataHitScores\n      );\n      setProducts(usingInfiniteScroll ? [ ...products, ...newProducts ] : newProducts);\n      finishRunning();\n    } catch (err) {\n      console.error(err);\n      finishRunning(true, \"unable to fetch products or product related data\");\n    }\n  }\n\n  async function catalogSearch() {\n    if (!productSearchViewModel?.Form) {\n      return;\n    }\n    try {\n      setRunning();\n      const searchDto: SearchProductCatalogWithProviderDto = {} as any;\n      const keys = Object.keys(productSearchViewModel.Form);\n      const sortedKeys = keys.sort();\n      for (let i = 0; i < sortedKeys.length; i++) {\n        if (Object.hasOwn(productSearchViewModel.Form, sortedKeys[i])) {\n          (searchDto as any)[sortedKeys[i]] = (productSearchViewModel.Form as any)[sortedKeys[i]] as any;\n        }\n      }\n      const searchPromiserKey = `cvApi.providers.SearchProductCatalogWithProvider(${JSON.stringify(searchDto)})`;\n      // TODO: need a way to cancel this promise if it's running and the productSearchViewModel gets modified again\n      const r = await promiser.resolve(\n        searchPromiserKey,\n        () => cvApi.providers.SearchProductCatalogWithProvider(searchDto)\n      );\n      // @ts-ignore\n      if (r.data.LogID) {\n        // @ts-ignore\n        finishRunning(true, r.data.Message);\n        setProductSearchViewModel(productSearchViewModelI => {\n          productSearchViewModelI.ResultIDs = [];\n          return { ...productSearchViewModelI };\n        });\n        return;\n      }\n      const newForm = r.data.Form;\n      // @ts-ignore\n      // eslint-disable-next-line no-underscore-dangle\n      delete newForm.__type;\n      if (usingInfiniteScroll && productSearchViewModel.Form.Page !== 1) {\n        setProductSearchViewModel(productSearchViewModelI => {\n          productSearchViewModelI.ResultIDs = { ...r.data.ResultIDs };\n          return productSearchViewModelI;\n        });\n      } else {\n        setProductSearchViewModel(r.data);\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, (err as Error).message ?? \"Failed to search product catalog with provider\");\n    }\n  }\n\n  async function getCategories() {\n    try {\n      const args = {\n        Active: true,\n        AsListing: true,\n        IncludeInMenu: true,\n        IncludeChildrenInResults: true\n      };\n      const promiserKey = `GetCategoriesThreeLevels(${JSON.stringify(args)})`;\n      const r = await promiser.resolve(\n        promiserKey,\n        () => cvApi.categories.GetCategoriesThreeLevels(args)\n      );\n      setCategories(r.data);\n      const newCatsBySeoUrl: Record<string, CategoryModel> = {};\n      const newCatsByNamePipeKey: Record<string, CategoryModel> = {};\n      for (const cat of r.data) {\n        if (!cat.SeoUrl) {\n          console.warn(`Category #${cat.ID} is missing an SeoUrl, cannot build into tree`);\n          continue;\n        }\n        newCatsBySeoUrl[cat.SeoUrl] = cat;\n        newCatsBySeoUrl[cat.SeoUrl.split(\"/\").reverse()[0]] = cat;\n        newCatsByNamePipeKey[`${cat.Name}|${cat.CustomKey}`] = cat;\n        if (!cat.Children) {\n          continue;\n        }\n        for (const kit of cat.Children) {\n          newCatsBySeoUrl[kit.SeoUrl] = kit;\n          newCatsBySeoUrl[kit.SeoUrl.split(\"/\").reverse()[0]] = kit;\n          newCatsByNamePipeKey[`${kit.Name}|${kit.CustomKey}`] = kit;\n          if (!kit.Children) {\n            continue;\n          }\n          for (const kat of kit.Children) {\n            newCatsBySeoUrl[kat.SeoUrl] = kat;\n            newCatsBySeoUrl[kat.SeoUrl.split(\"/\").reverse()[0]] = kat;\n            newCatsByNamePipeKey[`${kat.Name}|${kat.CustomKey}`] = kat;\n          }\n        }\n      }\n      setCatsBySeoUrl(newCatsBySeoUrl);\n      setCatsByNamePipeKey(newCatsByNamePipeKey);\n      setProductSearchViewModel(productSearchViewModelI => (\n        { ...productSearchViewModelI, Categories: allCategories }\n      ));\n    } catch (err) {\n      console.error(err);\n      setProductSearchViewModel(null);\n    }\n  }\n\n  async function getAttributes() {\n    try {\n      const args = {\n        Active: true,\n        AsListing: true,\n        HideFromStorefront: false\n      };\n      const promiserKey = `GetGeneralAttributes(${JSON.stringify(args)})`;\n      const r = await promiser.resolve(\n        promiserKey,\n        () => cvApi.attributes.GetGeneralAttributes(args)\n      );\n      setAttributes(r.data?.Results);\n    } catch (err) {\n      console.error(err);\n      setAttributes([]);\n    }\n  }\n\n  function showCatalog(): boolean {\n    return currentCategory && showCatLandingPage && currentCategory.Children\n      ? depthOfCategory(currentCategory?.SeoUrl) >= cefConfig?.catalog?.showCategoriesForLevelsUpTo\n      : true;\n  }\n\n  function depthOfCategory(catSeoUrl: string): number {\n    if (!catsBySeoUrl) {\n      return -1;\n    }\n    const cat = catsBySeoUrl[catSeoUrl];\n    const parentSeoUrl = (cat as any).ParentSeoUrl;\n    return 1 + (parentSeoUrl && parentSeoUrl in catsBySeoUrl ? depthOfCategory(parentSeoUrl) : 0);\n  }\n\n  function navigateToPage(page: number) {\n    setProductSearchViewModel({\n      ...productSearchViewModel,\n      Form: { ...productSearchViewModel?.Form, Page: page }\n    });\n  }\n\n  function onChangeQueryParam<T, >(param: keyof ProductCatalogSearchForm, newValue: T) {\n    let form: ProductCatalogSearchForm = null;\n    try {\n      form = JSON.parse(JSON.stringify(productSearchViewModel?.Form));\n    } catch (err) {\n      return;\n    }\n    if (form[param] && !newValue) {\n      delete form[param];\n    }\n    (form[param] as unknown) = newValue as T;\n    if (param !== \"Page\") {\n      form.Page = 1;\n    }\n    // @ts-ignore\n    // eslint-disable-next-line no-underscore-dangle\n    if (form.__type) {\n      // @ts-ignore\n      // eslint-disable-next-line no-underscore-dangle\n      delete form.__type;\n    }\n    setProductSearchViewModel({\n      ...productSearchViewModel,\n      Form: form\n    });\n  }\n\n  function renderProductsView(): React.ReactNode {\n    const viewProps = {\n      allAttributes,\n      onScrollToBottom: () => {\n        if (!viewState.running) {\n          navigateToPage(productSearchViewModel?.Form.Page + 1);\n        }\n      },\n      parentRunning: viewState.running,\n      products,\n      useInfinite: usingInfiniteScroll\n    };\n    if (!usingInfiniteScroll && viewState.running) {\n      return <LoadingWidget />;\n    }\n    switch (productSearchViewModel?.Form?.PageFormat) {\n      case \"table\": {\n        return <CatalogTableView {...viewProps} />;\n      }\n      case \"list\": {\n        return <CatalogListView {...viewProps} />;\n      }\n      case \"grid\":\n      default: {\n        return <CatalogGridView {...viewProps} />;\n      }\n    }\n  }\n\n  function n(category: CategoryModel | string, categoryTop: string = null, categoryMid: string = null): string {\n    if (!catsBySeoUrl || !catsByNamePipeKey) {\n      // Loading\n      return null;\n    }\n    if (!category) {\n      return null;\n    }\n    if (typeof category === \"string\") {\n      if (category in catsBySeoUrl) {\n        return n(catsBySeoUrl[category]);\n      }\n      if (category in catsByNamePipeKey) {\n        return n(catsByNamePipeKey[category]);\n      }\n      if (Boolean(categoryMid)) {\n        const full = `${categoryTop}/${categoryMid}/${category}`;\n        if (full in catsBySeoUrl) {\n          return n(catsBySeoUrl[full]);\n        }\n      }\n      if (Boolean(categoryTop)) {\n        const full = `${categoryTop}/${category}`;\n        if (full in catsBySeoUrl) {\n          return n(catsBySeoUrl[full]);\n        }\n      }\n      return \"Unknown Category\";\n    }\n    return category.DisplayName ?? category.Name;\n  }\n\n  function c(category: CategoryModel | string, categoryTop: string = null, categoryMid: string = null): CategoryModel {\n    if (!catsBySeoUrl || !catsByNamePipeKey) {\n      // Loading\n      return null;\n    }\n    if (!category) {\n      return null;\n    }\n    if (typeof category === \"string\") {\n      if (category in catsBySeoUrl) {\n        return c(catsBySeoUrl[category]);\n      }\n      if (category in catsByNamePipeKey) {\n        return c(catsByNamePipeKey[category]);\n      }\n      if (Boolean(categoryMid)) {\n        const full = `${categoryTop}/${categoryMid}/${category}`;\n        if (full in catsBySeoUrl) {\n          return c(catsBySeoUrl[full]);\n        }\n      }\n      if (Boolean(categoryTop)) {\n        const full = `${categoryTop}/${category}`;\n        if (full in catsBySeoUrl) {\n          return c(catsBySeoUrl[full]);\n        }\n      }\n      return null;\n    }\n    return category;\n  }\n\n  return (\n    <>\n      {showCatalog() || !Boolean(currentCategory)\n        ? null\n        : <Row>\n          <CategoryLandingPageHeader currentCategory={currentCategory}/>\n        </Row>\n      }\n      {showCatLandingPage\n        && Boolean(currentCategory?.Children?.length)\n        && showCatalog()\n        && <div className=\"mt-2\">\n          <SubCategoryCarousel<CategoryModel> items={currentCategory.Children} />\n        </div>\n      }\n      <div>\n        <div className=\"col-lg-12 col-md col-sm col\">\n          <div>\n            <Breadcrumbs\n              currentCategorySeoUrl={productSearchViewModel?.Form?.Category}\n              currentQuery={productSearchViewModel?.Form?.Query}\n              categoriesTree={productSearchViewModel?.CategoriesTree}\n              categoriesBySeoUrl={catsBySeoUrl}\n              categoriesByNamePipeKey={catsByNamePipeKey}\n              onCategoryClicked={(seoUrl: string) => {\n                if (!viewState.running) {\n                  onChangeQueryParam(\"Category\", c(seoUrl));\n                }\n              }}\n            />\n          </div>\n        </div>\n      </div>\n      <Row>\n        <Col\n          xs\n          sm\n          md\n          lg={12}\n          className=\"col-tk-10 offset-tk-1 col-fk-8 offset-fk-2 mt-4\">\n          <Row>\n            <Col\n              sm={12}\n              md={4}\n              lg={3}>\n              <Row className=\"clarity-filters\">\n                <CatalogFilters\n                  categoriesBySeoUrl={catsBySeoUrl}\n                  categoriesByNamePipeKey={catsByNamePipeKey}\n                  allAttributes={allAttributes}\n                  productSearchViewModel={productSearchViewModel}\n                  setProductSearchViewModel={setProductSearchViewModel}\n                  multiFilterMode=\"multi-all\"\n                />\n              </Row>\n              {showCatLandingPage\n                && currentCategory\n                && <Row>\n                  <Col\n                    xs={12}\n                    sm={6}\n                    md={12}>\n                    <CategoryLandingPageSidebar currentCategory={currentCategory}/>\n                  </Col>\n                </Row>\n              }\n            </Col>\n            <Col sm={12}\n              md={8}\n              lg={9}>\n              {showCatLandingPage && currentCategory?.Description\n                && <Row>\n                  <Col xs={12}>\n                    <Interweave content={currentCategory?.Description} />\n                  </Col>\n                </Row>\n              }\n              <Row>\n                <Col>\n                  {Boolean(productSearchViewModel?.Form?.Query?.length\n                    || productSearchViewModel?.Form?.Category?.length)\n                    && showCatalog()\n                    ? <h1>\n                      {t(\"ui.storefront.catalog.ShopResultsFor\")}{\" \"}\n                      <strong data-sid=\"CategoryTitleText\">\n                        {productSearchViewModel.Form.Query?.length\n                          ? productSearchViewModel.Form.Query\n                          : n(\n                            productSearchViewModel.Form.Category,\n                            productSearchViewModel.Form.CategoryTop,\n                            productSearchViewModel.Form.CategoryMid\n                          )}\n                      </strong>\n                    </h1>\n                    : null\n                  }\n                </Col>\n              </Row>\n              {showCatalog()\n                && <Row className=\"justify-content-between mb-2\">\n                  <Col\n                    xs={12}\n                    sm={4}\n                    md={4}\n                    lg={5}\n                    className=\"xs-text-center sm-text-end md-text-end lg-text-start\">\n                    <CatalogFormatSwitch\n                      pageFormat={productSearchViewModel?.Form?.PageFormat}\n                      onFormatBtnClicked={(format: string) => {\n                        if (!viewState.running) {\n                          onChangeQueryParam<string>(\"PageFormat\", format);\n                        }\n                      }}\n                    />\n                  </Col>\n                  <Col\n                    xs={12}\n                    sm={4}\n                    md={4}\n                    lg={4}\n                    className=\"xs-text-center sm-text-end md-text-end lg-text-start\">\n                    {!usingInfiniteScroll\n                      && <CatalogSizeSwitch\n                        pageSize={productSearchViewModel?.Form?.PageSize}\n                        onPageSizeClicked={(size: number) => {\n                          if (!viewState.running) {\n                            onChangeQueryParam<number>(\"PageSize\", size);\n                          }\n                        }}\n                      />\n                    }\n                  </Col>\n                  <Col\n                    xs={12}\n                    sm={4}\n                    md={4}\n                    lg={3}\n                    className=\"xs-text-center sm-text-end md-text-end lg-text-start\">\n                    <CatalogSortBySwitch\n                      sort={productSearchViewModel?.Form?.Sort}\n                      onSortByChanged={(sort: string) => {\n                        if (!viewState.running) {\n                          onChangeQueryParam<string>(\"Sort\", sort);\n                        }\n                      }}\n                    />\n                  </Col>\n                  <hr className=\"border col-12 mb-4 mt-4 mx-2 w-98\" />\n                </Row>\n              }\n              {viewState.hasError\n                && <Row className=\"my-3\">\n                  <Col>\n                    <ErrorView viewState={viewState} />\n                  </Col>\n                </Row>\n              }\n              {showCatLandingPage\n                && currentCategory\n                && !showCatalog()\n                && productSearchViewModel?.Form?.Category\n                && <CategoryLandingPageView\n                  currentCategory={currentCategory}\n                  onCategoryClicked={(seoUrl: string) => {\n                    if (!viewState.running) {\n                      onChangeQueryParam(\"Category\", c(seoUrl));\n                    }\n                  }}\n                />\n              }\n              {showCatalog() && renderProductsView()}\n              {!usingInfiniteScroll\n                && showCatalog()\n                && products\n                && Boolean(products.length)\n                && productSearchViewModel\n                && <CatalogPaginationControls\n                  page={productSearchViewModel.Form.Page}\n                  pageSize={productSearchViewModel.Form.PageSize}\n                  total={productSearchViewModel.Total}\n                  totalPages={productSearchViewModel.TotalPages}\n                  navigateToPage={navigateToPage}\n                />\n              }\n              {showCatLandingPage\n                && currentCategory\n                && <CategoryLandingPageFooter currentCategory={currentCategory}/>\n              }\n            </Col>\n          </Row>\n        </Col>\n      </Row>\n    </>\n  );\n};\n","/* CatLevelsUpTo, catLandingPageEnabled, currentCategory has children?, currentCategory's level\nif catlandingpage is not enabled THEN handle as normal\n*/\nimport { useEffect, useState } from \"react\";\nimport { Route, Switch } from \"react-router-dom\";\nimport { Compare } from \"./views/Compare\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { CatalogBody } from \"src/Catalog/CatalogBody\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\nexport const Catalog = (): JSX.Element => {\n  const cefConfig = useCefConfig();\n  const { viewState, finishLoading } = useViewState();\n  const [ arr, setArr ] = useState<string[]>([]);\n  const [ catalogRoutePathRoot, setCatalogRoutePathRoot ] = useState<string>(null);\n\n  useEffect(() => {\n    if (!cefConfig) {\n      return;\n    }\n    const tempCatalogRoutePathRoot = corsLink(cefConfig, \"\", \"catalog\");\n    setCatalogRoutePathRoot(tempCatalogRoutePathRoot);\n    const threeCatFragments = \"/:catTop/:catMid/:catBot\";\n    const twoCatFragments = \"/:catTop/:catBot\";\n    const oneCatFragments = \"/:catBot\";\n    const formatFragment = \"/format/:format(grid|list|table)\";\n    const sortFragment = \"/sort/:sort([A-Za-z]+)\";\n    const sizeFragment = \"/size/:size(\\\\d+)\";\n    const pageFragment = \"/page/:page(\\\\d+)\";\n\n    setArr([\n      tempCatalogRoutePathRoot + threeCatFragments + formatFragment + sortFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + formatFragment + sortFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + formatFragment + sortFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + formatFragment + sortFragment + sizeFragment + pageFragment,\n\n      tempCatalogRoutePathRoot + threeCatFragments + formatFragment + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + formatFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + sortFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + formatFragment + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + formatFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + sortFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + formatFragment + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + formatFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + sortFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + formatFragment + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + formatFragment + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + sortFragment + sizeFragment + pageFragment,\n\n      tempCatalogRoutePathRoot + threeCatFragments + formatFragment + sortFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + formatFragment + sizeFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + formatFragment + pageFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + formatFragment + sortFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + formatFragment + sizeFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + formatFragment + pageFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + formatFragment + sortFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + formatFragment + sizeFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + formatFragment + pageFragment,\n      tempCatalogRoutePathRoot + formatFragment + sortFragment,\n      tempCatalogRoutePathRoot + formatFragment + sizeFragment,\n      tempCatalogRoutePathRoot + formatFragment + pageFragment,\n\n      tempCatalogRoutePathRoot + threeCatFragments + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + sortFragment + pageFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + sortFragment + pageFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + sortFragment + pageFragment,\n      tempCatalogRoutePathRoot + sortFragment + sizeFragment,\n      tempCatalogRoutePathRoot + sortFragment + pageFragment,\n\n      tempCatalogRoutePathRoot + threeCatFragments + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + sizeFragment + pageFragment,\n      tempCatalogRoutePathRoot + sizeFragment + pageFragment,\n\n      tempCatalogRoutePathRoot + threeCatFragments + formatFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + sortFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + sizeFragment,\n      tempCatalogRoutePathRoot + threeCatFragments + pageFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + formatFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + sortFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + sizeFragment,\n      tempCatalogRoutePathRoot + twoCatFragments + pageFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + formatFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + sortFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + sizeFragment,\n      tempCatalogRoutePathRoot + oneCatFragments + pageFragment,\n      tempCatalogRoutePathRoot + formatFragment,\n      tempCatalogRoutePathRoot + sortFragment,\n      tempCatalogRoutePathRoot + sizeFragment,\n      tempCatalogRoutePathRoot + pageFragment,\n\n      tempCatalogRoutePathRoot + threeCatFragments,\n      tempCatalogRoutePathRoot + twoCatFragments,\n      tempCatalogRoutePathRoot + oneCatFragments,\n      tempCatalogRoutePathRoot,\n    ]);\n    finishLoading();\n  }, [ cefConfig ]);\n\n  if (viewState.loading) {\n    return <LoadingWidget/>;\n  }\n\n  return (\n    <>\n      <ErrorView viewState={viewState} />\n      <Switch>\n        <Route\n          exact\n          path={`${catalogRoutePathRoot}/compare`}\n          component={Compare}\n        />\n        <Route\n          path={arr}\n          component={CatalogBody}\n        />\n      </Switch>\n    </>\n  );\n};\n","import { Dispatch, SetStateAction } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface INotesWidgetProps {\n  parentRunning: boolean;\n  enteredNoteText: string;\n  setEnteredNoteText: Dispatch<SetStateAction<string>>;\n}\n\nexport const NotesWidget = (props: INotesWidgetProps) :JSX.Element => {\n  const { parentRunning, enteredNoteText, setEnteredNoteText } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <form>\n      <label htmlFor=\"checkout-note\">{t(\"ui.storefront.checkout.cart.notes\")}</label>\n      <textarea\n        className=\"mb-2 form-control\"\n        id=\"checkout-note\"\n        name=\"checkout-note\"\n        placeholder=\"Note added to order when purchase is completed.\"\n        disabled={parentRunning}\n        value={enteredNoteText}\n        onChange={event => setEnteredNoteText(event.target.value)}\n      />\n    </form>\n  );\n};\n","/* eslint-disable computed-property-spacing */\n/* eslint-disable no-trailing-spaces */\n/* eslint-disable space-in-parens */\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CartModel } from \"src/_api/cvApi._DtoClasses\";\nimport { IPurchaseStepConfig } from \"src/_shared/CefConfigTypes\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { ProcessCurrentCartToTargetOrdersDto, ProcessCurrentQuoteCartToTargetQuotesDto } from \"src/_api\";\nimport googleTagManagerService from \"src/_shared/tracking/googleTagManagerService\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { ICheckoutStepDataState } from \"src/Checkout/_checkoutTypes\";\nimport { ICheckoutB2CStepDataState } from \"src/CheckoutB2C/_checkoutB2CTypes\";\n\nexport interface ICheckoutFactory {\n  confirmAndPurchase: (\n    cart: CartModel,\n    cartType: \"Cart\" | \"Quote Cart\",\n    checkoutStepDataState: ICheckoutStepDataState | ICheckoutB2CStepDataState,\n    enteredNoteText?: string\n  ) => Promise<{\n    MasterOrderID: number;\n    SlaveOrderIDs: number[];\n  }>;\n  getPurchaseSteps: () => IPurchaseStepConfig[];\n  getPurchaseB2CSteps: () => IPurchaseStepConfig[];\n  getSubmitQuoteSteps: () => IPurchaseStepConfig[];\n  purchaseWithQuote: (purchaseWithQuoteDto: ProcessCurrentQuoteCartToTargetQuotesDto) => Promise<{\n    MasterOrderID: number;\n    SlaveOrderIDs: number[];\n  }>;\n}\n\nexport const useCheckoutFactory = (): ICheckoutFactory => {\n  const [ checkoutFactory, setCheckoutFactory ] = useState<ICheckoutFactory>(null);\n\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n  const cartFactory = useCartFactory();\n\n  useEffect(() => {\n    if (!cefConfig\n      || currentUser.Loading\n      || !cartFactory\n      || checkoutFactory) {\n      return;\n    }\n\n    const factory = {\n      confirmAndPurchase: async (\n        cart: CartModel,\n        cartType: \"Cart\" | \"Quote Cart\",\n        checkoutStepDataState: ICheckoutStepDataState | ICheckoutB2CStepDataState,\n        enteredNoteText?: string\n      ): Promise<{\n        MasterOrderID: number;\n        SlaveOrderIDs: number[];\n      }> => {\n        // /Providers/SubmitQuote/ProcessCurrentCartToTargetOrders\n        let dto: ProcessCurrentCartToTargetOrdersDto = {\n          IsPartialPayment: false,\n          IsSameAsBilling: false,\n          SpecialInstructions: null,\n          WithCartInfo: {\n            CartSessionID: cart?.SessionID,\n            CartTypeName: cartType\n          },\n          WithUserInfo: {\n            IsNewAccount: false,\n            UserID: currentUser?.ID,\n            UserName: currentUser?.UserName\n          }\n        };\n        if (cartType === ServiceStrings.carts.types.quote) {\n          const quoteResult = await factory.purchaseWithQuote(dto as ProcessCurrentQuoteCartToTargetQuotesDto);\n          return quoteResult;\n        }\n        if (!checkoutStepDataState.paymentStepData?.paymentStyle || !checkoutStepDataState.paymentStepData?.payBy) {\n          console.debug(checkoutStepDataState);\n          throw new Error(\"Invalid payment or shipping data. Could not proceed to purchase.\");\n        }\n        const { paymentStyle, ...paymentData } = checkoutStepDataState.paymentStepData;\n        const isFree = paymentStyle === ServiceStrings.checkout.paymentMethods.free;\n        let cartBillingContact = null;\n        if (!isFree) {\n          cartBillingContact\n            = (checkoutStepDataState as ICheckoutStepDataState).billingStepData.cartBillingContact?.Slave\n            ?? (checkoutStepDataState as ICheckoutB2CStepDataState).shippingStepData.cartBillingContact.Slave;\n        }\n        dto = {\n          ...dto,\n          Billing: cartBillingContact,\n          IsSameAsBilling: checkoutStepDataState.shippingStepData.sameAsBilling,\n          ...paymentData.payBy,\n          PaymentStyle: paymentStyle,\n          SpecialInstructions: enteredNoteText,\n          WithCartInfo: {\n            CartSessionID: cart.SessionID,\n            CartTypeName: cartType\n          }\n        };\n\n        if (paymentStyle === ServiceStrings.checkout.paymentMethods.creditCard) {\n          dto.Shipping = checkoutStepDataState.shippingStepData.sameAsBilling\n            ? cartBillingContact\n            : checkoutStepDataState.shippingStepData.cartShippingContact?.Slave;\n        }\n        const processResult = await cvApi.providers.ProcessCurrentCartToTargetOrders(dto);\n\n        if (processResult.data.Succeeded) {\n          if (cefConfig.googleTagManager.enabled) {\n            googleTagManagerService.ga4CheckoutFinalize(cart, processResult.data);\n          }\n          await cartFactory.reloadCart(ServiceStrings.carts.types.cart, true);\n          const [ MasterOrderID, ...SlaveOrderIDs ] = processResult.data.OrderIDs;\n          return { MasterOrderID, SlaveOrderIDs };\n        }\n        throw new Error(processResult.data?.ErrorMessage\n        ?? processResult.data?.ErrorMessages\n          ? processResult.data.ErrorMessages[0]\n          : \"Failed to process cart\");\n      },\n      getPurchaseSteps: (): IPurchaseStepConfig[] => {\n        if (!cefConfig) {\n          console.warn(\"Missing cefConfig in useCheckoutFactory\");\n          return [];\n        }\n        return Object.keys(cefConfig.purchase.sections)\n          .reduce((steps, current) => {\n            const purchaseStepConfig = cefConfig.purchase.sections[current];\n            if (cefConfig.debug) {\n              console.log(\n                \"cefConfig.purchase.sections\\n\",\n                cefConfig.purchase.sections,\n                \"\\n\",\n                \"current\\n\",\n                current,\n                \"\\n\",\n                \"ServiceStrings.checkout.steps[current]\\n\",\n                ServiceStrings.checkout.steps[current],\n                \"\\n\",\n                \"purchaseStepConfig\\n\",\n                purchaseStepConfig\n              );\n            }\n            if (purchaseStepConfig && purchaseStepConfig.show) {\n              steps.push(purchaseStepConfig);\n            }\n            return steps;\n          }, [] as Array<IPurchaseStepConfig>)\n          .sort((a, b): number => a.order - b.order);\n      },\n\n      getPurchaseB2CSteps: (): IPurchaseStepConfig[] => {\n        if (!cefConfig) {\n          console.warn(\"Missing cefConfig in useCheckoutFactory\");\n          return [];\n        }\n        return Object.keys(cefConfig.purchaseB2C.sections)\n          .reduce((steps, current) => {\n            const purchaseStepConfig: IPurchaseStepConfig = cefConfig.purchaseB2C.sections[current];\n            if (cefConfig.debug) {\n              console.log(\n                \"cefConfig.purchaseB2C.sections\\n\",\n                cefConfig.purchase.sections,\n                \"\\n\",\n                \"current\\n\",\n                current,\n                \"\\n\",\n                \"ServiceStrings.checkout.stepsB2C[current]\\n\",\n                ServiceStrings.checkout.stepsB2C[current],\n                \"\\n\",\n                \"purchaseB2CStepConfig\\n\",\n                purchaseStepConfig\n              );\n            }\n            if (purchaseStepConfig && purchaseStepConfig.show) {\n              steps.push(purchaseStepConfig);\n            }\n            return steps;\n          }, [] as Array<IPurchaseStepConfig>)\n          .sort((a, b): number => a.order - b.order);\n      },\n\n      getSubmitQuoteSteps: (): IPurchaseStepConfig[] => {\n        if (!cefConfig?.submitQuote?.sections) {\n          console.warn(\"Missing cefConfig in useCheckoutFactory\");\n          return [];\n        }\n        return Object.keys(cefConfig.submitQuote.sections)\n          .reduce((steps, current) => {\n            const purchaseStepConfig = cefConfig.submitQuote.sections[current];\n            if (cefConfig.debug) {\n              console.log(\n                \"cefConfig.submitQuote.sections\\n\",\n                cefConfig.submitQuote.sections,\n                \"\\n\",\n                \"current\\n\",\n                current,\n                \"\\n\",\n                \"ServiceStrings.checkout.steps[current]\\n\",\n                ServiceStrings.checkout.steps[current],\n                \"\\n\",\n                \"purchaseStepConfig\\n\",\n                purchaseStepConfig\n              );\n            }\n            if (purchaseStepConfig && purchaseStepConfig.show) {\n              steps.push(purchaseStepConfig);\n            }\n            return steps;\n          }, [] as Array<IPurchaseStepConfig>)\n          .sort((a, b): number => a.order - b.order);\n      },\n      purchaseWithQuote: async (purchaseWithQuoteDto: ProcessCurrentQuoteCartToTargetQuotesDto): Promise<{\n        MasterOrderID: number;\n        SlaveOrderIDs: number[];\n      }> => {\n        const result = await cvApi.providers.ProcessCurrentQuoteCartToTargetQuotes(purchaseWithQuoteDto);\n        if (result.data?.Succeeded) {\n          await cartFactory.reloadCart(ServiceStrings.carts.types.quote, true);\n          const [ masterQuoteID, ...subQuoteIDs ] = result.data.QuoteIDs;\n          return {\n            MasterOrderID: masterQuoteID,\n            SlaveOrderIDs: subQuoteIDs\n          };\n        }\n        throw new Error(result.data?.ErrorMessage\n          ?? result.data?.ErrorMessages\n          ? result.data.ErrorMessages[0]\n          : \"Failed to process quote cart\");\n      }\n    };\n    setCheckoutFactory(factory);\n  }, [ cefConfig, currentUser, cartFactory ]);\n  return checkoutFactory;\n};\n\nexport const useCheckoutSteps = (\n  cartType: \"Quote Cart\" | \"Cart\" = \"Cart\",\n  forB2C: boolean = false\n): IPurchaseStepConfig[] | null => {\n  const [ checkoutSteps, setCheckoutSteps ] = useState(null);\n  const checkoutFactory = useCheckoutFactory();\n  const cart = useCart(cartType);\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  useEffect(() => {\n    if (_.isArray(checkoutSteps)\n      || _.isNull(cefConfig)\n      || _.isNull(checkoutFactory)\n      || _.isUndefined(cart)\n      || !_.isArray(cart.SalesItems)) {\n      return;\n    }\n\n    let steps = cartType === ServiceStrings.carts.types.quote\n      ? checkoutFactory.getSubmitQuoteSteps()\n      : forB2C\n        ? checkoutFactory.getPurchaseB2CSteps()\n        : checkoutFactory.getPurchaseSteps();\n    const noItemsGetShipped = cart.SalesItems.every(item => item.ProductNothingToShip);\n\n    if (noItemsGetShipped) {\n      const stepsToRemove = [\n        ServiceStrings.checkout.steps.shipping,\n        ServiceStrings.checkout.steps.splitShipping,\n        ServiceStrings.checkout.steps.shippingRates,\n        ServiceStrings.submitQuote.steps.shipping,\n        ServiceStrings.submitQuote.steps.splitShipping,\n        ServiceStrings.submitQuote.steps.shippingRates,\n        ServiceStrings.checkout.stepsB2C.shipping,\n        ServiceStrings.checkout.stepsB2C.shippingRates\n      ];\n      steps = steps.filter( stepI => !stepsToRemove.includes(stepI.name));\n    }\n    steps = steps.map((stepI, index) => {\n      const continueText = t(steps[index + 1]?.continueTextKey ?? \"\");\n      return {\n        ...stepI,\n        continueText\n      };\n    });\n    if (cefConfig.googleTagManager.enabled) {\n      googleTagManagerService.ga4checkoutOption(cart, \"eec.beginCheckout\");\n    }\n    setCheckoutSteps(steps);\n  }, [ cefConfig, cart, checkoutFactory, checkoutSteps ]);\n  return checkoutSteps;\n};\n","/* eslint-disable require-atomic-updates */\nimport _ from \"lodash\";\nimport { AppliedCartItemDiscountModel, CartModel, CartTotals, RateQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { ICheckoutStepDataState } from \"src/Checkout/_checkoutTypes\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { AnalyzeCurrentCartToTargetCartsDto } from \"src/_api\";\nimport cvApi from \"src/_api/cvApi\";\n\nexport function checkoutReducer(\n    state: ICheckoutStepDataState,\n    action: { type: string; payload?: any }\n): ICheckoutStepDataState {\n  switch (action.type) {\n    case \"methodStepComplete\": {\n      return {\n        ...state,\n        methodStepData: {\n          method: action.payload\n        }\n      };\n    }\n    case \"paymentStepComplete\": {\n      return {\n        ...state,\n        paymentStepData: {\n          paymentStyle: action.payload.paymentStyle,\n          cartBillingContact: action.payload.cartBillingContact,\n          payBy: action.payload.payBy,\n          uploadedFiles: action.payload.uploadedFiles\n        }\n      };\n    }\n    case \"billingStepComplete\": {\n      return {\n        ...state,\n        billingStepData: {\n          cartBillingContact: action.payload.cartBillingContact\n        }\n      };\n    }\n    case \"shippingStepComplete\": {\n      return {\n        ...state,\n        shippingStepData: {\n          cartShippingContact: action.payload.cartShippingContact,\n          sameAsBilling: action.payload.sameAsBilling\n        }\n      };\n    }\n    case \"shippingRatesStepComplete\": {\n      return {\n        ...state,\n        shippingRatesStepData: {\n          complete: true\n        }\n      };\n    }\n    case \"splitShippingStepComplete\": {\n      return {\n        ...state,\n        splitShippingStepData: {\n          complete: true,\n          grouped: action.payload\n        }\n      };\n    }\n    case \"confirmationStepComplete\": {\n      return { ...state };\n    }\n    default: {\n      throw new Error(\"Failed to account for completed step\");\n    }\n  }\n}\n\nexport const getModifiedValue = (startingValue: number, modifier: number = 0, mode: number = 0): number => {\n  switch (mode) {\n    case 1: {\n      // Override Price\n      return modifier;\n    }\n    case 2: {\n      // +/- Amount\n      return startingValue + modifier;\n    }\n    case 3: {\n      // +/- Percent from -100% to positive 100000%\n      return startingValue * ((modifier + 100) / 100);\n    }\n    default: {\n      // No change\n      return startingValue;\n    }\n  }\n};\n\nexport const getTotal = (totals: CartTotals, cart: CartModel): number => totals.SubTotal\n    + getModifiedValue(totals.Fees, cart.SubtotalFeesModifier, cart.SubtotalFeesModifierMode)\n    + getModifiedValue(\n      totals.Shipping,\n      cart.SubtotalShippingModifier,\n      cart.SubtotalShippingModifierMode\n    )\n    + getModifiedValue(\n      totals.Handling,\n      cart.SubtotalHandlingModifier,\n      cart.SubtotalHandlingModifierMode\n    )\n    + getModifiedValue(totals.Tax, cart.SubtotalTaxesModifier, cart.SubtotalTaxesModifierMode)\n    + getModifiedValue(\n      totals.Discounts,\n      cart.SubtotalDiscountsModifier,\n      cart.SubtotalDiscountsModifierMode\n    );\n\n// eslint-disable-next-line arrow-body-style\nexport const getTotalShippingRaw = (carts: CartModel[]): number => {\n  return carts.reduce((curVal, cartI) => curVal + (cartI?.Totals?.Shipping ?? 0), 0);\n};\n\nconst getTotalTaxesRaw = (carts: CartModel[]): number => {\n  return carts.reduce((curVal, cartI) => curVal + (cartI?.Totals?.Tax ?? 0), 0);\n};\n\nexport const getSalesItemsWithCorrectExtendedPrice = (\n  salesItems: SalesItemBaseModel<AppliedCartItemDiscountModel>[]\n): SalesItemBaseModel<AppliedCartItemDiscountModel>[] => {\n  if (!salesItems || !Array.isArray(salesItems)) {\n    console.log(\"Missing sales items to modify extended price of\");\n    return salesItems;\n  }\n  return salesItems.map(item => {\n    const {\n      UnitSoldPrice = 0,\n      UnitCorePrice = 0,\n      UnitSoldPriceModifier,\n      UnitSoldPriceModifierMode,\n      Quantity,\n      QuantityBackOrdered,\n      QuantityPreSold\n    } = item;\n    const soldAt = getModifiedValue(\n      !UnitSoldPrice || UnitSoldPrice === null ? UnitCorePrice : UnitSoldPrice,\n      UnitSoldPriceModifier,\n      UnitSoldPriceModifierMode\n    );\n    const totalQuantity = (Quantity || 0)\n      + (QuantityBackOrdered || 0)\n      + (QuantityPreSold || 0);\n    const newItem = {\n      ...item,\n      TotalQuantity: totalQuantity,\n      ExtendedPrice: soldAt * totalQuantity,\n    };\n    // TODO: newItem.ExtendedPriceInSellingCurrency = () => soldAt\n    // TODO:    * (Quantity + (QuantityBackOrdered || 0) + (QuantityPreSold || 0));\n    return newItem;\n  });\n};\n\nexport const getTotalsForAllCarts = (\n  cart: CartModel,\n  targetedCartsI: CartModel[] = []\n): {\n  cartTotals: CartTotals,\n  cartItemsWithCorrectExtendedPrice: SalesItemBaseModel<AppliedCartItemDiscountModel>[]\n} => {\n  if (!cart?.Totals) {\n    return null;\n  }\n\n  const totals: CartTotals = {\n    ...cart.Totals,\n    Total: 0,\n    SubTotal: 0\n  };\n  const cartItemsWithCorrectExtendedPrice: SalesItemBaseModel<AppliedCartItemDiscountModel>[]\n    = getSalesItemsWithCorrectExtendedPrice(cart.SalesItems);\n  totals.SubTotal = cartItemsWithCorrectExtendedPrice.reduce(\n    (curVal, item) => curVal + item.ExtendedPrice || 0,\n    0\n  );\n  totals.Shipping = 0;\n  totals.Tax = 0;\n  if (targetedCartsI?.length) {\n    totals.Shipping += getTotalShippingRaw(targetedCartsI);\n    totals.Tax += getTotalTaxesRaw(targetedCartsI);\n  }\n  totals.Total = getTotal(totals, cart);\n\n  return {\n    cartTotals: totals,\n    cartItemsWithCorrectExtendedPrice\n  };\n};\n\nfunction fetchTargetedCarts(cartType: string) {\n  const dto: AnalyzeCurrentCartToTargetCartsDto = {\n    WithCartInfo: { CartTypeName: cartType },\n    IsSameAsBilling: false,\n    IsPartialPayment: false,\n    // Clear previous target setups\n    ResetAnalysis: true\n  };\n  let analyzeFn = cvApi.providers.AnalyzeCurrentCartToTargetCarts;\n  if (cartType === ServiceStrings.carts.types.quote) {\n    analyzeFn = cvApi.providers.AnalyzeCurrentQuoteCartToTargetQuoteCarts;\n  }\n  return analyzeFn(dto);\n}\n\nfunction getCartItemsForCarts(\n    carts: CartModel[],\n    cartType: string,\n) {\n  return Promise.all(\n    carts\n      .filter(x => x.ID !== null && x.TypeName !== cartType)\n      .map(x => cvApi.shopping.GetCartItems({\n        Active: true,\n        AsListing: true,\n        MasterID: x.ID\n      }))\n  );\n}\n\nfunction getCartShippingContactForCarts(carts: CartModel[]) {\n  return Promise.all(\n    carts.map(x => cvApi.shopping.CurrentCartGetShippingContact({\n      TypeName: x.TypeName\n    }))\n  );\n}\n\nfunction getShippingRateQuotesForCarts(carts: CartModel[]) {\n  return Promise.all(\n    carts\n      .filter(\n        cart => _.every(cart.SalesItems, salesItem => _.every(salesItem.Targets, target => !target.NothingToShip))\n      )\n      .map(cart => cvApi.shopping.GetCurrentCartShippingRateQuotes({\n        TypeName: cart.TypeName,\n        Expedited: false\n      }))\n  );\n}\n\nexport function itemsExist(items: unknown): boolean {\n  return Array.isArray(items) && items?.length > 0;\n}\n\nfunction getCartsSortedByNothingToShip(carts: CartModel[]): CartModel[] {\n  return carts.sort((cartOne, cartTwo) => {\n    if (cartOne.NothingToShip && cartTwo.NothingToShip) {\n      return 0;\n    }\n    if (cartOne.NothingToShip) {\n      return -1;\n    }\n    return 1;\n  });\n}\n\nfunction handleRateQuotesDiscounts(\n    rateQuotes: RateQuoteModel[],\n    masterCart: CartModel,\n) {\n  if (!rateQuotes) {\n    return rateQuotes;\n  }\n  for (let j = 0; j < rateQuotes.length; j++) {\n    const curRateQuote = rateQuotes[j];\n    // @ts-ignore\n    curRateQuote.original = curRateQuote.Rate;\n    // @ts-ignore\n    curRateQuote.discounted = curRateQuote.Rate;\n    const shippingDiscounts = itemsExist(masterCart.Discounts)\n      ? masterCart.Discounts.filter(discount => discount.DiscountTypeID === 2)\n      : [];\n    if (!itemsExist(shippingDiscounts)) {\n      continue;\n    }\n    let discounted = curRateQuote.Rate;\n    shippingDiscounts\n      .sort(\n        (discountOne, discountTwo) => discountOne.DiscountPriority - discountTwo.DiscountPriority\n      )\n      .forEach(discount => {\n        if (discount.DiscountValueType === 0) {\n          // Percent\n          discounted *= 1 - discount.DiscountValue;\n        } else if (discount.DiscountValueType === 1) {\n          // Dollar\n          discounted -= discount.DiscountValue;\n        }\n      });\n    // @ts-ignore\n    curRateQuote.discounted = discounted;\n  }\n  return rateQuotes;\n}\n\nexport async function getTargetedCarts(masterCart: CartModel): Promise<CartModel[]> {\n  const cartType = masterCart.TypeName;\n  const targetedCartsRes = await fetchTargetedCarts(cartType);\n  let targetedCartsCopy: CartModel[] = [];\n  if (!targetedCartsRes.data.ActionSucceeded) {\n    throw new Error(targetedCartsRes.data.Messages[0]);\n  }\n  targetedCartsCopy = targetedCartsRes.data.Result.filter(x => x.ID !== null && x.TypeName !== cartType);\n  const cartItemsForCartsRes = await getCartItemsForCarts(targetedCartsCopy, cartType);\n  cartItemsForCartsRes.forEach(pagedResult => {\n    if (!pagedResult?.data?.Results || !pagedResult?.data?.TotalCount) {\n      console.warn(\"No results on one of the paged results that should have had children!\");\n      return;\n    }\n    for (let i = 0; i < targetedCartsCopy.length; i++) {\n      const cart = targetedCartsCopy[i];\n      if (cart.ID === pagedResult.data.Results[0].MasterID) {\n        cart.SalesItems = pagedResult.data.Results;\n      }\n    }\n  });\n  const resArr2 = await getCartShippingContactForCarts(targetedCartsCopy);\n  for (let i = 0; i < resArr2.length; i++) {\n    if (!resArr2[i].data.ActionSucceeded) {\n      targetedCartsCopy[i].ShippingContactID = null;\n      targetedCartsCopy[i].ShippingContact = null;\n      continue;\n    }\n    targetedCartsCopy[i].ShippingContact = resArr2[i].data.Result;\n    targetedCartsCopy[i].ShippingContactID = resArr2[i].data.Result.ID;\n  }\n  const resArr3 = await getShippingRateQuotesForCarts(targetedCartsCopy);\n  const shippableCarts = targetedCartsCopy.filter(cart => !cart.NothingToShip);\n  for (let i = 0; i < resArr3.length; i++) {\n    const response = resArr3[i];\n    if (!response.data || !response.data.ActionSucceeded) {\n      throw new Error(response?.data?.Messages\n        ? response?.data?.Messages[0]\n        : \"Failed to get shipping rate quotes\");\n    }\n    let rateQuotes = response.data.Result;\n    if (itemsExist(rateQuotes)) {\n      rateQuotes = handleRateQuotesDiscounts(rateQuotes, masterCart);\n      const selected = rateQuotes.find(q => q.Selected);\n      if (selected) {\n        shippableCarts[i].Totals.Shipping = selected.Rate;\n      }\n      shippableCarts[i].RateQuotes = rateQuotes;\n    }\n  }\n  targetedCartsCopy = getCartsSortedByNothingToShip(targetedCartsCopy);\n  return targetedCartsCopy;\n}\n","import React, { Dispatch, SetStateAction, useContext, useEffect, useReducer, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { AccountContactModel, CartModel, CartTotals } from \"src/_api/cvApi._DtoClasses\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { setCartByType, useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCheckoutFactory, useCheckoutSteps } from \"src/_shared/customHooks/useCheckoutFactory\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { IQuoteIDs } from \"src/Checkout/_checkoutTypes\";\nimport { checkoutReducer, getTargetedCarts, getTotalsForAllCarts } from \"./checkoutFunctions\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { IErrorMessageArg, IViewState, IWaitMessageArg } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { trackEvent } from \"src/Klaviyo/klaviyo_helpers\";\n\ninterface ICheckoutContext {\n  cartBillingContact?: AccountContactModel;\n  checkoutComplete: boolean;\n  enteredNoteText: string;\n  loadTargetedCarts: () => Promise<void>;\n  setTargetedCarts: Dispatch<SetStateAction<CartModel[]>>;\n  targetedCarts?: CartModel[];\n  gatheredTotals?: CartTotals;\n  step: number;\n  finishRunning: (\n    hasError: boolean,\n    errorMessage?: IErrorMessageArg,\n    errorMessages?: string[],\n    useModal?: boolean,\n  ) => void;\n  setRunning: (waitMessage: IWaitMessageArg) => void;\n  setEnteredNoteText: React.Dispatch<React.SetStateAction<string>>;\n  viewState: IViewState;\n  payBy: any;\n  proceedOrPurchase: () => void;\n  dispatch: React.Dispatch<{\n    type: string;\n    payload?: any;\n  }>;\n  method: string;\n  editStep?: (stepToGoTo: number) => void;\n  completedIDs: IQuoteIDs;\n}\n\ninterface ICheckoutContextProviderProps {\n  cartType: \"Cart\" | \"Quote Cart\";\n}\n\nexport const CheckoutContext = React.createContext<ICheckoutContext>({\n  cartBillingContact: null,\n  checkoutComplete: false,\n  enteredNoteText: \"\",\n  loadTargetedCarts: () => Promise.resolve(),\n  setTargetedCarts: () => null,\n  targetedCarts: [],\n  gatheredTotals: {\n    Total: 0,\n  },\n  step: 1,\n  finishRunning: (...args) => null,\n  setRunning: (waitMessage: IWaitMessageArg) => null,\n  setEnteredNoteText: () => null,\n  viewState: {\n    running: false,\n    hasError: false,\n    errorMessage: null,\n  },\n  proceedOrPurchase: () => null,\n  dispatch: () => null,\n  method: \"\",\n  completedIDs: null,\n  payBy: null,\n});\n\nexport const useCheckoutContext = (): ICheckoutContext => {\n  const context = useContext(CheckoutContext);\n  return context;\n};\n\nexport const CheckoutContextProvider = (props: React.PropsWithChildren<ICheckoutContextProviderProps>): JSX.Element => {\n  const [ targetedCarts, setTargetedCarts ] = useState(null);\n  const [ gatheredTotals, setGatheredTotals ] = useState<CartTotals>(null);\n  const [ checkoutComplete, setCheckoutComplete ] = useState<boolean>(false);\n  const [ step, setStep ] = useState<number>(1);\n  const [ completedOrderIDs, setCompletedOrderIDs ] = useState<IQuoteIDs>(null);\n  const [ completedQuoteIDs, setCompletedQuoteIDs ] = useState<IQuoteIDs>(null);\n  const [ enteredNoteText, setEnteredNoteText ] = useState<string>(\"\");\n\n  const reduxDispatch = useDispatch();\n  const cart = useCart(props.cartType);\n  const currentUser = useCurrentUser();\n  const checkoutFactory = useCheckoutFactory();\n  const allSteps = useCheckoutSteps(props.cartType as \"Cart\");\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const [ state, dispatch ] = useReducer(checkoutReducer, {\n    billingStepData: { cartBillingContact: null },\n    methodStepData: { method: null },\n    paymentStepData: {\n      paymentStyle: null,\n      payBy: null\n    },\n    shippingRatesStepData: { complete: false },\n    shippingStepData: {\n      sameAsBilling: false,\n      cartShippingContact: null\n    },\n    splitShippingStepData: {\n      complete: false,\n      grouped: null\n    }\n  });\n\n  const editStep = (stepToGoTo: number) => {\n    setStep(stepToGoTo);\n  };\n\n  function updateTotalsOfAllCarts(targetedCartsI: CartModel[]): void {\n    if (!cart?.Totals || cart.Loading) {\n      return;\n    }\n    const { cartTotals, cartItemsWithCorrectExtendedPrice } = getTotalsForAllCarts(\n      cart,\n      targetedCartsI\n    );\n\n    if (cart.SalesItems.every(\n      (item, index) => item.ExtendedPrice === cartItemsWithCorrectExtendedPrice[index].ExtendedPrice\n    )) {\n      setGatheredTotals(cartTotals);\n    } else {\n      reduxDispatch(setCartByType({\n        type: props.cartType,\n        cart: { ...cart, SalesItems: cartItemsWithCorrectExtendedPrice }\n      }));\n    }\n  }\n\n  const proceedOrPurchase = (): void => {\n    if (!allSteps || !checkoutFactory) {\n      return;\n    }\n    if (step !== allSteps.length - 1) {\n      setStep(prevStep => prevStep + 1);\n      return;\n    }\n    setRunning();\n    checkoutFactory.confirmAndPurchase(\n      cart,\n      props.cartType,\n      state,\n      enteredNoteText\n    )\n      .then(res => {\n        if (props.cartType === ServiceStrings.carts.types.quote) {\n          setCompletedQuoteIDs({\n            masterID: res.MasterOrderID,\n            slaveIDs: res.SlaveOrderIDs\n          });\n        } else {\n          setCompletedOrderIDs({\n            masterID: res.MasterOrderID,\n            slaveIDs: res.SlaveOrderIDs\n          });\n        }\n\n        trackEvent(\"Confirm Order and Purchase\",\n          {\n            \"Order ID\": res.MasterOrderID,\n            \"Total Value\": cart.Totals.Total,\n            \"Items\": cart.SalesItems.map((i) => ({\n              \"Product ID\": i.ProductID,\n              \"Quantity\": i.Quantity,\n              \"ItemPrice\": i.UnitSoldPrice,\n            })),\n            // \"Shipping\": ?,\n         });\n\n        setStep(prevStep => prevStep + 1);\n        setCheckoutComplete(true);\n        finishRunning();\n      })\n      .catch(err => {\n        setCheckoutComplete(true);\n        finishRunning(true, typeof err === \"string\"\n          ? err\n          : err.message\n        ?? \"Failed to process current cart to target orders\");\n      });\n  };\n\n  useEffect(() => {\n    const shippingRatesStepIndex = allSteps?.findIndex(\n      stepI => stepI.name === ServiceStrings.checkout.steps.shippingRates\n        || stepI.name === ServiceStrings.submitQuote.steps.shippingRates\n    );\n    if (shippingRatesStepIndex > -1 && step < shippingRatesStepIndex + 1) {\n      // We went back to a step before shippingRates, remove shipping amount\n      updateTotalsOfAllCarts(null);\n      return;\n    }\n    updateTotalsOfAllCarts(targetedCarts);\n  }, [ cart, props.cartType, targetedCarts, step ]);\n\n  useEffect(() => {\n    if (!currentUser.ID && state.methodStepData.method !== \"guest\"\n      || currentUser.ID > 0 && state.methodStepData.method === \"guest\") {\n      setStep(1);\n    }\n  }, [ currentUser ]);\n\n  useEffect(() => {\n    proceedOrPurchase();\n  }, [ state ]);\n\n  const loadTargetedCarts = async (): Promise<void> => {\n    const fetchedTargetedCarts = await getTargetedCarts(cart);\n    setTargetedCarts(fetchedTargetedCarts);\n  };\n\n  return <CheckoutContext.Provider\n    value={{\n      cartBillingContact: state.billingStepData?.cartBillingContact,\n      checkoutComplete,\n      dispatch,\n      editStep,\n      enteredNoteText,\n      finishRunning,\n      gatheredTotals,\n      loadTargetedCarts,\n      setRunning,\n      setEnteredNoteText,\n      setTargetedCarts,\n      step,\n      targetedCarts,\n      viewState,\n      proceedOrPurchase,\n      method: state.methodStepData?.method,\n      completedIDs: completedOrderIDs ?? completedQuoteIDs,\n      payBy: state.paymentStepData?.payBy\n    }}>\n    {props.children}\n  </CheckoutContext.Provider>;\n};\n","/* eslint-disable max-len */\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Anchor, Button, Card, Col, Form, InputGroup, ListGroup, Row, Table } from \"react-bootstrap\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel, GetPackSizesVariantDTO } from \"src/_api/cvApi._DtoClasses\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { LoginForPricing } from \"src/Cart/views/LoginForPricing\";\nimport { Modal } from \"src/_shared/modals\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { CartValidator } from \"src/Cart/views/CartValidator\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { DateTime } from \"luxon\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport { SalesItemQuantityLine } from \"src/_shared/salesGroup/SalesItemQuantityLine\";\nimport { NotesWidget } from \"src/Cart/views/NotesWidget\";\nimport { useCheckoutContext } from \"../../Checkout/CheckoutContext\";\nimport { TotalsWidget } from \"./TotalsWidget\";\nimport { useHistory } from \"react-router-dom\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\n\ninterface IMiniCartProps {\n  cartType: \"Cart\" | \"Quote Cart\";\n}\n\nexport const MiniCart = (props: IMiniCartProps): JSX.Element => {\n  const [ quantityOfItemsToShow, setQuantityOfItemsToShow ] = useState<number>(4);\n  const [ discountCode, setDiscountCode ] = useState<string>(\"\");\n  const [ showDiscountResponseModal, setShowDiscountResponseModal ] = useState<boolean>(false);\n  const [ discountResponseModalMessage, setDiscountResponseModalMessage ] = useState<string>(null);\n  const [ packSizeResults, setPackSizeResults ] = useState<{ [id: number]: GetPackSizesVariantDTO[] }>(null);\n  const [ products, setProducts ] = useState<ProductModel[]>(null);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning } = useViewState();\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n  const cartToUse = useCart(props.cartType);\n  const cartFactory = useCartFactory();\n  const checkoutContext = useCheckoutContext();\n  const history = useHistory();\n  const productFactory = useProductFactory();\n\n  useEffect(() => {\n    if (!productFactory) {\n      return;\n    }\n    if (productIdsToUse) {\n      getProducts(productIdsToUse);\n      getPackSizeOptions(productIdsToUse);\n    }\n  }, [ cartToUse, productFactory ]);\n\n  const productIdsToUse: number[] = cartToUse?.SalesItems?.map(item => item.ProductID);\n\n  async function getProducts(productIDs: number[]) {\n    const results = await Promise.all(productIDs?.map(id => productFactory.getProductByID(id)));\n    setProducts(results);\n  }\n\n  async function getPackSizeOptions(productIDs: number[]) {\n    try {\n      setRunning();\n      const results = await productFactory.getPackSizesForPurchaseOptions(productIDs);\n      setPackSizeResults(results);\n      finishRunning();\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  }\n\n  const getPackResultsToUse = useCallback(\n    (itemProductID: number): GetPackSizesVariantDTO[] => {\n      if (!packSizeResults || !packSizeResults[itemProductID] || !products) {\n        return undefined;\n      }\n      const productToUse = products.find((product: { ID: number }) => product.ID === itemProductID);\n      let packResultsToUse = packSizeResults && packSizeResults[itemProductID];\n      const currentItemIsASubscriptionOption\n          = productToUse?.SerializableAttributes?.PurchaseOption?.Value === \"Subscription\";\n      if (currentItemIsASubscriptionOption) {\n        packResultsToUse = packResultsToUse?.filter(variant => variant.PurchaseOptions.some(\n          option => option.SerializableAttributes?.PurchaseOption?.Value === \"Subscription\"\n        ));\n      }\n      return packResultsToUse;\n    },\n    [ packSizeResults, cartToUse, products ]\n  );\n\n  if (!cefConfig?.featureSet?.carts?.miniCart?.enabled) {\n    if (cefConfig.debug) {\n      console.log(\"Attempted to render MiniCart when it is not enabled\");\n    }\n    return null;\n  }\n\n  if (checkoutContext?.checkoutComplete) {\n    return null;\n  }\n\n  if (!cartToUse?.SalesItems?.length) {\n    return (\n      <Card className=\"mb-3\">\n        <Card.Header className=\"p-4\">\n          <h4>{t(\"ui.storefront.checkout.cartEmpty\")}</h4>\n        </Card.Header>\n      </Card>\n    );\n  }\n\n  const getAddCartDiscountErrMessage = (messages: string[]): string => {\n    if (messages?.length > 1) {\n      const cleanMsgs: string[] = messages.map(m => m.replace(\"ERROR! \", \"\"));\n      for (let i = 0; i < cleanMsgs.length; i++) {\n        const curMsg = cleanMsgs[i];\n        const isDate = Boolean(Date.parse(curMsg));\n        if (isDate) {\n          cleanMsgs[i] = DateTime.fromISO(curMsg).toFormat(\"ff\");\n        }\n      }\n      return cleanMsgs.join(\" \");\n    } else if (messages?.length === 1) {\n      return messages[0].replace(\"ERROR! \", \"\");\n    }\n    return t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\");\n  };\n\n  const addCartDiscount = () => {\n    if (!discountCode) {\n      return;\n    }\n    setRunning();\n    cartFactory.addDiscount(ServiceStrings.carts.types.cart, discountCode)\n      .then(res => {\n        if (!res?.ActionSucceeded) {\n          const properMsg = getAddCartDiscountErrMessage(res?.Messages);\n          setDiscountResponseModalMessage(properMsg);\n          throw t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\");\n        }\n        setDiscountCode(\"\");\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err, null, true);\n      });\n  };\n\n  return (\n    <div className=\"mb-3\">\n      <Modal\n        show={showDiscountResponseModal}\n        onCancel={() => {\n          setShowDiscountResponseModal(false);\n          setDiscountResponseModalMessage(null);\n        }}\n        size=\"md\"\n        modalBodyClasses=\"p-0\">\n        <div className=\"p-3\">\n          {discountResponseModalMessage ?? t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\")}\n        </div>\n        <div className=\"modal-footer\">\n          <Button\n            variant=\"primary\"\n            onClick={() => {\n              setShowDiscountResponseModal(false);\n              setDiscountResponseModalMessage(null);\n            }}>\n            {t(\"ui.storefront.common.OK\")}\n          </Button>\n        </div>\n      </Modal>\n      <Card.Header className=\"bg-transparent pt-4\">\n        <Row>\n          <Col className=\"d-flex align-items-center justify-content-between\">\n            <h4\n              className=\"my-0 text-nowrap fs-5\"\n              id={`lbl${props.cartType === ServiceStrings.carts.types.quote ? \"Quote\" : \"Order\"}Summary`}>\n              {t(\n                props.cartType === ServiceStrings.carts.types.cart\n                  ? \"ui.storefront.common.OrderSummary\"\n                  : \"ui.storefront.common.QuoteSummary\"\n              )}\n            </h4>\n            <Button variant=\"link\"\n              className=\"\"\n              onClick={() => {\n                history.push(corsLink(cefConfig, \"/Cart\", \"cart\"));\n                window.location.reload();\n              }}>Edit\n            </Button>\n          </Col>\n        </Row>\n      </Card.Header>\n      <Card.Body className=\"pt-2 bg-brand-light rounded-5\" style={{ paddingBottom: \"0.6rem\" }}>\n        {/* <span className=\"card-subtitle\">\n          {t(\n            props.cartType === ServiceStrings.carts.types.cart\n              ? \"ui.storefront.common.OrderSummary\"\n              : \"ui.storefront.common.QuoteSummary\"\n          )}\n        </span> */}\n      </Card.Body>\n      <ListGroup>\n        {cartToUse.SalesItems.slice(0, quantityOfItemsToShow).map(\n          (salesItem: SalesItemBaseModel<AppliedCartItemDiscountModel>, itemIndex: number) => {\n            const {\n              ID,\n              ProductName,\n              UnitSoldPrice,\n              UnitCorePrice,\n              Quantity,\n              QuantityBackOrdered,\n              QuantityPreSold,\n              ExtendedPrice,\n              Discounts,\n              ProductPrimaryImage\n            } = salesItem;\n            const totalQuantity = (Quantity ?? 0) + (QuantityBackOrdered ?? 0) + (QuantityPreSold ?? 0);\n            const discountTotal = Discounts\n              ? Discounts.reduce((curVal, accu) => curVal + accu.DiscountTotal, 0)\n              : 0;\n            const productToUse = products && products.find((product: { ID: number }) => product.ID === salesItem.ProductID);\n            const packResultsToUse = getPackResultsToUse(salesItem.ProductID);\n            const packLevelVariantOfCurrentItem = packResultsToUse?.find(variant => {\n              return (\n                variant?.SerializableAttributes?.Dosage?.Value\n                  === productToUse?.SerializableAttributes?.Dosage?.Value\n                // eslint-disable-next-line max-len\n                && variant?.SerializableAttributes?.Count?.Value === productToUse?.SerializableAttributes?.Count?.Value\n              );\n            });\n            const packQuantity = packLevelVariantOfCurrentItem?.SerializableAttributes?.VariantSelectDropdownName?.Value;\n            const primeOrMojoQuantity = salesItem?.ProductName?.includes(\"Prime\")\n            || salesItem?.ProductName?.includes(\"Mojo\")\n              ? salesItem?.ProductName?.includes(\"Initial\")\n                ? \"60 Day Supply\"\n                : salesItem?.ProductName.includes(\"Follow-Up\")\n                  ? \"30 Day Supply\"\n                  : \"\" : \"\";\n\n            return (\n              <ListGroup.Item key={ID} className=\"p-0 border-0 rounded-4\">\n                <Row className=\"gx-0\">\n                  <Col xs={3} className=\"d-none d-xl-flex xl-ps-2 xl-py-2 tk-py-2 fk-py-2\">\n                    <div id={`miniCartProductImageThumbnail${itemIndex}`} className=\"card-img\">\n                      <Anchor\n                        href={corsLink(cefConfig, `/${salesItem.ProductSeoUrl}`, \"productDetail\")}\n                        id={`cartProductImageThumbnail${itemIndex}`}\n                        className=\"product-image d-flex justify-content-center\">\n                        <ImageWithFallback\n                          className=\"img-fluid\"\n                          alt={ProductName}\n                          // eslint-disable-next-line camelcase\n                          src={ProductPrimaryImage}\n                          imageResizerParamsBody={{\n                            maxwidth: 80,\n                            maxheight: 80,\n                            scale: \"both\",\n                            mode: \"pad\"\n                          }}\n                        />\n                      </Anchor>\n                    </div>\n                  </Col>\n                  <Col className=\"py-2 ps-3 xl-ps-2 tk-ps-2 fk-ps-3 pe-3 d-flex flex-column\">\n                    <span className=\"cart-item-label text-center\"\n                      data-sid={`miniCartProductName_${itemIndex}`}\n                      id={`miniCartProductName_${itemIndex}`}>\n                      <ProductCardNameWidget\n                        productName={ProductName}\n                        productSeoUrl={salesItem.ProductSeoUrl}\n                        className=\"text-black fs-6\"\n                      />\n                    </span>\n                    {(!cefConfig?.loginForPricing?.enabled || currentUser) && (\n                      <Row className=\"gx-0 flex-grow-1 align-items-center pt-2\">\n                        <Col xs={6}>\n                          <div\n                            className=\"text-center small\"\n                            id={`MiniCartProductQuantityText_${itemIndex}`}>\n                            {t(\"ui.storefront.common.Quantity\")}\n                          </div>\n                          <div className=\"text-center\">\n                            <SalesItemQuantityLine\n                              salesItem={salesItem}\n                              packQuantity={packQuantity}\n                              primeOrMojoQuantity={primeOrMojoQuantity}/>\n                          </div>\n                          {QuantityPreSold > 0\n                            && <Table className=\"mt-2\">\n                              <tbody>\n                                <tr>\n                                  <td>{t(\"ui.storefront.common.PreSales\")}</td>\n                                  <td className=\"text-muted\">{QuantityPreSold}</td>\n                                </tr>\n                              </tbody>\n                            </Table>\n                          }\n                        </Col>\n                        <Col xs={6}>\n                          <div className=\"text-center small\">\n                            Price\n                          </div>\n                          <div\n                            id={`cartProductSubtotalCore_${itemIndex}`}\n                            data-sid={`cartProductSubtotalCore_${itemIndex}`}\n                            className={`d-block form-control-static font-weight-normal text-muted py-0 text-center ${\n                              (UnitCorePrice || 0) !== UnitSoldPrice && UnitSoldPrice > 0\n                              || discountTotal < 0\n                                ? \"d-none\"\n                                : \"\"\n                            }`}>\n                            {currencyFormatter.format((UnitCorePrice || 0) * totalQuantity)}\n                            {salesItem.ProductRepeatTypeAbbreviation && `/${salesItem.ProductRepeatTypeAbbreviation}`}\n                          </div>\n                          {(UnitCorePrice || 0) !== UnitSoldPrice && UnitSoldPrice > 0\n                            && <div\n                              className={`d-block form-control-static font-weight-normal py-0 text-center ${\n                                discountTotal < 0 ? \"strike-through text-disabled\" : \"\"\n                              }`}\n                              id={`cartProductSubtotal_${itemIndex}`}>\n                              {currencyFormatter.format(ExtendedPrice)}\n                              {salesItem.ProductRepeatTypeAbbreviation && `/${salesItem.ProductRepeatTypeAbbreviation}`}\n                            </div>\n                          }\n                          {discountTotal < 0\n                            && <div\n                              className=\"d-block form-control-static font-weight-normal text-success py-0 text-center\"\n                              id={`cartProductSubtotalWithDiscounts${itemIndex}`}>\n                              {currencyFormatter.format(ExtendedPrice + discountTotal)}\n                            </div>\n                          }\n                        </Col>\n                      </Row>)\n                    }\n                    {cefConfig?.loginForPricing?.enabled && !currentUser\n                      && <LoginForPricing />\n                    }\n                  </Col>\n                </Row>\n              </ListGroup.Item>\n            );\n          }\n        )}\n        {cartToUse.SalesItems.length > 4 && quantityOfItemsToShow < cartToUse.SalesItems.length\n          && <ListGroup.Item className=\"p-1\">\n            <Button\n              variant=\"secondary\"\n              className=\"w-100\"\n              title={t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\n              aria-label={t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\n              onClick={() => setQuantityOfItemsToShow(quantityOfItemsToShow + 4)}>\n              {t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\n            </Button>\n          </ListGroup.Item>\n        }\n        {cartToUse.SalesItems.length > 4 && quantityOfItemsToShow > 4\n          && <ListGroup.Item ng-if=\"cvmcCtrl.showShowLessButton\" className=\"p-1\">\n            <Button\n              variant=\"secondary\"\n              className=\"w-100\"\n              title={t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\n              aria-label={t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\n              onClick={() => setQuantityOfItemsToShow(Math.max(4, quantityOfItemsToShow - 4))}>\n              {t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\n            </Button>\n          </ListGroup.Item>\n        }\n      </ListGroup>\n      <Card.Body className=\"pt-2 bg-brand-light\" style={{ paddingBottom: \"0.6rem\" }}>\n        <span\n          className=\"card-subtitle\"\n          id=\"MiniCartTotalsText\">\n          {t(\"ui.storefront.cart.widgets.totalsWidget.Totals\")}\n        </span>\n      </Card.Body>\n      {checkoutContext?.gatheredTotals && (\n        <Card.Body className=\"p-0\">\n          <TotalsWidget\n            subscriptionIsChecked={cartToUse?.SalesItems[0]?.ProductTypeKey === \"SUBSCRIPTION\"}\n            corePrice={cartToUse?.SalesItems[0]?.UnitCorePrice}\n            totals={checkoutContext.gatheredTotals}\n            cartType={props.cartType}\n            tableClasses=\"w-100 mb-0\"\n            padAlign={true}\n          />\n        </Card.Body>\n      )}\n      {cefConfig?.featureSet?.discounts?.enabled && props.cartType === ServiceStrings.carts.types.cart && (\n        <Card.Footer className=\"p-3\">\n          <Row>\n            {cefConfig.featureSet.discounts.enabled && (\n              <Col xs={12} className=\"cef-checkout\">\n                <h4 className=\"h6 mt-3 fw-semibold\" id=\"MiniCartDoYouHaveAnyDiscountsText\">\n                  Do you have a coupon code?\n                </h4>\n                <InputGroup className=\"mb-1 coupon-code-container\">\n                  <Form.Control\n                    type=\"text\"\n                    id=\"txtCoupon\"\n                    className=\"coupon-input\"\n                    placeholder={t(\"ui.storefront.cart.enterCouponCode\")}\n                    required={true}\n                    onKeyDown={e => {\n                      if (e.key === \"Enter\") {\n                        addCartDiscount();\n                        e.preventDefault();\n                      }\n                    }}\n                    onChange={e => setDiscountCode(e.target.value)}\n                    value={discountCode}\n                  />\n                  <div className=\"input-group-append input-group-btn ps-2\">\n                    <Button\n                      className=\"coupon-btn\"\n                      // variant=\"outline-black\"\n                      id=\"btnApplyDiscountToCart\"\n                      title={t(\"ui.storefront.cart.Apply\")}\n                      aria-label={t(\"ui.storefront.cart.Apply\")}\n                      onClick={() => addCartDiscount()}>\n                      {t(\"ui.storefront.cart.Apply\")}\n                    </Button>\n                  </div>\n                </InputGroup>\n              </Col>)\n            }\n            <Col xs={12}>\n              <CartValidator type={props.cartType} />\n            </Col>\n          </Row>\n          {cefConfig?.featureSet.checkoutNotes?.enabled && (\n            <Row>\n              <Col xs={12} className=\"cef-checkout\">\n                <NotesWidget\n                  parentRunning={checkoutContext?.viewState.running}\n                  enteredNoteText={checkoutContext?.enteredNoteText}\n                  setEnteredNoteText={checkoutContext?.setEnteredNoteText}\n                />\n              </Col>\n            </Row>\n          )}\n        </Card.Footer>)\n      }\n    </div>\n  );\n};\n","/* eslint-disable complexity */\n/* eslint-disable max-len */\n/**\n * eslint-disable complexity\n *\n * @format\n */\n\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport {\n  FormState,\n  useForm,\n  UseFormGetValues,\n  UseFormRegister,\n  UseFormReset,\n  UseFormSetValue,\n  UseFormTrigger,\n  UseFormWatch\n} from \"react-hook-form\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { faBriefcase, faCity, faRoad } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-common-types\";\nimport _ from \"lodash\";\nimport { SelectFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCountries, useRegions } from \"src/_redux/slices/geographySlice\";\n\nfunction makeKey<K extends string, T extends string, IS extends string>(key: K, type: T, idSuffix: IS) {\n  return `${key + type}_${idSuffix}` as `${K}${T}_${IS}`;\n}\n\ninterface INewAddressFormProps {\n  type: \"billing\" | \"shipping\";\n  idSuffix?: string;\n  accountContact?: AccountContactModel;\n  onConfirm?: (newAddressFormData: AccountContactModel) => void;\n  onCancel?: Function;\n  showCancel?: boolean;\n  submitBtnKey?: string;\n  IDOfForcedCountry?: number;\n  parentUseFormOverrides?: {\n    register: UseFormRegister<any>;\n    watch: UseFormWatch<any>;\n    getValues: UseFormGetValues<any>;\n    setValue: UseFormSetValue<any>;\n    formState: FormState<any>;\n    trigger: UseFormTrigger<any>;\n    reset: UseFormReset<any>;\n  };\n  hiddenFields?: {\n    customKey?: boolean;\n    email?: boolean;\n    phone?: boolean;\n    fax?: boolean;\n    company?: boolean;\n    // country should only be hidden in IDOfForcedCountry !== null\n    country?: boolean;\n  };\n  addressIsOptional?: boolean;\n  looseColumns?: boolean;\n  forceSingleStreet?: boolean;\n  isShippingAddress?: boolean;\n}\n\nexport const NewAddressForm = (props: INewAddressFormProps): JSX.Element => {\n  const {\n    type,\n    idSuffix,\n    accountContact,\n    onConfirm,\n    onCancel,\n    showCancel,\n    submitBtnKey,\n    parentUseFormOverrides,\n    hiddenFields,\n    addressIsOptional,\n    looseColumns,\n    isShippingAddress,\n  } = props;\n\n  console.log(accountContact)\n\n  const [phoneFieldsAmount, setPhoneFieldsAmount] = useState<number>(\n    accountContact?.Slave?.Phone3 ? 3 : accountContact?.Slave?.Phone2 ? 2 : 1\n  );\n  const [ streetFieldsAmount, setStreetFieldsAmount ] = useState<number>(\n    accountContact?.Slave?.Address?.Street3 ? 3 : 2\n  );\n\n  const { t } = useTranslation();\n  const currentUser = useCurrentUser();\n  const countries = useCountries();\n  const regions = useRegions();\n  const typePascalCased = type ? type[0].toUpperCase() + type.substr(1) : \"\";\n  // makeKey is used to generate dynamic field IDs\n  // so more than one NewAddressForm can be on the page at the same time\n  const customKeyKey = makeKey(\"txtKeyRegistrationAddressBook\", typePascalCased, idSuffix);\n  const firstNameKey = makeKey(\"txtFirstNameRegistrationAddressBook\", typePascalCased, idSuffix);\n  const lastNameKey = makeKey(\"txtLastNameRegistrationAddressBook\", typePascalCased, idSuffix);\n  const email1Key = makeKey(\"emEmail1RegistrationAddressBook\", typePascalCased, idSuffix);\n  const companyKey = makeKey(\"txtCompanyRegistrationAddressBook\", typePascalCased, idSuffix);\n  const countryIdKey = makeKey(\"ddlCountryIDRegistrationAddressBook\", typePascalCased, idSuffix);\n  const phone1Key = makeKey(\"telPhone1RegistrationAddressBook\", typePascalCased, idSuffix);\n  const phone2Key = makeKey(\"telPhone2RegistrationAddressBook\", typePascalCased, idSuffix);\n  const phone3Key = makeKey(\"telPhone3RegistrationAddressBook\", typePascalCased, idSuffix);\n  const street1Key = makeKey(\"txtStreet1RegistrationAddressBook\", typePascalCased, idSuffix);\n  const street2Key = makeKey(\"txtStreet2RegistrationAddressBook\", typePascalCased, idSuffix);\n  const street3Key = makeKey(\"txtStreet3RegistrationAddressBook\", typePascalCased, idSuffix);\n  const fax1Key = makeKey(\"telFax1RegistrationAddressBook\", typePascalCased, idSuffix);\n  const cityKey = makeKey(\"txtCityRegistrationAddressBook\", typePascalCased, idSuffix);\n  const regionIdKey = makeKey(\"ddlRegionIDRegistrationAddressBook\", typePascalCased, idSuffix);\n  const zipKey = makeKey(\"txtZipRegistrationAddressBook\", typePascalCased, idSuffix);\n\n  const defaultValues = {\n    [cityKey]: accountContact?.Slave.Address?.City ?? \"\",\n    [companyKey]: accountContact?.Slave.Address?.Company ?? \"\",\n    [countryIdKey]: accountContact?.Slave.Address?.Country?.Name ?? currentUser.StateOfResidence.CountryName ?? \"\",\n    [customKeyKey]: '',\n    [email1Key]: accountContact?.Slave.Email1 ?? currentUser.ContactEmail ?? \"\",\n    [fax1Key]: accountContact?.Slave.Fax1 ?? \"\",\n    [firstNameKey]: accountContact?.Slave.FirstName ?? currentUser.ContactFirstName ?? \"\",\n    [lastNameKey]: accountContact?.Slave.LastName ?? currentUser.ContactLastName ?? \"\",\n    [phone1Key]: accountContact?.Slave.Phone1 ?? currentUser.Contact.Phone1 ?? \"\",\n    [phone2Key]: accountContact?.Slave.Phone2 ?? \"\",\n    [phone3Key]: accountContact?.Slave.Phone3 ?? \"\",\n    [regionIdKey]: currentUser.StateOfResidence.Name,\n    [street1Key]: accountContact?.Slave.Address?.Street1 ?? \"\",\n    [street2Key]: accountContact?.Slave.Address?.Street2 ?? \"\",\n    [street3Key]: accountContact?.Slave.Address?.Street3 ?? \"\",\n    [zipKey]: accountContact?.Slave.Address?.PostalCode ?? \"\"\n  };\n\n  const { register, handleSubmit, watch, getValues, setValue, formState, trigger, reset } = useForm<{\n    [key: string]: string;\n  }>({\n    mode: \"onChange\",\n    criteriaMode: \"all\",\n    defaultValues: { ...defaultValues }\n  });\n\n  const registerToUse = parentUseFormOverrides?.register ?? register;\n  const watchToUse = parentUseFormOverrides?.watch ?? watch;\n  const getValuesToUse = parentUseFormOverrides?.getValues ?? getValues;\n  const setValueToUse = parentUseFormOverrides?.setValue ?? setValue;\n  const formStateToUse = parentUseFormOverrides?.formState ?? formState;\n  const triggerToUse = parentUseFormOverrides?.trigger ?? trigger;\n  const resetToUse = parentUseFormOverrides?.reset ?? reset;\n\n  // @ts-ignore\n  const countryValue = watchToUse(countryIdKey);\n  // @ts-ignore\n  const regionValue = watchToUse(regionIdKey);\n  // @ts-ignore\n  const countryValues = getValuesToUse(countryIdKey);\n  // @ts-ignore\n  const regionValues = getValuesToUse(regionIdKey);\n\n  useEffect(() => {\n    // Address is null in first render\n    Object.entries(defaultValues).forEach(([name, value]) => {\n      setValueToUse(name, value);\n    });\n  }, [accountContact]);\n\n  useEffect(() => {\n    // Reset validation if the country or region change\n    triggerToUse([countryIdKey, regionIdKey]);\n  }, [triggerToUse, countryValues, regionValues]);\n\n  const handleConfirm = (data: { [key: string]: string }): void => {\n    const key: string = data[customKeyKey];\n    const firstName: string = data[firstNameKey];\n    const lastName: string = data[lastNameKey];\n    const email1: string = data[email1Key];\n    const company: string = data[companyKey];\n    const countryId: string = data[countryIdKey];\n    const phone1: string = data[phone1Key];\n    const phone2: string = data[phone2Key];\n    const phone3: string = data[phone3Key];\n    const street1: string = data[street1Key];\n    const street2: string = data[street2Key];\n    const street3: string = data[street3Key];\n    const fax1: string = data[fax1Key];\n    const city: string = data[cityKey];\n    const regionId: string = data[regionIdKey];\n    const zip: string = data[zipKey];\n    const selectedCountry = countries.find(c => c.CustomKey === countryId || c.Name === countryId);\n    const selectedRegion = regions.find(r => r.CustomKey === regionId || r.Name === regionId);\n    const userAddressData: AccountContactModel = {\n      Active: true,\n      CreatedDate: accountContact && accountContact.CreatedDate ? accountContact.CreatedDate : new Date(),\n      ID: null,\n      IsBilling: accountContact?.IsBilling ?? false,\n      IsPrimary: accountContact?.IsPrimary ?? false,\n      MasterID: currentUser ? currentUser.AccountID : null,\n      Name: `${firstName} ${lastName}`,\n      Slave: {\n        Active: true,\n        Address: {\n          Active: true,\n          City: city,\n          Company: company,\n          Country: selectedCountry,\n          CountryCode: selectedCountry?.Code,\n          CountryKey: selectedCountry?.CustomKey,\n          CountryName: selectedCountry?.Name,\n          CreatedDate: accountContact?.Slave?.Address?.CreatedDate ?? new Date(),\n          CustomKey: key,\n          ID: null,\n          PostalCode: zip,\n          Region: selectedRegion,\n          RegionCode: selectedRegion?.Code,\n          RegionID: selectedRegion?.ID,\n          RegionKey: selectedRegion?.CustomKey,\n          RegionName: selectedRegion?.Name,\n          Street1: street1,\n          Street2: street2,\n          Street3: street3\n        },\n        CreatedDate: new Date(),\n        Email1: email1,\n        Fax1: fax1,\n        FirstName: firstName,\n        FullName: `${firstName} ${lastName}`,\n        ID: null,\n        LastName: lastName,\n        Phone1: phone1,\n        Phone2: phone2,\n        Phone3: phone3,\n        TypeID: null,\n        TypeKey: typePascalCased\n      },\n      SlaveID: null,\n      TransmittedToERP: false,\n      UpdatedDate: null\n    };\n    if (company) {\n      userAddressData.Slave.Address.Company = company;\n    }\n    if (_.isFunction(onConfirm)) {\n      onConfirm(userAddressData);\n    }\n    resetToUse();\n  };\n\n  const handleCancel = (_e: React.MouseEvent<HTMLButtonElement>) => {\n    if (onCancel) {\n      onCancel();\n    }\n  };\n\n  // eslint-disable-next-line max-len\n  const formClasses = useMemo(\n    () => `col-${looseColumns ? \"6\" : \"12\"} form-group mb-3 new-address-input`,\n    [looseColumns]\n  );\n\n  // eslint-disable-next-line prefer-named-capture-group\n  const poBoxRegex = /\\b(P\\.?\\s*O\\.?\\s*Box|\\bPost\\s*Office\\s*Box|\\bBox\\s*\\d+|\\bBox\\d*)\\b/iu;\n\n  return (\n    <div className=\"position-relative display-grid\">\n      <Col\n        as={parentUseFormOverrides ? Col : Form}\n        className=\"position-relative top-bottom-wrapper new-address-form\"\n        autoComplete=\"off\"\n        onSubmit={handleSubmit(handleConfirm)}>\n        <Row className=\"questionnaire-component-top mb-4\">\n          <Col xs={12}>\n            <Row>\n              <TextInputFormGroup\n                formIdentifier={customKeyKey}\n                dataSid=\"txtKeyPurchasingBilling\"\n                formClasses={formClasses +' d-none'}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.addressNickname\"\n                labelText=\"Address Nickname\"\n                required={false}\n                requiredMessage=\"Address Nickname is required\"\n                maxLength={15}\n                maxLengthMessage=\"Address Nickname may not exceed 15 characters\"\n                placeholderText={t(\"ui.storefront.addressBook.addressKey.placeholder\", \"Address Nickname\")}\n                inputClasses=\"text-capitalize\"\n              />\n              <TextInputFormGroup\n                disabled={true}\n                formIdentifier={firstNameKey}\n                dataSid=\"txtFirstNamePurchasingBilling\"\n                formClasses={\"new-address-input form-group mb-3 col-12 col-sm-6\"}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.FirstName\"\n                labelText=\"First Name\"\n                required={!addressIsOptional}\n                requiredMessage=\"First name is required\"\n                maxLength={128}\n                maxLengthMessage=\"First name may not exceed 128 characters\"\n                placeholderKey=\"ui.storefront.common.FirstName\"\n                inputClasses=\"text-capitalize\"\n              />\n              <TextInputFormGroup\n                disabled={true}\n                formIdentifier={lastNameKey}\n                dataSid=\"txtLastNamePurchasingBilling\"\n                formClasses={\"new-address-input form-group new-address mb-3 col-12 col-sm-6\"}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.LastName\"\n                labelText=\"Last Name\"\n                required={!addressIsOptional}\n                requiredMessage=\"Last name is required\"\n                maxLength={128}\n                maxLengthMessage=\"Last name may not exceed 128 characters\"\n                placeholderKey=\"ui.storefront.common.LastName\"\n                inputClasses=\"text-capitalize\"\n              />\n              {!hiddenFields?.email && (\n                <TextInputFormGroup\n                  disabled={true}\n                  formIdentifier={email1Key}\n                  dataSid=\"emEmailPurchasingBilling\"\n                  formClasses={formClasses}\n                  errors={formStateToUse.errors}\n                  register={registerToUse}\n                  labelKey=\"ui.storefront.common.Email\"\n                  labelText=\"Email\"\n                  required={!addressIsOptional}\n                  requiredMessage=\"Email is required\"\n                  patternMessage=\"Email is not valid/formatted properly\"\n                  placeholderKey=\"ui.storefront.common.Email\"\n                  isEmail={true}\n                />\n              )}\n              {!hiddenFields?.phone && (\n                <TextInputFormGroup\n                  // disabled={true}\n                  formIdentifier={phone1Key}\n                  dataSid=\"telPhone1PurchasingBilling\"\n                  formClasses={formClasses}\n                  errors={formStateToUse.errors}\n                  register={registerToUse}\n                  labelKey=\"ui.storefront.common.Phone\"\n                  labelText=\"Phone\"\n                  required={!addressIsOptional}\n                  requiredMessage=\"Phone number is required\"\n                  maxLength={40}\n                  maxLengthMessage=\"Phone numbers may not exceed 40 characters\"\n                  placeholderText={t(\"ui.storefront.common.Phone\", \"Phone\")}\n                  inputClasses=\"text-capitalize\"\n                  isPhone={true}\n                  valueToPrefill={currentUser?.Contact?.Phone1}\n                />\n              )}\n              {/* {!hiddenFields?.phone && phoneFieldsAmount > 1 && <TextInputFormGroup\n                disabled={true}\n                formIdentifier={phone2Key}\n                formClasses={formClasses}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.userDashboard2.controls.addressEditor2.Phone2\"\n                maxLength={40}\n                maxLengthMessage=\"Phone numbers may not exceed 40 characters\"\n                patternMessage=\"Phone numbers may only include digits and dashes\"\n                placeholderText=\"555-555-5555\"\n                inputClasses=\"text-capitalize\"\n                isPhone={true}\n              />} */}\n              {/* {!hiddenFields?.phone && phoneFieldsAmount > 2 && <TextInputFormGroup\n                disabled={true}\n                formIdentifier={phone3Key}\n                formClasses={formClasses}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.userDashboard2.controls.addressEditor2.Phone3\"\n                maxLength={40}\n                maxLengthMessage=\"Phone numbers may not exceed 40 characters\"\n                patternMessage=\"Phone numbers may only include digits and dashes\"\n                placeholderText=\"555-555-5555\"\n                inputClasses=\"text-capitalize\"\n                isPhone={true}\n              />} */}\n              {/* {!hiddenFields?.phone && phoneFieldsAmount < 3 && <Col xs={12}>\n                <Button variant=\"link\"\n                  className=\"float-right p-0\"\n                  id=\"btnAddMorePhoneNumbers\"\n                  onClick={() => setPhoneFieldsAmount(amt => amt + 1)}>\n                  {t(\"ui.storefront.checkout.shippingAddMorePhones\")}\n                </Button>\n              </Col>}\n              {!hiddenFields?.fax && <TextInputFormGroup\n                formIdentifier={fax1Key}\n                formClasses={formClasses}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.Fax\"\n                labelText=\"Fax\"\n                required={false}\n                requiredMessage=\"Fax is required\"\n                maxLength={40}\n                maxLengthMessage=\"Fax may not exceed 40 characters\"\n                minLength={10}\n                minLengthMessage=\"Fax numbers must include country code and area code.\"\n                placeholderText=\"Fax\"\n                inputClasses=\"text-capitalize\"\n                isFax={true}\n              />} */}\n            </Row>\n          </Col>\n          <Col xs={12}>\n            <Row>\n              {/* {!hiddenFields?.company && <TextInputFormGroup\n                formIdentifier={companyKey}\n                dataSid=\"txtCompanyRegistrationAddressBook\"\n                formClasses={formClasses}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.Company\"\n                labelText=\"Company\"\n                maxLength={128}\n                maxLengthMessage=\"Company may not exceed 128 characters\"\n                placeholderKey=\"ui.storefront.common.Company\"\n                inputClasses=\"text-capitalize\"\n                leftIcon={faBriefcase as IconDefinition}\n              />} */}\n              {/* {countries?.length && !hiddenFields?.country && <SelectFormGroup\n                disabled={true}\n                formIdentifier={countryIdKey}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelText=\"Country\"\n                dataSid=\"ddlCountryIDRegistrationAddressBook\"\n                labelKey=\"ui.storefront.common.Country\"\n                formClasses={formClasses}\n                required={!addressIsOptional}\n                includeNull={true}\n                nullText=\"Select a Country\"\n                nullKey=\"ui.storefront.common.geography.Country.SelectA\"\n                options={countries.map(c => ({ option: c.Name }))}\n                initialOption={{ option: currentUser.StateOfResidence.Country ?? \"Select a Country\" }}\n              />\n              } */}\n              <TextInputFormGroup\n                formIdentifier={street1Key}\n                dataSid=\"txtStreet1PurchasingBilling\"\n                formClasses={formClasses}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.Street\"\n                labelText=\"Street\"\n                required={!addressIsOptional}\n                requiredMessage=\"Street is required\"\n                maxLength={35}\n                maxLengthMessage=\"Street may not exceed 35 characters\"\n                minLength={6}\n                minLengthMessage=\"Street address must be a valid address.\"\n                placeholderKey=\"ui.storefront.common.Street\"\n                inputClasses=\"text-capitalize\"\n                leftIcon={faRoad as IconDefinition}\n                isShippingAddress={isShippingAddress}\n                validateObject={{\n                  pattern: (value: string) => !isShippingAddress || !poBoxRegex.test(value) || \"We cannot ship to P.O. Boxes\",\n                }}\n              />\n              {streetFieldsAmount > 1 && (\n                <TextInputFormGroup\n                  formIdentifier={street2Key}\n                  formClasses={formClasses}\n                  errors={formStateToUse.errors}\n                  register={registerToUse}\n                  labelKey=\"ui.storefront.userDashboard2.controls.addressEditor2.Street2\"\n                  maxLength={35}\n                  maxLengthMessage=\"Street 2 may not exceed 35 characters\"\n                  minLength={1}\n                  minLengthMessage=\"Street address must be a valid address.\"\n                  placeholderKey=\"Apt #, Suite, etc.\"\n                  inputClasses=\"text-capitalize\"\n                  leftIcon={faRoad as IconDefinition}\n                  isShippingAddress={isShippingAddress}\n                  validateObject={{\n                    pattern: (value: string) => !isShippingAddress || !poBoxRegex.test(value) || \"We cannot ship to P.O. Boxes\",\n                  }}\n                />\n              )}\n              {streetFieldsAmount > 2 && (\n                <TextInputFormGroup\n                  formIdentifier={street3Key}\n                  formClasses={formClasses}\n                  errors={formStateToUse.errors}\n                  register={registerToUse}\n                  labelKey=\"ui.storefront.userDashboard2.controls.addressEditor2.Street3\"\n                  maxLength={35}\n                  maxLengthMessage=\"Street may not exceed 35 characters\"\n                  minLength={1}\n                  minLengthMessage=\"Street address must be a valid address.\"\n                  placeholderKey=\"ui.storefront.userDashboard2.controls.addressEditor2.Street3\"\n                  inputClasses=\"text-capitalize\"\n                  leftIcon={faRoad as IconDefinition}\n                  isShippingAddress={isShippingAddress}\n                  validateObject={{\n                    pattern: (value: string) => !isShippingAddress || !poBoxRegex.test(value) || \"We cannot ship to P.O. Boxes\",\n                  }}\n                />\n              )}\n              {streetFieldsAmount < 3 && (\n                <Col xs={12}>\n                  <Button\n                    variant=\"link\"\n                    className=\"float-right p-0\"\n                    id=\"btnSecondaryShowStreet3NewContact\"\n                    onClick={() => setStreetFieldsAmount(amt => amt + 1)}>\n                    Need to add another address line?\n                  </Button>\n                </Col>\n              )}\n              <TextInputFormGroup\n                formIdentifier={cityKey}\n                dataSid=\"txtCityPurchasingBilling\"\n                formClasses={formClasses}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.City\"\n                labelText=\"City\"\n                required={!addressIsOptional}\n                requiredMessage=\"City is required\"\n                maxLength={90}\n                maxLengthMessage=\"City max not exceed 90 characters\"\n                placeholderText=\"City\"\n                inputClasses=\"text-capitalize\"\n                leftIcon={faCity as IconDefinition}\n              />\n              {Boolean(regions?.length) && (\n                <>\n                  {accountContact && isShippingAddress && (\n                    <a href=\"/Dashboard/my-profile\">Need to change your state of residence? You can do that in your {\" \"}profile.\n                    </a>)}\n\n                  <SelectFormGroup\n                    disabled={isShippingAddress}\n                    formIdentifier={regionIdKey}\n                    dataSid=\"ddlRegionIDRegistrationAddressBook\"\n                    formClasses={\"form-group mb-3 col-12 col-sm-8\"}\n                    errors={formStateToUse.errors}\n                    register={registerToUse}\n                    options={\n                      countryValue\n                        ? regions\n                          .filter(reg => reg.CountryName === countryValue)\n                          .map(region => ({\n                            option: region.Name,\n                            value: region.Name\n                          }))\n                        : []\n                    }\n                    initialOption={{ option: regionValue, value: regionValue }}\n                    labelKey=\"ui.storefront.common.geography.State\"\n                    labelText=\"State\"\n                    includeNull={true}\n                    required={!addressIsOptional}\n                    nullText=\"Select a State\"\n                    nullKey=\"ui.storefront.common.geography.State.SelectA\"\n                  />\n                </>\n              )}\n              <TextInputFormGroup\n                formIdentifier={zipKey}\n                dataSid=\"txtZipPurchasingBilling\"\n                formClasses={\"form-group mb-3 col-12 col-sm-4\"}\n                errors={formStateToUse.errors}\n                register={registerToUse}\n                labelKey=\"ui.storefront.common.Zip\"\n                labelText=\"Zip\"\n                required={!addressIsOptional}\n                requiredMessage=\"Zip code is required\"\n                maxLength={128}\n                maxLengthMessage=\"Zip code may not exceed 128 characters\"\n                minLength={5}\n                minLengthMessage=\"Zip code must be a least 5 characters\"\n                pattern={/^\\d+-?\\d+$/u}\n                patternMessage=\"Zip code is invalid\"\n                placeholderKey=\"ui.storefront.common.Zip\"\n              />\n            </Row>\n          </Col>\n        </Row>\n\n        <div className={\"questionnaire-component-bottom\"}>\n          <div className=\"d-flex gap-2 justify-content-between align-items-center button-container\">\n            <div>\n              {showCancel && (\n                <Button\n                  className=\"bg-transparent border-0 cancel-btn\"\n                  onClick={handleCancel}>\n                  Cancel\n                </Button>\n              )}\n            </div>\n            <div>\n              {_.isFunction(onConfirm) && (\n                <Button\n                  className={`next-btn border-0 align-items-center bg-brand-orange\n                       d-inline-flex btn-lg rounded-pill px-5 py-3 mx-1`}\n                  type=\"submit\"\n                  id=\"btnAddShipping\"\n                  data-sid=\"btnAddShipping\"\n                  name={`btnAdd${type === \"billing\" ? \"Billing\" : \"Shipping\"}`}\n                  disabled={!formStateToUse.isValid}>\n                  {!accountContact ? \"Add Address\" : \"Edit Address\"}\n                </Button>\n              )}\n            </div>\n          </div>\n        </div>\n\n        {/* <Row className=\"mt-2\">\n        <Col xs={12}>\n          <div className=\"d-flex justify-content-between gap-2\">\n            {showCancel && <Button id=\"btnCancelShipping\"\n              variant=\"outline-secondary\"\n              onClick={handleCancel}>\n              {t(\"ui.storefront.common.Cancel\")}\n            </Button>}\n            {_.isFunction(onConfirm) && <Button\n              variant=\"primary\"\n              type=\"submit\"\n              id=\"btnAddShipping\"\n              data-sid=\"btnAddShipping\"\n              name={`btnAdd${type === \"billing\" ? \"Billing\" : \"Shipping\"}`}\n              disabled={!formStateToUse.isValid}>\n              {t(submitBtnKey ?? \"ui.storefront.checkout.splitShipping.addressModal.AddAddress\")}\n            </Button>}\n          </div>\n        </Col>\n      </Row> */}\n      </Col>\n    </div>\n  );\n};\n","/* eslint-disable max-len */\n/** @format */\n\nimport { Row } from \"react-bootstrap\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { NewAddressForm } from \"src/_shared/forms/NewAddressForm\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useTranslation } from \"react-i18next\";\nimport { Modal } from \"../../_shared/modals/Modal\";\nimport { QuestionnaireModalHeader } from \"src/Cart/modals/ActionModals/QuestionnaireModalHeader\";\n\ninterface INewAddressModalProps {\n  type?: \"billing\" | \"shipping\";\n  accountContact?: AccountContactModel;\n  show: boolean;\n  onConfirm: (newAddressFormData: AccountContactModel) => void;\n  onCancel: Function;\n  parentRunning?: boolean;\n  idSuffix?: string;\n  isBillingAddress?: boolean;\n  isShippingAddress?: boolean;\n}\n\nexport const NewAddressModal = (props: INewAddressModalProps): JSX.Element => {\n  const { type, accountContact, show, onConfirm, onCancel, parentRunning, idSuffix, isBillingAddress, isShippingAddress } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Modal\n      titleID=\"txtNewAddressModalTitle\"\n      show={show}\n      onCancel={onCancel}\n      modalClasses=\"atc-questionnaire-modal new-address-modal\"\n      modalBodyClasses=\"d-flex flex-column align-items-center mt-4\"\n      CustomHeader={() => <QuestionnaireModalHeader />}\n      headerClasses=\"justify-content-center border-0\"\n      hideCloseButton={true}>\n      <h2 className=\"alt-font text-center mb-4\">\n        {!accountContact\n          ? (<span className=\"alt-font text-center\">Add a New\n            <span className=\"alt-font text-center text-primary d-block\">\n              {isBillingAddress ? \"Billing\" : isShippingAddress ? \"Shipping\" : \"\"}  Address</span></span>)\n          : (<span className=\"alt-font text-center\">Edit Your\n            <span className=\"alt-font text-center text-primary d-block\">\n              {isBillingAddress ? \"Billing\" : isShippingAddress ? \"Shipping\" : \"\"} Address</span></span>\n          )}\n      </h2>\n      {parentRunning ? (\n        <LoadingWidget />\n      ) : (\n        <Row>\n          {show && (\n            <NewAddressForm\n              accountContact={accountContact}\n              idSuffix={idSuffix}\n              onConfirm={onConfirm}\n              type={type}\n              showCancel={true}\n              onCancel={onCancel}\n              submitBtnKey={accountContact ? t(\"ui.storefront.common.Save\") : null}\n              isShippingAddress={isShippingAddress}\n            />\n          )}\n        </Row>\n      )}\n    </Modal>\n  );\n};\n","import { useMemo } from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport \"src/Dashboard/AddressBook/AddressBlock.module.scss\";\nimport { AddressModel } from \"src/_api/cvApi._DtoClasses\";\n\nexport interface IAddressBlockContact {\n  FullName?: string;\n  FirstName?: string;\n  LastName?: string;\n  Phone1?: string;\n  Phone2?: string;\n  Phone3?: string;\n  Fax1?: string;\n  Email1?: string;\n}\n\ninterface IAddressBlockProps {\n  address: AddressModel;\n  contact?: IAddressBlockContact;\n  hideCompany?: boolean;\n  hidePostalCode?: boolean;\n  hideCountryKey?: boolean;\n  hideName?: boolean;\n  hideFirstName?: boolean;\n  hideLastName?: boolean;\n  hideStreet1?: boolean;\n  hideStreet2?: boolean;\n  hideStreet3?: boolean;\n  hideCity?: boolean;\n  hideRegionName?: boolean;\n  hidePhone1?: boolean;\n  hidePhone2?: boolean;\n  hidePhone3?: boolean;\n  hideFax1?: boolean;\n  hideEmail1?: boolean;\n  hideIcons?: boolean;\n  horizontal?: boolean;\n}\n\nexport const AddressBlock = (props: IAddressBlockProps): JSX.Element => {\n  const {\n    address,\n    contact,\n    // hideCompany,\n    hidePostalCode,\n    hideCountryKey,\n    hideName,\n    hideFirstName,\n    hideLastName,\n    hideStreet1,\n    hideStreet2,\n    hideStreet3,\n    hideCity,\n    hideRegionName,\n    hidePhone1,\n    hidePhone2,\n    hidePhone3,\n    hideFax1,\n    hideEmail1,\n    hideIcons,\n    horizontal\n  } = props;\n\n  const { Street1, Street2, Street3, City, RegionName, PostalCode, CountryKey } = address;\n  const colSmSize = useMemo(() => {\n    return horizontal ? 4 : 12;\n  }, [ horizontal ]);\n\n  return (\n    <>\n      {!hideName && contact && (contact.FullName || contact.FirstName) && (\n        <Row>\n          <Col xs={12}>\n            <div className=\"my-2 d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-lg small fa-user\" />}\n              <span className=\"ms-1\" data-sid=\"txtContactAddressName\">\n                {!hideFirstName && contact.FirstName ? contact.FirstName : \"\"}\n                {!hideLastName\n                  && `${!hideFirstName && contact.FirstName ? \" \" : \"\"}${contact.LastName ?? \"\"}`}\n                {!hideFirstName\n                && !hideLastName\n                && !contact.FirstName\n                && !contact.LastName\n                && contact.FullName\n                  ? contact.FullName\n                  : null}\n              </span>\n            </div>\n          </Col>\n        </Row>\n      )}\n      <Row>\n        <Col xs={12}\n          xl={5}\n          className=\"contact-row\">\n          {!hideStreet1 && Street1 && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-lg small fa-location-dot\" />}\n              <span className=\"ms-1\" id=\"txtContactAddressStreet1\">\n                {Street1}\n              </span>\n            </div>\n          )}\n          {!hideStreet2 && Street2 && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-lg small fa-user o-0\" />}\n              <span className=\"ms-1\" id=\"txtContactAddressStreet1\">\n                {Street2}\n              </span>\n            </div>\n          )}\n          {!hideStreet3 && Street3 && (\n            <div className=\"d-flex align-items-center\">\n              <span className=\"ms-1\" id=\"txtContactAddressStreet1\">{Street3}</span>\n            </div>\n          )}\n          {(!hideCity || !hideRegionName || !hidePostalCode) && (\n            <div className=\"ms-1 mb-1\">\n              {!hideIcons && <i className=\"fal fa-fw fa-lg small fa-user o-0\" />}\n              {!hideCity && <span>{City},&nbsp;</span>}\n              {!hideRegionName && <span>{RegionName}&nbsp;</span>}\n              {!hidePostalCode && <span>{PostalCode}</span>}\n            </div>\n          )}\n          {!hideCountryKey && CountryKey && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-lg small fa-user o-0\" />}\n              <span className=\"ms-1\" id=\"txtContactAddressCountry\">{CountryKey}</span>\n            </div>\n          )}\n        </Col>\n        <Col xs={12}\n          xl={3}\n          className=\"contact-row\">\n          {!hidePhone1 && contact.Phone1 && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-phone fa-lg small\" />}\n              <span className=\"ms-1\" data-sid=\"telContactAddressPhone1\">\n                {contact.Phone1}\n              </span>\n            </div>\n          )}\n          {!hidePhone2 && contact.Phone2 && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-lg small fa-user o-0\" />}\n              <span className=\"ms-1\" data-sid=\"telContactAddressPhone2\">\n                {contact.Phone2}\n              </span>\n            </div>\n          )}\n          {!hidePhone3 && contact.Phone3 && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-lg small fa-user o-0\" />}\n              <span className=\"ms-1\" data-sid=\"telContactAddressPhone3\">\n                {contact.Phone3}\n              </span>\n            </div>\n          )}\n          {!hideFax1 && contact.Fax1 && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-fax fa-lg small\" />}\n              <span className=\"ms-1\" data-sid=\"telContactAddressFax1\">{contact.Fax1}</span>\n            </div>\n          )}\n        </Col>\n        <Col xs={12}\n          xl={4}\n          className=\"contact-row\">\n          {!hideEmail1 && contact.Email1 && (\n            <div className=\"d-flex align-items-center\">\n              {!hideIcons && <i className=\"fal fa-fw fa-envelope fa-at fa-lg small mt-1\" />}\n              <span data-sid=\"emContactAddressEmail1\" className=\"contactAddress_email ms-1 text-break\">\n                {contact.Email1}\n              </span>\n            </div>\n          )}\n        </Col>\n      </Row>\n    </>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { NewAddressModal } from \"src/Dashboard/AddressBook/NewAddressModal\";\nimport { useTranslation } from \"react-i18next\";\nimport { AddressBlock } from \"./AddressBlock\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\n/* TODO: Restore/allow In Store Pickup and Ship to Store options\n  case shipToStoreOption.ID: {\n      // TODO: Use the address of the store\n      setDestinationContactForTarget(target, shipToStoreOption.ID, cvServiceStrings.attributes.shipToStore);\n      break;\n  }\n  case inStorePickupOption.ID: {\n      // TODO: Use the address of the store\n      setDestinationContactForTarget(target, inStorePickupOption.ID, cvServiceStrings.attributes.inStorePickup);\n      break;\n  }\n*/\n\ninterface IContactSwitchProps {\n  isShippingAddress?: boolean;\n  isBillingAddress?: boolean;\n  accountContacts: Array<AccountContactModel>;\n  onChange: (contact: AccountContactModel) => void;\n  title?: string;\n  classes?: string;\n  hideAddressBlock?: boolean;\n  allowAdd?: boolean;\n  useAddButton?: boolean;\n  onAddressAdded?: (newAddressData: AccountContactModel) => void;\n  initialContact?: AccountContactModel;\n  allowInStorePickup?: boolean;\n  allowShipToStore?: boolean;\n  disabled?: boolean;\n  ddSelectAddressDataSID?: string;\n  btnAddAddressDataSID?: string;\n  handleRegionRestriction?: (val: boolean) => void;\n}\n\nexport const ContactSwitch = (props: IContactSwitchProps): JSX.Element => {\n  const {\n    isShippingAddress: isa,\n    isBillingAddress: iba,\n    accountContacts,\n    allowAdd,\n    classes,\n    disabled,\n    hideAddressBlock,\n    initialContact,\n    onAddressAdded,\n    onChange,\n    title,\n    useAddButton,\n    ddSelectAddressDataSID,\n    btnAddAddressDataSID,\n    handleRegionRestriction\n  } = props;\n\n  const { t } = useTranslation();\n\n  const [ selectedContact, setSelectedContact ] = useState(initialContact ?? null);\n  const [ showNewAddressModel, setShowNewAddressModal ] = useState(false);\n\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    if (!cefConfig) {\n      return;\n    }\n    setSelectedContact(initialContact);\n  }, [ initialContact ]);\n\n  const restrictedRegions: string[] = cefConfig.featureSet.globalization.regions.globalRestrictedShippingRegions;\n  const selectedContactRegionCode = selectedContact?.Slave?.Address.RegionCode;\n  const selectedContactIsRestricted = restrictedRegions?.includes(selectedContactRegionCode);\n\n  useEffect(() => {\n    if (selectedContact && handleRegionRestriction) {\n      handleRegionRestriction(Boolean(selectedContactIsRestricted));\n    }\n  }, [ selectedContact ]);\n\n  const isBillingAddress = iba ? true : accountContacts\n&& (accountContacts[0]?.Slave?.CustomKey?.includes(\"Billing\"));\n\n  const isShippingAddress = isa ? true : accountContacts\n&& (accountContacts[0]?.Slave?.CustomKey?.includes(\"Shipping\"));\n\n  return (\n    <div className=\"flex-grow-1\">\n      <InputGroup className={`mb-2 add-address ${classes ?? \"\"}`}>\n        {title && <strong className=\"d-block\">{title}</strong>}\n        <Form.Group className=\"form-group flex-grow-1\">\n          <Form.Select\n            data-sid={ddSelectAddressDataSID}\n            aria-label={ddSelectAddressDataSID}\n            className=\"flex-grow-1\"\n            value={showNewAddressModel ? \"Add a new Address\" : selectedContact ? selectedContact.ID : \"\"}\n            required\n            disabled={disabled}\n            onChange={e => {\n              if (e.currentTarget.value === \"Add a new Address\") {\n                setSelectedContact(null);\n                setShowNewAddressModal(true);\n                return;\n              }\n              const currentContactVal = accountContacts.find(c => c.ID.toString() === e.currentTarget.value);\n              if (currentContactVal) {\n                onChange(currentContactVal);\n              }\n              setSelectedContact(currentContactVal);\n            }}>\n            <option\n              disabled={Boolean(selectedContact)}\n              className={`${selectedContact ? \"disabled\" : \"\"}`}>\n              Please select an address\n            </option>\n            {accountContacts\n              && accountContacts.map(accountContact => {\n                const { ID, CustomKey, Slave, SlaveKey } = accountContact;\n                return (\n                  <option\n                    key={ID}\n                    value={ID}>\n                    {Slave.Address.CustomKey ?? Slave.CustomKey ?? SlaveKey ?? CustomKey}:&nbsp;\n                    {Slave.Address.Street1}\n                  </option>\n                );\n              })}\n            {allowAdd && !useAddButton ? <option value=\"Add a new Address\">Add a new Address</option> : null}\n          </Form.Select>\n        </Form.Group>\n        {allowAdd && useAddButton && (\n          <Button\n            data-sid={btnAddAddressDataSID}\n            variant=\"link\"\n            disabled={disabled}\n            onClick={() => setShowNewAddressModal(true)}>\n            {accountContacts && accountContacts[0]?.Slave && selectedContact ? \"Edit\" : \"Add\"}\n          </Button>\n        )}\n        {allowAdd ? (\n          <NewAddressModal\n            show={showNewAddressModel}\n            onCancel={() => {\n              setShowNewAddressModal(false);\n            }}\n            onConfirm={(newAddressData: AccountContactModel) => {\n              onAddressAdded(newAddressData);\n              setShowNewAddressModal(false);\n            }}\n            accountContact={selectedContact}\n            isBillingAddress={isBillingAddress}\n            isShippingAddress={isShippingAddress}\n          />\n        ) : null}\n      </InputGroup>\n      {!hideAddressBlock && selectedContact && selectedContact.Slave && (\n        <AddressBlock\n          hideName\n          address={selectedContact.Slave.Address}\n          contact={selectedContact.Slave}\n          horizontal={true}\n        />\n      )}\n    </div>\n  );\n};\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RootState } from \"src/_redux/store\";\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\n\ninterface IAddressBookSliceState {\n  AddressBook: AccountContactModel[] | null;\n}\n\nexport const addressBookSlice = createSlice({\n  name: \"addressBook\",\n  initialState: {\n    AddressBook: null\n  } as IAddressBookSliceState,\n  reducers: {\n    setAddressBook: (state, action: PayloadAction<AccountContactModel[]>) => {\n      state.AddressBook = action.payload;\n    }\n  }\n});\n\nexport const { setAddressBook } = addressBookSlice.actions;\nexport const useAddressBook = (): AccountContactModel[] => {\n  const addressBook = useSelector((state: RootState) => state.addressBook.AddressBook);\n  const addressBookFactory = useAddressBookFactory();\n\n  useEffect(() => {\n    if (addressBook === null) {\n      addressBookFactory.loadAddressBook();\n    }\n  }, [ addressBook ]);\n\n  return addressBook;\n};\n\nexport default addressBookSlice.reducer;\n","/* eslint-disable sort-keys, arrow-body-style */\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { setAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useDispatch } from \"react-redux\";\nimport promiser from \"src/_shared/Promiser\";\nimport { useState } from \"react\";\n\nexport interface IAddressBookFactory {\n  loadAddressBook: (force?: boolean) => Promise<void>;\n  createNewAddress: (contact: AccountContactModel) => Promise<AccountContactModel>;\n  updateExistingAddress: (contact: AccountContactModel) => Promise<void>;\n  deleteAddress: (accountContactID: number) => Promise<void>;\n  validateAddress: (contact: AccountContactModel) => Promise<boolean>;\n  markAsDefaultBilling: (accountContactID: number) => Promise<void>;\n  markAsDefaultShipping: (accountContactID: number) => Promise<void>;\n}\n\nexport const useAddressBookFactory = (): IAddressBookFactory | null => {\n  const dispatch = useDispatch();\n\n  const [ addressBookFactory ] = useState<IAddressBookFactory>({\n    loadAddressBook: (force?: boolean): Promise<void> => {\n      if (force) {\n        promiser.flush(\"loadAddressBook\");\n      }\n      return promiser.resolve(\n        \"loadAddressBook\",\n        () => cvApi.geography\n          .GetCurrentAccountAddressBook()\n          .then(r => {\n            const result = r.data ?? [];\n            dispatch(setAddressBook(result));\n            return result;\n          })\n      ).then();\n    },\n\n    createNewAddress: (contact: AccountContactModel): Promise<AccountContactModel> => {\n      return cvApi.geography\n        .CreateAddressInBook(contact)\n        .then(r => {\n          if (!r?.data) {\n            throw new Error(\"Unable to create new address in address book\");\n          }\n          return addressBookFactory.loadAddressBook(true).then(() => r.data);\n        });\n    },\n\n    updateExistingAddress: (contact: AccountContactModel): Promise<void> => {\n      return addressBookFactory.validateAddress(contact)\n        .then(valid => {\n          if (!valid) {\n            throw new Error(\"New address is invalid\");\n          }\n          return cvApi.accounts\n            .UpdateAccountContact(contact);\n        })\n        .then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            throw r?.data?.Messages ?? [ \"Error updating address\" ];\n          }\n          return addressBookFactory.loadAddressBook(true);\n        });\n    },\n\n    deleteAddress: (accountContactID: number): Promise<void> => {\n      return cvApi.accounts\n        .DeleteAccountContactByID(accountContactID)\n        .then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            throw r?.data?.Messages ?? [ \"Failed to delete address\" ];\n          }\n          return addressBookFactory.loadAddressBook(true);\n        });\n    },\n\n    validateAddress: (contact: AccountContactModel): Promise<boolean> => {\n      if (!contact?.Slave?.Address) {\n        return Promise.reject(new Error(\"Must supply a contact with an address to validate\"));\n      }\n      const toValidate = contact.Slave.Address;\n      return cvApi.providers\n        .ValidateAddress({\n          Address: {\n            ...toValidate,\n            CountryID: toValidate.CountryID ?? toValidate.Country?.ID,\n          }\n        })\n        .then(r => {\n          return r?.data?.IsValid ?? false;\n        });\n    },\n\n    markAsDefaultBilling: (accountContactID: number): Promise<void> => {\n      return cvApi.accounts\n        .MarkAccountContactAsDefaultBilling(accountContactID)\n        .then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            throw r?.data?.Messages ?? [ \"Unable to set contact as default billing\" ];\n          }\n          return addressBookFactory.loadAddressBook(true);\n        });\n    },\n\n    markAsDefaultShipping: (accountContactID: number): Promise<void> => {\n      return cvApi.accounts\n        .MarkAccountContactAsPrimaryShipping(accountContactID)\n        .then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            throw r?.data?.Messages ?? [ \"Unable to set contact as default shipping\" ];\n          }\n          return addressBookFactory.loadAddressBook(true);\n        });\n    }\n  });\n\n  return addressBookFactory;\n};\n","import { useState } from \"react\";\nimport { Alert, Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\nimport cvApi from \"src/_api/cvApi\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\nimport { ICheckoutBillingStepProps } from \"../../_checkoutTypes\";\n\nexport const CheckoutBillingStep = (props: ICheckoutBillingStepProps): JSX.Element => {\n  const [ cartBillingContact, setCartBillingContact ] = useState<AccountContactModel>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const addressBookFactory = useAddressBookFactory();\n  const addressBook = useAddressBook();\n  const checkoutContext = useCheckoutContext();\n\n  const { continueText } = props;\n\n  const onCompleteCheckoutBillingStep = (): void => {\n    checkoutContext.dispatch({\n      type: \"billingStepComplete\",\n      payload: { cartBillingContact }\n    });\n  };\n\n  function updateCartBillingContact(contact: AccountContactModel): void {\n    setRunning();\n    cvApi.shopping\n      .CurrentCartSetBillingContact({\n        TypeName: \"Cart\",\n        BillingContact: contact.Slave\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          finishRunning(true, \"Failed to update cart billing contact\");\n          return;\n        }\n        setCartBillingContact(contact);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to update cart billing contact\");\n      });\n  }\n\n  return (\n    <Row>\n      <Col xs={12}>\n        <h4 className=\"mt-2\">\n          <span id=\"CheckoutBillingStageText\">\n            {t(\"ui.storefront.checkout.billingInfo.whichAddy\")}\n          </span>\n          &nbsp;<span className=\"text-primary\">*</span>\n        </h4>\n      </Col>\n      <Col xs={12} className=\"mb-4\">\n        <ContactSwitch\n          accountContacts={addressBook?.filter(x => x.IsBilling === true)}\n          ddSelectAddressDataSID=\"checkoutBillingStepAddressSelect\"\n          btnAddAddressDataSID=\"checkoutBillingStepAddressAddBtn\"\n          onChange={updateCartBillingContact}\n          classes=\"input-group\"\n          initialContact={cartBillingContact}\n          allowAdd={true}\n          useAddButton={true}\n          onAddressAdded={newAddressData => {\n            setRunning();\n            newAddressData.IsBilling = true;\n            addressBookFactory.createNewAddress(newAddressData)\n              .then(newContact => {\n                updateCartBillingContact(newContact);\n                finishRunning();\n              })\n              .catch(err => {\n                finishRunning(true, err);\n              });\n          }}\n        />\n      </Col>\n      {viewState.hasError\n        ? <Col xs={12} className=\"mb-4\">\n          <Alert variant=\"danger\">{viewState.errorMessage}</Alert>\n        </Col>\n        : null}\n      <Col xs={12}>\n        <Button\n          // variant=\"primary\"\n          disabled={!cartBillingContact}\n          data-sid=\"checkoutBillingStepSubmit\"\n          className=\"mb-4 continue-btn\"\n          onClick={() => {\n            if (cartBillingContact) {\n              onCompleteCheckoutBillingStep();\n            }\n          }}>\n          {continueText}\n        </Button>\n      </Col>\n    </Row>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useForm } from \"react-hook-form\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\nimport { ICheckoutConfirmationStepProps } from \"../../_checkoutTypes\";\n\nexport const CheckoutConfirmationStep = (props: ICheckoutConfirmationStepProps): JSX.Element => {\n  const { children, continueText } = props;\n  const { t } = useTranslation();\n  const checkoutContext = useCheckoutContext();\n\n  const {\n    handleSubmit\n  } = useForm();\n\n  const onCompleteCheckoutConfirmationStep = () => {\n    checkoutContext.dispatch({ type: \"confirmationStepComplete\" });\n  };\n\n  return (\n    <>\n      <div className=\"step step-four\">\n        <div className=\"checkout-box\">\n          <Row>\n            <Col xs={12} className=\"text-start\">\n              {`${t(\"Click below to request a quote\")}!`}\n            </Col>\n          </Row>\n        </div>\n      </div>\n      <form className=\"row position-relative\" onSubmit={handleSubmit(onCompleteCheckoutConfirmationStep)}>\n        {checkoutContext.viewState.running ? <LoadingWidget overlay={true} /> : null}\n        {children ?? null}\n        <Col xs={12}>\n          <input\n            type=\"submit\"\n            className=\"btn btn-primary my-3\"\n            title={continueText}\n            id=\"btnSubmit_checkoutStepConfirmation\"\n            name=\"btnSubmit_checkoutStepConfirmation\"\n          />\n        </Col>\n      </form>\n    </>\n  );\n};\n","import { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { LoginForm } from \"src/_shared/forms/LoginForm\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\nimport { ICheckoutMethodStepProps } from \"../../_checkoutTypes\";\n\nexport const CheckoutMethodStep = (props: ICheckoutMethodStepProps): JSX.Element => {\n  const checkoutContext = useCheckoutContext();\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const currentUser = useCurrentUser();\n\n  const onCompleteCheckoutMethodStep = (method = \"authenticated\"): void => {\n    checkoutContext.dispatch({\n      type: \"methodStepComplete\",\n      payload: method\n    });\n  };\n\n  return (\n    <div className=\"lg-w-50 w-100 mx-auto\">\n      <Row>\n        <LoginForm\n          onLoginSuccess={onCompleteCheckoutMethodStep}\n          signInLeft={true}\n          usernameFieldId=\"txtCheckoutLoginUsername\"\n          passwordFieldId=\"pwCheckoutLoginPassword\"\n          usernameDataSid=\"txtCheckoutLoginUsername\"\n          passwordDataSid=\"pwCheckoutLoginPassword\"\n        />\n        {cefConfig?.purchase.allowGuest && !props.forceNoGuestCheckout\n        && <Col xs={12}>\n          <div className=\"d-flex\">\n            <Button variant=\"outline-secondary\"\n              id=\"continueAsGuest\"\n              onClick={() => onCompleteCheckoutMethodStep(\"guest\")}\n              disabled={!currentUser || currentUser.ID > 0}>\n              {t(\"ui.storefront.checkout.views.checkoutMethod.continueAsGuest\")}\n            </Button>\n          </div>\n        </Col>}\n      </Row>\n    </div>\n  );\n};\n","import { Guid } from \"src/_api/cvApi.shared\";\nimport { AccountContactModel, SalesItemTargetBaseModel } from \"src/_api/cvApi._DtoClasses\";\nimport _ from \"lodash\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { TItem } from \"src/Checkout/_checkoutTypes\";\n\nexport function canAllocateQuantity(\n    salesItem: TItem,\n    target: SalesItemTargetBaseModel,\n    adjustment: number\n): boolean {\n  if (!salesItem || !target || !adjustment || !itemsExist(salesItem.Targets)) {\n    console.debug(\"This item has no targets list, cannot modify quantity\");\n    return false;\n  }\n  const totalItemQuantity\n  = (salesItem.Quantity || 0) + (salesItem.QuantityBackOrdered || 0) + (salesItem.QuantityPreSold || 0);\n  const wouldBeQuantityIsLessThanTotal = target.Quantity + adjustment < totalItemQuantity;\n  if (!wouldBeQuantityIsLessThanTotal) {\n    console.debug(\n      \"New target quantity would be equal to or greater than total quantity for sales item, can't allocate\"\n    );\n    return false;\n  }\n  const targetQuantityPlusAdjustmentIsGreaterThanZero = target.Quantity + adjustment > 0;\n  if (!targetQuantityPlusAdjustmentIsGreaterThanZero) {\n    console.debug(\"New target quantity would be 0 or less, can't allocate\");\n    return false;\n  }\n  return true;\n}\n\nexport function getAvailableAccountContactsForTarget(\n    addressBook: AccountContactModel[],\n    thisTarget: SalesItemTargetBaseModel,\n    targets: SalesItemTargetBaseModel[]\n): AccountContactModel[] {\n  const selectedContactIDs = targets\n    .filter(x => x.DestinationContact && x.DestinationContact.ID)\n    .map(x => x.DestinationContact.ID);\n  return [ ...addressBook ]\n    .filter(ac => !selectedContactIDs.includes(ac.Slave.ID)\n      || thisTarget.DestinationContact?.ID === ac.Slave.ID)\n    .sort((ac1, ac2) => ac1.Slave.CustomKey > ac2.Slave.CustomKey ? 1 : -1);\n}\n\nexport function getAvailableDropshipAccountContactsForTarget(\n    dropshipAccountContacts: AccountContactModel[],\n    thisTarget: SalesItemTargetBaseModel,\n    targets: SalesItemTargetBaseModel[]\n): AccountContactModel[] {\n  if (!itemsExist(dropshipAccountContacts) || !itemsExist(targets) || !thisTarget) {\n    return null;\n  }\n  const selectedContactIDs = getSelectedContactIDs(targets);\n  return [ ...(dropshipAccountContacts ?? []) ]\n    .filter(ac => !selectedContactIDs.includes(ac.Slave.ID)\n      || thisTarget.DestinationContact?.ID === ac.Slave.ID)\n    .sort((ac1, ac2) => ac1.Slave.CustomKey > ac2.Slave.CustomKey ? 1 : -1);\n}\n\nexport function doCallbackIfTargetsExist(item: TItem, callback: Function): any {\n  if (!item.Targets) {\n    return null;\n  }\n  return callback();\n}\n\nexport function getSalesItemsGroupedByTitle(\n    salesItems: TItem[]\n): { key: string; salesItems: TItem[] }[] {\n  if (!salesItems) {\n    console.log(\"No sales items to group with\");\n    return [];\n  }\n\n  const titlesMatchedToItems: any = {};\n  for (let i = 0; i < salesItems.length; i++) {\n    const curSalesItem = salesItems[i] as any;\n    const salesItemTitleValues = [\n      curSalesItem.ProductNothingToShip,\n      curSalesItem.Stores ? curSalesItem.Stores[0].MasterName : null,\n      curSalesItem.Vendors ? curSalesItem.Vendors[0].MasterName : null\n    ];\n\n    const groupTitle = getSplitShippingGroupTitle(salesItemTitleValues);\n    if (!titlesMatchedToItems[groupTitle]) {\n      titlesMatchedToItems[groupTitle] = [];\n    }\n    titlesMatchedToItems[groupTitle].push(salesItems[i]);\n  }\n  const sortedKeys = Object.keys(titlesMatchedToItems).sort();\n  return sortedKeys.map(key => ({\n    key,\n    salesItems: titlesMatchedToItems[key]\n  }));\n}\n\nfunction getSelectedContactIDs(targets: SalesItemTargetBaseModel[]): number[] {\n  return targets\n    ?.map(x => x.DestinationContact?.ID)\n    .filter(x => Boolean(x));\n}\n\nexport function getSplitShippingGroupTitle(source: string[]): string {\n  if (!source || !Array.isArray(source)) {\n    return null;\n  }\n  let title = \"\";\n  const [ nothingToShip, storeName, vendorName ] = source;\n  title += nothingToShip ? \"Non-shippable products\" : \"Shippable products\";\n  if (storeName) {\n    title += ` sold by ${storeName}`;\n  }\n  if (vendorName) {\n    if (storeName) {\n      title += \" and\";\n    }\n    title += ` supplied by ${vendorName}`;\n  }\n  return title;\n}\n\nexport function groupBy(list: Array<unknown>, keyGetter: Function): any {\n  const map = new Map();\n  list.forEach(item => {\n    const key = keyGetter(item);\n    const collection = map.get(key);\n    if (collection) {\n      collection.push(item);\n    } else {\n      map.set(key, [ item ]);\n    }\n  });\n  return map;\n}\n\nexport function itemsExist(items: unknown): boolean {\n  return Array.isArray(items) && items?.length > 0;\n}\n\nexport function quantitiesMatch(targets: SalesItemTargetBaseModel[], quantity: number): boolean {\n  return targets.reduce((acc: number, target) => acc + target.Quantity, 0) === quantity;\n}\n\nexport function setTargetDestinations(\n    targets: Array<SalesItemTargetBaseModel>,\n    addressBook: AccountContactModel[]\n): Array<SalesItemTargetBaseModel> {\n  if (!addressBook) {\n    return targets;\n  }\n  return targets.map(target => {\n    const result = { ...target };\n    if (result.DestinationContactID) {\n      const destinationContact = addressBook.find(\n        accountContact => accountContact.SlaveID === result.DestinationContactID\n      );\n      if (destinationContact) {\n        result.DestinationContact = destinationContact.Slave;\n      }\n    }\n    return result;\n  });\n}\n\nexport function setTargetGrouping(\n    targets: Array<SalesItemTargetBaseModel>\n): Array<SalesItemTargetBaseModel> {\n// Check for and collapse duplicates in the full list, this is a processing issue\n// That happens sometimes, but easily corrected by re-grouping\n// Dictionary<Array<SalesItemTargetBaseModel>>\n  const newGrouped: any = groupBy(targets, (target: SalesItemTargetBaseModel) => JSON.stringify({\n    destID: target.DestinationContactID,\n    ilID: target.OriginProductInventoryLocationSectionID,\n    nothingToShip: target.NothingToShip,\n    storeID: target.OriginStoreProductID,\n    typeKey: target?.Type?.CustomKey ?? target.TypeKey,\n    vendorID: target.OriginVendorProductID\n  }));\n  const groupedList: Array<SalesItemTargetBaseModel> = [];\n  const groupedObj = Object.fromEntries(newGrouped);\n  Object.keys(groupedObj).forEach(key => groupedList.push(groupedObj[key][0]));\n  return groupedList;\n}\n\nexport function targetFactory(\n    quantity: number,\n    initialDestinationContact?: AccountContactModel\n): SalesItemTargetBaseModel {\n  const model: SalesItemTargetBaseModel = {\n    Active: true,\n    CreatedDate: new Date().toISOString() as unknown as Date,\n    DestinationContact: initialDestinationContact?.Slave,\n    DestinationContactID: initialDestinationContact?.Slave?.ID ?? initialDestinationContact?.SlaveID,\n    ID: null,\n    MasterID: null,\n    NothingToShip: false,\n    OriginProductInventoryLocationSectionID: null,\n    OriginStoreProductID: null,\n    OriginVendorProductID: null,\n    Quantity: quantity,\n    SelectedRateQuoteID: null,\n    SerializableAttributes: {\n      InternalTrackingID: {\n        ID: 0,\n        Key: \"InternalTrackingID\",\n        Value: Guid.newGuid()\n      }\n    },\n    TypeID: null,\n    TypeKey: ServiceStrings.attributes.shipToHome\n  };\n  return model;\n}\n\nexport function generateTargets(\n    items: Array<TItem>,\n    defaultShippingContact?: AccountContactModel\n): Array<TItem> {\n  return items.map((item: TItem) => {\n    const itemCopy = { ...item };\n    itemCopy.Targets = [ targetFactory(item.TotalQuantity, defaultShippingContact) ];\n    return itemCopy;\n  });\n}\n\nexport function cleanTargets(item: TItem): SalesItemTargetBaseModel[] {\n  if (!item.Targets) {\n    return null;\n  }\n  if (item.Targets.some(target => target.MasterID > 0)) {\n    console.log(\"Caught a potential issue and fixed it!\");\n  }\n  return item.Targets.map(target => ({ ...target, MasterID: null, ID: null }));\n}\n\nexport const assignDestinationContactToAllTargets = (\n  salesItems: TItem[],\n  acctContact: AccountContactModel\n): TItem[] => {\n  const salesItemsCopy = _.cloneDeep(salesItems);\n  for (const salesItem of salesItemsCopy) {\n    for (const target of salesItem.Targets) {\n      Object.assign(target, {\n        DestinationContact: acctContact.Slave,\n        DestinationContactID: acctContact.SlaveID,\n        DestinationContactKey: acctContact.Slave.CustomKey,\n        Type: null,\n        TypeID: null,\n        TypeKey: ServiceStrings.attributes.shipToHome,\n        TypeName: null,\n      });\n    }\n  }\n\n  return salesItemsCopy;\n};\n","import { Table } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { CartModel, CartTotals, RateQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\n\ninterface ISplitShippingTotalsProps {\n  targetedCarts: CartModel[];\n  masterCart: CartModel;\n}\n\nexport const SplitShippingTotals = (props: ISplitShippingTotalsProps): JSX.Element => {\n  const { targetedCarts, masterCart } = props;\n\n  const { t } = useTranslation();\n\n  function totalTargetedCartsShippingRaw(): number {\n    if (!targetedCarts || !targetedCarts.length) {\n      return -1;\n    }\n    let valid = true;\n    let total = 0;\n    targetedCarts.forEach(x => {\n      if (x.NothingToShip) {\n        // Skip\n        return true;\n      }\n      if (!x.RateQuotes\n        || !x.RateQuotes.length\n        || !x.RateQuotes.some((y: RateQuoteModel) => y.Active && y.Selected)\n      ) {\n        valid = false;\n        return false;\n      }\n      const selectedRateQuote = x.RateQuotes.find((y: RateQuoteModel) => y.Active && y.Selected);\n      total += selectedRateQuote.Rate;\n      return true;\n    });\n    return valid ? total : -1;\n  }\n\n  function totalTargetedCartsTaxesRaw(): number {\n    if (!targetedCarts?.length) {\n      return 0;\n    }\n    return _.sum(targetedCarts.map(x => x.Totals?.Tax ?? 0));\n  }\n\n  function grandTotal(type: string = ServiceStrings.carts.types.cart): string {\n    const shipping = totalTargetedCartsShippingRaw();\n    if (shipping < 0) {\n      return t(\"ui.storefront.SalesOrderStatuses.Pending\", \"Pending\");\n    }\n    const tax = totalTargetedCartsTaxesRaw();\n    const totals: CartTotals = masterCart.Totals;\n    if (!totals) {\n      return currencyFormatter.format(0);\n    }\n    const newTotal\n      = (totals.SubTotal || 0)\n      + (shipping || 0)\n      + (totals.Handling || 0)\n      + (totals.Fees || 0)\n      + (tax || 0)\n      // eslint-disable-next-line @typescript-eslint/no-extra-parens\n      + (Math.abs(totals.Discounts || 0) * -1);\n    return currencyFormatter.format(newTotal);\n  }\n\n  return (\n    <Table borderless\n      className=\"table-shadow-none table-sm\">\n      <colgroup>\n        <col className=\"w-99\" />\n        <col />\n      </colgroup>\n      <tbody>\n        <tr>\n          <td className=\"ps-0\">\n            <span id=\"TotalShippingText\">\n              {t(\n                \"ui.storefront.checkout.splitShipping.TotalShipping\",\n                \"Total Shipping\"\n              )}\n            </span>\n          </td>\n          <td className=\"text-end pe-0\">\n            <span id=\"TotalShippingAmountText\">\n              {currencyFormatter.format(\n                targetedCarts.reduce((accu, curCart) => {\n                  if (curCart.NothingToShip) {\n                    return accu;\n                  }\n                  if (!Array.isArray(curCart.RateQuotes) || !curCart.RateQuotes.length) {\n                    return accu;\n                  }\n                  const selectedRateQuote = curCart.RateQuotes?.find(\n                    (rq: RateQuoteModel) => rq.Active && rq.Selected\n                  );\n                  if (!selectedRateQuote) {\n                    return accu;\n                  }\n                  return accu + selectedRateQuote.Rate;\n                }, 0)\n              )}\n            </span>\n          </td>\n        </tr>\n        <tr>\n          <td className=\"ps-0\">\n            <span id=\"TotalTaxesText\">\n              {t(\"ui.storefront.checkout.splitShipping.TotalTaxes\", \"Total Taxes\")}\n            </span>\n          </td>\n          <td className=\"text-end pe-0\">\n            <span id=\"TotalTaxesAmountText\">\n              {currencyFormatter.format(totalTargetedCartsTaxesRaw())}\n            </span>\n          </td>\n        </tr>\n        <tr>\n          <td colSpan={2} className=\"px-0\">\n            <div className=\"border-0 border-2 border-black border-top my-1\"></div>\n          </td>\n        </tr>\n        <tr>\n          <td className=\"ps-0\">\n            <span id=\"NewGrandTotalText\">\n              {t(\"ui.storefront.checkout.splitShipping.NewGrandTotal\", \"New Grand Total\")}\n            </span>\n          </td>\n          <td className=\"text-end pe-0\">\n            <span id=\"NewGrandTotalAmountText\">{grandTotal()}</span>\n          </td>\n        </tr>\n      </tbody>\n    </Table>\n  );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Form, Row, Table } from \"react-bootstrap\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { IPurchaseRateQuotesManagerWidgetProps } from \"src/Checkout/_checkoutTypes\";\n\ntype TPurchaseRateQuotesManagerWidgetSortBy = \"rate\" | \"estDel\";\n\nexport const PurchaseRateQuotesManagerWidget = (props: IPurchaseRateQuotesManagerWidgetProps): JSX.Element => {\n  const { quotes, onRateSelected } = props;\n\n  const activeQuote = Array.isArray(quotes) ? quotes.find(q => q.Active && q.Selected) : null;\n\n  const [ sortBy, setSortBy ] = useState<TPurchaseRateQuotesManagerWidgetSortBy>(\"rate\");\n  const [ rateSortAsc, setRateSortAsc ] = useState(true);\n  const [ selectedShippingRate, setSelectedShippingRate ] = useState(activeQuote ?? null);\n\n  const { t } = useTranslation();\n\n  const handleRateHeadingClicked = (): void => {\n    if (sortBy === \"rate\") {\n      setRateSortAsc(!rateSortAsc);\n    } else {\n      setSortBy(\"rate\");\n      setRateSortAsc(true);\n    }\n  };\n\n  return (\n    <Row>\n      <Col xs={12}>\n        <Table size=\"sm\"\n          responsive\n          striped\n          hover\n          className=\"col-sm-12 m-0 table-shadow-none\">\n          <colgroup>\n            <col className=\"w-1\" />\n            <col className=\"w-40\" />\n            <col className=\"w-10\" />\n          </colgroup>\n          <thead className=\"border-medium border-left-0 border-right-0\">\n            <tr className=\"border-0\">\n              <th>&nbsp;</th>\n              <th\n                className={`fw-normal border-0 p-2 sortable ${sortBy === \"rate\" ? rateSortAsc ? \"asc\" : \"desc\" : \"\"}`}\n                onClick={handleRateHeadingClicked}\n                id=\"RateText\"\n                data-translate=\"Rate\">\n                Rate\n              </th>\n              <th\n                className=\"fw-normal border-0 p-2\"\n                id=\"PriceText\"\n                data-translate=\"Price\">\n                Price\n              </th>\n            </tr>\n          </thead>\n          <tbody className=\"border-top-0\">\n            {Array.isArray(quotes)\n              ? [ ...quotes ]\n                .sort((a, b) => {\n                  let returnValue = 0;\n                  switch (sortBy) {\n                    case \"rate\": {\n                      returnValue = rateSortAsc ? a.Rate - b.Rate : b.Rate - a.Rate;\n                      break;\n                    }\n                    default: {\n                      break;\n                    }\n                  }\n                  return returnValue;\n                })\n                .map(\n                  (q, index): JSX.Element => {\n                    const isSelectedQuote = selectedShippingRate && selectedShippingRate.ID === q.ID;\n                    return (\n                      <tr\n                        key={q.ID}\n                        className={isSelectedQuote ? \"table-success\" : \"\"}>\n                        <td className={`align-middle text-center ${isSelectedQuote ? \"shadow-none\" : \"\"}`}>\n                          <Form.Check.Input\n                            className=\"custom-control-input\"\n                            type=\"radio\"\n                            data-sid={`RateQuote_${index}`}\n                            checked={isSelectedQuote ? isSelectedQuote : false}\n                            onChange={() => {\n                              setSelectedShippingRate(q);\n                              if (onRateSelected) {\n                                onRateSelected(q);\n                              }\n                            }}\n                          />\n                        </td>\n                        <td className={`p-2 py-3 ${isSelectedQuote\n                          ? \"shadow-none text-success\"\n                          : \"text-dark-emphasis\"\n                        }`}>\n                          <Form.Check className=\"custom-control custom-radio ps-0 mb-0\" id={`RateQuote_${index}`}>\n                            <Form.Check.Label\n                              className=\"custom-control-label mb-0 pointer\"\n                              onClick={() => {\n                                setSelectedShippingRate(q);\n                                if (onRateSelected) {\n                                  onRateSelected(q);\n                                }\n                              }}>\n                              {q.ShipCarrierMethodName}\n                            </Form.Check.Label>\n                          </Form.Check>\n                        </td>\n                        <td className={`p-2 py-3 ${isSelectedQuote\n                          ? \"shadow-none text-success\"\n                          : \"text-dark-emphasis\"\n                        }`}>\n                          <Form.Label className=\"custom-control ps-0 mb-0 pointer\" id={`RateCurrency_${index}`}>\n                            {q.Rate > 0\n                              ? <span>{currencyFormatter.format(q.Rate)}</span>\n                              : <span className=\"text-success\">{t(\"ui.storefront.common.Free\")}</span>\n                            }\n                          </Form.Label>\n                        </td>\n                      </tr>\n                    );\n                  }\n                )\n              : null}\n            {/* {Array.isArray(quotes)\n              && <tr>\n                <td colSpan={4}>\n                  <Button\n                    id=\"btnShowMoreLess\"\n                    variant=\"secondary\"\n                    className=\"w-100\"\n                    onClick={() => {\n                      quantityOfRatesShown >= quotes.length ? showLess() : showMore();\n                    }}>\n                    {t(\n                      `${\n                        quantityOfRatesShown >= quotes.length\n                          ? \"ui.storefront.checkout.views.shippingInformation.showLess\"\n                          : \"ui.storefront.checkout.views.shippingInformation.showMore\"\n                      }`\n                    )}\n                  </Button>\n                </td>\n              </tr>\n            } */}\n          </tbody>\n        </Table>\n      </Col>\n    </Row>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"productsToBeShippedHeader\":\"CheckoutSplitShippingStep_productsToBeShippedHeader__i49jN\"};","import { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n  AccountContactModel,\n  SalesItemTargetBaseModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport { AddToCartQuantitySelector } from \"src/Cart/controls\";\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\n\ninterface ISplitShippingTargetProps {\n  target: SalesItemTargetBaseModel;\n  accountContacts: AccountContactModel[];\n  onContactChanged: (contact: AccountContactModel) => void;\n  onAddressAdded: (newAddressData: AccountContactModel) => void;\n  decreaseDisabled: boolean;\n  increaseDisabled: boolean;\n  onQuantityChanged: (val: number) => void;\n  removeDisabled: boolean;\n  addDisabled: boolean;\n  onRemoveClicked: () => void;\n  onAddClicked: () => void;\n  index?: string;\n}\n\nexport const SplitShippingTarget = (props: ISplitShippingTargetProps): JSX.Element => {\n  const {\n    target,\n    accountContacts,\n    onContactChanged,\n    onAddressAdded,\n    decreaseDisabled,\n    increaseDisabled,\n    onQuantityChanged,\n    removeDisabled,\n    addDisabled,\n    onRemoveClicked,\n    onAddClicked,\n    index\n  } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Row>\n      <Col xs={12} md>\n        <div className=\"form-group mb-0\">\n          <ContactSwitch\n            hideAddressBlock={true}\n            allowAdd={true}\n            useAddButton={true}\n            initialContact={\n              target.DestinationContact\n                ? accountContacts.find(ac => ac.SlaveID === target.DestinationContact.ID)\n                : null\n            }\n            accountContacts={accountContacts}\n            onChange={onContactChanged}\n            onAddressAdded={onAddressAdded}\n            ddSelectAddressDataSID={`ddSelectAddressDataSID_${index}`}\n            btnAddAddressDataSID={`btnAddAddressDataSID_${index}`}\n            isShippingAddress={true}\n          />\n        </div>\n      </Col>\n      <Col md={3}>\n        <AddToCartQuantitySelector\n          id={`${target.SerializableAttributes.InternalTrackingID.Value}_${target.Quantity}`}\n          key={`${target.SerializableAttributes.InternalTrackingID.Value}_${target.Quantity}`}\n          initialValue={target.Quantity}\n          decreaseDisabled={decreaseDisabled}\n          increaseDisabled={increaseDisabled}\n          useInput={false}\n          onChange={onQuantityChanged}\n          debounceMS={0}\n        />\n      </Col>\n      <Col xs=\"auto\">\n        <Button\n          id=\"btnCheckoutSplitShippingRemoveTarget\"\n          type=\"button\"\n          variant=\"outline-danger\"\n          disabled={removeDisabled}\n          onClick={onRemoveClicked}>\n          <i className=\"fal fa-fw fa-trash\" />\n          <span className=\"sr-only\">{t(\"ui.storefront.checkout.splitShipping.RemoveTarget\")}</span>\n        </Button>\n        <Button\n          id=\"btnCheckoutSplitShippingAddTarget\"\n          type=\"button\"\n          variant=\"outline-success\"\n          disabled={addDisabled}\n          onClick={onAddClicked}>\n          <i className=\"fal fa-fw fa-plus\" />\n          <span className=\"sr-only\">{t(\"ui.storefront.checkout.splitShipping.AddTarget\")}</span>\n        </Button>\n      </Col>\n    </Row>\n  );\n};\n","import { Dispatch, Fragment, SetStateAction } from \"react\";\nimport { Card, Col, Form, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { AccountContactModel, CartModel, SalesItemTargetBaseModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { SplitShippingTarget } from \"src/Checkout/steps/shipping/SplitShippingTarget\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\nimport {\n  assignDestinationContactToAllTargets,\n  canAllocateQuantity,\n  getAvailableAccountContactsForTarget,\n  itemsExist,\n  targetFactory\n} from \"src/Checkout/steps/shipping/checkoutShippingFunctions\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport { TGroup, TItem } from \"src/Checkout/_checkoutTypes\";\nimport { ContactSwitch } from \"../../../Dashboard/AddressBook/ContactSwitch\";\n\ninterface ICheckoutTargetsProps {\n  cart: CartModel;\n  cefConfig: CEFConfig;\n  grouped: TGroup;\n  parentViewState: IViewState;\n  parentSetRunning: Function;\n  parentFinishRunning: Function;\n  setGrouped: Function;\n  shippingRatesNeeded: boolean;\n  submitDisabled: boolean;\n  onTargetShippingContactUpdated?: (groupedWithChanged: TGroup) => void;\n  handleRegionRestriction?: (val: boolean) => void;\n  selectedRegionIsRestricted?: boolean;\n  setSelectedRegionIsRestricted?: Dispatch<SetStateAction<boolean>>;\n}\n\nexport const CheckoutTargets = (props: ICheckoutTargetsProps): JSX.Element => {\n  const {\n    grouped,\n    setGrouped,\n    cefConfig,\n    parentViewState,\n    parentSetRunning,\n    parentFinishRunning,\n    onTargetShippingContactUpdated,\n    handleRegionRestriction\n  } = props;\n\n  const addressBookFactory = useAddressBookFactory();\n  const addressBook = useAddressBook();\n  const { t } = useTranslation();\n\n  function blankDestinationContactInfo(groupKey: string, salesItem: TItem, target: SalesItemTargetBaseModel): void {\n    const groupedCopy = [ ...grouped ];\n    const relevantGroup = groupedCopy.find(g => g.key === groupKey);\n    if (!relevantGroup) {\n      return;\n    }\n    const relevantSalesItem = relevantGroup.salesItems.find((sItem: TItem) => sItem.ID === salesItem.ID);\n    if (!relevantSalesItem) {\n      return;\n    }\n    for (let i = 0; i < relevantSalesItem.Targets.length; i++) {\n      const currentTarget = relevantSalesItem.Targets[i];\n      if (\n        currentTarget.SerializableAttributes.InternalTrackingID.Value\n        === target.SerializableAttributes.InternalTrackingID.Value\n      ) {\n        currentTarget.DestinationContactID = null;\n        currentTarget.DestinationContact = null;\n        currentTarget.DestinationContactKey = null;\n        break;\n      }\n    }\n    setGrouped(groupedCopy);\n  }\n\n  async function onNewAddressEntered(\n      newAddressData: AccountContactModel,\n      targetData: {\n      groupKey: string;\n      salesItem: TItem;\n      target: SalesItemTargetBaseModel;\n    }\n  ) {\n    parentSetRunning(t(\"ui.storefront.checkout.splitShipping.SavingANewAddress.Ellipses\"));\n    try {\n      const newContact = await addressBookFactory.createNewAddress(newAddressData);\n      const { groupKey, salesItem, target } = targetData;\n      setDestinationContactForTarget(groupKey, salesItem, target, newContact);\n      parentFinishRunning();\n    } catch (err) {\n      if (cefConfig?.debug) {\n        console.error(err);\n      }\n      parentFinishRunning(true, \"Failed to create new address\");\n    }\n  }\n\n  async function onNewAddressEnteredOnlyAllowOneDestination(newAddressData: AccountContactModel) {\n    parentSetRunning(t(\"ui.storefront.checkout.splitShipping.SavingANewAddress.Ellipses\"));\n    try {\n      let hasShipping = addressBook.find(x => !x.IsBilling);\n      newAddressData.IsPrimary = true;\n\n      const deepmerge = (window as any).deepmerge || _.merge;\n      if (hasShipping) {\n        const options = {\n          customMerge: (key: any) => (targetVal: any, sourceVal: any) => targetVal || sourceVal\n        };\n        hasShipping = deepmerge(newAddressData, hasShipping, options);\n      }\n\n      let newContact = null;\n\n      console.log(addressBook);\n\n      if (hasShipping) {\n        hasShipping.Slave.CustomKey = '-Shipping';\n        hasShipping.Slave.TypeID = 3;\n        await addressBookFactory.updateExistingAddress(hasShipping);\n        newContact = hasShipping;\n      } else {\n        newContact = await addressBookFactory.createNewAddress(newAddressData);\n      }\n      const groupedCopy = _.cloneDeep(grouped);\n      for (let i = 0; i < groupedCopy.length; i++) {\n        const itemsWithAssignedContact = assignDestinationContactToAllTargets(groupedCopy[i].salesItems, newContact || hasShipping);\n        groupedCopy[i].salesItems = itemsWithAssignedContact;\n      }\n\n      setGrouped(groupedCopy);\n      parentFinishRunning();\n    } catch (err) {\n      if (cefConfig?.debug) {\n        console.error(err);\n      }\n      parentFinishRunning(true, \"Failed to create new address\");\n    }\n  }\n\n  function setDestinationContactForTarget(\n      groupKey: string,\n      salesItem: TItem,\n      target: SalesItemTargetBaseModel,\n      contact: AccountContactModel\n  ): void {\n    const groupedCopy = [ ...grouped ];\n    const relevantGroup = groupedCopy.find(g => g.key === groupKey);\n    if (!relevantGroup) {\n      return;\n    }\n    const relevantSalesItem = relevantGroup.salesItems.find((sItem: TItem) => sItem.ID === salesItem.ID);\n    if (!relevantSalesItem) {\n      return;\n    }\n    for (let i = 0; i < relevantSalesItem.Targets.length; i++) {\n      const currentTarget = relevantSalesItem.Targets[i];\n      if (\n        currentTarget.SerializableAttributes.InternalTrackingID.Value\n        === target.SerializableAttributes.InternalTrackingID.Value\n      ) {\n        currentTarget.DestinationContactID = contact.Slave.ID;\n        currentTarget.DestinationContact = contact.Slave;\n        currentTarget.DestinationContactKey\n          = currentTarget.DestinationContact && currentTarget.DestinationContact.CustomKey;\n        currentTarget.TypeID = null;\n        currentTarget.TypeKey = ServiceStrings.attributes.shipToHome;\n        currentTarget.TypeName = null;\n        currentTarget.Type = null;\n        break;\n      }\n    }\n    setGrouped(groupedCopy);\n    if (_.isFunction(onTargetShippingContactUpdated)) {\n      onTargetShippingContactUpdated(groupedCopy);\n    }\n  }\n\n  function allocateQuantity(salesItem: TItem, toTarget: SalesItemTargetBaseModel, adjustment: number = 1): boolean {\n    if (!canAllocateQuantity(salesItem, toTarget, adjustment)) {\n      return false;\n    }\n    consoleDebug(\"Val-0: Attempting to allocate\");\n    for (let i = 0; i < salesItem.Targets.length; i++) {\n      const fromTarget = salesItem.Targets[i];\n      if (\n        fromTarget.SerializableAttributes.InternalTrackingID.Value\n        === toTarget.SerializableAttributes.InternalTrackingID.Value\n      ) {\n        consoleDebug(\"Val-1: Same target, can't allocate\");\n        continue;\n      }\n      if (adjustment >= fromTarget.Quantity) {\n        consoleDebug(\"Val-2: can't leave fromTarget quantity at less than 1, can't allocate\");\n        consoleDebug(`before: ${fromTarget.Quantity}`);\n        consoleDebug(`before: ${toTarget.Quantity}`);\n        continue;\n      }\n      consoleDebug(\"Val-3: Allocation checks passed, allocating now\");\n      const groupedCopy = [ ...grouped ];\n      const relevantGroupIndex = groupedCopy.findIndex(\n        group => group.salesItems.find(sItem => sItem.ID === salesItem.ID)\n      );\n      groupedCopy[relevantGroupIndex].salesItems = groupedCopy[relevantGroupIndex].salesItems.map((sItem: TItem) => {\n        if (sItem.ID === salesItem.ID) {\n          return {\n            ...sItem,\n            Targets: sItem.Targets.map(tI => {\n              if (\n                tI.SerializableAttributes.InternalTrackingID.Value\n                === fromTarget.SerializableAttributes.InternalTrackingID.Value\n              ) {\n                tI.Quantity -= adjustment;\n              } else if (\n                tI.SerializableAttributes.InternalTrackingID.Value\n                === toTarget.SerializableAttributes.InternalTrackingID.Value\n              ) {\n                tI.Quantity += adjustment;\n              }\n              return tI;\n            })\n          };\n        }\n        return sItem;\n      });\n      setGrouped(groupedCopy);\n      break;\n    }\n    return false;\n  }\n\n  function addShippingTarget(groupKey: string, item: TItem): void {\n    if (!itemsExist(item.Targets)) {\n      // NOTE: This should never happen, before this point, the UI has at least\n      // Created a default target to use in initializeSalesItems\n      throw Error(\n        `Cannot add shipping target. \\n Targets Exist: ${Boolean(item.Targets)} \\n Targets Amount: ${\n          item.Targets?.length ?? \"null\"\n        }`\n      );\n    }\n    const groupedCopy = [ ...grouped ];\n    const relevantGroup = groupedCopy.find(gp => gp.key === groupKey);\n    if (!relevantGroup || !relevantGroup.salesItems.find(salesItem => salesItem.ID === item.ID)) {\n      return;\n    }\n    for (let i = 0; i < item.Targets.length; i++) {\n      if (canAllocateQuantity(item, item.Targets[i], -1)) {\n        const newTarget = targetFactory(1);\n        relevantGroup.salesItems = relevantGroup.salesItems.map((salesItem: TItem) => {\n          if (salesItem.ID === item.ID) {\n            salesItem.Targets[i].Quantity -= 1;\n            salesItem.Targets.push(newTarget);\n          }\n          return salesItem;\n        });\n        setGrouped(groupedCopy);\n        break;\n      }\n    }\n  }\n\n  function removeShippingTarget(groupKey: string, item: TItem, target: SalesItemTargetBaseModel): void {\n    if (!groupKey || !itemsExist(item.Targets) || !target) {\n      return;\n    }\n    const groupedCopy = [ ...grouped ];\n    const relevantGroup = groupedCopy.find(group => group.key === groupKey);\n    if (!relevantGroup) {\n      return;\n    }\n    const relevantSalesItem = relevantGroup.salesItems.find(sItem => sItem.ID === item.ID);\n    if (!relevantSalesItem) {\n      return;\n    }\n    const targetToRemove = relevantSalesItem.Targets.find(tI => {\n      const curTargetInternalTrackingID = tI.SerializableAttributes.InternalTrackingID.Value;\n      return curTargetInternalTrackingID === target.SerializableAttributes.InternalTrackingID.Value;\n    });\n    const toAddQuantity: number = targetToRemove.Quantity;\n    relevantSalesItem.Targets = relevantSalesItem.Targets.filter((tI: SalesItemTargetBaseModel) => {\n      const curTargetInternalTrackingID = tI.SerializableAttributes.InternalTrackingID.Value;\n      return curTargetInternalTrackingID !== target.SerializableAttributes.InternalTrackingID.Value;\n    });\n    relevantSalesItem.Targets[0].Quantity += toAddQuantity;\n    setGrouped(groupedCopy);\n    // $rootScope.$broadcast(cvServiceStrings.events.shipping.revalidateStep);\n  }\n\n  function consoleDebug(...args: unknown[]) {\n    if (cefConfig?.debug) {\n      console.debug(...args);\n    }\n  }\n\n  const contactSwitchUpdateAllTargets = (contact: AccountContactModel) => {\n    for (let i = 0; i < grouped.length; i++) {\n      const group = grouped[i];\n      for (let j = 0; j < group.salesItems.length; j++) {\n        const salesItem = group.salesItems[j];\n        if (!_.isArray(salesItem.Targets)) {\n          continue;\n        }\n        for (let k = 0; k < salesItem.Targets.length; k++) {\n          const target = salesItem.Targets[k];\n          if (!contact) {\n            blankDestinationContactInfo(group.key, salesItem, target);\n            return;\n          }\n          setDestinationContactForTarget(group.key, salesItem, target, contact);\n        }\n      }\n    }\n  };\n\n  if (cefConfig.featureSet.shipping.splitShipping.onlyAllowOneDestination) {\n    return (\n      <Row>\n        <Col xs={12}>\n          <Form.Group className=\"mb-0\">\n            <ContactSwitch\n              allowAdd={true}\n              useAddButton={true}\n              initialContact={_.find(addressBook, ac => ac.IsPrimary)}\n              accountContacts={addressBook?.filter(x => x.IsPrimary === true)}\n              onChange={contact => contactSwitchUpdateAllTargets(contact)}\n              // eslint-disable-next-line max-len\n              onAddressAdded={(newAddressData: AccountContactModel) => onNewAddressEnteredOnlyAllowOneDestination(newAddressData)\n              }\n              handleRegionRestriction={handleRegionRestriction}\n              isShippingAddress={true}\n            />\n          </Form.Group>\n        </Col>\n      </Row>\n    );\n  }\n\n  return (\n    <Row>\n      <Col xs={12}>\n        {grouped\n          && grouped.length\n          && grouped.map(group => (\n            <Card\n              className={`mb-3 ${parentViewState.hasError ? \"\" : \"is-valid\"}`}\n              key={group.key}>\n              <div\n                data-sid=\"txtCardHeader\"\n                id={`ShipmentGroupTitle_${group.key}`}\n                className=\"card-header ps-3\">\n                {group.key}\n              </div>\n              {group.salesItems.map((salesItem: TItem, outerIndex: number) => {\n                return (\n                  <Fragment key={salesItem.ID}>\n                    <Card.Body className=\"px-3 pt-3 pb-1\">\n                      <Card.Title\n                        as=\"div\"\n                        className={`mb-${\n                          salesItem.ProductNothingToShip && outerIndex === group.salesItems.length - 1 ? 2 : 0\n                        }`}\n                        id={`SplitShippingProductName_${outerIndex}`}>\n                        {(salesItem.ProductNothingToShip ? `${salesItem.TotalQuantity ?? 0} x ` : \"\")\n                          + (salesItem.Name\n                            ? `${salesItem.Name} (${salesItem.Sku})`\n                            : `${salesItem.ProductName} (${salesItem.ProductKey})`)}\n                      </Card.Title>\n                    </Card.Body>\n                    {salesItem.ProductNothingToShip ? null : (\n                      <div className=\"list-group list-group-flush border-0\">\n                        <div className=\"list-group-item px-3 pt-1 pb-3 border-bottom\">\n                          {salesItem.Targets?.map((target: SalesItemTargetBaseModel, index) => (\n                            <SplitShippingTarget\n                              key={target.SerializableAttributes.InternalTrackingID.Value}\n                              target={target}\n                              accountContacts={getAvailableAccountContactsForTarget(\n                                addressBook,\n                                target,\n                                salesItem.Targets\n                              )}\n                              onContactChanged={(contact: AccountContactModel) => {\n                                if (!contact) {\n                                  blankDestinationContactInfo(group.key, salesItem, target);\n                                  return;\n                                }\n                                setDestinationContactForTarget(group.key, salesItem, target, contact);\n                              }}\n                              onAddressAdded={(newAddressData: AccountContactModel) => {\n                                onNewAddressEntered(newAddressData, {\n                                  groupKey: group.key,\n                                  salesItem,\n                                  target\n                                });\n                              }}\n                              decreaseDisabled={\n                                target.Quantity <= 1 || salesItem.Targets.length <= 1 || parentViewState.running\n                              }\n                              increaseDisabled={\n                                (target.Quantity ?? 0)\n                                  >= (salesItem.TotalQuantity ?? 0) - (salesItem.Targets.length - 1)\n                                || parentViewState.running\n                              }\n                              onQuantityChanged={(val: number) => {\n                                let adjustment: number = 0;\n                                if (val > target.Quantity) {\n                                  adjustment = 1;\n                                } else {\n                                  adjustment = -1;\n                                }\n                                allocateQuantity(salesItem, target, adjustment);\n                              }}\n                              removeDisabled={salesItem.Targets.length <= 1 || parentViewState.running}\n                              addDisabled={\n                                salesItem.Targets.length >= (salesItem.TotalQuantity ?? 0) || parentViewState.running\n                              }\n                              onRemoveClicked={() => {\n                                removeShippingTarget(group.key, salesItem, target);\n                              }}\n                              onAddClicked={() => {\n                                addShippingTarget(group.key, salesItem);\n                              }}\n                              index={`${outerIndex}_${index}`}\n                            />\n                          ))}\n                        </div>\n                      </div>\n                    )}\n                  </Fragment>\n                );\n              })}\n            </Card>\n          ))}\n      </Col>\n    </Row>\n  );\n};\n","/* eslint-disable max-len */\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { Alert, Button, Card, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { setCartByType, useCart } from \"src/_redux/slices/cartSlice\";\nimport {\n  cleanTargets,\n  doCallbackIfTargetsExist,\n  generateTargets,\n  getSalesItemsGroupedByTitle,\n  itemsExist,\n  setTargetDestinations\n} from \"src/Checkout/steps/shipping/checkoutShippingFunctions\";\nimport { AccountContactModel, RateQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ApplyCurrentCartShippingRateQuoteDto } from \"src/_api\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\nimport googleTagManagerService from \"src/_shared/tracking/googleTagManagerService\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { SplitShippingTotals } from \"src/Checkout/steps/shipping/SplitShippingTotals\";\nimport { PurchaseRateQuotesManagerWidget } from \"src/Checkout/PurchaseRateQuotesManagerWidget\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { AddressBlock } from \"../../../Dashboard/AddressBook/AddressBlock\";\n// @ts-ignore\nimport classes from \"./CheckoutSplitShippingStep.module.scss\";\nimport { ICheckoutSplitShippingStepProps, TGroup, TItem } from \"../../_checkoutTypes\";\nimport { CheckoutTargets } from \"./CheckoutTargets\";\n\nexport const CheckoutSplitShippingStep = (props: ICheckoutSplitShippingStepProps): JSX.Element => {\n  const { cartType, continueText } = props;\n\n  const [ grouped, setGrouped ] = useState<TGroup>(null);\n  const [ haveInitializedSalesItems, setHaveInitializedSalesItems ] = useState<boolean>(false);\n  const [ selectedRegionIsRestricted, setSelectedRegionIsRestricted ] = useState<boolean>(false);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const cartFactory = useCartFactory();\n  const checkoutContext = useCheckoutContext();\n  const addressBook = useAddressBook();\n  const cefConfig = useCefConfig();\n  const cart = useCart(cartType);\n  const dispatch = useDispatch();\n\n  const onCompleteCheckoutSplitShippingStep = (): void => {\n    checkoutContext.dispatch({\n      type: \"splitShippingStepComplete\",\n      payload: grouped\n    });\n  };\n\n  useEffect(() => {\n    if (!addressBook || haveInitializedSalesItems || !cart) {\n      return;\n    }\n    const defaultShippingContact = addressBook?.find(ac => ac.IsPrimary);\n    if (itemsExist(cart?.SalesItems)) {\n      initializeSalesItems(defaultShippingContact);\n      setHaveInitializedSalesItems(true);\n    }\n  }, [ addressBook, haveInitializedSalesItems, cart ]);\n\n  useEffect(() => {\n    // In case this step is returned to\n    onChangeWithRatesReset();\n  }, []);\n\n  const onChangeWithRatesReset = () => {\n    setRunning();\n    cvApi.shopping\n      .ClearCurrentCartShippingRateQuote({ TypeName: cartType })\n      .then(_res => cvApi.shopping.GetCurrentCart({\n        TypeName: cartType,\n        Validate: true\n      }))\n      .then(res => {\n        dispatch(setCartByType({ type: cartType, cart: res.data.Result }));\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to clear current cart shipping rate quote\");\n      });\n  };\n\n  function initializeSalesItems(defaultShippingContact?: AccountContactModel): void {\n    if (!cart || !itemsExist(cart.SalesItems)) {\n      return;\n    }\n\n    let validatedSalesItems = generateTargets(cart.SalesItems, defaultShippingContact);\n\n    if (addressBook) {\n      // Assign target destination contacts\n      validatedSalesItems = validatedSalesItems.map((sItem: TItem) => ({\n        ...sItem,\n        Targets: doCallbackIfTargetsExist(sItem, () => setTargetDestinations(sItem.Targets, addressBook))\n      }));\n    }\n\n    const validGrouped = getSalesItemsGroupedByTitle(validatedSalesItems);\n\n    setGrouped(validGrouped);\n  }\n\n  const rateQuotesHaveBeenSelected = useMemo(() => {\n    return Boolean(\n      checkoutContext?.targetedCarts?.every(c => (c.RateQuotes as RateQuoteModel[]).some(y => y.Selected))\n    );\n  }, [ checkoutContext ]);\n\n  function onRateQuoteSelected(cartTypeName: string, selectedRateQuoteID: number): void {\n    setRunning();\n    const dto: ApplyCurrentCartShippingRateQuoteDto = {\n      // TODO: RequestedShipDate\n      TypeName: cartTypeName,\n      RateQuoteID: selectedRateQuoteID\n    };\n    cvApi.shopping\n      .ApplyCurrentCartShippingRateQuote(dto)\n      .then(r => {\n        if (!r.data.ActionSucceeded) {\n          finishRunning(true, null, r.data.Messages);\n          return Promise.reject(new Error(\"Action failed\"));\n        }\n        return cartFactory.reloadCart(cartTypeName, true);\n      })\n      .then(updatedCart => {\n        if (cefConfig.googleTagManager.enabled) {\n          googleTagManagerService.ga4checkoutOption(\n            updatedCart,\n            \"eec.addShippingInfo\",\n            _.find(updatedCart.RateQuotes, rq => rq.ID === selectedRateQuoteID)?.ShipCarrierMethodName\n          );\n        }\n        checkoutContext.setTargetedCarts(prevTargetedCarts => prevTargetedCarts.map(x => {\n          if (x.TypeName === cartTypeName) {\n            return updatedCart;\n          }\n          return x;\n        }));\n        finishRunning();\n      })\n      .catch(reason => finishRunning(true, reason));\n  }\n\n  const onGetShippingRateQuotesClicked = async (latestGrouped: TGroup = grouped): Promise<void> => {\n    setRunning();\n    try {\n      const items: TItem[] = latestGrouped\n        .reduce((accu, group) => [ ...accu, ...group.salesItems ], [])\n        .filter((x: TItem) => !x.ProductNothingToShip)\n        .map(item => ({ ...item, Targets: cleanTargets(item) }));\n      await cvApi.shopping.UpdateCartItems({\n        TypeName: cartType,\n        Items: items\n      });\n      await checkoutContext.loadTargetedCarts();\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  };\n\n  const onContinueClicked = () => {\n    setRunning();\n    onCompleteCheckoutSplitShippingStep();\n    finishRunning();\n  };\n\n  const somethingToShip = Array.isArray(grouped)\n    ? grouped.find(grp => grp.salesItems.some(sItem => !sItem.ProductNothingToShip)) !== null\n    : false;\n\n  const shippingRatesNeeded = itemsExist(grouped) && somethingToShip;\n\n  const allTargetsHaveADestination: boolean\n    = grouped\n    // eslint-disable-next-line max-len\n    && grouped.every(g => g.salesItems.every(item => item.ProductNothingToShip || item.Targets.every(tgt => tgt.DestinationContact)));\n\n  const handleRegionRestriction = (val: boolean) => {\n    setSelectedRegionIsRestricted(val);\n  };\n  return (\n    <Row className=\"position-relative\">\n      {viewState.running && <LoadingWidget overlay={true} />}\n      <Col xs={12}>\n        <h4\n          className=\"mt-2 mb-3\"\n          id=\"WhichShippingAddressText\">\n          {t(somethingToShip ? \"ui.storefront.checkout.shippingTitle\" : \"Nothing to ship.\")}\n        </h4>\n      </Col>\n      <Col xs={12}>\n        <CheckoutTargets\n          cart={cart}\n          grouped={grouped}\n          setGrouped={setGrouped}\n          submitDisabled={false}\n          shippingRatesNeeded={shippingRatesNeeded}\n          cefConfig={cefConfig}\n          parentViewState={viewState}\n          parentSetRunning={setRunning}\n          parentFinishRunning={finishRunning}\n          onTargetShippingContactUpdated={g => {\n            onGetShippingRateQuotesClicked(g);\n          }}\n          handleRegionRestriction={handleRegionRestriction}\n        />\n        {selectedRegionIsRestricted && (\n          <Col\n            xs={12}\n            className=\"my-3\">\n            <Alert variant=\"danger\">\n              <span>\n                {t(\n                  \"ui.storefront.regions.restrictedRegionMessage\",\n                  \"The region you have selected is restricted and can not be shipped to.\"\n                )}\n              </span>\n            </Alert>\n          </Col>\n        )}\n        <Button\n          // variant=\"outline-black\"\n          className=\"d-block my-4 continue-btn\"\n          onClick={() => {\n            onGetShippingRateQuotesClicked();\n          }}\n          disabled={selectedRegionIsRestricted}>\n          {t(\"ui.storefront.checkout.steps.shipping.GetShippingRateQuotes\", \"Get Shipping Rate Quotes\")}\n        </Button>\n        {viewState.hasError && <ErrorView viewState={viewState} />}\n        {checkoutContext?.targetedCarts && !selectedRegionIsRestricted && (\n          <>\n            <Row className=\"mb-4\">\n              <Col xs={12}>\n                <h4>\n                  {t(\n                    \"ui.storefront.checkout.views.shippingInformation.reestimateShippingCost\",\n                    \"Re-estimate Shipping Cost\"\n                  )}\n                </h4>\n                <p className=\"mb-2\">\n                  {t(\n                    \"ui.storefront.checkout.steps.shipping.PleaseSelectPreferredRate\",\n                    \"Please select your preferred shipping rate from the options below.\"\n                  )}\n                </p>\n                <p className=\"mb-1 fw-bold\">Important Shipping Information</p>\n                <p className=\"mb-0\">\n                    Please note that expedited shipping timelines begin once the pharmacy fulfills your order, not from the date of purchase. Fulfillment times may vary based on prescription approval and processing.\n                </p>\n              </Col>\n            </Row>\n            {checkoutContext.targetedCarts.map(c => {\n              const { TypeName, NothingToShip, SalesItems } = c;\n              return (\n                <Row key={TypeName}>\n                  <Col xs={12}>\n                    <Card className=\"mb-3\">\n                      <Card.Header\n                        id=\"txtProductsBeingShipped\"\n                        className={`${classes.productsToBeShippedHeader} ps-3 overflow-hidden`}>\n                        {NothingToShip\n                          ? t(\"ui.storefront.checkout.steps.shipping.NonShippableProducts\", \"Non-shippable products\")\n                          : t(\"ui.storefront.checkout.steps.shipping.ProductBeingShipped\", \"Product being shipped\")}\n                      </Card.Header>\n                      <Card.Body className=\"p-3 border-bottom border-medium\">\n                        {SalesItems.sort((itemOne, itemTwo) => {\n                          if (itemOne.Name && itemTwo.Name) {\n                            return itemOne.Name > itemTwo.Name ? 1 : -1;\n                          }\n                          return itemOne.ProductName > itemTwo.ProductName ? 1 : -1;\n                        }).map((sItem, index) => (\n                          <div\n                            className=\"d-flex align-items-center\"\n                            key={sItem.ID}\n                            id={`ShipGroupProduct_${index}`}>\n                            <span className=\"me-3\">{sItem.Name ?? sItem.ProductName}</span>\n                            <span className=\"me-1 bg-medium rounded px-2\">SKU: {sItem.Sku ?? sItem.ProductKey}</span>\n                            <span className=\"bg-medium rounded px-2\">Qty: {sItem.TotalQuantity}</span>\n                          </div>\n                        ))}\n                      </Card.Body>\n                      {NothingToShip ? null : (\n                        <>\n                          <Card.Header id=\"txtYourFullAddress\">\n                            {t(\"ui.storefront.checkout.views.shippingInformation.yourFullAddress\")}\n                          </Card.Header>\n                          {c.ShippingContact ? (\n                            <Card.Body className=\"px-5 border-bottom border-medium\">\n                              <Row>\n                                <Col xs={12}>\n                                  <AddressBlock\n                                    hideIcons={true}\n                                    hideFirstName\n                                    hideLastName\n                                    address={c.ShippingContact.Address}\n                                    contact={c.ShippingContact}\n                                  />\n                                </Col>\n                              </Row>\n                            </Card.Body>\n                          ) : null}\n                          <Card.Header id=\"txtYourShippingRateQuotes\">\n                            {t(\"ui.storefront.cart.cartShippingEstimator.yourShippingRateQuotes\")}\n                          </Card.Header>\n                          <Card.Body className=\"p-0 border-bottom border-medium\">\n                            {c.ShippingContact ? (\n                              <div className=\"w-100\">\n                                <PurchaseRateQuotesManagerWidget\n                                  quotes={c.RateQuotes}\n                                  onRateSelected={rateQuote => {\n                                    onRateQuoteSelected(c.TypeName, rateQuote.ID);\n                                  }}\n                                />\n                              </div>\n                            ) : null}\n                          </Card.Body>\n                        </>\n                      )}\n                    </Card>\n                  </Col>\n                </Row>\n              );\n            })}\n            <Row>\n              <Col xs />\n              <Col\n                xs={12}\n                sm={3}>\n                <SplitShippingTotals\n                  targetedCarts={checkoutContext.targetedCarts}\n                  masterCart={cart}\n                />\n              </Col>\n            </Row>\n            <Row>\n              <Col xs={12}>\n                <div className=\"d-flex mb-4\">\n                  <Button\n                    id=\"btnGetShippingRateQuotes\"\n                    data-sid=\"btnGetShippingRateQuotes\"\n                    className=\"continue-btn\"\n                    // variant=\"primary\"\n                    disabled={(somethingToShip && !allTargetsHaveADestination) || !rateQuotesHaveBeenSelected}\n                    onClick={() => {\n                      if ((somethingToShip && !allTargetsHaveADestination) || !rateQuotesHaveBeenSelected) {\n                        return;\n                      }\n                      onContinueClicked();\n                    }}>\n                    {continueText}\n                  </Button>\n                </div>\n              </Col>\n            </Row>\n          </>\n        )}\n      </Col>\n    </Row>\n  );\n};\n","import { useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { IInvoiceFormData, IPaymentMethodInvoiceBodyProps } from \"src/Checkout/_checkoutTypes\";\nimport { TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { FileUploadWidget } from \"src/_shared/common/FileUploadWidget\";\nimport { FileEntityType } from \"src/_api/cvApi._DtoClasses\";\n\nconst thisYear = new Date().getFullYear();\n\nconst availableExpirationYears: number[] = [];\nfor (let i = 0; i < 11; i++) {\n  availableExpirationYears.push(thisYear + i);\n}\n\nexport const PaymentMethodInvoiceBody = (props: IPaymentMethodInvoiceBodyProps): JSX.Element => {\n  const { onSubmit, continueText, submitDisabled } = props;\n  const [ uploadedFileNames, setUploadedFileNames ] = useState<Array<string>>([]);\n  const { t } = useTranslation();\n\n  const {\n    register,\n    handleSubmit,\n    formState: { errors }\n  } = useForm<IInvoiceFormData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const onSubmitInvoiceForm: SubmitHandler<IInvoiceFormData> = (data): void => {\n    const { txtPONumber } = data;\n    onSubmit({\n      CustomerPurchaseOrderNumber: txtPONumber,\n      uploadedFileNames\n    });\n  };\n\n  return (\n    <Row as={Form}\n      className=\"mb-3\"\n      onSubmit={handleSubmit(onSubmitInvoiceForm)}>\n      <Col xs={12}>\n        <Row className=\"mb-3\">\n          <Col xs={12}>\n            <TextInputFormGroup\n              formIdentifier=\"txtPONumber\"\n              register={register}\n              errors={errors}\n              labelText=\"PO Number\"\n              labelKey=\"ui.storefront.checkout.views.paymentInformation.poNumber\"\n              required={true}\n              requiredMessage=\"Purchase Order Number is required\"\n              placeholderText=\"Enter your purchase order or reference number\"\n              placeholderKey=\"ui.storefront.checkout.views.paymentInformation.enterYourPurchaseOrderOrReferenceNumber\"\n            />\n            <FileUploadWidget\n              uploadType={FileEntityType.StoredFileSalesOrder}\n              uploadCallback={(newFileNames: string[]) => {\n                setUploadedFileNames(newFileNames);\n              }}\n              allowMultiple={false} />\n          </Col>\n        </Row>\n        <Row>\n          <Col xs={12}>\n            <Button\n              variant=\"primary\"\n              className={\"my-3\"}\n              disabled={submitDisabled}\n              id=\"btnSubmit_purchaseStepPayment\"\n              data-sid=\"btnSubmit_purchaseStepPayment\"\n              title=\"Confirm Order and Purchase\"\n              type=\"submit\">\n              {continueText\n                ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\n            </Button>\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { IPaymentMethodQuoteBodyProps } from \"src/Checkout/_checkoutTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\n\nexport const PaymentMethodQuoteBody = (props: IPaymentMethodQuoteBodyProps): JSX.Element => {\n  const { onSubmit, continueText, submitDisabled } = props;\n  const { t } = useTranslation();\n\n  return (\n    <Row className=\"mb-3\">\n      <Col xs={12}>\n        <p>{t(\"ui.storefront.checkout.views.paymentInformation.QuoteMeContent\")}</p>\n      </Col>\n      <Col xs={12}>\n        <Button\n          variant=\"primary\"\n          className={\"my-3\"}\n          id=\"btnSubmit_purchaseStepPayment\"\n          data-sid=\"btnSubmit_purchaseStepPayment\"\n          title={continueText ?? \"Confirm Order and Purchase\"}\n          disabled={submitDisabled}\n          onClick={() => onSubmit()}>\n          {continueText\n            ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\n        </Button>\n      </Col>\n    </Row>\n  );\n};\n","import { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { IPaymentMethodFreeBodyProps } from \"src/Checkout/_checkoutTypes\";\n\nexport const PaymentMethodFreeBody = (props: IPaymentMethodFreeBodyProps): JSX.Element => {\n  const { onSubmit, continueText, submitDisabled } = props;\n  const { t } = useTranslation();\n\n  return (\n    <Row className=\"mb-3\">\n      <Col xs={12}>\n        <p>{t(\"ui.storefront.purchasing.payments.method.free.Message\")}</p>\n      </Col>\n      <Col xs={12}>\n        <Button\n          variant=\"primary\"\n          className={\"my-3\"}\n          id=\"btnSubmit_purchaseStepPayment\"\n          data-sid=\"btnSubmit_purchaseStepPayment\"\n          title={continueText ?? \"Confirm Order and Purchase\"}\n          disabled={submitDisabled}\n          onClick={() => onSubmit()}>\n          {continueText\n            ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\n        </Button>\n      </Col>\n    </Row>\n  );\n};\n","/** @format */\n\nimport { IPaymentMethodECheckBodyProps } from \"src/Checkout/_checkoutTypes\";\n\n// eslint-disable-next-line max-len\nexport const PaymentMethodECheckBody = (props: IPaymentMethodECheckBodyProps): JSX.Element => <h1>PaymentMethodECheckBody Component</h1>;\n","/* eslint-disable arrow-body-style */\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { RootState } from \"src/_redux/store\";\nimport { setWallet } from \"src/_redux/slices/walletSlice\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useState } from \"react\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\n\nexport interface IWalletFactory {\n  addWalletEntry: (entry: WalletModel) => Promise<WalletModel>;\n  deactivateWalletEntry: (id: number) => Promise<void>;\n  markEntryAsDefault: (id: number) => Promise<void>;\n  reloadWallet: (force?: boolean) => Promise<void>;\n}\n\nexport const useWalletFactory = (): IWalletFactory | null => {\n  const dispatch = useDispatch();\n  // NOTE: Cannot use useWallet hook, since it uses this hook\n  const walletState: WalletModel[] = useSelector((state: RootState) => state.wallet.Wallet);\n\n  const [ walletFactory ] = useState<IWalletFactory>({\n    addWalletEntry: (entry: WalletModel): Promise<WalletModel> => {\n      // Make sure the first created wallet entry gets set as default\n      if (!walletState?.length || !walletState.find(w => w.IsDefault)) {\n        entry.IsDefault = true;\n      }\n      return cvApi.payments\n        .CreateCurrentUserWalletEntry(entry)\n        .then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            throw r?.data?.Messages ?? [ \"Failed to create new wallet\" ];\n          }\n          return walletFactory.reloadWallet(true).then(() => r.data.Result);\n        });\n    },\n\n    deactivateWalletEntry: (id: number): Promise<void> => {\n      return cvApi.payments\n        .DeactivateCurrentUserWalletEntry(id)\n        .then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            throw r?.data?.Messages ?? [ \"Failed to deactivate wallet entry\" ];\n          }\n          return walletFactory.reloadWallet(true);\n        });\n    },\n\n    markEntryAsDefault: (id: number): Promise<void> => {\n      return cvApi.payments\n        .CurrentUserMarkWalletEntryAsDefault(id)\n        .then(r => {\n          if (!r?.data?.ActionSucceeded) {\n            throw r?.data?.Messages ?? [ \"Failed to mark entry as default\" ];\n          }\n          return walletFactory.reloadWallet(true);\n        });\n    },\n\n    reloadWallet: (force?: boolean): Promise<void> => {\n      if (force) {\n        promiser.flush(\"loadWallet\");\n      }\n      return promiser.resolve(\n        \"loadWallet\",\n        () => cvApi.payments\n          .GetCurrentUserWallet()\n          .then(r => {\n            if (!r?.data?.ActionSucceeded) {\n              throw r?.data?.Messages ?? [ \"Failed to load wallet\" ];\n            }\n            const wallet = r.data.Result ?? [];\n            dispatch(setWallet(wallet));\n            return wallet;\n          })\n      ).then();\n    }\n  });\n\n  return walletFactory;\n};\n\nexport const convertWalletFormDataToWalletModel = (\n  data: INewWalletFormConfirmData,\n  currentUser?: UserModel,\n): WalletModel => {\n  const {\n    CreditCardNumber,\n    CardNickName,\n    CardHolderName,\n    ExpirationMonth,\n    ExpirationYear\n  } = data;\n  const walletModel = {\n    Active: true,\n    CardHolderName,\n    CreatedDate: new Date(),\n    CreditCardNumber,\n    ExpirationMonth,\n    ExpirationYear: Number(ExpirationYear),\n    ID: 0,\n    IsDefault: false,\n    Name: CardNickName,\n    User: currentUser,\n    UserID: currentUser?.ID\n    // Token: \"\",\n    // CardType: \"\",\n    // UserKey: \"\",\n    // CurrencyID: 1,\n    // CurrencyKey: \"USD\",\n    // CurrencyName: \"\"\n    // Currency: CurrencyModel\n  } as WalletModel;\n  return walletModel;\n};\n","import { useEffect } from \"react\";\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { useSelector } from \"react-redux\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RootState } from \"src/_redux/store\";\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\n\ninterface IWalletSliceState {\n  Wallet: WalletModel[];\n  ACHWallet: WalletModel[];\n}\n\nexport const walletSlice = createSlice({\n  name: \"wallet\",\n  initialState: {\n    Wallet: null,\n    ACHWallet: null\n  } as IWalletSliceState,\n  reducers: {\n    setWallet: (state, action: PayloadAction<WalletModel[]>) => {\n      const newWallet = action.payload.reduce((initial, currentItem) => {\n        if (currentItem.AccountNumber && currentItem.RoutingNumber) {\n          initial.ACHWallet.push(currentItem);\n        } else {\n          initial.CCWallet.push(currentItem);\n        }\n        return initial;\n      }, { CCWallet: [], ACHWallet: [] });\n      state.Wallet = newWallet.CCWallet;\n      state.ACHWallet = newWallet.ACHWallet;\n    }\n  },\n});\n\nexport const { setWallet } = walletSlice.actions;\nexport const useWallet = (): WalletModel[] | null => {\n  const wallet = useSelector((state: RootState) => state.wallet.Wallet);\n  const walletFactory = useWalletFactory();\n\n  useEffect(() => {\n    if (wallet === null && walletFactory !== null) {\n      walletFactory.reloadWallet();\n    }\n  }, [ wallet, walletFactory ]);\n\n  return wallet;\n};\n\nexport const useACHWallet = (): WalletModel[] | null => {\n  const ACHWallet = useSelector((state: RootState) => state.wallet.ACHWallet);\n  const walletFactory = useWalletFactory();\n\n  useEffect(() => {\n    if (ACHWallet === null && walletFactory !== null) {\n      walletFactory.reloadWallet();\n    }\n  }, [ ACHWallet, walletFactory ]);\n\n  return ACHWallet;\n};\n\nexport default walletSlice.reducer;\n","import { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Card, Col, Form } from \"react-bootstrap\";\nimport { Modal } from \"src/_shared/modals\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { SelectFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { INewACHWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\n\ninterface IACHWalletEntryData {\n  txtWalletAccountNickname: string;\n  txtWalletFirstName: string;\n  txtWalletLastName: string;\n  txtWalletBankName: string;\n  txtWalletAccountNumber: string;\n  txtWalletRoutingNumber: string;\n  ddlWalletAccountType: string;\n}\n\ninterface INewWalletModalProps {\n  onConfirm: (data: INewACHWalletFormConfirmData) => void;\n  onCancel: Function;\n  show: boolean;\n  loading?: boolean;\n}\n\nexport const NewACHWalletModal = (props: INewWalletModalProps): JSX.Element => {\n  const { t } = useTranslation();\n  const { onConfirm, onCancel, show, loading } = props;\n  const { register, handleSubmit, clearErrors, reset, formState } = useForm<IACHWalletEntryData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const handleConfirmButtonClicked: SubmitHandler<IACHWalletEntryData> = (data): void => {\n    const formatted: INewACHWalletFormConfirmData = {\n      AccountNumber: data.txtWalletAccountNumber.replaceAll(/[\\s-]+/gu, \"\"),\n      BankName: data.txtWalletBankName,\n      FirstName: data.txtWalletFirstName,\n      LastName: data.txtWalletLastName,\n      CardNickName: data.txtWalletAccountNickname,\n      CardType: data.ddlWalletAccountType,\n      RoutingNumber: data.txtWalletRoutingNumber.replaceAll(/[\\s-]+/gu, \"\"),\n    };\n    if (onConfirm) {\n      onConfirm(formatted);\n      reset(\n        {\n          ddlWalletAccountType: \"\",\n          txtWalletFirstName: \"\",\n          txtWalletLastName: \"\",\n          txtWalletAccountNickname: \"\",\n          txtWalletAccountNumber: \"\",\n          txtWalletBankName: \"\",\n          txtWalletRoutingNumber: \"\"\n        },\n        {\n          keepDirty: false,\n          keepErrors: false,\n          keepIsSubmitted: false,\n          keepIsValid: false,\n          keepSubmitCount: false,\n          keepTouched: false\n        }\n      );\n      clearErrors();\n    }\n  };\n\n  function handleCancel() {\n    onCancel();\n    reset(\n      {\n        ddlWalletAccountType: \"\",\n        txtWalletFirstName: \"\",\n        txtWalletLastName: \"\",\n        txtWalletAccountNickname: \"\",\n        txtWalletAccountNumber: \"\",\n        txtWalletBankName: \"\",\n        txtWalletRoutingNumber: \"\"\n      },\n      {\n        keepDirty: false,\n        keepErrors: false,\n        keepIsSubmitted: false,\n        keepIsValid: false,\n        keepSubmitCount: false,\n        keepTouched: false\n      }\n    );\n  }\n\n  return (\n    <Modal title={t(\"ui.storefront.userDashboard.wallet.AddANewEntry\")}\n      titleID=\"txtNewWalletModalTitle\"\n      show={show}\n      loading={loading}\n      onCancel={handleCancel}\n      size=\"md\">\n      {show\n        && <Col>\n          {/* TODO: replace this form with NewWalletForm */}\n          <Form\n            className=\"form-vertical wallet-card-panel h-100 card border-0\"\n            autoComplete=\"off\"\n            onSubmit={handleSubmit(handleConfirmButtonClicked)}>\n            {loading\n              ? <LoadingWidget />\n              : <Card.Body className=\"p-0\">\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletAccountNickname\"\n                  errors={formState.errors}\n                  formClasses=\"mb-2\"\n                  required={true}\n                  labelKey=\"ui.storefront.wallet.walletCard.CardNickname\"\n                  placeholderKey=\"ui.storefront.wallet.walletCard.CardNickname\"\n                  maxLength={128}\n                />\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletFirstName\"\n                  errors={formState.errors}\n                  formClasses=\"mb-2\"\n                  required={true}\n                  labelKey=\"ui.storefront.common.FirstName\"\n                  placeholderKey=\"ui.storefront.common.FirstName\"\n                  maxLength={128}\n                />\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletLastName\"\n                  errors={formState.errors}\n                  formClasses=\"mb-2\"\n                  required={true}\n                  labelKey=\"ui.storefront.common.LastName\"\n                  placeholderKey=\"ui.storefront.common.LastName\"\n                  maxLength={128}\n                />\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletBankName\"\n                  errors={formState.errors}\n                  formClasses=\"mb-2\"\n                  required={true}\n                  labelKey=\"ui.storefront.wallet.walletCard.BankName\"\n                  placeholderKey=\"ui.storefront.wallet.walletCard.BankName\"\n                  maxLength={128}\n                />\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletAccountNumber\"\n                  errors={formState.errors}\n                  formClasses=\"mb-2\"\n                  required={true}\n                  labelKey=\"ui.storefront.wallet.walletCard.AccountNumber\"\n                  placeholderKey=\"ui.storefront.wallet.walletCard.AccountNumber\"\n                  maxLength={18}\n                />\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletRoutingNumber\"\n                  errors={formState.errors}\n                  formClasses=\"mb-2\"\n                  required={true}\n                  labelKey=\"ui.storefront.wallet.walletCard.RoutingNumber\"\n                  placeholderKey=\"ui.storefront.wallet.walletCard.RoutingNumber\"\n                  maxLength={18}\n                />\n                <SelectFormGroup\n                  register={register}\n                  errors={formState.errors}\n                  formIdentifier=\"ddlWalletAccountType\"\n                  formClasses=\"mb-2\"\n                  labelKey=\"ui.storefront.wallet.walletCard.AccountType\"\n                  includeNull={true}\n                  nullKey=\"ui.storefront.wallet.walletCard.AccountType\"\n                  required={true}\n                  options={[\n                    { option: \"Checking\", value: \"Checking\" },\n                    { option: \"Savings\", value: \"Savings\" }\n                  ]}\n                />\n              </Card.Body>\n            }\n            <hr className=\"mx-n3\" />\n            <Card.Footer className=\"p-0 justify-content-end d-flex bg-transparent border-0\">\n              <Button\n                variant=\"outline-secondary\"\n                id=\"btnWalletCancel\"\n                name=\"btnWalletCancel\"\n                title=\"Cancel\"\n                aria-label=\"Cancel\"\n                onClick={() => handleCancel()}>\n                <span className=\"ms-1\">{t(\"ui.storefront.common.Cancel\")}</span>\n              </Button>\n              <Button\n                variant=\"primary\"\n                className=\"ms-2\"\n                id=\"btnWalletSave\"\n                name=\"btnWalletSave\"\n                type=\"submit\"\n                disabled={loading || !formState.isValid}\n                title={t(\"ui.storefront.userDashboard.wallet.AddEntry\")}>\n                <span className=\"ms-1\">{t(\"ui.storefront.userDashboard.wallet.AddEntry\")}</span>\n              </Button>\n            </Card.Footer>\n          </Form>\n        </Col>\n      }\n    </Modal>\n  );\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Button, ButtonGroup, Card, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IACHWalletEntryCardProps {\n  // Used in data-sids\n  index?: number;\n  onDeleteClicked?: (walletItem: WalletModel) => void;\n  walletItem: WalletModel;\n}\n\nexport const ACHWalletEntryCard = (props: IACHWalletEntryCardProps): JSX.Element => {\n  const { index, onDeleteClicked, walletItem } = props;\n  const { t } = useTranslation();\n\n  return (\n    <Card className=\"h-100 position-relative\">\n      <Card.Header className=\"bg-transparent border-0\">\n        <h4 id={`CardNickname_${index}`} className=\"mb-0\">\n          {walletItem.Name}\n        </h4>\n      </Card.Header>\n      {walletItem\n        ? <>\n          <Card.Body>\n            <Row className=\"mb-2\">\n              <Col xs={12} sm={6}>\n                <label className=\"small d-block mb-n1\" htmlFor={`AccountHolderNameText_${index}`}>\n                  {t(\"ui.storefront.wallet.walletCard.AccountHolderName\", \"Account Holder Name\")}\n                </label>\n                <span id={`AccountHolderName_${index}`}>\n                  {walletItem.CardHolderName}\n                </span>\n              </Col>\n              <Col xs={12} sm={6}>\n                <label className=\"small d-block mb-n1\" htmlFor={`BankName_${index}`}>\n                  {t(\"ui.storefront.wallet.walletCard.ACHSource\", \"ACH Source\")}\n                </label>\n                <span id={`BankName_${index}`}>\n                  {walletItem.BankName}\n                </span>\n              </Col>\n            </Row>\n            <Row className=\"mb-2\">\n              <Col xs={12}>\n                <label className=\"small d-block\" htmlFor={`AccountNumberText_${index}`}>\n                  {t(\"ui.storefront.wallet.walletCard.AccountNumber\")}\n                </label>\n                <span id={`AccountNumberText_${index}`}>\n                  &bull;&bull;&bull;&bull;&bull;&bull;&nbsp;\n                  {walletItem.AccountNumber}\n                </span>\n              </Col>\n            </Row>\n            <Row className=\"mb-2\">\n              <Col xs={12}>\n                <label className=\"small d-block\" htmlFor={`RoutingNumberText_${index}`}>\n                  {t(\"ui.storefront.wallet.walletCard.RoutingNumber\")}\n                </label>\n                <span id={`RoutingNumberText_${index}`}>\n                  &bull;&bull;&bull;&bull;&bull;&bull;&nbsp;\n                  {walletItem.RoutingNumber}\n                </span>\n              </Col>\n            </Row>\n          </Card.Body>\n          {onDeleteClicked && (\n            <ButtonGroup as={Card.Footer} className=\"p-0\">\n              {/* TODO- show errors */}\n              <Button\n                variant=\"link\"\n                size=\"lg\"\n                className=\"text-danger text-decoration-none underline-hover\"\n                onClick={() => onDeleteClicked(walletItem)}\n                id={`btnAccountEntryDelete_${index}`}\n                name={`btnAccountEntryDelete_${index}`}\n                title=\"Delete\">\n                <i className=\"fal fa-fw fa-trash\" aria-hidden=\"true\" />\n                <span className=\"ms-1\">\n                  {t(\"ui.storefront.common.Delete\", \"Delete\")}\n                </span>\n              </Button>\n            </ButtonGroup>\n          )}\n        </>\n        : null}\n    </Card>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useACHWallet } from \"src/_redux/slices/walletSlice\";\nimport { NewACHWalletModal } from \"src/Dashboard/Wallet/NewACHWalletModal\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\nimport { INewACHWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\nimport { ACHWalletEntryCard } from \"src/Dashboard/Wallet/ACHWalletEntryCard\";\n\ninterface IACHWalletSwitchProps {\n  classes?: string;\n  disabled?: boolean;\n  hideWalletBlock?: boolean;\n  onChange: (walletItem: WalletModel) => void;\n  title?: string;\n  initialWalletID?: number;\n  usingGuestCheckout?: boolean;\n  // excludeAdd and children are intended for use at the same time\n  excludeAdd?: boolean;\n  children?: React.ReactNode;\n}\n\nexport const ACHWalletSwitch = (props: IACHWalletSwitchProps): JSX.Element => {\n  const { onChange, title, classes, initialWalletID, disabled, hideWalletBlock } = props;\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState(null);\n  const [ showNewWalletModal, setShowNewWalletModal ] = useState(false);\n  const { viewState } = useViewState();\n  const { setRunning, finishRunning } = useViewState();\n  const walletFactory = useWalletFactory();\n  const { t } = useTranslation();\n  const currentUser = useCurrentUser();\n  const wallet = useACHWallet();\n\n  useEffect(() => {\n    if (!wallet) {\n      return;\n    }\n    const initialDesiredWalletItem = wallet.find(w => w.ID === initialWalletID);\n    if (initialDesiredWalletItem) {\n      setSelectedWalletItem(initialDesiredWalletItem);\n      onChange(initialDesiredWalletItem);\n      return;\n    }\n    const defaultWalletItem = wallet.find(w => w.IsDefault);\n    if (defaultWalletItem) {\n      setSelectedWalletItem(defaultWalletItem);\n      onChange(defaultWalletItem);\n    }\n  }, [ initialWalletID ]);\n\n  function addUserWalletItem(data: INewACHWalletFormConfirmData): void {\n    if (!currentUser || props.usingGuestCheckout) {\n      return;\n    }\n    setRunning();\n    const { CardNickName, FirstName, LastName, AccountNumber, CardType, RoutingNumber, BankName } = data;\n    const walletData = {\n      AccountNumber,\n      Active: true,\n      BankName,\n      FirstName,\n      LastName,\n      CardType,\n      CreatedDate: new Date(),\n      ID: 0,\n      IsDefault: false,\n      Name: CardNickName,\n      RoutingNumber,\n      User: currentUser,\n      UserID: currentUser.ID\n    } as WalletModel;\n    walletFactory\n      .addWalletEntry(walletData)\n      .then(res => {\n        setShowNewWalletModal(false);\n        setSelectedWalletItem(res);\n        // TODO, automatically assign just added card, if in payment method\n        // setValue(\"ddlSelectedCard\", res.ID.toString(), { shouldValidate: true });\n        onChange(res);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(\n          true,\n          err\n        );\n      });\n  }\n\n  return (\n    <>\n      <div className={`wrap mb-2 ${classes ?? \"\"}`}>\n        <strong className=\"d-block\">{title ?? \"\"}</strong>\n        <InputGroup className=\"d-flex align-items-end mb-2\">\n          <Form.Select\n            id=\"walletSwitchSelect\"\n            aria-label=\"walletSwitchSelect\"\n            value={selectedWalletItem ? selectedWalletItem.ID : \"\"}\n            required\n            disabled={disabled}\n            onChange={e => {\n              const currentContactVal = wallet.find(\n                (c: { ID: number }) => c.ID.toString() === e.target.value\n              );\n              if (currentContactVal) {\n                onChange(currentContactVal);\n              }\n              setSelectedWalletItem(currentContactVal);\n            }}>\n            <option\n              disabled={Boolean(selectedWalletItem)}\n              className={`${selectedWalletItem ? \"disabled\" : \"\"}`}>\n              Please select an account\n            </option>\n            {wallet\n              && wallet.map(walletItem => {\n                const { ID, CustomKey, Name } = walletItem;\n                return (\n                  <option key={ID} value={ID}>\n                    {Name || CustomKey}\n                  </option>\n                );\n              })}\n          </Form.Select>\n          {props.children}\n          {!props.excludeAdd && <Button\n            id=\"btnAddCardToWallet\"\n            variant=\"secondary\"\n            onClick={() => setShowNewWalletModal(true)}>\n            {t(\"ui.storefront.checkout.views.paymentInformation.AddCardToWallet\")}\n          </Button>}\n        </InputGroup>\n        {selectedWalletItem && !hideWalletBlock\n          ? <ACHWalletEntryCard\n            walletItem={selectedWalletItem}\n          />\n          : null}\n        {viewState.hasError && <ErrorView viewState={viewState} />}\n      </div>\n      {!props.excludeAdd && <NewACHWalletModal\n        show={showNewWalletModal}\n        onConfirm={addUserWalletItem}\n        onCancel={() => setShowNewWalletModal(false)}\n      />}\n    </>\n  );\n};\n","/** @format */\n\nimport { IPaymentMethodACHBodyProps } from \"src/Checkout/_checkoutTypes\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useACHWallet } from \"src/_redux/slices/walletSlice\";\nimport { useEffect, useState } from \"react\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ACHWalletSwitch } from \"src/Dashboard/Wallet/ACHWalletSwitch\";\n// eslint-disable-next-line max-len\nexport const PaymentMethodACHBody = (props: IPaymentMethodACHBodyProps): JSX.Element => {\n  const { onSubmit, continueText, submitDisabled, initialACHItemID } = props;\n\n  const { t } = useTranslation();\n  const ACHWallet = useACHWallet();\n  const [ selectedACHItem, setSelectedACHItem ] = useState(null);\n\n  useEffect(() => {\n    if (!ACHWallet || selectedACHItem) {\n      return;\n    }\n    const initialDesiredWallet = ACHWallet.find(x => x.ID === initialACHItemID);\n    if (initialDesiredWallet) {\n      setSelectedACHItem(initialDesiredWallet);\n      // setValue(\"ddlSelectedCard\", initialDesiredWallet.ID.toString());\n    }\n  }, [ ACHWallet, initialACHItemID ]);\n\n  const onClickSubmit = () => {\n    onSubmit(\"PayByWalletEntry\", {\n      WalletID: selectedACHItem.ID\n    });\n  };\n\n  return (\n    <Row className=\"mb-3\">\n      <Col md={12}>\n        <Row>\n          <Col xs={12}>\n            <ACHWalletSwitch\n              onChange={(ACHItem: WalletModel) => {\n                setSelectedACHItem(ACHItem);\n              }}\n            />\n          </Col>\n        </Row>\n        <Row>\n          <Col xs={12}>\n            <Button\n              variant=\"primary\"\n              className=\"my-3\"\n              id=\"btnSubmit_purchaseStepPayment\"\n              data-sid=\"btnSubmit_purchaseStepPayment\"\n              disabled={submitDisabled}\n              title={continueText ?? t(\n                \"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\"\n              )}\n              onClick={onClickSubmit}>\n              {continueText\n                ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\n            </Button>\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { AllHTMLAttributes, useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { CardInputFormGroup, SelectFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\ninterface INewWalletFormData {\n  txtCVV: string;\n  txtCardHolderName: string;\n  txtWalletCardNumber: string;\n  txtWalletCardType: string,\n  txtReferenceName: string;\n  ddlExpirationMonth: string;\n  ddlExpirationYear: string;\n}\n\nexport interface INewWalletFormConfirmData {\n  CardNickName?: string;\n  CreditCardNumber: string;\n  CreditCardCVV?: string;\n  CardHolderName: string;\n  ExpirationMonth: number;\n  ExpirationYear: string;\n  CardType: string,\n}\n\nexport interface INewACHWalletFormConfirmData {\n  CardNickName?: string;\n  FirstName: string;\n  LastName: string;\n  AccountNumber: string;\n  CardType?: string;\n  RoutingNumber: string;\n  BankName: string;\n}\n\ninterface INewWalletFormProps {\n  btnAlign?: \"start\" | \"end\";\n  buttonsPosition?: \"top\" | \"bottom\";\n  cancelBtnClasses?: string;\n  cancelBtnText?: string;\n  cancelBtnVariant?: string;\n  hideNickName?: boolean;\n  onCancel?: Function;\n  onConfirm: (data: INewWalletFormConfirmData) => void | Promise<void>;\n  showCancel?: boolean;\n  submitBtnClasses?: string;\n  submitBtnDisabled?: boolean;\n  submitBtnText?: string;\n  submitBtnVariant?: string;\n}\n\ninterface ICancelSubmitButtonsProps extends AllHTMLAttributes<HTMLButtonElement> {\n  btnAlign?: \"start\" | \"end\";\n  cancelBtnText?: string;\n  cancelBtnVariant?: string;\n  cancelBtnClasses?: string;\n  onCancelClicked?: () => void;\n  showCancel?: boolean;\n  submitDisabled?: boolean;\n  submitBtnText?: string;\n  submitBtnVariant?: string;\n  submitBtnClasses?: string;\n}\n\nconst thisYear = new Date().getFullYear();\n\nconst availableExpirationYears: number[] = [];\nfor (let i = 0; i < 11; i++) {\n  availableExpirationYears.push(thisYear + i);\n}\n\nexport const NewWalletForm = (props: INewWalletFormProps): JSX.Element => {\n  const {\n    onConfirm,\n    onCancel,\n    btnAlign,\n    hideNickName,\n    buttonsPosition,\n  } = props;\n\n  const [ formWasSubmitted, setFormWasSubmitted ] = useState(false);\n  const { t } = useTranslation();\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    clearErrors,\n    formState,\n    setValue,\n    watch,\n  } = useForm<INewWalletFormData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const formValues = watch();\n\n  const handleConfirm: SubmitHandler<INewWalletFormData> = (data): void => {\n    const {\n      txtCVV,\n      txtCardHolderName,\n      txtWalletCardNumber,\n      txtWalletCardType,\n      txtReferenceName,\n      ddlExpirationMonth,\n      ddlExpirationYear\n    } = data;\n    const userWalletData: INewWalletFormConfirmData = {\n      CardHolderName: txtCardHolderName,\n      CardNickName: txtReferenceName,\n      CardType: txtWalletCardType,\n      CreditCardCVV: txtCVV,\n      CreditCardNumber: txtWalletCardNumber.replace(/\\s/gu, \"\"),\n      ExpirationMonth: Number(ddlExpirationMonth),\n      ExpirationYear: ddlExpirationYear\n    };\n    const confirmRes = onConfirm(userWalletData);\n    if (confirmRes instanceof Promise) {\n      confirmRes\n        .then(() => {\n          clearErrors();\n          reset(\n            null,\n            {\n              keepDirty: false,\n              keepErrors: false,\n              keepIsSubmitted: false,\n              keepIsValid: false,\n              keepTouched: true\n            }\n          );\n          setValue(\"txtCVV\", \"\");\n          setValue(\"txtCardHolderName\", \"\");\n          setValue(\"txtWalletCardNumber\", \"\");\n          setValue(\"txtWalletCardType\", \"\");\n          setValue(\"txtReferenceName\", \"\");\n          setValue(\"ddlExpirationMonth\", \"01\");\n          setValue(\"ddlExpirationYear\", \"\");\n          setFormWasSubmitted(true);\n        })\n        .catch(() => {\n          // Do nothing, parent should handle error\n        });\n    }\n  };\n\n  const handleCancel = (): void => {\n    if (onCancel) {\n      onCancel();\n    }\n    reset();\n    clearErrors();\n  };\n\n  const onFieldChanged = () => {\n    if (formWasSubmitted) {\n      setFormWasSubmitted(false);\n    }\n  };\n\n  const onSubmit = handleSubmit(handleConfirm);\n  const cancelSubmitProps: ICancelSubmitButtonsProps = {\n    btnAlign,\n    cancelBtnText: props.cancelBtnText,\n    cancelBtnVariant: props.cancelBtnVariant,\n    cancelBtnClasses: props.cancelBtnClasses,\n    onCancelClicked: handleCancel,\n    showCancel: props.showCancel,\n    submitDisabled: props.submitBtnDisabled,\n    submitBtnText: props.submitBtnText,\n    submitBtnVariant: props.submitBtnVariant,\n    submitBtnClasses: `${props.submitBtnClasses} ${formWasSubmitted ? \"form-control is-valid\" : \"\"}`,\n  };\n\n  return (\n    <Form className=\"position-relative\"\n      autoComplete=\"off\"\n      onSubmit={onSubmit}>\n      {buttonsPosition === \"top\" && <CancelSubmitButtons {...cancelSubmitProps} />}\n      {!hideNickName && (\n        <Row>\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtReferenceName\"\n            formClasses=\"col-12 mb-1\"\n            labelKey=\"ui.storefront.common.CardNickname\"\n            required={true}\n            maxLength={128}\n            extraOnChange={() => {\n              onFieldChanged();\n            }}\n          />\n          <Col xs={12}>\n            <p className=\"small\">{t(\"ui.storefront.common.ECheckAccountNickname.Message\")}</p>\n          </Col>\n        </Row>\n      )}\n      <Row>\n        <TextInputFormGroup\n          register={register}\n          errors={formState.errors}\n          formClasses=\"col-12 mb-3\"\n          formIdentifier=\"txtCardHolderName\"\n          labelKey=\"ui.storefront.checkout.creditCard.cardholder\"\n          required={true}\n          maxLength={128}\n          extraOnChange={() => {\n            onFieldChanged();\n          }}\n        />\n      </Row>\n      <Row>\n        <CardInputFormGroup\n          formIdentifier=\"txtCardNumber\"\n          register={register}\n          errors={formState.errors}\n          setValue={setValue}\n          hideIcon={true}\n          extraOnChange={() => {\n            onFieldChanged();\n          }}\n        />\n      </Row>\n      <Row className=\"gx-3\">\n        <SelectFormGroup\n          register={register}\n          errors={formState.errors}\n          formIdentifier=\"ddlExpirationMonth\"\n          formClasses=\"col-12 col-sm-6\"\n          labelKey=\"ui.storefront.common.Month\"\n          includeNull={true}\n          nullKey=\"ui.storefront.common.Month\"\n          required={true}\n          watchOption={{\n            option: formValues.ddlExpirationMonth,\n            value: formValues.ddlExpirationMonth\n          }}\n          options={[\n            { option: \"January\", value: \"01\" },\n            { option: \"February\", value: \"02\" },\n            { option: \"March\", value: \"03\" },\n            { option: \"April\", value: \"04\" },\n            { option: \"May\", value: \"05\" },\n            { option: \"June\", value: \"06\" },\n            { option: \"July\", value: \"07\" },\n            { option: \"August\", value: \"08\" },\n            { option: \"September\", value: \"09\" },\n            { option: \"October\", value: \"10\" },\n            { option: \"November\", value: \"11\" },\n            { option: \"December\", value: \"12\" }\n          ]}\n          extraOnChange={() => {\n            onFieldChanged();\n          }}\n        />\n        <SelectFormGroup\n          register={register}\n          errors={formState.errors}\n          formIdentifier=\"ddlExpirationYear\"\n          formClasses=\"col-6 col-sm-3\"\n          labelKey=\"ui.storefront.common.Year\"\n          required={true}\n          includeNull={true}\n          nullKey=\"ui.storefront.common.Year\"\n          watchOption={{\n            option: formValues.ddlExpirationYear,\n            value: formValues.ddlExpirationYear\n          }}\n          options={availableExpirationYears.map((year: number) => ({\n            option: year.toString()\n          }))}\n          extraOnChange={() => {\n            onFieldChanged();\n          }}\n        />\n        <TextInputFormGroup\n          register={register}\n          errors={formState.errors}\n          formIdentifier=\"txtCVV\"\n          formClasses=\"col-6 col-sm-3\"\n          labelKey=\"ui.storefront.wallet.walletCard.CVVAVS\"\n          required={true}\n          placeholderText=\"123\"\n          pattern={/^\\d{3,4}$/u}\n          patternMessage=\"CVV must be 3 or 4 numbers\"\n          extraOnChange={() => {\n            onFieldChanged();\n          }}\n        />\n      </Row>\n      {buttonsPosition === \"bottom\" && <CancelSubmitButtons {...cancelSubmitProps} />}\n    </Form>\n  );\n};\n\nNewWalletForm.defaultProps = {\n  buttonsPosition: \"bottom\",\n};\n\nfunction CancelSubmitButtons(props: ICancelSubmitButtonsProps) {\n  const {\n    btnAlign,\n    cancelBtnText,\n    cancelBtnVariant,\n    cancelBtnClasses,\n    onCancelClicked,\n    showCancel,\n    submitDisabled,\n    submitBtnClasses,\n    submitBtnText,\n    submitBtnVariant,\n  } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Row className=\"mt-2\">\n      <Col xs={12}>\n        <div className={`d-flex justify-content-${btnAlign ?? \"end\"} gap-2`}>\n          {showCancel\n            ? <Button\n              variant={cancelBtnVariant ?? \"secondary\"}\n              className={cancelBtnClasses || \"\"}\n              onClick={() => {\n                onCancelClicked();\n              }}>\n              {cancelBtnText ?? t(\"ui.storefront.common.Cancel\")}\n            </Button>\n            : null}\n          <Button\n            variant={submitBtnVariant || \"primary\"}\n            type=\"submit\"\n            id=\"btnAddWallet\"\n            name=\"btnAddWallet\"\n            disabled={submitDisabled}\n            className={submitBtnClasses || \"\"}>\n            {submitBtnText ?? t(\"ui.storefront.userDashboard.wallet.AddEntry\")}\n          </Button>\n        </div>\n      </Col>\n    </Row>\n  );\n}\n","/** @format */\n\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Card, Col, Form } from \"react-bootstrap\";\nimport { Modal } from \"src/_shared/modals\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\nimport { CardInputFormGroup } from \"src/_shared/forms/formGroups/CardInputFormGroup\";\nimport { QuestionnaireModalHeader } from \"src/Cart/modals/ActionModals/QuestionnaireModalHeader\";\n\ninterface IWalletEntryData {\n  txtWalletCardNumber: string;\n  txtWalletCardNickname: string;\n  txtWalletCardHolderName: string;\n  txtWalletCardType: string;\n  ddlWalletExpirationMonth: string;\n  ddlWalletExpirationYear: number;\n}\n\nconst monthsAbbreviated = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nconst thisYear = new Date().getFullYear();\n\nconst availableExpirationYears: number[] = [];\nfor (let i = 0; i < 11; i++) {\n  availableExpirationYears.push(thisYear + i);\n}\n\ninterface INewWalletModalProps {\n  onConfirm: (data: INewWalletFormConfirmData) => void;\n  onCancel: Function;\n  show: boolean;\n  loading?: boolean;\n  parentError?: string;\n}\n\nexport const NewWalletModal = (props: INewWalletModalProps): JSX.Element => {\n  const { t } = useTranslation();\n  const { onConfirm, onCancel, show, loading, parentError } = props;\n  const { register, handleSubmit, setValue, clearErrors, reset, formState } = useForm<IWalletEntryData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const handleConfirmButtonClicked: SubmitHandler<IWalletEntryData> = (data): void => {\n    const formatted: INewWalletFormConfirmData = {\n      CardHolderName: data.txtWalletCardHolderName,\n      CardNickName: data.txtWalletCardNickname,\n      CardType: data.txtWalletCardType,\n      CreditCardNumber: data.txtWalletCardNumber?.replaceAll(/[\\s-]+/gu, \"\"),\n      ExpirationMonth: monthsAbbreviated.indexOf(data.ddlWalletExpirationMonth) + 1,\n      ExpirationYear: String(data.ddlWalletExpirationYear)\n    };\n    if (onConfirm) {\n      onConfirm(formatted);\n      reset(\n        {\n          ddlWalletExpirationMonth: monthsAbbreviated[0],\n          ddlWalletExpirationYear: availableExpirationYears[0],\n          txtWalletCardHolderName: \"\",\n          txtWalletCardNickname: \"\",\n          txtWalletCardNumber: \"\"\n        },\n        {\n          keepDirty: false,\n          keepErrors: false,\n          keepIsSubmitted: false,\n          keepIsValid: false,\n          keepSubmitCount: false,\n          keepTouched: false\n        }\n      );\n      clearErrors();\n    }\n  };\n\n  function handleCancel() {\n    onCancel();\n    reset(\n      {\n        ddlWalletExpirationMonth: monthsAbbreviated[0],\n        ddlWalletExpirationYear: availableExpirationYears[0],\n        txtWalletCardHolderName: \"\",\n        txtWalletCardNickname: \"\",\n        txtWalletCardNumber: \"\"\n      },\n      {\n        keepDirty: false,\n        keepErrors: false,\n        keepIsSubmitted: false,\n        keepIsValid: false,\n        keepSubmitCount: false,\n        keepTouched: false\n      }\n    );\n  }\n\n  return (\n    <Modal\n      title={t(\"ui.storefront.userDashboard.wallet.AddANewEntry\")}\n      titleID=\"txtNewWalletModalTitle\"\n      show={show}\n      loading={loading}\n      onCancel={handleCancel}\n      // size=\"md\"\n      modalClasses=\"atc-questionnaire-modal new-wallet-modal\"\n      modalBodyClasses=\"d-flex flex-column align-items-center mt-4\"\n      CustomHeader={() => <QuestionnaireModalHeader />}\n      headerClasses=\"justify-content-center border-0\"\n      hideCloseButton={true}>\n      <div className=\"alt-font text-center\">\n        Add A <span className=\"alt-font text-brand-orange\">New Card</span>\n      </div>\n      {show && (\n        <div className=\"new-entry-container\">\n          {/* TODO: replace this form with NewWalletForm */}\n          <Form\n            autoComplete=\"off\"\n            onSubmit={handleSubmit(handleConfirmButtonClicked)}>\n            {loading ? (\n              <LoadingWidget />\n            ) : (\n              <Card.Body className=\"pt-4\">\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletCardNickname\"\n                  dataSid=\"txtWalletCardNickname\"\n                  errors={formState.errors}\n                  formClasses=\"mb-3\"\n                  required={true}\n                  labelKey=\"ui.storefront.wallet.walletCard.CardNickname\"\n                  placeholderKey=\"ui.storefront.wallet.walletCard.CardNickname\"\n                  maxLength={128}\n                />\n                <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletCardHolderName\"\n                  dataSid=\"txtWalletCardHolderName\"\n                  errors={formState.errors}\n                  formClasses=\"mb-3\"\n                  required={true}\n                  labelKey=\"ui.storefront.wallet.walletCard.CardHolderName\"\n                  placeholderKey=\"ui.storefront.wallet.walletCard.CardHolderName\"\n                  maxLength={128}\n                />\n                <div className=\"credit-card-container w-100\">\n                  <CardInputFormGroup\n                    formIdentifier=\"txtCreditCard\"\n                    dataSid=\"txtCreditCard\"\n                    register={register}\n                    errors={formState.errors}\n                    setValue={setValue}\n                  />\n                </div>\n\n                {/* This block was previously commented out */}\n\n                {/* <TextInputFormGroup\n                  register={register}\n                  formIdentifier=\"txtWalletCardNumber\"\n                  errors={formState.errors}\n                  formClasses=\"mb-2\"\n                  required={true}\n                  labelKey=\"ui.storefront.wallet.walletCard.CardNumber\"\n                  maxLengthMessage=\"Must not exceed 19 Digits\"\n                  minLengthMessage=\"Must enter a minimum of 13 Digits\"\n                  // Account for spaces in Credit Card#\n                  maxLength={23}\n                  minLength={16}\n                  pattern={/^(\\d{4}\\s){4}\\d{1,3}|^(\\d{4}\\s){3}\\d{1,4}$/u}\n                  patternMessage=\"Card number may only contain digits and spaces.\n                    Please ensure you have entered the correct card number.\"\n                  placeholderText=\"1234 5678 9012 3456\"\n                  onKeyDown={e => {\n                    const backspacePressed = e.key === \"Backspace\";\n                    const currentValue = e.currentTarget.value;\n                    if (!backspacePressed) {\n                      const lengthNoSpaces = currentValue.replace(/ /gu, \"\").length;\n                      if (\n                        lengthNoSpaces !== 0\n                        && lengthNoSpaces % 4 === 0\n                        && currentValue.length < 24\n                      ) {\n                        setValue(\"txtWalletCardNumber\", `${currentValue} `);\n                      }\n                    } else if (currentValue[currentValue.length - 2] === \" \") {\n                      setValue(\n                        \"txtWalletCardNumber\",\n                        currentValue.substr(0, currentValue.length - 1)\n                      );\n                    }\n                  }}\n                /> */}\n\n                <div className=\"mb-2\">\n                  <Form.Label\n                    htmlFor=\"txtWalletCardExpiration\"\n                    class=\"expiration-label\">\n                    <span data-sid=\"txtWalletCardExpiration\">{t(\"ui.storefront.wallet.walletCard.Expiration\")}</span>\n                    <span className=\"text-danger\">&nbsp;*</span>\n                  </Form.Label>\n                  <div className=\"d-flex align-items-center add-card\">\n                    <Form.Select\n                      className=\"me-1 custom-select\"\n                      id=\"ddlWalletExpirationMonth\"\n                      data-sid=\"ddlWalletExpirationMonth\"\n                      {...register(\"ddlWalletExpirationMonth\")}>\n                      {monthsAbbreviated.map(month => (\n                        <option key={month}>{month}</option>\n                      ))}\n                    </Form.Select>\n                    <Form.Select\n                      className=\"ms-1 custom-select\"\n                      id=\"ddlWalletExpirationYear\"\n                      data-sid=\"ddlWalletExpirationYear\"\n                      {...register(\"ddlWalletExpirationYear\")}>\n                      {availableExpirationYears.map(year => (\n                        <option key={year.toString()}>{year}</option>\n                      ))}\n                    </Form.Select>\n                  </div>\n                </div>\n              </Card.Body>\n            )}\n            <Card.Footer className=\"p-0 justify-content-between pt-4 d-flex bg-transparent border-0\">\n              <Button\n                // variant=\"outline-secondary\"\n                className=\"cancel-btn\"\n                id=\"btnWalletCancel\"\n                name=\"btnWalletCancel\"\n                title=\"Cancel\"\n                aria-label=\"Cancel\"\n                onClick={() => handleCancel()}>\n                <span className=\"ms-1\">{t(\"ui.storefront.common.Cancel\")}</span>\n              </Button>\n              <Button\n                // variant=\"primary\"\n                className=\"checkout-btn\"\n                id=\"btnWalletSave\"\n                data-sid=\"btnWalletSave\"\n                name=\"btnWalletSave\"\n                type=\"submit\"\n                disabled={loading || !formState.isValid}\n                title={t(\"ui.storefront.userDashboard.wallet.AddEntry\")}>\n                <span className=\"ms-1\">Add Card</span>\n              </Button>\n            </Card.Footer>\n            {parentError && (\n              <Card.Footer>\n                <Alert variant=\"danger\">{parentError}</Alert>\n              </Card.Footer>\n            )}\n          </Form>\n        </div>\n      )}\n    </Modal>\n  );\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Button, ButtonGroup, Card, Col, Form, InputGroup, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\n\ninterface IWalletEntryCardAltProps {\n  walletItem: WalletModel;\n  setDeleteWalletItem?: Function\n  isDefault?: boolean;\n  title?: string;\n  walletCVV?: string;\n  setWalletCVV?: Function;\n  // Used in data-sids\n  index?: number;\n}\n\nexport const WalletEntryCardAlt = (props: IWalletEntryCardAltProps): JSX.Element => {\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const wallet = useWallet();\n  const walletFactory = useWalletFactory();\n\n  function setDefaultWalletEntryForCurrentUser(ID: number): void {\n    setRunning();\n    walletFactory\n      .markEntryAsDefault(ID)\n      .then(() => {\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  const getIconByCardType = (type: string) => {\n    switch (type) {\n      case \"visa\": {\n        return \"fab fa-cc-visa\";\n      }\n      case \"mastercard\": {\n        return \"fab fa-cc-mastercard\";\n      }\n      case \"discover\": {\n        return \"fab fa-cc-discover\";\n      }\n      default: {\n        return \"fal fa-credit-card\";\n      }\n    }\n  };\n\n  return (\n    <Card className=\"h-100 position-relative p-3\">\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <Card.Header className={`bg-transparent border-0 ${props.isDefault ? \"alert-info\" : \"\"}`}>\n        <Row className=\"align-items-center\">\n          <Col xs={9}>\n            {props.isDefault\n              ? t(\"ui.storefront.userDashboard.wallet.DefaultEntry\")\n              : <h4 id={`CardNickname_${props.index}`} className=\"mb-3\">\n                {props.walletItem.Name}\n              </h4>\n            }\n            <p className=\"mb-0\" id={`CardNumberText_${props.index}`}>\n              &bull;&bull;&bull;&bull;&nbsp; &bull;&bull;&bull;&bull;&nbsp;\n              &bull;&bull;&bull;&bull;&nbsp;\n              {props.walletItem.CreditCardNumber}\n            </p>\n          </Col>\n          <Col xs={3} className=\"text-end\">\n            <p className=\"h3 mt-0\">\n              <i className={`${getIconByCardType(props.walletItem.CardType)} fa-2x`} />\n              <span className=\"sr-only\">{props.walletItem.CardType}</span>\n            </p>\n          </Col>\n        </Row>\n      </Card.Header>\n      {props.isDefault && (\n        <Card.Body className=\"p-2\">\n          <Form.Select\n            className=\"form-control custom-select\"\n            onChange={e => {\n              setDefaultWalletEntryForCurrentUser(Number(e.target.value));\n            }}\n            value={props.walletItem ? props.walletItem.ID : \"\"}\n            id=\"ddlDefaultEntry\"\n            name=\"ddlDefaultEntry\">\n            <option value={null} disabled={props.walletItem !== null}>\n              {t(\"ui.storefront.userDashboard.wallet.PleaseSelectADefaultEntry\")}\n            </option>\n            {wallet.map((entry: WalletModel) => {\n              const { ID, Name } = entry;\n              return (\n                <option key={ID}\n                  label={Name}\n                  value={ID}>\n                  {Name}\n                </option>\n              );\n            })}\n          </Form.Select>\n        </Card.Body>\n      )}\n      {props.walletItem && (\n        <>\n          <Card.Body className=\"p-2\">\n            <div className=\"w-100 wallet-panel\">\n              <div className=\"w-100 p-2\">\n                <Row className=\"gx-3\">\n                  <Col xs={12} sm={5}>\n                    <p className=\"small mb-1\">{t(\"ui.storefront.wallet.walletCard.CardHolderName\")}</p>\n                    <p id={`CardHolderName_${props.index}`} className=\"mb-1\">{props.walletItem.CardHolderName}</p>\n                  </Col>\n                  <Col xs={12} sm={4}>\n                    <p id=\"CheckoutCardValidThrough\" className=\"small mb-1\">\n                      {t(\"ui.storefront.checkout.checkoutCard.ValidThrough\")}\n                    </p>\n                    <p id={`CardExpirationText_${props.index}`}\n                      className=\"mb-1\">\n                      {props.walletItem.ExpirationMonth.toString().padStart(2, \"0\")}\n                      &#47;\n                      {props.walletItem.ExpirationYear}\n                    </p>\n                  </Col>\n                  {props.setWalletCVV && (\n                    <Col xs={12} sm={3}>\n                      <Form.Group className=\"d-flex align-items-center h-100\">\n                        <Form.Label htmlFor=\"txtWalletCVV\" className=\"mb-0 me-2\">\n                          <span>{t(\"ui.storefront.checkout.views.paymentInformation.CVV\")}</span>\n                        </Form.Label>\n                        <InputGroup className=\"justify-content-end\">\n                          <Form.Control\n                            value={props.walletCVV}\n                            onChange={e => props.setWalletCVV(e.target.value)}\n                            style={{ width: \"60px\" }}\n                            id=\"txtWalletCVV\"\n                            data-sid=\"txtWalletCVV\"\n                          />\n                        </InputGroup>\n                      </Form.Group>\n                      {props.walletCVV.length && props.walletCVV.length < 3\n                        || props.walletCVV.length > 4\n                        || !(/^\\d*$/u).test(props.walletCVV) && <div className=\"d-flex justify-content-end\">\n                          <ul className=\"list-unstyled\">\n                            {Boolean(props.walletCVV.length) && props.walletCVV.length < 3\n                          && <li>\n                            <span className=\"text-danger\">\n                              CVV must be at least 3 digits\n                            </span>\n                          </li>\n                            }\n                            {props.walletCVV.length > 4\n                          && <li>\n                            <span className=\"text-danger\">\n                              CVV may not be more than 4 digits\n                            </span>\n                          </li>\n                            }\n                            {!(/^\\d*$/u).test(props.walletCVV)\n                          && <li>\n                            <span className=\"text-danger\">\n                              CVV must contain only numbers\n                            </span>\n                          </li>\n                            }\n                          </ul>\n                        </div>}\n                    </Col>\n                  )}\n                </Row>\n              </div>\n            </div>\n          </Card.Body>\n          {!props.isDefault && props.setDeleteWalletItem && (\n            <ButtonGroup as={Card.Footer} className=\"p-0\">\n              {/* TODO- show errors */}\n              <Button\n                variant=\"link\"\n                size=\"lg\"\n                className=\"text-danger text-decoration-none underline-hover\"\n                onClick={() => props.setDeleteWalletItem(props.walletItem)}\n                id={`btnCardEntryDelete_${props.index}`}\n                name={`btnCardEntryDelete_${props.index}`}\n                title=\"Delete\">\n                <i className=\"fal fa-trash\" aria-hidden=\"true\" />\n                <span className=\"ms-1\">\n                  {t(\"ui.storefront.common.Remove\")}\n                </span>\n              </Button>\n            </ButtonGroup>\n          )}\n        </>\n      )}\n    </Card>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\nimport { NewWalletModal } from \"src/Dashboard/Wallet/NewWalletModal\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useWalletFactory } from \"src/_redux/factories/walletFactory\";\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\nimport { DateTime } from \"luxon\";\nimport { WalletEntryCardAlt } from \"./WalletEntryCardAlt\";\nimport { ErrorView } from \"../../_shared/common/ErrorView\";\n\ninterface IWalletSwitchProps {\n  addInDropdown?: boolean;\n  children?: React.ReactNode;\n  classes?: string;\n  CVV: string;\n  disabled?: boolean;\n  // excludeAdd and children are intended for use at the same time\n  excludeAdd?: boolean;\n  hideWalletBlock?: boolean;\n  initialWalletID?: number;\n  onChange: (walletItem: WalletModel) => void;\n  onCVVChange?: (cvv: string) => void;\n  selectClassName?: string;\n  title?: string;\n  usingGuestCheckout?: boolean;\n}\n\nexport const WalletSwitch = (props: IWalletSwitchProps): JSX.Element => {\n  const {\n    addInDropdown,\n    classes,\n    CVV,\n    disabled,\n    excludeAdd,\n    hideWalletBlock,\n    initialWalletID,\n    onChange,\n    onCVVChange,\n    selectClassName,\n    title,\n    usingGuestCheckout,\n  } = props;\n\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState(null);\n  const [ showNewWalletModal, setShowNewWalletModal ] = useState(false);\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const walletFactory = useWalletFactory();\n  const { t } = useTranslation();\n  const currentUser = useCurrentUser();\n  const wallet = useWallet();\n\n  useEffect(() => {\n    if (!wallet) {\n      return;\n    }\n    const initialDesiredWalletItem = wallet.find(w => w.ID === initialWalletID);\n    if (initialDesiredWalletItem) {\n      setSelectedWalletItem(initialDesiredWalletItem);\n      onChange(initialDesiredWalletItem);\n      return;\n    }\n    const defaultWalletItem = wallet.find(w => w.IsDefault);\n    if (defaultWalletItem) {\n      setSelectedWalletItem(defaultWalletItem);\n      onChange(defaultWalletItem);\n    }\n  }, [ initialWalletID ]);\n\n  function addUserWalletItem(data: INewWalletFormConfirmData): void {\n    if (!currentUser || usingGuestCheckout) {\n      return;\n    }\n    setRunning();\n    const { CreditCardNumber, CardNickName, CardHolderName, CardType, ExpirationMonth, ExpirationYear } = data;\n    const walletData = {\n      Active: true,\n      CardHolderName,\n      CardType,\n      CreatedDate: new Date(),\n      CreditCardNumber,\n      ExpirationMonth,\n      ExpirationYear: Number(ExpirationYear),\n      ID: 0,\n      IsDefault: false,\n      Name: CardNickName,\n      User: currentUser,\n      UserID: currentUser.ID\n\n      // CardType: \"\",\n      // UserKey: \"\",\n      // CurrencyID: 1,\n      // CurrencyKey: \"USD\",\n      // CurrencyName: \"\"\n      // Currency: CurrencyModel\n    } as WalletModel;\n    walletFactory\n      .addWalletEntry(walletData)\n      .then(res => {\n        setShowNewWalletModal(false);\n        setSelectedWalletItem(res);\n        // TODO, automatically assign just added card, if in payment method\n        // setValue(\"ddlSelectedCard\", res.ID.toString(), { shouldValidate: true });\n        onChange(res);\n        finishRunning();\n      })\n      .catch((err): void => {\n        finishRunning(true, err);\n      });\n  }\n\n  return (\n    <>\n      <div className={`wrap mb-2 ${classes ?? \"\"}`}>\n        <strong className=\"d-block\">{title ?? \"\"}</strong>\n        <InputGroup className=\"d-flex align-items-end mb-2 add-card\">\n          <Form.Select\n            id=\"walletSwitchSelect\"\n            aria-label=\"walletSwitchSelect\"\n            value={selectedWalletItem ? selectedWalletItem.ID : \"\"}\n            required\n            disabled={disabled}\n            className={`${selectClassName || \"\"} ${selectedWalletItem ? \"is-valid\" : \"\"}`}\n            onChange={e => {\n              if (e.target.value === \"0\") {\n                setShowNewWalletModal(true);\n                return;\n              }\n              const currentContactVal = wallet.find(\n                (c: { ID: number }) => c.ID.toString() === e.target.value\n              );\n              if (currentContactVal) {\n                onChange(currentContactVal);\n              }\n              setSelectedWalletItem(currentContactVal);\n            }}>\n            <option\n              disabled={Boolean(selectedWalletItem)}\n              className={`${selectedWalletItem ? \"disabled\" : \"\"}`}>\n              Please select a card\n            </option>\n            {wallet\n              && wallet.map(walletItem => {\n                const { CreatedDate, CreditCardNumber, CustomKey, ID, Name } = walletItem;\n                return (\n                  <option key={ID} value={ID}>\n                    {Name || CustomKey}&nbsp;{\"#\"}{ID}:&nbsp;\n                    {CreditCardNumber}&nbsp;\n                    {\"(\"}{DateTime.fromISO(CreatedDate as unknown as string).toFormat(\"mm/yyyy\")}{\")\"}\n                  </option>\n                );\n              })}\n            {!excludeAdd && addInDropdown && (\n              <option value=\"0\">\n                {t(\n                  \"ui.storefront.userDashboard.wallet.AddANewCard\",\n                  \"Add a New Card\"\n                )}\n              </option>\n            )}\n          </Form.Select>\n          {props.children}\n          {!excludeAdd && !addInDropdown && <Button\n            className=\"align-self-center\"\n            id=\"btnAddCardToWallet\"\n            data-sid=\"btnAddCardToWallet\"\n            variant=\"link\"\n            onClick={() => setShowNewWalletModal(true)}>\n            {wallet && wallet.length ? \"Edit\" : \"Add\"}\n          </Button>}\n        </InputGroup>\n        {selectedWalletItem && !hideWalletBlock\n          ? <WalletEntryCardAlt\n            walletItem={selectedWalletItem}\n            walletCVV={CVV}\n            setWalletCVV={(cvv: string) => {\n              if (onCVVChange) {\n                onCVVChange(cvv);\n              }\n            }}\n          />\n          : null}\n        {viewState.hasError && !showNewWalletModal && <ErrorView viewState={viewState} />}\n      </div>\n      {!props.excludeAdd && <NewWalletModal\n        show={showNewWalletModal}\n        onConfirm={addUserWalletItem}\n        onCancel={() => setShowNewWalletModal(false)}\n        parentError={viewState.errorMessage as string}\n      />}\n    </>\n  );\n};\n","/**\n * eslint-disable function-paren-newline\n *\n * @format\n */\n\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport creditCardType from \"credit-card-type\";\nimport { INewWalletFormConfirmData, NewWalletForm } from \"../../../../_shared/forms/NewWalletForm\";\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\nimport { WalletSwitch } from \"src/Dashboard/Wallet/WalletSwitch\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { IPaymentMethodCreditCardBodyProps } from \"../../../_checkoutTypes\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { useHistory } from \"react-router-dom\";\n\nconst thisYear = new Date().getFullYear();\n\nconst availableExpirationYears: number[] = [];\nfor (let i = 0; i < 11; i++) {\n  availableExpirationYears.push(thisYear + i);\n}\n\nexport const PaymentMethodCreditCardBody = (props: IPaymentMethodCreditCardBodyProps): JSX.Element => {\n  const {\n    onSubmit,\n    onSelectedWalletChanged,\n    continueText,\n    submitDisabled,\n    initialWalletID,\n    usingGuestCheckout,\n    btnContainerClasses,\n    total,\n    purchaseDetails\n  } = props;\n\n  const [selectedWalletItem, setSelectedWalletItem] = useState<WalletModel>(null);\n  const [walletCVV, setWalletCVV] = useState<string>(\"\");\n\n  const { t } = useTranslation();\n\n  const wallet = useWallet();\n  const history = useHistory();\n\n  useEffect(() => {\n    if (onSelectedWalletChanged) {\n      onSelectedWalletChanged(selectedWalletItem);\n    }\n  }, [selectedWalletItem]);\n\n  useEffect(() => {\n    if (!wallet || usingGuestCheckout || selectedWalletItem || !initialWalletID) {\n      return;\n    }\n    const initialDesiredWallet = wallet.find(w => w.ID === initialWalletID);\n    const defaultWallet = wallet.find(w => w.IsDefault);\n    setSelectedWalletItem(initialDesiredWallet ?? defaultWallet ?? null);\n  }, [wallet, initialWalletID]);\n\n  const onClickSubmit = (): void => {\n    if (selectedWalletItem && walletCVV?.length > 2) {\n      onSubmit(\"PayByWalletEntry\", {\n        WalletCVV: walletCVV,\n        WalletID: selectedWalletItem.ID,\n        CardType: selectedWalletItem.CardType ?? creditCardType(selectedWalletItem.CreditCardNumber)[0]?.niceType\n      });\n      sessionStorage.setItem(\"successData\", JSON.stringify(purchaseDetails));\n      sessionStorage.removeItem(\"purchased\");\n      location.pathname = \"/Dashboard/success\";\n    }\n  };\n\n  const onSubmitGuestCreditCard = (data: INewWalletFormConfirmData): void => {\n    onSubmit(\"PayByCreditCard\", {\n      ...data,\n      CVV: data.CreditCardCVV,\n      CardNumber: data.CreditCardNumber,\n      CardType: creditCardType(data.CreditCardNumber)[0].niceType\n    });\n  };\n\n  if (usingGuestCheckout) {\n    return (\n      <Col xs={12}>\n        <Row>\n          <Col xs={12}>\n            <NewWalletForm\n              onConfirm={data => onSubmitGuestCreditCard(data)}\n              submitBtnText={continueText}\n              btnAlign=\"start\"\n              hideNickName={true}\n              submitBtnDisabled={submitDisabled}\n            />\n          </Col>\n        </Row>\n      </Col>\n    );\n  }\n\n  return (\n    <Row className=\"mb-3\">\n      <Col xs={12}>\n        <Row className=\"mb-2\">\n          <Col xs={12}>\n            <WalletSwitch\n              onChange={walletItem => {\n                if (walletItem.ID !== selectedWalletItem?.ID) {\n                  setSelectedWalletItem(walletItem);\n                  setWalletCVV(\"\");\n                }\n              }}\n              onCVVChange={(cvv: string) => {\n                setWalletCVV(cvv);\n              }}\n              CVV={walletCVV}\n              usingGuestCheckout={usingGuestCheckout}\n              initialWalletID={selectedWalletItem?.ID}\n            />\n          </Col>\n        </Row>\n        {total && (\n          <Row className=\"mb-4\">\n            <Col xs={12}>\n              <div className=\"bg-brand-light border-0 rounded-pill fw-semibold text-black payment-notice\">\n                {t(\"ui.storefront.checkout.paymentMethods.creditCard.TheTotalAmountOf\", \"The total amount of\")}&nbsp;\n                <strong>{currencyFormatter.format(total)}</strong>&nbsp;\n                {t(\n                  \"ui.storefront.checkout.paymentMethods.creditCard.WillBeChargedToYourCard\",\n                  \"will be charged to your card\"\n                )}\n                .\n              </div>\n            </Col>\n          </Row>\n        )}\n        <Row>\n          <Col xs={12}>\n            <div className={`${btnContainerClasses ?? \"\"}`}>\n              <Button\n                className=\"continue-btn btn-fat\"\n                // variant=\"primary\"\n                id=\"btnSubmit_purchaseStepPayment\"\n                data-sid=\"btnSubmit_purchaseStepPayment\"\n                disabled={walletCVV.length < 3 || walletCVV.length > 4 || !/^\\d*$/u.test(walletCVV) || submitDisabled}\n                title={continueText ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\n                type=\"button\"\n                onClick={onClickSubmit}>\n                {continueText ?? t(\"ui.storefront.checkout.views.paymentInformation.confirmOrderAndPurchase\")}\n              </Button>\n            </div>\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { PaymentMethodInvoiceBody } from \"src/Checkout/steps/payment/methods/PaymentMethodInvoiceBody\";\nimport { PaymentMethodQuoteBody } from \"src/Checkout/steps/payment/methods/PaymentMethodQuoteBody\";\nimport { PaymentMethodFreeBody } from \"src/Checkout/steps/payment/methods/PaymentMethodFreeBody\";\nimport { PaymentMethodECheckBody } from \"src/Checkout/steps/payment/methods/PaymentMethodECheckBody\";\nimport { PaymentMethodACHBody } from \"src/Checkout/steps/payment/methods/PaymentMethodACHBody\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport googleTagManagerService from \"src/_shared/tracking/googleTagManagerService\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\nimport { ICheckoutPaymentStepProps } from \"../../_checkoutTypes\";\nimport { PaymentMethodCreditCardBody } from \"./methods/PaymentMethodCreditCardBody\";\n\n// TODO: use ServiceStrings to type\nexport type TPaymentMethod =\n  | \"purchasePaymentMethodACH\"\n  | \"purchasePaymentMethodCreditCard\"\n  | \"purchasePaymentMethodEcheck\"\n  | \"purchasePaymentMethodFree\"\n  | \"purchasePaymentMethodInvoice\"\n  | \"purchasePaymentMethodPayoneer\"\n  | \"purchasePaymentMethodPayPal\"\n  | \"purchasePaymentMethodQuoteMe\"\n  | \"purchasePaymentMethodStoreCredit\"\n  | \"purchasePaymentMethodWireTransfer\";\n\nexport const CheckoutPaymentStep = (props: ICheckoutPaymentStepProps): JSX.Element => {\n  const {\n    continueText,\n    methodIsGuest\n  } = props;\n\n  const [ selectedPaymentMethod, setSelectedPaymentMethod ] = useState<TPaymentMethod>(null);\n  const [ , setMethods ] = useState<any[]>(null);\n\n  const cefConfig = useCefConfig();\n  const checkoutContext = useCheckoutContext();\n  const cart = useCart(ServiceStrings.carts.types.cart);\n\n  const onCompleteCheckoutPaymentStep = (\n    paymentData: any,\n    paymentStyle: string,\n    uploadedFiles?: string[]\n  ) => {\n    checkoutContext.dispatch({\n      type: \"paymentStepComplete\",\n      payload: {\n        paymentStyle,\n        payBy: paymentData,\n        uploadedFiles\n      }\n    });\n  };\n\n  useEffect(() => {\n    if (!cefConfig?.purchase?.paymentMethods) {\n      return;\n    }\n    // TODO: consider different cart types\n    const paymentMethodNames = Object.keys(cefConfig.purchase.paymentMethods);\n    let builtMethods = paymentMethodNames.map(name => ({\n      ...cefConfig.purchase.paymentMethods[name]\n    }));\n    if (cart.Totals.Total > 0) {\n      builtMethods = builtMethods.filter(m => m.name !== \"purchasePaymentMethodFree\");\n    }\n    if (methodIsGuest) {\n      builtMethods = builtMethods.filter(m => cefConfig.purchase.allowedGuestMethods.includes(m.name));\n    }\n    setMethods(builtMethods);\n    setSelectedPaymentMethod(builtMethods[0].name as TPaymentMethod);\n  }, [ cefConfig ]);\n\n  if (!cefConfig || !selectedPaymentMethod) {\n    return <LoadingWidget />;\n  }\n\n  return (\n    <Row>\n      <Col xs={12} sm={9}\n        className=\"w-100\">\n        {selectedPaymentMethod === \"purchasePaymentMethodCreditCard\"\n          && <PaymentMethodCreditCardBody\n            purchaseDetails={cart}\n            continueText={continueText}\n            onSubmit={(type: \"PayByCreditCard\" | \"PayByWalletEntry\", creditCardData: any) => {\n              onCompleteCheckoutPaymentStep(\n                {\n                  [type]: {\n                    ...creditCardData\n                  }\n                },\n                ServiceStrings.checkout.paymentMethods.creditCard\n              );\n              if (cefConfig.googleTagManager.enabled) {\n                googleTagManagerService.ga4checkoutOption(\n                  cart,\n                  \"eec.addPaymentInfo\",\n                  `Credit Card ${creditCardData.CardType}`\n                );\n              }\n            }}\n            initialWalletID={\n              checkoutContext.payBy && checkoutContext.payBy.PayByWalletEntry\n                ? checkoutContext.payBy.PayByWalletEntry.WalletID\n                : null\n            }\n            usingGuestCheckout={methodIsGuest}\n            btnContainerClasses=\"my-3 d-flex flex-column align-items-start gap-2\"\n            total={checkoutContext.gatheredTotals?.Total}\n          />\n        }\n        {selectedPaymentMethod === \"purchasePaymentMethodInvoice\"\n          && <PaymentMethodInvoiceBody\n            continueText={continueText}\n            onSubmit={(invoiceFormData: any) => {\n              onCompleteCheckoutPaymentStep(\n                {\n                  PayByBillMeLater: {\n                    ...invoiceFormData\n                  },\n                  FileNames: invoiceFormData.uploadedFileNames\n                },\n                ServiceStrings.checkout.paymentMethods.invoice,\n                invoiceFormData.uploadedFileNames\n              );\n            }}\n          />\n        }\n        {selectedPaymentMethod === \"purchasePaymentMethodQuoteMe\"\n          && <PaymentMethodQuoteBody\n            continueText={continueText}\n            onSubmit={() => {\n              onCompleteCheckoutPaymentStep(\n                {},\n                ServiceStrings.checkout.paymentMethods.quoteMe,\n              );\n            }}\n          />\n        }\n        {selectedPaymentMethod === \"purchasePaymentMethodFree\" && cart.Totals.Total <= 0\n          && <PaymentMethodFreeBody\n            continueText={continueText}\n            onSubmit={() => {\n              onCompleteCheckoutPaymentStep({}, ServiceStrings.checkout.paymentMethods.free);\n            }}\n          />\n        }\n        {selectedPaymentMethod === \"purchasePaymentMethodEcheck\"\n          && <PaymentMethodECheckBody\n            continueText={continueText}\n            onSubmit={() => {\n              // TODO: fill body\n              onCompleteCheckoutPaymentStep(\n                {},\n                ServiceStrings.checkout.paymentMethods.echeck,\n              );\n            }}\n          />\n        }\n        {selectedPaymentMethod === \"purchasePaymentMethodACH\"\n          && <PaymentMethodACHBody\n            continueText={continueText}\n            onSubmit={(type: \"PayByWalletEntry\", walletData: any) => {\n              onCompleteCheckoutPaymentStep(\n                {\n                  [type]: {\n                    ...walletData\n                  }\n                },\n                ServiceStrings.checkout.paymentMethods.ach,\n              );\n            }}\n            initialACHItemID={\n              checkoutContext.payBy && checkoutContext.payBy.PayByWalletEntry\n                ? checkoutContext.payBy.PayByWalletEntry.WalletID\n                : null\n            }\n          />\n        }\n      </Col>\n      <Col xs={12} sm={3} />\n    </Row>\n  );\n};\n","/* eslint-disable max-len */\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ICheckoutCompletedStepProps } from \"../../_checkoutTypes\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\n\nexport const CheckoutCompletedStep = (props: ICheckoutCompletedStepProps): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const checkoutContext = useCheckoutContext();\n\n  if (!checkoutContext.completedIDs?.masterID) {\n    return null;\n  }\n\n  return (\n    <div className=\"step step-three\">\n      <div className=\"checkout-box\">\n        <Row>\n          <Col xs={12}>\n            <h4 className=\"mb-1\"\n              id=\"lbThankYouForYourPurchase\"\n              data-sid=\"lbThankYouForYourPurchase\">\n              Success!\n            </h4>\n            <p id=\"PurchaseSuccessText\">\n            Your order has been placed. Hang tight – we’ll let you know the moment your order is reviewed and on the move. Sign-in to your MangoRx account anytime to get updates on the status of your order.\n            </p>\n            <div className=\"d-flex\">\n              <a\n                className=\"btn btn-outline-black underline-hover-none me-2\"\n                data-sid=\"btnCheckoutContinueShopping\"\n                href={corsLink(cefConfig, \"/\", \"catalog\")}>\n                {t(\"ui.storefront.cart.continueShopping\", \"Continue Shopping\")}\n              </a>\n              {checkoutContext.method === \"guest\"\n                ? null\n                : props.cartType === \"Quote Cart\"\n                  ? <a className=\"btn btn-primary underline-hover-none\"\n                    href={corsLink(cefConfig, \"/quotes\", \"dashboard\")}\n                    data-sid=\"btnCheckoutQuoteHistory\">\n                    {t(\"ui.storefront.submitQuote.confirmation.QuoteHistory\", \"Quote History\")}\n                  </a>\n                  : <a className=\"btn btn-primary underline-hover-none\"\n                    href={corsLink(cefConfig, \"/orders\", \"dashboard\")}\n                    data-sid=\"btnCheckoutOrderHistory\">\n                    {t(\"ui.storefront.checkout.confirmation.OrderHistory\", \"Order History\")}\n                  </a>\n              }\n            </div>\n          </Col>\n        </Row>\n      </div>\n    </div>\n  );\n};\n","import { useEffect } from \"react\";\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { CartModel, RateQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport cvApi from \"src/_api/cvApi\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\nimport { PurchaseRateQuotesManagerWidget } from \"src/Checkout/PurchaseRateQuotesManagerWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport {\n  AnalyzeCurrentCartToTargetCartsDto,\n  ApplyCurrentCartShippingRateQuoteDto\n} from \"src/_api\";\nimport { SplitShippingTotals } from \"src/Checkout/steps/shipping/SplitShippingTotals\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { AxiosError } from \"axios\";\nimport { CEFActionErrorResponse } from \"src/_api/cvApi.shared\";\nimport { IHTTPResponseT } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport _ from \"lodash\";\nimport googleTagManagerService from \"src/_shared/tracking/googleTagManagerService\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\nimport { ICheckoutShippingRatesStepProps } from \"../../_checkoutTypes\";\n\nexport const CheckoutShippingRatesStep = (props: ICheckoutShippingRatesStepProps): JSX.Element => {\n  const {\n    continueText,\n    masterCart,\n    cartType\n  } = props;\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const checkoutContext = useCheckoutContext();\n\n  const shippingRatesEstimatorEnabled\n    = cefConfig?.featureSet?.shipping?.rates?.estimator?.enabled;\n\n  const onCompleteCheckoutShippingRatesStep = (): void => {\n    checkoutContext.dispatch({ type: \"shippingRatesStepComplete\" });\n  };\n\n  useEffect(() => {\n    loadTargetedCarts();\n  }, []);\n\n  function getTargetedCarts() {\n    const dto: AnalyzeCurrentCartToTargetCartsDto = {\n      WithCartInfo: { CartTypeName: cartType },\n      IsSameAsBilling: false,\n      IsPartialPayment: false,\n      // Clear previous target setups\n      ResetAnalysis: true\n    };\n    let analyzeFn = cvApi.providers.AnalyzeCurrentCartToTargetCarts;\n    if (cartType === ServiceStrings.carts.types.quote) {\n      analyzeFn = cvApi.providers.AnalyzeCurrentQuoteCartToTargetQuoteCarts;\n    }\n    return analyzeFn(dto);\n  }\n\n  function getCartItemsForCarts(carts: CartModel[]) {\n    return Promise.all(\n      carts\n        .filter(x => x.ID !== null && x.TypeName !== cartType)\n        .map(x => cvApi.shopping.GetCartItems({\n          Active: true,\n          AsListing: true,\n          MasterID: x.ID\n        }))\n    );\n  }\n\n  function getCartShippingContactForCarts(carts: CartModel[]) {\n    return Promise.all(\n      carts.map(x => cvApi.shopping.CurrentCartGetShippingContact({\n        TypeName: x.TypeName\n      }))\n    );\n  }\n\n  function getShippingRateQuotesForCarts(carts: CartModel[]) {\n    return Promise.all(\n      carts\n        .filter(\n          cart => _.every(cart.SalesItems, salesItem => _.every(salesItem.Targets, target => !target.NothingToShip))\n        )\n        .map(cart => cvApi.shopping.GetCurrentCartShippingRateQuotes({\n          TypeName: cart.TypeName,\n          Expedited: false\n        }))\n    );\n  }\n\n  function getCartsSortedByNothingToShip(carts: CartModel[]): CartModel[] {\n    return carts.sort((cartOne, cartTwo) => {\n      if (cartOne.NothingToShip && cartTwo.NothingToShip) {\n        return 0;\n      }\n      if (cartOne.NothingToShip) {\n        return -1;\n      }\n      return 1;\n    });\n  }\n\n  function handleRateQuotesDiscounts(rateQuotes: RateQuoteModel[]) {\n    if (!rateQuotes) {\n      return rateQuotes;\n    }\n    for (let j = 0; j < rateQuotes.length; j++) {\n      const curRateQuote = rateQuotes[j];\n      // @ts-ignore\n      curRateQuote.original = curRateQuote.Rate;\n      // @ts-ignore\n      curRateQuote.discounted = curRateQuote.Rate;\n      const shippingDiscounts = itemsExist(masterCart.Discounts)\n        ? masterCart.Discounts.filter(discount => discount.DiscountTypeID === 2)\n        : [];\n      if (!itemsExist(shippingDiscounts)) {\n        continue;\n      }\n      let discounted = curRateQuote.Rate;\n      shippingDiscounts\n        .sort(\n          (discountOne, discountTwo) => discountOne.DiscountPriority - discountTwo.DiscountPriority\n        )\n        .forEach(discount => {\n          if (discount.DiscountValueType === 0) {\n            // Percent\n            discounted *= 1 - discount.DiscountValue;\n          } else if (discount.DiscountValueType === 1) {\n            // Dollar\n            discounted -= discount.DiscountValue;\n          }\n        });\n      // @ts-ignore\n      curRateQuote.discounted = discounted;\n    }\n    return rateQuotes;\n  }\n\n  function loadTargetedCarts() {\n    setRunning(t(\"ui.storefront.common.Analyzing.Elipses\"));\n    let targetedCartsCopy: CartModel[] = [];\n    getTargetedCarts()\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          throw new Error(res.data.Messages[0]);\n        }\n        targetedCartsCopy = res.data.Result.filter(x => x.ID !== null && x.TypeName !== cartType);\n        return getCartItemsForCarts(targetedCartsCopy);\n      })\n      .then(resArr => {\n        resArr.forEach(pagedResult => {\n          if (!pagedResult?.data?.Results || !pagedResult?.data?.TotalCount) {\n            console.warn(\"No results on one of the paged results that should have had children!\");\n            return;\n          }\n          for (let i = 0; i < targetedCartsCopy.length; i++) {\n            const cart = targetedCartsCopy[i];\n            if (cart.ID === pagedResult.data.Results[0].MasterID) {\n              cart.SalesItems = pagedResult.data.Results;\n            }\n          }\n        });\n        return getCartShippingContactForCarts(targetedCartsCopy);\n      })\n      .then(resArr => {\n        for (let i = 0; i < resArr.length; i++) {\n          if (!resArr[i].data.ActionSucceeded) {\n            targetedCartsCopy[i].ShippingContactID = null;\n            targetedCartsCopy[i].ShippingContact = null;\n            continue;\n          }\n          targetedCartsCopy[i].ShippingContact = resArr[i].data.Result;\n          targetedCartsCopy[i].ShippingContactID = resArr[i].data.Result.ID;\n        }\n        return getShippingRateQuotesForCarts(targetedCartsCopy);\n      })\n      .then(resArr => {\n        const shippableCarts = targetedCartsCopy.filter(cart => !cart.NothingToShip);\n        for (let i = 0; i < resArr.length; i++) {\n          const response = resArr[i];\n          if (!response.data || !response.data.ActionSucceeded) {\n            finishRunning(\n              true,\n              null,\n              response.data.Messages ?? [ \"Failed to get shipping rate quotes\" ]\n            );\n            return;\n          }\n          let rateQuotes = response.data.Result;\n          if (itemsExist(rateQuotes)) {\n            rateQuotes = handleRateQuotesDiscounts(rateQuotes);\n            const selected = rateQuotes.find(q => q.Selected);\n            if (selected) {\n              shippableCarts[i].Totals.Shipping = selected.Rate;\n            }\n            shippableCarts[i].RateQuotes = rateQuotes;\n          }\n        }\n        targetedCartsCopy = getCartsSortedByNothingToShip(targetedCartsCopy);\n        checkoutContext.setTargetedCarts(targetedCartsCopy);\n        finishRunning();\n      })\n      .catch((err: AxiosError<IHTTPResponseT<CEFActionErrorResponse>>) => {\n        finishRunning(true, err.response?.data ?? \"Failed to get rate quotes\");\n      });\n  }\n\n  function itemsExist(items: unknown): boolean {\n    return Array.isArray(items) && items?.length > 0;\n  }\n\n  function onRateQuoteSelected(cartTypeName: string, selectedRateQuoteID: number): void {\n    setRunning();\n    const dto: ApplyCurrentCartShippingRateQuoteDto = {\n      // TODO: RequestedShipDate\n      TypeName: cartTypeName,\n      RateQuoteID: selectedRateQuoteID\n    };\n    cvApi.shopping\n      .ApplyCurrentCartShippingRateQuote(dto)\n      .then(r => {\n        if (!r.data.ActionSucceeded) {\n          // This.cvViewStateService.processCEFActionResponseMessages(r.data);\n          finishRunning(true, null, r.data.Messages);\n          return Promise.reject(new Error(\"Action failed\"));\n        }\n        return cvApi.shopping.GetCurrentCart({\n          TypeName: cartTypeName,\n          Validate: cartTypeName === ServiceStrings.carts.types.cart\n        });\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          finishRunning(\n            true,\n            null,\n            res.data.Messages ?? [ \"Failed to get current cart after rate quote selected\" ]\n          );\n          return;\n        }\n        if (cefConfig.googleTagManager.enabled) {\n          googleTagManagerService.ga4checkoutOption(\n            res.data.Result,\n            \"eec.addShippingInfo\",\n            _.find(res.data.Result.RateQuotes, rq => rq.ID === selectedRateQuoteID)?.ShipCarrierMethodName\n          );\n        }\n        checkoutContext.setTargetedCarts(prevTargetedCarts => prevTargetedCarts.map(cart => {\n          if (cart.TypeName === cartTypeName) {\n            // TODO: just return res.data.Result\n            // RateQuotes should be present in response to GetCurrentCart\n            return res.data.Result;\n          }\n          return cart;\n        }));\n        finishRunning();\n      })\n      .catch(reason => finishRunning(true, reason));\n  }\n\n  return (\n    <>\n      {viewState.running && <LoadingWidget overlay={true} message={viewState.waitMessage ?? \"\"} />}\n      <Row>\n        <Col xs={12} className=\"pb-4\">\n          <h4 id=\"lbResolvedToTargetsMessage\">\n            {t(\n              shippingRatesEstimatorEnabled\n                ? \"ui.storefront.checkout.splitShipping.EachItemHasBeenResolvedToAShipment.Message\"\n                : \"ui.storefront.checkout.splitShipping.EachItemHasBeenResolvedToAShipmentNoEstimator.Message\"\n            )}\n          </h4>\n        </Col>\n        {viewState.hasError\n          && <Col xs={12}>\n            <ErrorView viewState={viewState} />\n          </Col>\n        }\n      </Row>\n      <Row>\n        {checkoutContext?.targetedCarts?.map(cart => {\n          const { TypeName, NothingToShip, SalesItems } = cart;\n          const rateQuoteSelected: boolean = cart?.RateQuotes?.some(\n            (quote: RateQuoteModel) => quote.Selected\n          );\n          return (\n            <Col xs={12} key={TypeName}>\n              {/* TODO: add other condition to NothingToShip */}\n              <Card\n                className={`mb-3 ${\n                  !viewState.hasError && rateQuoteSelected || NothingToShip ? \"is-valid\" : \"\"\n                }`}>\n                <Card.Header id=\"txtProductsBeingShipped\" className=\"ps-3\">\n                  {t(NothingToShip ? \"Non-shippable products\" : \"Product(s) being shipped\")}\n                </Card.Header>\n                <Card.Body className=\"p-3\">\n                  {SalesItems.sort((itemOne, itemTwo) => {\n                    if (itemOne.Name && itemTwo.Name) {\n                      return itemOne.Name > itemTwo.Name ? 1 : -1;\n                    }\n                    return itemOne.ProductName > itemTwo.ProductName ? 1 : -1;\n                  }).map((sItem, index) => <div className=\"d-block\"\n                    key={sItem.ID}\n                    id={`ShipGroupProduct_${index}`}>\n                    {`${sItem.TotalQuantity ?? 0} x\n                      ${sItem.Name ?? sItem.ProductName} (${sItem.Sku ?? sItem.ProductKey})`}\n                  </div>)}\n                </Card.Body>\n                {NothingToShip\n                  ? null\n                  : <>\n                    <Card.Header id=\"txtYourFullAddress\">\n                      {t(\"ui.storefront.checkout.views.shippingInformation.yourFullAddress\")}\n                    </Card.Header>\n                    {cart.ShippingContact\n                      ? <Card.Body className=\"p-3 row\">\n                        <div className=\"col-6\">\n                          <AddressBlock\n                            address={cart.ShippingContact.Address}\n                            contact={cart.ShippingContact}\n                            hidePhone1={true}\n                            hidePhone2={true}\n                            hidePhone3={true}\n                            hideFax1={true}\n                            hideEmail1={true}\n                          />\n                        </div>\n                        <div className=\"col-6\">\n                          <AddressBlock\n                            address={cart.ShippingContact.Address}\n                            contact={cart.ShippingContact}\n                            hideName={true}\n                            hideCompany={true}\n                            hideStreet1={true}\n                            hideStreet2={true}\n                            hideStreet3={true}\n                            hideCity={true}\n                            hideCountryKey={true}\n                            hideRegionName={true}\n                            hidePostalCode={true}\n                          />\n                        </div>\n                      </Card.Body>\n                      : null}\n                    <Card.Header id=\"txtYourShippingRateQuotes\">\n                      {t(\"ui.storefront.cart.cartShippingEstimator.yourShippingRateQuotes\")}\n                    </Card.Header>\n                    <Card.Body className=\"p-0\">\n                      {cart.ShippingContact && shippingRatesEstimatorEnabled\n                        ? <div className=\"w-100\">\n                          <PurchaseRateQuotesManagerWidget\n                            quotes={cart.RateQuotes}\n                            onRateSelected={rateQuote => {\n                              onRateQuoteSelected(cart.TypeName, rateQuote.ID);\n                            }}\n                          />\n                        </div>\n                        : null}\n                    </Card.Body>\n                  </>}\n              </Card>\n            </Col>\n          );\n        })}\n      </Row>\n      {shippingRatesEstimatorEnabled && checkoutContext?.targetedCarts\n        ? <SplitShippingTotals targetedCarts={checkoutContext.targetedCarts} masterCart={masterCart} />\n        : null}\n      <Row>\n        <Col xs={12}>\n          <Button\n            id=\"btnContinueToPayment\"\n            data-sid=\"btnContinueToPayment\"\n            // variant=\"primary\"\n            className=\"mb-3 continue-btn\"\n            disabled={\n              !checkoutContext?.targetedCarts\n                ?.filter(cart => !cart.NothingToShip)\n                .every((cart: CartModel) => cart.RateQuotes?.some((quote: RateQuoteModel) => quote.Selected))\n            }\n            onClick={() => {\n              onCompleteCheckoutShippingRatesStep();\n            }}>\n            {continueText}\n          </Button>\n        </Col>\n      </Row>\n    </>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Button } from \"react-bootstrap\";\nimport { useCheckoutContext } from \"../../CheckoutContext\";\n\ninterface ICheckoutStepsHeaderProps {\n  allowEdit?: boolean;\n  index: number;\n  isLastStep?: boolean;\n  titleKey: string;\n  valid: boolean;\n}\n\nexport const CheckoutStepsHeader = (props: ICheckoutStepsHeaderProps): JSX.Element => {\n  const { allowEdit, index, isLastStep, titleKey, valid } = props;\n\n  const checkoutContext = useCheckoutContext();\n  const { t } = useTranslation();\n\n  const onEditClicked = () => {\n    checkoutContext.editStep(index + 1);\n  };\n\n  const isActiveStep = checkoutContext.step === index;\n\n  let textClass = \"text-body\";\n\n  if (valid) {\n    textClass = \"text-primary\";\n  }\n\n  return (\n    <div className=\"d-flex justify-content-between align-items-end\">\n      <h5 className=\"mb-0 h6\">\n        <i className={isActiveStep ? \"fa-regular fa-circle text-brand-orange\"\n          : valid ? `${textClass} fal fa-check-circle` : \"fal fa-circle text-brand-orange-subtle\"} />\n        <span className={`${textClass} d-inline-block ms-2`}>\n          <span data-sid=\"txtCheckoutStepHeader\">\n            {isLastStep ? \"\" : `Step ${index}. `}{t(titleKey) === \"Checkout Method\" ? \"My Cart\" : t(titleKey)}\n          </span>\n        </span>\n      </h5>\n      {allowEdit && (\n        <Button data-sid=\"btnEditCheckoutStep\"\n          variant=\"outline-secondary\"\n          onClick={onEditClicked}>\n          {t(\"ui.storefront.common.Edit\")}\n        </Button>\n      )}\n    </div>\n  );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Container, Row } from \"react-bootstrap\";\nimport _ from \"lodash\";\nimport { MiniCart } from \"../Cart/views/MiniCart\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ICheckoutProps } from \"src/Checkout/_checkoutTypes\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCheckoutSteps } from \"src/_shared/customHooks/useCheckoutFactory\";\nimport { CheckoutContextProvider, useCheckoutContext } from \"./CheckoutContext\";\nimport { CheckoutBillingStep } from \"./steps/billing/CheckoutBillingStep\";\nimport { CheckoutConfirmationStep } from \"./steps/confirmation/CheckoutConfirmationStep\";\nimport { CheckoutMethodStep } from \"./steps/method/CheckoutMethodStep\";\nimport { CheckoutSplitShippingStep } from \"./steps/shipping/CheckoutSplitShippingStep\";\nimport { CheckoutPaymentStep } from \"./steps/payment/CheckoutPaymentStep\";\nimport { CheckoutCompletedStep } from \"./steps/completed/CheckoutCompletedStep\";\nimport { CheckoutShippingRatesStep } from \"./steps/shippingRates/CheckoutShippingRatesStep\";\nimport { CheckoutStepsHeader } from \"./steps/_shared/CheckoutStepsHeader\";\n\ninterface ICheckoutBodyProps {\n  cartType: \"Cart\" | \"Quote Cart\";\n}\n\nconst CheckoutBody = (props: ICheckoutBodyProps) => {\n  const checkoutContext = useCheckoutContext();\n  const cart = useCart(props.cartType);\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const allSteps = useCheckoutSteps(props.cartType);\n\n  const step = checkoutContext.step;\n\n  if (_.isUndefined(cart) || _.some(cart.Messages, x => x.indexOf(\"ERROR!\") !== -1)) {\n    return <LoadingWidget />;\n  }\n\n  if (!cart?.SalesItems?.length && !checkoutContext.checkoutComplete) {\n    return (\n      <section className=\"section-checkout cart-new-styles\">\n        <div className=\"container\">\n          <Row>\n            <Col xs={12} className=\"text-center mt-4\">\n              <h3>{t(\"ui.storefront.checkout.cartEmpty\")}</h3>\n              <a\n                href={corsLink(cefConfig, \"/\", \"catalog\")}\n                className=\"btn btn-primary underline-hover-none\">\n                {t(\"ui.storefront.cart.continueShopping\")}\n              </a>\n            </Col>\n          </Row>\n        </div>\n      </section>\n    );\n  }\n\n  return (\n    <section className=\"section-checkout cart-new-styles\">\n      <Container>\n        <div className=\"section-head\">\n          <h1 className=\"title fw-normal mt-3 mb-2 pb-2\">\n            {t(props.cartType === ServiceStrings.carts.types.cart\n              ? \"ui.storefront.memberships.membershipRegistration.membershipLevelPurchase\"\n              : \"ui.storefront.common.SubmitQuote\")}\n          </h1>\n        </div>\n        <Row>\n          <Col xs={12}\n            lg={6}\n            xl={6}\n            className=\"order-lg-1 order-2 pe-4\">\n            <div className=\"checkout-steps\">\n              {checkoutContext.viewState.hasError\n                ? <ErrorView viewState={checkoutContext.viewState} componentName=\"Checkout\" />\n                : Array.isArray(allSteps)\n                  ? allSteps.map((stepData, index) => {\n                    const { continueText, titleKey } = stepData;\n                    let component = null;\n                    switch (stepData.name) {\n                      case ServiceStrings.checkout.steps.billing: {\n                        component\n                          = <CheckoutBillingStep key={stepData.name} continueText={continueText} />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.steps.shippingRates:\n                      case ServiceStrings.submitQuote.steps.shippingRates: {\n                        component\n                          = <CheckoutShippingRatesStep\n                            key={stepData.name}\n                            continueText={continueText}\n                            masterCart={cart}\n                            cartType={props.cartType}\n                          />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.steps.confirmation:\n                      case ServiceStrings.submitQuote.steps.confirmation: {\n                        component\n                          = <CheckoutConfirmationStep key={stepData.name} continueText={continueText} />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.steps.completed:\n                      case ServiceStrings.submitQuote.steps.completed: {\n                        component\n                          = <CheckoutCompletedStep\n                            key={stepData.name}\n                            cartType={props.cartType}\n                          />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.steps.method: {\n                        component\n                          = <CheckoutMethodStep key={stepData.name} continueText={continueText} />;\n                        break;\n                      }\n                      case ServiceStrings.submitQuote.steps.method: {\n                        component\n                          = <CheckoutMethodStep\n                            key={stepData.name}\n                            continueText={continueText}\n                            forceNoGuestCheckout={true}\n                          />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.steps.payment: {\n                        component\n                          = <CheckoutPaymentStep key={stepData.name} continueText={continueText} />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.steps.splitShipping:\n                      case ServiceStrings.submitQuote.steps.splitShipping: {\n                        component\n                          = <CheckoutSplitShippingStep\n                            key={stepData.name}\n                            continueText={continueText}\n                            cartType={props.cartType}\n                          />;\n                        break;\n                      }\n                      default: {\n                        console.error(\n                          `Failed to find step for checkout in cefConfig, name: ${stepData.name}`\n                        );\n                        break;\n                      }\n                    }\n                    return (\n                      <Fragment key={titleKey}>\n                        <Row className={step === index + 1 ? \"mb-3\" : \"\"}>\n                          <Col xs={12} sm>\n                            <div className=\"d-flex justify-content-between align-items-center\">\n                              <CheckoutStepsHeader\n                                valid={step >= index + 2 || step === allSteps.length}\n                                titleKey={titleKey}\n                                index={index + 1}\n                                allowEdit={\n                                  index + 1 < step\n                                  && stepData.isEditable\n                                  && !checkoutContext.viewState.running\n                                  && step < allSteps.length\n                                }\n                                isLastStep={index === allSteps.length - 1}\n                              />\n                            </div>\n                            {(step !== index + 1) && <hr />}\n                          </Col>\n                        </Row>\n                        <Row className={step === index + 1 ? \"mb-3\" : \"\"}>\n                          <Col xs={12} className=\"position-relative\">\n                            {step === index + 1 && !checkoutContext.viewState.running\n                              ? component\n                              : step === index + 1 && checkoutContext.viewState.running\n                                ? <LoadingWidget />\n                                : null}\n                          </Col>\n                        </Row>\n                      </Fragment>\n                    );\n                  }) : null}\n            </div>\n          </Col>\n          {!checkoutContext.checkoutComplete && (\n            <Col\n              xs={12}\n              lg={6}\n              xl={6}\n              className=\"order-1 order-lg-2 bg-brand-light rounded-4\">\n              <MiniCart cartType={props.cartType} />\n            </Col>\n          )}\n        </Row>\n      </Container>\n    </section>\n  );\n};\n\nexport const Checkout = (props: ICheckoutProps): JSX.Element => {\n  const {\n    cartType,\n  } = props;\n\n  return (\n    <CheckoutContextProvider cartType={cartType}>\n      <CheckoutBody cartType={cartType} />\n    </CheckoutContextProvider>\n  );\n};\n","/**\n * @format\n * @file React/src/Catalog/controls/Stock.tsx\n * @author Copyright (c) 2019-2023 clarity-ventures.com. All rights reserved.\n * @desc Product detail stock widget\n */\n\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Col, Row } from \"react-bootstrap\";\nimport { CalculatedInventories } from \"src/_api/cvApi.shared\";\n\ninterface IProductStockProps {\n  inventory: CalculatedInventories;\n  productID: number;\n}\n\nconst Stock = (props: IProductStockProps): JSX.Element => {\n  const { inventory } = props;\n  const { t } = useTranslation();\n\n  return (\n    <Row className=\"cef-product-stock\" id=\"pnlProductDetailsStock\">\n      {inventory.IsUnlimitedStock\n        && <Col xs=\"auto\">\n          <Alert variant=\"success\" className=\"p-0 m-0 border-0 bg-transparent\">\n            {t(\"ui.storefront.common.Unlimited\")}\n          </Alert>\n        </Col>\n      }\n      {!inventory.IsUnlimitedStock && inventory.QuantityOnHand > 0\n        && <Col xs=\"auto\">\n          <Alert variant=\"success\" className=\"p-0 m-0 border-0 bg-transparent\">\n            <span>{inventory.QuantityOnHand}</span>\n            &nbsp;<span>{t(\"ui.storefront.common.InStock\")}</span>\n          </Alert>\n        </Col>\n      }\n      {!inventory.IsUnlimitedStock && inventory.AllowBackOrder && inventory.QuantityOnHand <= 0\n        && <Col xs=\"auto\">\n          <Alert variant=\"warning\" className=\"p-0 m-0 border-0 bg-transparent\">\n            {t(\"ui.storefront.common.OnBackorder\")}\n          </Alert>\n        </Col>\n      }\n      {!inventory.IsUnlimitedStock && !inventory.AllowBackOrder && inventory.QuantityOnHand <= 0\n        && <Col xs=\"auto\">\n          <Alert variant=\"danger\" className=\"p-0 m-0 border-0 bg-transparent\">\n            {t(\"ui.storefront.common.OutOfStock\")}\n          </Alert>\n        </Col>\n      }\n    </Row>\n  );\n};\n\nexport default Stock;\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable prefer-template */\n/**\n * @file React/src/Catalog/controls/MagicImageCarousel2.tsx\n * @author Copyright (c) 2022-2023 clarity-ventures.com. All rights reserved.\n * @desc Magic image carousel widget\n */\nimport { useEffect, useState } from \"react\";\nimport { Anchor, Col, Row } from \"react-bootstrap\";\nimport _ from \"lodash\";\nimport { ProductImageModel, ProductModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsImageLink } from \"src/_shared/common/Cors\";\n\ninterface IResizerParamsBody {\n  width?: number;\n  height?: number;\n  mode?: string;\n  scale?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ninterface MagicImageCarouselProps {\n    product: ProductModel;\n    // options?: ReactImageGalleryProps;\n    magicScrollOptions?: {\n      items?: number,\n      pagination?: boolean,\n      draggable?: boolean,\n      height?: number | string,\n      onAfterRender?: any\n      orientation?: string\n    }\n    magicZoomOptions?: {\n      selectorTrigger?: string,\n      transitionEffect?: boolean,\n      zoomWidth?: string,\n    }\n    thumbnailImageResizerParamsBody?: IResizerParamsBody;\n    mediumImageResizerParamsBody?: IResizerParamsBody;\n    largeImageResizerParamsBody?: IResizerParamsBody;\n}\n\ninterface ProductDetailWindow extends Window {\n  MagicZoom?: {\n    start: Function,\n    stop: Function\n  };\n  MagicScroll?: {\n    start: Function,\n    stop: Function\n  };\n  MagicScrollOptions?: object;\n  $: any;\n}\n// eslint-disable-next-line init-declarations\ndeclare let window: ProductDetailWindow;\n\nexport const MagicImageCarousel2 = (props: MagicImageCarouselProps): JSX.Element => {\n  const cefConfig = useCefConfig();\n  // Default prop values\n  const {\n    /* mediumImageResizerParamsBody = {\n      width: 366,\n      height: 366,\n      mode: \"pad\",\n      scale: \"both\"\n    }, */\n    largeImageResizerParamsBody = {\n      width: 800,\n      height: 800,\n      mode: \"pad\",\n      scale: \"both\"\n    },\n    thumbnailImageResizerParamsBody = {\n      width: 100,\n      height: 100,\n      mode: \"pad\",\n      scale: \"both\"\n    }\n  } = props;\n\n  useEffect(() => {\n    window.MagicScrollOptions = props.magicScrollOptions;\n  }, [ props.magicScrollOptions ]);\n\n  useEffect(() => {\n    return () => {\n      // componentwillunmount in functional component.\n      // Anything in here is fired on component unmount.\n      if (window.MagicScroll) {\n        window.MagicScroll.stop(\"scroll-1\");\n      }\n      if (window.MagicZoom) {\n        window.MagicScroll.stop(\"productDetailImage\");\n      }\n    };\n  }, []);\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  if (!_.isArray(props.product.Images)) {\n    props.product.Images = [];\n  }\n\n  if (!props.product.Images.length) {\n    props.product.Images.push({\n      Active: true,\n      CreatedDate: new Date(),\n      ID: -1,\n      IsPrimary: true,\n      OriginalIsStoredInDB: false,\n      ThumbnailIsStoredInDB: false,\n      TypeID: -1\n    });\n  }\n\n  if (!props.magicScrollOptions?.items) {\n    props.magicScrollOptions!.items = props.product.Images.length;\n  }\n\n  const primaryImage = props.product.Images.find((x: ProductImageModel) => x.IsPrimary);\n  const large = corsImageLink(cefConfig, primaryImage.OriginalFileName, \"products\", largeImageResizerParamsBody);\n  const vertical = props.magicScrollOptions!.orientation === \"vertical\";\n\n  return (\n    <Row className=\"h-100\" id=\"productDetailImageContainer\">\n      <Col xs={vertical ? 9 : 12}\n        sm={vertical ? 10 : 12}\n        className={vertical ? \"order-2\" : \"\"}>\n        <Image\n          cefConfig={cefConfig}\n          href={large}\n          className=\"MagicZoom\"\n          aid=\"productDetailImage\"\n          data-options={convertObjectToHtmlDataOptions(props.magicZoomOptions ?? {})}\n          alt={primaryImage.OriginalFileName}\n          src={large}\n          imageResizerParamsBody={largeImageResizerParamsBody}\n          onLoad={() => {\n            if (!window.MagicZoom) {\n              return;\n            }\n            window.MagicZoom.start(\"productDetailImage\");\n          }}\n        />\n        {!vertical && <ScrollElement\n          vertical={vertical}\n          product={props.product}\n          magicScrollOptions={props.magicScrollOptions}\n          largeImageResizerParamsBody={largeImageResizerParamsBody}\n          thumbnailImageResizerParamsBody={thumbnailImageResizerParamsBody}\n        />}\n      </Col>\n      {vertical && <Col xs={3}\n        sm={2}\n        className=\"order-1\">\n        <ScrollElement\n          vertical={vertical}\n          product={props.product}\n          magicScrollOptions={props.magicScrollOptions}\n          largeImageResizerParamsBody={largeImageResizerParamsBody}\n          thumbnailImageResizerParamsBody={thumbnailImageResizerParamsBody}\n        />\n      </Col>}\n    </Row>\n  );\n};\n\nconst Image = (props: any) => {\n  const [ fallBackError, setFallBackError ] = useState<boolean>(false);\n\n  if (fallBackError) {\n    const placeholder = corsImageLink(props.cefConfig, undefined, \"products\", props.imageResizerParamsBody);\n    return <Anchor\n      id={props.aid}\n      data-zoom-id={props[\"data-zoom-id\"]}\n      data-image={placeholder}\n      href={placeholder}>\n      <img src={placeholder}\n        alt=\"placeholder\"\n        onLoad={props.onLoad} />\n    </Anchor>;\n  }\n\n  return <Anchor\n    id={props.aid}\n    className={props.className}\n    href={props.href}\n    data-zoom-id={props[\"data-zoom-id\"]}\n    data-image={props[\"data-image\"]}\n    data-options={props[\"data-options\"]}>\n    <img\n      style={props.style}\n      alt={props.alt}\n      src={props.src}\n      onError={() => {\n        if (fallBackError) {\n          return;\n        }\n        setFallBackError(true);\n      }}\n      onLoad={props.onLoad} />\n  </Anchor>;\n};\n\ninterface IScrollElementProps {\n  thumbnailImageResizerParamsBody?: IResizerParamsBody;\n  largeImageResizerParamsBody?: IResizerParamsBody;\n  magicScrollOptions: {\n    items?: number;\n    pagination?: boolean;\n    draggable?: boolean;\n    height?: number | string;\n    onAfterRender?: any;\n    orientation?: string;\n  };\n  product: ProductModel;\n  vertical?: boolean;\n}\n\nfunction ScrollElement(props: IScrollElementProps): JSX.Element {\n  const {\n    largeImageResizerParamsBody,\n    magicScrollOptions,\n    product,\n    thumbnailImageResizerParamsBody,\n    vertical,\n  } = props;\n\n  const cefConfig = useCefConfig();\n\n  return <div id=\"scroll-1\"\n    className={`MagicScroll ${vertical ? \"mx-0 vertical-magic-scroll\" : \"\"}`}\n    data-options={convertObjectToHtmlDataOptions(magicScrollOptions ?? {})}>\n    {product.Images?.map((image: ProductImageModel) => {\n      const largeScroll = corsImageLink(\n        cefConfig,\n        image.OriginalFileName,\n        \"products\",\n        largeImageResizerParamsBody\n      );\n      const thumbScroll = corsImageLink(\n        cefConfig,\n        image.OriginalFileName,\n        \"products\",\n        thumbnailImageResizerParamsBody\n      );\n      return <Image\n        key={image.ID}\n        cefConfig={cefConfig}\n        className={`pre-thumb mx-1 ${vertical ? \"mb-3\" : \"\"}`}\n        href={largeScroll}\n        data-zoom-id=\"productDetailImage\"\n        data-image={largeScroll}\n        alt={image.CustomKey}\n        src={thumbScroll}\n        imageResizerParamsBody={thumbnailImageResizerParamsBody}\n        onLoad={() => {\n          if (!window.MagicScroll) {\n            return;\n          }\n          if (!magicScrollOptions?.height) {\n            magicScrollOptions!.height = window.$(\"#productDetailImage\").height();\n          }\n          window.MagicScroll.start(\"scroll-1\");\n        }}\n      />;\n    })}\n  </div>;\n}\n\nfunction convertObjectToHtmlDataOptions(object: {[key: string]: any}): string {\n  let str = \"\";\n  const keys = Object.keys(object);\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    const value = object[key];\n    if (typeof value == \"string\") {\n      // eslint-disable-next-line no-useless-concat\n      str += key + \":\" + \"'\" + value + \"'\" + \";\";\n      return str;\n    }\n    str += key + \":\" + value + \";\";\n  }\n  return str;\n}\n","/* eslint-disable arrow-body-style */\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface IRatingSummaryProps {\n  scale: number;\n  // Average\n  value: number;\n  // Amount of ratings\n  reviewID?: number;\n  count: number;\n  hideCount?: boolean;\n}\n\nexport const RatingSummary = (props: IRatingSummaryProps): JSX.Element => {\n  const { scale, value, count, hideCount } = props;\n  const { t } = useTranslation();\n\n  // Just exists so the key in the list isn't the index\n  const [ starsList, setStarsList ] = useState<{ amount: number }[]>(null);\n\n  useEffect(() => {\n    if (scale) {\n      setStarsList(Array(scale)\n        .fill(null)\n        .map((_n, i) => ({ amount: i + 1 })));\n    }\n  }, [ scale ]);\n\n  return (\n    <div className=\"product-rating\">\n      <span className=\"d-inline-flex align-items-center small\">\n        {starsList && starsList\n          .map((star, index) => {\n            const starAmount = star.amount - value;\n            const calcAmount = starAmount * 100;\n            const offset = starAmount <= 0 ? 100\n              : starAmount >= 1\n                ? 0 : calcAmount;\n\n            return <svg\n              key={star.amount}\n              width=\"14\"\n              height=\"16\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n              viewBox=\"0 0 20 19\"\n              className=\"svg-inline--fa.fa-w-18 me-1\"\n              stroke=\"#000\"\n              strokeWidth=\"1.5\" >\n              <defs>\n                <linearGradient id={`half_${index}_${props.reviewID}`}>\n                  <stop offset={`${offset}%`} stopColor=\"#f8d200\" />\n                  <stop offset={`${offset}%`} stopColor=\"transparent\" />\n                </linearGradient>\n              </defs>\n              <path\n                // eslint-disable-next-line max-len\n                d=\"M10 14.332 4.122 18.09 5.88 11.34.49 6.909l6.964-.414L10 0l2.546 6.495 6.965.415-5.39 4.429 1.757 6.751z\"\n                fill={`url('#half_${index}_${props.reviewID}')`}></path>\n            </svg>;\n          })}\n        <span className=\"ms-2\">\n          {hideCount\n            ? null\n            : <span id=\"UserRatingsText\">\n              <span>\n                {`(${count} ${t(\n                  \"ui.storefront.product.reviews.ratingSummary.userRating.Plural\"\n                )})`}\n              </span>\n            </span>}\n        </span>\n      </span>\n    </div>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { ProductAssociationModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IVariantSwatchesProps {\n  listOfVariants: ProductAssociationModel[];\n  selectedVariantProductId: number;\n  onVariantSwatchClicked: (seoUrl: string) => void;\n}\n\nexport const VariantSwatches = (props: IVariantSwatchesProps): JSX.Element => {\n  const { listOfVariants, selectedVariantProductId, onVariantSwatchClicked } = props;\n  const [ swatchImages, setSwatchImages ] = useState<{ [variantProductId: number]: string }>(null);\n\n  useEffect(() => {\n    if (!listOfVariants) {\n      return;\n    }\n    getSwatchImagesForMasterProduct();\n  }, [ listOfVariants ]);\n\n  function getSwatchImagesForMasterProduct(): void {\n    if (!listOfVariants) {\n      return;\n    }\n    Promise.all(listOfVariants.map(variant => cvApi.products.GetProductImages({\n      Active: true,\n      MasterID: variant.SlaveID\n    })))\n      .then(resArr => {\n        setSwatchImages(resArr.reduce((accumulator, currentValue) => {\n          const imgs = currentValue.data.Results;\n          const variantSwatchImg = imgs.find(img => img.TypeName === \"Product Swatch\");\n          const variantPrimaryImg = imgs.find(img => img.IsPrimary);\n          let swatchImgName: string = null;\n          if (variantSwatchImg?.OriginalFileName) {\n            swatchImgName = variantSwatchImg.OriginalFileName;\n          } else if (variantPrimaryImg?.OriginalFileName) {\n            swatchImgName = variantPrimaryImg.OriginalFileName;\n          } else if (imgs && imgs[0] && imgs[0].OriginalFileName) {\n            swatchImgName = imgs[0].OriginalFileName;\n          }\n          accumulator[imgs[0].MasterID] = swatchImgName;\n          return accumulator;\n        }, {} as { [ variantProductId: number ]: string }));\n      })\n      .catch(err => {\n        console.error(err);\n      });\n  }\n\n  if (!listOfVariants || !swatchImages) {\n    return null;\n  }\n\n  return (\n    <Row className=\"gx-2 mt-3\">\n      {listOfVariants\n        && listOfVariants.map(variant => {\n          let imgFileName = null;\n          if (swatchImages && swatchImages[variant.SlaveID]) {\n            imgFileName = swatchImages[variant.SlaveID];\n          }\n          return (\n            <Col key={variant.ID}\n              xs={6}\n              sm={4}\n              md={3}\n              lg={2}>\n              <Button\n                variant={\n                  selectedVariantProductId === variant.SlaveID\n                    ? \"outline-dark\"\n                    : \"\"\n                }\n                title={variant.SlaveName}\n                aria-label={variant.SlaveName}\n                className={\"p-0 rounded-0\"}\n                onClick={() => onVariantSwatchClicked(variant.SlaveSeoUrl)}>\n                <ImageWithFallback\n                  className=\"img-fluid\"\n                  alt={variant.Slave?.SerializableAttributes?.VariantSelectDropdownName?.Value ?? variant.SlaveName}\n                  src={imgFileName}\n                  imageResizerParamsBody={{\n                    width: 75,\n                    height: 75,\n                    mode: \"pad\",\n                    scale: \"both\"\n                  }}\n                />\n              </Button>\n            </Col>\n          );\n        })}\n    </Row>\n  );\n};\n","import { useMemo } from \"react\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { ProductAssociationModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IVariantDropdownProps {\n  listOfVariants: ProductAssociationModel[];\n  selectedVariantSeoUrl: string;\n  onVariantSelected: (seoUrl: string) => void;\n  formWidth?: string\n}\n\nexport const VariantDropdown = (props: IVariantDropdownProps): JSX.Element => {\n  const { listOfVariants, selectedVariantSeoUrl, onVariantSelected, formWidth } = props;\n\n  const filteredListOfVariants = useMemo(() => {\n    if (!listOfVariants?.length) {\n      return [];\n    }\n    return listOfVariants.filter(\n      x => x.Slave?.SerializableAttributes?.HideFromVariantSelect?.Value.toLowerCase() !== \"true\"\n    );\n  }, [ listOfVariants ]);\n\n  if (!listOfVariants || !selectedVariantSeoUrl || !onVariantSelected) {\n    return null;\n  }\n\n  const isPrimeOrMojo = selectedVariantSeoUrl.toLowerCase().includes(\"prime\") || selectedVariantSeoUrl.toLowerCase().includes(\"mojo\");\n\n  return (\n    <Form.Group className={`mb-2 mt-3 ${formWidth}`}>\n      <label className=\"control-label fw-normal mb-1\" htmlFor=\"variations\">\n        {isPrimeOrMojo ? \"Options\" : \"Select Pack Quantity\"}\n      </label>\n      <InputGroup>\n        <select className=\"form-control\"\n          style={{ borderRadius: \"90px\" }}\n          id=\"variations\"\n          name=\"variations\"\n          onChange={e => onVariantSelected(e.target.value)}\n          value={selectedVariantSeoUrl}\n          required={true}>\n          <option value=\"\"\n            disabled={true}>\n            {isPrimeOrMojo\n              ? \"Options\" : \"Please Select Pack Quantity\"}\n          </option>\n          {filteredListOfVariants\n            .map(variant => <option key={variant.ID}\n              label={variant.Slave?.SerializableAttributes?.VariantSelectDropdownName?.Value ?? variant.SlaveName}\n              value={variant.SlaveSeoUrl}>\n            </option>)}\n        </select>\n      </InputGroup>\n    </Form.Group>\n  );\n};\n","import { Card, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\nimport { ProductCardLotTimerWidget, ProductCardPricingWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport { IProductCardProps } from \"./ProductCard\";\nimport { ProductCardStockWidget } from \"./ProductCardWidgets/ProductCardStockWidget\";\n\nexport const RelatedProductMobileCard = (props: IProductCardProps): JSX.Element => {\n  const {\n    countStoreStockOnly,\n    hideCompare,\n    hideShortDescription,\n    hideStock,\n    product\n  } = props;\n\n  const { ID, SeoUrl, Name, ShortDescription } = product;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  return (\n    <Card key={ID}>\n      <Card.Body className=\"py-3 sm-py-0\">\n        <Row>\n          <Col\n            xs={3}\n            sm={6}\n            className=\"gx-2\">\n            <ProductCardControlsWidget\n              product={product}\n              render=\"overlay\"\n              hideShoppingList={!cefConfig.featureSet.carts.shoppingLists.enabled}\n              hideCompare={hideCompare}>\n              {_.isNumber(product.LotID) && <ProductCardLotTimerWidget product={product} />}\n            </ProductCardControlsWidget>\n          </Col>\n          <Col\n            xs={9}\n            sm={6}\n            className=\"gx-3 pt-3\">\n            <a\n              href={corsLink(cefConfig, `/${SeoUrl}`, \"productDetail\")}\n              className=\"card-title\">\n              <span className=\"rows-2\">{Name}</span>\n            </a>\n            {!hideShortDescription\n              && ShortDescription\n              && (\n                <Card.Text className=\"mt-1\">\n                  <span className=\"rows-2 small\" id={`cardProductShortDesc_${ID}`}>\n                    {ShortDescription}\n                  </span>\n                </Card.Text>\n              )}\n            <Row className=\"gx-0\">\n              <Col xs={5}>\n                {!hideStock && (\n                  <div className=\"product-card-stock-wrapper d-flex h-100 align-items-center\">\n                    <ProductCardStockWidget\n                      product={product}\n                      countStoreStockOnly={countStoreStockOnly}\n                      alertClasses=\"small ms-1 px-1 py-0 w-fit-content bg-transparent\"\n                    />\n                  </div>\n                )}\n              </Col>\n              <Col xs={7}>\n                {!product.LotID && (\n                  <ProductCardPricingWidget\n                    className=\"text-end product-pricing flex-column justify-content-center text-nowrap\"\n                    product={product}\n                  />\n                )}\n              </Col>\n            </Row>\n            <div className=\"sm-my-1\">\n              <a\n                className=\"btn btn-primary w-100\"\n                href={\n                  corsLink(\n                    cefConfig,\n                    `${cefConfig.routes.productDetail.root}/${SeoUrl}`,\n                    \"productDetail\"\n                  )\n                }>\n                {t(\"ui.storefront.catalog.addToCartButton.OrderNow\", \"Order Now\")}\n              </a>\n            </div>\n          </Col>\n        </Row>\n      </Card.Body>\n    </Card>\n  );\n};\n","import { Fragment, useEffect, useState } from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { Carousel } from \"src/_shared/common/Carousel\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ProductAssociationModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { ProductCard } from \"./ProductCard\";\nimport { RelatedProductMobileCard } from \"./RelatedProductMobileCard\";\n\ninterface IRelatedProductsListProps {\n  desktopContainerClassName?: string;\n  products: Array<ProductAssociationModel>;\n}\n\nexport const RelatedProductsList = (props: IRelatedProductsListProps): JSX.Element => {\n  const { desktopContainerClassName, products } = props;\n\n  const [ productSets, setProductSets ] = useState<{ ID: number, products: ProductModel[] }[]>(null);\n\n  const { t } = useTranslation();\n  const productFactory = useProductFactory();\n  const cefConfig: CEFConfig = useCefConfig();\n  // TODO: use the viewState.running\n  const { setRunning, finishRunning } = useViewState();\n\n  useEffect(() => {\n    if (!cefConfig || !productFactory) {\n      return;\n    }\n    getAndSetFullProducts();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ cefConfig, productFactory ]);\n\n  if (!products || !products.length) {\n    return <div className=\"d-none\"></div>;\n  }\n\n  // Similar function in Catalog.tsx, consider refactoring\n  async function getAndSetFullProducts() {\n    const debugMsg = \"Catalog/views/RelatedProductsList getAndSetFullProducts\";\n    setRunning();\n    const productIDs = products\n      .filter(x => x.TypeKey === \"RELATED-PRODUCT\")\n      .map(product => product.SlaveID);\n    if (!productIDs.length) {\n      finishRunning(true, `${debugMsg} no productIDs`);\n      return;\n    }\n    try {\n      const newProducts = await productFactory.getProductsByIDs(\n        productIDs,\n        true,\n        { skipForcedPage: true, skipInventory: true }\n      );\n      const sets = [];\n      for (let i = 0; i < newProducts.length; i += 4) {\n        const thisSet: { ID: number, products: ProductModel[] } = {\n          ID: i,\n          products: []\n        };\n        for (let j = 0; j < 4; j++) {\n          if (newProducts[i + j]) {\n            thisSet.products.push(newProducts[i + j]);\n          }\n        }\n        sets.push(thisSet);\n      }\n      setProductSets(sets);\n    } catch (err) {\n      if (cefConfig.debug) {\n        console.debug(debugMsg, err);\n      }\n      finishRunning(true, `${debugMsg}: Failed to get products by product ids`);\n    }\n  }\n\n  return (\n    <Fragment>\n      <Row className={`d-none d-lg-block mb-5 ${desktopContainerClassName || \"\"}`}>\n        <Carousel\n          items={\n            productSets ? productSets\n              .map((set): JSX.Element => <Row key={set.ID}>\n                {set.products.map((product, index) => <ProductCard\n                  product={product}\n                  customClasses=\"col-6 col-xl-3\"\n                  key={product.ID}\n                  index={index}\n                  hideSku\n                  hideCompare\n                  addToCartAsLink={true}\n                />)}\n              </Row>) : null\n          }\n        />\n      </Row>\n      <Row className=\"d-block d-lg-none mb-5\">\n        <Col sm={12}>\n          <h2 className=\"mt-4\">\n            {t(\"ui.storefront.product.widgets.relatedProducts.relatedProducts\")}\n          </h2>\n          <Carousel items={productSets ? productSets\n            .map((set): JSX.Element => <Row key={set.ID}>\n              <Col sm={12}>\n                {\n                  // eslint-disable-next-line @typescript-eslint/no-extra-parens\n                  set.products.map((product, index) => (\n                    <RelatedProductMobileCard\n                      key={product.ID}\n                      product={product}\n                      index={index}\n                      hideSku\n                      hideCompare\n                    />\n                  ))}\n              </Col>\n            </Row>) : null} />\n        </Col>\n      </Row>\n    </Fragment>\n  );\n};\n","/* eslint-disable sort-keys */\n/* eslint-disable operator-linebreak */\n/* eslint-disable @typescript-eslint/no-extra-parens */\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Container, ListGroup, Row } from \"react-bootstrap\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { Price } from \"src/Catalog/controls/Price\";\nimport Stock from \"src/Catalog/controls/Stock\";\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\nimport { MagicImageCarousel2 } from \"src/Catalog/controls/MagicImageCarousel2\";\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\nimport { VariantSwatches } from \"src/Catalog/controls/VariantSwatches\";\nimport { VariantDropdown } from \"src/Catalog/controls/VariantDropdown\";\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\nimport { RelatedProductsList } from \"src/Catalog/views/RelatedProductsList\";\n\nexport const ClothingProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  if (!cefConfig) {\n    return null;\n  }\n  return (\n    <section>\n      {/* For DNN:cef:ProductMetaService */}\n      <input\n        id=\"productID\"\n        type=\"hidden\"\n        value={props.productVariant.ID}\n      />\n      {props.prices && props.prices.base && (\n        <input\n          id=\"productBasePrice\"\n          type=\"hidden\"\n          value={props.prices.base}\n        />\n      )}\n      <Container className=\"px-0\">\n        <div className=\"product-one\">\n          <Row>\n            <Col\n              xs={12}\n              md={6}\n              className=\"mb-3\">\n              <MagicImageCarousel2 product={props.productVariant}\n                magicScrollOptions={{\n                  pagination: true,\n                  draggable: true,\n                  orientation: \"vertical\",\n                }}\n                magicZoomOptions={{\n                  selectorTrigger: \"hover\",\n                  transitionEffect: false,\n                  zoomWidth: \"150%\"\n                }}\n                largeImageResizerParamsBody={{\n                  width: 366,\n                  height: 800,\n                  mode: \"crop\",\n                  scale: \"both\"\n                }}\n              />\n            </Col>\n            <Col\n              xs={12}\n              md={6}\n              className=\"mb-3\">\n              {/* Breadcrumbs from props.children */}\n              {props.children}\n              <h1\n                id=\"productName\"\n                className=\"cef-product-title mt-0\">\n                {props.productVariant.Name}\n              </h1>\n              <hr />\n              <Row>\n                <Col\n                  xs={12}\n                  className=\"cef-product-info\">\n                  {cefConfig.featureSet.reviews.enabled && (\n                    <div className=\"cef-ratings w-100 mb-3\">\n                      <RatingSummary\n                        scale={5}\n                        count={props.reviewsForAverage?.length ?? 0}\n                        value={props.average}\n                      />\n                    </div>\n                  )}\n                  <div className=\"product-info\">\n                    {cefConfig.featureSet.pricing.enabled && (\n                      <Price\n                        prices={props.prices}\n                        colClasses=\"h1\"\n                        sizeClass=\"very-small\"\n                        muteDiscountText={true}\n                      />\n                    )}\n                    {cefConfig.featureSet.inventory.enabled && (\n                      <div className=\"mb-3\">\n                        <Stock\n                          inventory={props.inventory}\n                          productID={props.productVariant.ID}\n                        />\n                      </div>\n                    )}\n                    <ListGroup\n                      as=\"ul\"\n                      className=\"list-unstyled\">\n                      <ListGroup.Item className=\"border-0 p-0\">\n                        <span className=\"dt\">\n                          {t(\"ui.storefront.product.detail.productDetails.SKU\")}&nbsp;\n                          {props.productVariant?.CustomKey}\n                        </span>\n                      </ListGroup.Item>\n                      <ListGroup.Item className=\"border-0 p-0\">\n                        <span className=\"dt\">\n                          {t(\"ui.storefront.common.Unit\")}&nbsp;{props.productVariant?.UnitOfMeasure}\n                        </span>\n                      </ListGroup.Item>\n                    </ListGroup>\n                  </div>\n                  {cefConfig.productDetails.variantSwatches.enabled && props.listOfVariants && (\n                    <VariantSwatches\n                      listOfVariants={props.listOfVariants}\n                      selectedVariantProductId={props.productVariant.ID}\n                      onVariantSwatchClicked={props.updateProductVariant}\n                    />\n                  )}\n                  <hr />\n                  <div>\n                    <h5>{t(\"ui.storefront.product.detail.productDetails.quickDescription\")}</h5>\n                    <p>{props.productVariant?.ShortDescription}</p>\n                  </div>\n                </Col>\n                <Col\n                  xs={12}>\n                  <div className=\"mb-2\">\n                    {props.listOfVariants?.length && cefConfig.productDetails.variantDropdown.enabled && (\n                      <VariantDropdown\n                        listOfVariants={props.listOfVariants}\n                        onVariantSelected={props.updateProductVariant}\n                        selectedVariantSeoUrl={props.productVariant?.SeoUrl}\n                      />\n                    )}\n                    <ProductCardActionButtonWidget\n                      product={props.productVariant}\n                      addToCartBtnVariant=\"success\"\n                      buttonView=\"addToCart\"\n                      quoteCartBtnSeparated={true}\n                      useOutOfStockInsteadOfViewDetails={true}\n                      outOfStockBtnClasses=\"rounded\"\n                    />\n                  </div>\n                  <ProductCardControlsWidget\n                    product={props.productVariant}\n                    inventory={props.inventory}\n                    render=\"vertical\"\n                  />\n                </Col>\n              </Row>\n            </Col>\n          </Row>\n        </div>\n        {props.productVariant?.ProductAssociations\n          && <RelatedProductsList products={props.productVariant.ProductAssociations} />}\n      </Container>\n    </section>\n  );\n};\n","/** @format */\n\ninterface ITabContentProps {\n  // Grabbed by parent\n  label: string;\n  // Remove this\n  title?: string;\n  children: JSX.Element[] | JSX.Element;\n  className?: string;\n}\n\nexport const TabContent = (props: ITabContentProps): JSX.Element => {\n  return <div className={`${props.className || \"\"} tab-pane show`}>{props.children}</div>;\n};\n","/* eslint-disable indent */\n/** @format */\n\nimport _ from \"lodash\";\nimport { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\n\ninterface ITabsProps {\n  children: JSX.Element[];\n  getTabClasses?: (isActive: boolean) => string;\n  onSwitch?: Function;\n  tabContainerClasses?: string;\n  tabListClasses?: string;\n}\n\nexport const Tabs = (props: ITabsProps): JSX.Element => {\n  const {\n    children,\n    getTabClasses,\n    onSwitch,\n    tabContainerClasses,\n    tabListClasses\n  } = props;\n\n  const [ tabToShow, setTabToShow ] = useState<number>(0);\n\n  const filteredChildren = children.filter(c => c && c.props.label);\n\n  const singleTab = filteredChildren.length === 1;\n\n  return (\n    <div className={singleTab ? \"\" : `tabs ${tabContainerClasses ?? \"\"}`}>\n      <nav className={singleTab ? \"d-none\" : \"\"}>\n        <ul className={`${tabListClasses ?? \"\"} border-medium nav nav-tabs`}>\n          {filteredChildren.map((c, index: number) => <li key={c.props.label} className={singleTab ? \"d-none\" : \"\"}>\n            <Button\n              variant=\"default\"\n              bsPrefix=\"null\"\n              className={`nav-link\n                ${_.isFunction(getTabClasses) ? getTabClasses(index === tabToShow) : \"\"}\n                ${index === tabToShow\n                  ? \"active active-tabs-link text-primary\"\n                  : \"text-black-50\"}`\n              }\n              onClick={() => {\n                setTabToShow(index);\n                if (onSwitch) {\n                  onSwitch();\n                }\n              }}>\n              {c.props.label}\n            </Button>\n          </li>)}\n        </ul>\n      </nav>\n      <hr className=\"border d-sm-none\"/>\n      <div className=\"my-2\">{filteredChildren[tabToShow]}</div>\n    </div>\n  );\n};\n","import { GeneralAttributeModel, ProductModel } from \"src/_api/cvApi._DtoClasses\";\nimport Interweave from \"interweave\";\nimport _ from \"lodash\";\n\ninterface IProductDetailsTabAttributeProps {\n  product: ProductModel;\n  attribute: GeneralAttributeModel;\n  displayStyle?: \"default\" | \"collapse\";\n}\n\nexport const ProductDetailsTabAttribute = (\n  props: IProductDetailsTabAttributeProps\n): JSX.Element => {\n  const { product, attribute } = props;\n  return (\n    <div id={`${attribute.CustomKey}Text`}>\n      <dd>\n        { attribute.IsMarkup\n          && _.isObject(product.SerializableAttributes)\n          && !_.isUndefined(product.SerializableAttributes[attribute.CustomKey])\n          && <Interweave\n            content={product.SerializableAttributes[attribute.CustomKey].Value}\n            className=\"text-wrap\"\n            allowAttributes={true}\n            allowElements={true}\n          />}\n        {!attribute.IsMarkup\n          && !_.isUndefined(product.SerializableAttributes[attribute.CustomKey]?.UofM)\n          && <span>{product.SerializableAttributes[attribute.CustomKey].UofM}</span>\n        }\n        {!attribute.IsMarkup\n          && <div>{product.SerializableAttributes[attribute.CustomKey].Value}</div>}\n      </dd>\n    </div>\n  );\n};\n\nProductDetailsTabAttribute.defaultProps = {\n  displayStyle: \"default\"\n};\n","/** @format */\n\nimport Interweave from \"interweave\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { GeneralAttributeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ProductDetailsTabAttribute } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabAttribute\";\nimport { IFullTabSetTab } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabs\";\n\ninterface IProductDetailsTabsDefaultTabContentProps {\n  product: ProductModel;\n  fullTabSet: IFullTabSetTab[];\n}\n\nexport const ProductDetailsTabsDefaultTabContent = (props: IProductDetailsTabsDefaultTabContentProps): JSX.Element => {\n  const { product, fullTabSet } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Row className=\"description\" id=\"tabMoreInformation\">\n      {product && product.Description\n        ? <Col xs={12} className=\"mb-3\">\n          <h3 id=\"ProductOverviewText\">\n            {t(\"ui.storefront.product.detail.productDetails.productOverview\")}\n          </h3>\n          <div id=\"ProductOverviewDescriptionText\">\n            <Interweave content={product.Description}\n              allowAttributes={true}\n              allowElements={true} />\n          </div>\n        </Col>\n        : null}\n      {fullTabSet\n        .filter(ft => ft.key === \"default-tab\")\n        .map(fullTab => {\n          const { header, attributes } = fullTab;\n          return (\n            <Col xs={12} key={header}>\n              {attributes\n                .sort((attr1, attr2) => {\n                  if (attr1.SortOrder && attr2.SortOrder) {\n                    return attr1.SortOrder - attr2.SortOrder;\n                  }\n                  return 0;\n                })\n                .map((attr: GeneralAttributeModel) => <dl key={attr.CustomKey}>\n                  <ProductDetailsTabAttribute product={product} attribute={attr} />\n                </dl>)}\n            </Col>\n          );\n        })}\n    </Row>\n  );\n};\n","import { Fragment, useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Card, Form, InputGroup } from \"react-bootstrap\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { RatingEntry } from \"src/Catalog/views/RatingEntry\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CreateReviewDto } from \"src/_api\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\ninterface IReviewEntryProps {\n  id: number;\n}\n\ninterface IMyProfileDataEntry {\n  txtProductReviewTitle?: string;\n  txtProductReviewComment?: string;\n}\n\nexport const ReviewEntry = (props: IReviewEntryProps): JSX.Element => {\n  const { id } = props;\n\n  const [ submitted, setSubmitted ] = useState<boolean>(false);\n  const [ ratingAmount, setRatingAmount ] = useState<number>(0);\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const currentUser = useCurrentUser();\n\n  const {\n    register,\n    handleSubmit,\n    formState: { errors }\n  } = useForm<IMyProfileDataEntry>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const saveReview: SubmitHandler<IMyProfileDataEntry> = data => {\n    const { txtProductReviewTitle, txtProductReviewComment } = data;\n    // if (!ratingAmount) {\n    //   return;\n    // }\n    setRunning();\n    cvApi.reviews\n      .CreateReview({\n        Active: true,\n        Approved: false,\n        Comment: txtProductReviewComment,\n        CreatedDate: new Date(),\n        ProductID: id,\n        SubmittedByUserID: null,\n        Title: txtProductReviewTitle,\n        TypeID: 0,\n        Value: 5\n      } as CreateReviewDto)\n      .then(_res => {\n        setSubmitted(true);\n        finishRunning();\n      })\n      .catch(err => {\n        console.error(err);\n        finishRunning(true, err);\n      });\n  };\n\n  return (\n    <Form\n      className={`d-flex flex-column position-relative mt-2 ${\n        submitted ? \"border-success\" : \"\"\n      }`}\n      onSubmit={handleSubmit(saveReview)}>\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <h5 className=\"w-100\">{t(\"ui.storefront.product.reviews.productReview.writeAReview\")}</h5>\n      {currentUser\n        ? <div className=\"w-100\">\n          {/* <Form.Group>\n            <Form.Label id=\"WriteAReviewRatingText\" className=\"my-1\">\n              {t(\"ui.storefront.product.reviews.reviewEntry.Rating\")}\n            </Form.Label>\n            <InputGroup className=\"mb-1\">\n              <RatingEntry\n                scale={5}\n                ratingAmount={ratingAmount}\n                setRatingAmount={setRatingAmount}\n              />\n            </InputGroup>\n          </Form.Group> */}\n          <Form.Group>\n            <Form.Label\n              className=\"my-1\"\n              htmlFor=\"txtProductReviewTitle\"\n              id=\"WriteAReviewTitleText\">\n              {t(\"ui.storefront.common.Title\")}\n            </Form.Label>\n            <InputGroup>\n              <Form.Control\n                {...register(\"txtProductReviewTitle\")}\n                disabled={submitted}\n                id=\"txtProductReviewTitle\"\n                name=\"txtProductReviewTitle\"\n                type=\"text\"\n              />\n            </InputGroup>\n            {errors.txtProductReviewTitle\n              ? <Alert variant=\"danger\">\n                <i className=\"fal fa-fw fa-exclamation-triangle fa-fw\" />\n                &nbsp;\n                <span>{errors.txtProductReviewTitle?.message}</span>\n              </Alert>\n              : null}\n          </Form.Group>\n          <Form.Group>\n            <Form.Label htmlFor=\"txtProductReviewComment\" className=\"my-1\">\n              {t(\"ui.storefront.product.reviews.reviewEntry.Comment\")}\n            </Form.Label>\n            <InputGroup>\n              <Form.Control\n                as=\"textarea\"\n                className=\"mb-1\"\n                id=\"txtProductReviewComment\"\n                disabled={submitted}\n                {...register(\"txtProductReviewComment\")}\n              />\n              {errors.txtProductReviewComment\n                ? <Alert variant=\"danger\">\n                  <i className=\"fal fa-fw fa-exclamation-triangle fa-fw\" />\n                  <span className=\"sr-only\">\n                    {t(\"ui.storefront.common.Error\")}\n                  </span>\n                  &nbsp;\n                  <span>{errors.txtProductReviewComment?.message}</span>\n                </Alert>\n                : null}\n            </InputGroup>\n          </Form.Group>\n          <div className=\"d-flex justify-content-end\">\n            <Button\n              variant=\"primary\"\n              type=\"submit\"\n              title=\"Save\"\n              id=\"btnSaveReview\"\n              name=\"btnSaveReview\"\n              disabled={submitted}\n              className=\"mb-3\">\n              {t(\"ui.storefront.common.Save\")}\n            </Button>\n          </div>\n        </div>\n        : <Fragment>\n          <LoginModal\n            show={showLoginModal}\n            onCancel={() => setShowLoginModal(false)}\n            onConfirm={() => setShowLoginModal(false)}\n          />\n          <Button\n            className=\"mt-2\"\n            variant=\"primary\"\n            size=\"lg\"\n            title=\"Sign In to Review\"\n            onClick={() => setShowLoginModal(true)}>\n            {t(\"ui.storefront.product.reviews.reviewEntry.signInToReview\")}\n          </Button>\n        </Fragment>\n      }\n      {submitted\n        ? <Card.Footer className=\"alert-success\">\n          <p className=\"mb-1\">\n            {t(\n              \"ui.storefront.product.reviews.reviewEntry.successYourReviewHasBeenSaved\"\n            )}\n          </p>\n          <p className=\"mb-0\">\n            <b>{t(\"ui.storefront.common.Note\")}</b>\n            :&nbsp;\n            <span id=\"ReviewAdminNote\">\n              {t(\n                \"ui.storefront.product.reviews.reviewEntry.theWebsiteAdministratorRequiresThatReviewsAreApprovedBefore\"\n              )}\n            </span>\n          </p>\n        </Card.Footer>\n        : null}\n    </Form>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Card, Col, Row } from \"react-bootstrap\";\nimport { ReviewEntry } from \"src/Catalog/views/ReviewEntry\";\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\nimport { ProductReviewInformationModel } from \"src/_api/cvApi._DtoClasses\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\n\ninterface IReviewsMainProps {\n  id: number;\n}\n\nexport const ReviewsMain = (props: IReviewsMainProps): JSX.Element => {\n  const { id } = props;\n\n  const [ productReviewData, setProductReviewData ] = useState<ProductReviewInformationModel | null>(null);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  useEffect(() => {\n    setRunning();\n    cvApi.products\n      .GetProductReview(id)\n      .then(res => {\n        setProductReviewData(res.data);\n        finishRunning();\n      })\n      .catch(err => {\n        console.error(err);\n        finishRunning(true, err);\n      });\n  }, []);\n\n  const approvedReviews = productReviewData?.Reviews?.filter(r => r.Approved);\n  if (approvedReviews?.length) {\n    approvedReviews.sort((a, b) => a.SortOrder - b.SortOrder);\n  }\n  const reviewsForAverage = approvedReviews?.filter(ar => ar.Value > 0);\n  const average\n    = reviewsForAverage\n      ?.map((ar): number => ar.Value)\n      .reduce((a: number, b: number): number => a + b, 0) / reviewsForAverage?.length;\n\n  return (\n    <Row className=\"mb-2 pb-2\">\n      <Col xs={12}\n        sm={6}\n        md={8}>\n        {approvedReviews && approvedReviews.length\n          ? <Row>\n            {/* <Col sm={12} className=\"cef-ratings my-2\">\n              <RatingSummary\n                scale={5}\n                count={reviewsForAverage?.length}\n                value={average}\n              />\n            </Col> */}\n            {approvedReviews.map(review => {\n              const { ID, Title, Value, Comment } = review;\n              return (\n                <Col sm={12}\n                  key={ID}\n                  className=\"mb-2\">\n                  <Card>\n                    <Card.Header>\n                      <div className=\"d-flex justify-content-between\">\n                        <span>{Title}</span>\n                        {/* {Value > 0\n                          ? <RatingSummary\n                            scale={5}\n                            value={Value}\n                            reviewID={ID}\n                            count={0}\n                            hideCount={true}\n                          />\n                          : null} */}\n                      </div>\n                    </Card.Header>\n                    <Card.Body>\n                      <Card.Text>{Comment}</Card.Text>\n                    </Card.Body>\n                  </Card>\n                </Col>\n              );\n            })}\n          </Row>\n          : <p>\n            {t(\n              \"ui.storefront.product.reviews.reviewList.thereAreNoReviewsForThisProduct\"\n            )}\n          </p>\n        }\n      </Col>\n      <Col xs={12}\n        sm={6}\n        md={4}>\n        <ReviewEntry id={id} />\n      </Col>\n      {viewState.hasError && <Col xs={12}>\n        <ErrorView viewState={viewState} />\n      </Col>}\n    </Row>\n  );\n};\n","/** @format */\n\nimport { Fragment, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Collapse, Row } from \"react-bootstrap\";\nimport { IHttpPromiseCallbackArg, ProductModel } from \"src/_api/cvApi.shared\";\nimport { GeneralAttributeModel, GeneralAttributePagedResults } from \"src/_api/cvApi._DtoClasses\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { TabContent } from \"src/_shared/common/TabContent\";\nimport { Tabs } from \"src/_shared/common/Tabs\";\nimport {\n  ProductDetailsTabsDefaultTabContent\n} from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabsDefaultTabContent\";\nimport { ReviewsMain } from \"src/Catalog/views/ReviewsMain\";\nimport { ProductDetailsTabAttribute } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabAttribute\";\nimport _ from \"lodash\";\n\nexport interface IFullTabSetTab {\n  attributes: GeneralAttributeModel[];\n  key: string;\n  header: string;\n  sort: number;\n}\n\ninterface IKeysTabbedAndGrouped {\n  [key: string]: Array<string>;\n}\n\ninterface IProductDetailsTabsProps {\n  product: ProductModel;\n  displayStyle?: \"default\" | \"collapse\";\n}\n\nexport const ProductDetailsTabs = (props: IProductDetailsTabsProps): JSX.Element => {\n  const { product } = props;\n\n  const [ fullTabSet, setFullTabSet ] = useState<Array<IFullTabSetTab>>(null);\n  const [ collapse, setCollapse ] = useState<{ [key: string]: boolean }>();\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  const singleTab = fullTabSet?.length === 1;\n\n  useEffect(() => {\n    if (!fullTabSet && product && cefConfig) {\n      loadAttributes();\n    }\n  }, [ fullTabSet, product, cefConfig ]);\n\n  const containsNoResults = (httpResponse: IHttpPromiseCallbackArg<GeneralAttributePagedResults>): boolean => {\n    const hasData = httpResponse?.data?.Results?.length;\n    return !hasData;\n  };\n\n  function loadAttributes(): void {\n    cvApi.attributes\n      .GetGeneralAttributes({\n        Active: true,\n        AsListing: true,\n        HideFromProductDetailView: false\n      })\n      .then(res => {\n        if (containsNoResults(res)) {\n          console.warn(\"Failed to fetch general attributes\");\n          return;\n        }\n        const generalAttributes: GeneralAttributeModel[] = res.data.Results;\n        const keysTabbedAndGrouped = getKeysTabbedAndGrouped(generalAttributes);\n        const fullTabSetI = Object.entries(keysTabbedAndGrouped).map(keyValArr => {\n          const [ tabIdentifier, tabAttributesList ] = keyValArr;\n          const fullTab: any = {\n            attributes: generalAttributes.filter(genAttr => tabAttributesList.includes(genAttr.CustomKey)),\n            key: tabIdentifier,\n          };\n          if (tabIdentifier === \"default-tab\") {\n            fullTab.header = t(\"ui.storefront.product.details.MoreInformation\");\n            fullTab.sort = -999999;\n          } else {\n            fullTab.sort = generalAttributes.find(x => x.CustomKey === tabIdentifier).SortOrder ?? 0;\n          }\n          return fullTab;\n        });\n        if (cefConfig?.featureSet?.reviews?.enabled) {\n          fullTabSetI.push({\n            attributes: [],\n            key: \"reviews-tab\",\n            header: t(\"ui.storefront.product.widgets.relatedProducts.Reviews\"),\n            sort: 999999\n          });\n        }\n        fullTabSetI.sort((fullTab1, fullTab2) => fullTab1.sort - fullTab2.sort);\n        setFullTabSet(fullTabSetI);\n        setCollapse(_.reduce(fullTabSetI, (accu, tab: IFullTabSetTab) => {\n          accu[tab.key] = tab.key === \"default-tab\";\n          return accu;\n        }, {} as { [key: string]: boolean }));\n      })\n      .catch(err => {\n        console.error(err);\n      });\n  }\n\n  function getKeysTabbedAndGrouped(generalAttributes: GeneralAttributeModel[] = []) {\n    const keysTabbedAndGrouped: IKeysTabbedAndGrouped = {};\n    keysTabbedAndGrouped[\"default-tab\"] = [];\n    for (const attributeName in product.SerializableAttributes) {\n      if (!Object.hasOwn(product.SerializableAttributes, attributeName)) {\n        continue;\n      }\n      const attribute = generalAttributes.find(a => a.CustomKey === attributeName);\n      let thisTabKey = \"default-tab\";\n      if (attribute?.IsTab) {\n        thisTabKey = attributeName;\n      }\n      if (!keysTabbedAndGrouped[thisTabKey]) {\n        keysTabbedAndGrouped[thisTabKey] = [];\n      }\n      keysTabbedAndGrouped[thisTabKey].push(attributeName);\n    }\n    return keysTabbedAndGrouped;\n  }\n  if (!_.isArray(fullTabSet)\n    || !fullTabSet.length\n    || !_.isObject(collapse)) {\n    return null;\n  }\n  switch (props.displayStyle) {\n    case \"collapse\": {\n      return (\n        <>\n          {fullTabSet.map(fullTab => {\n            if (fullTab.key === \"default-tab\") {\n              return (\n                <Fragment key={fullTab.key}>\n                  <h3 className={singleTab ? \"d-none\" : \"pointer d-flex justify-content-between py-3 border-bottom\"}\n                    onClick={() => setCollapse(prev => {\n                      const next = { ...prev };\n                      next[fullTab.key] = !next[fullTab.key];\n                      return next;\n                    })}>\n                    {fullTab.header ?? fullTab.key}\n                    <i className={`me-1 fal fa-solid fa-angle-${collapse[fullTab.key] ? \"up\" : \"down\"}`}></i>\n                  </h3>\n                  <Collapse in={collapse[fullTab.key]}>\n                    <div>\n                      <Row>\n                        <Col xs={12}>\n                          <TabContent\n                            label={t(\"ui.storefront.product.details.MoreInformation\")}\n                            key={fullTab.key}\n                            className=\"p-3\">\n                            <ProductDetailsTabsDefaultTabContent product={product} fullTabSet={fullTabSet} />\n                          </TabContent>\n                        </Col>\n                      </Row>\n                    </div>\n                  </Collapse>\n                </Fragment>\n              );\n            }\n            if (fullTab.key === \"reviews-tab\") {\n              return (\n                <Fragment key={fullTab.key}>\n                  <h3 className=\"pointer d-flex justify-content-between py-3 border-bottom\"\n                    onClick={() => setCollapse(prev => {\n                      const next = { ...prev };\n                      next[fullTab.key] = !next[fullTab.key];\n                      return next;\n                    })}>\n                    {fullTab.header ?? fullTab.key}\n                    <i className={`me-1 fal fa-solid fa-angle-${collapse[fullTab.key] ? \"up\" : \"down\"}`}></i>\n                  </h3>\n                  <Collapse in={collapse[fullTab.key]}>\n                    <div>\n                      <Row>\n                        <Col xs={12}>\n                          <TabContent\n                            label={t(\"ui.storefront.product.widgets.relatedProducts.Reviews\")}\n                            title={t(\"ui.storefront.product.detail.productDetails.productReviews\")}\n                            key={fullTab.key}\n                            className=\"p-3\">\n                            <ReviewsMain id={product.ID} />\n                          </TabContent>\n                        </Col>\n                      </Row>\n                    </div>\n                  </Collapse>\n                </Fragment>\n              );\n            }\n            return <Fragment key={fullTab.key}>\n              <h3 className=\"pointer d-flex justify-content-between py-3 border-bottom\"\n                onClick={() => setCollapse(prev => {\n                  const next = { ...prev };\n                  next[fullTab.key] = !next[fullTab.key];\n                  return next;\n                })}>\n                {fullTab.header ?? fullTab.key}\n                <i className={`me-1 fal fa-solid fa-angle-${collapse[fullTab.key] ? \"up\" : \"down\"}`}></i>\n              </h3>\n              <Collapse in={collapse[fullTab.key]}>\n                <div>\n                  <Row>\n                    <Col xs={12}>\n                      {fullTab.attributes\n                        .filter(attr => attr.CustomKey !== \"Size\")\n                        .sort((attr1, attr2) => {\n                          if (attr1.SortOrder && attr2.SortOrder) {\n                            return attr1.SortOrder - attr2.SortOrder;\n                          }\n                          return 0;\n                        })\n                        .map(attr => <dl key={attr.CustomKey}>\n                          <ProductDetailsTabAttribute\n                            product={product}\n                            attribute={attr}\n                            displayStyle={props.displayStyle} />\n                        </dl>)}\n                    </Col>\n                  </Row>\n                </div>\n              </Collapse>\n            </Fragment>;\n          })}\n        </>\n      );\n    }\n    default: {\n      return (\n        <Row>\n          <Col xs={12}>\n            <Tabs tabContainerClasses=\"mt-5 mb-4 product-details-tabs\">\n              {fullTabSet.map(fullTab => {\n                const { header, key, attributes } = fullTab;\n                if (key === \"default-tab\") {\n                  return (\n                    <TabContent\n                      label={t(\"ui.storefront.product.details.MoreInformation\")}\n                      key={key}\n                      className=\"p-3\">\n                      <ProductDetailsTabsDefaultTabContent product={product} fullTabSet={fullTabSet} />\n                    </TabContent>\n                  );\n                }\n                if (key === \"reviews-tab\") {\n                  return (\n                    <TabContent\n                      label={t(\"ui.storefront.product.widgets.relatedProducts.Reviews\")}\n                      title={t(\"ui.storefront.product.detail.productDetails.productReviews\")}\n                      key={key}\n                      className=\"p-3\">\n                      <ReviewsMain id={product.ID} />\n                    </TabContent>\n                  );\n                }\n                return (\n                  <TabContent\n                    key={header}\n                    label={key}\n                    className=\"p-3\">\n                    <Row>\n                      <Col xs={12}>\n                        <h3>{header}</h3>\n                        {attributes\n                          .sort((attr1, attr2) => {\n                            if (attr1.SortOrder && attr2.SortOrder) {\n                              return attr1.SortOrder - attr2.SortOrder;\n                            }\n                            return 0;\n                          })\n                          .map(attr => <dl key={attr.CustomKey}>\n                            <ProductDetailsTabAttribute product={product} attribute={attr} />\n                          </dl>)}\n                      </Col>\n                    </Row>\n                  </TabContent>\n                );\n              })}\n            </Tabs>\n          </Col>\n        </Row>\n      );\n    }\n  }\n};\n\nProductDetailsTabs.defaultProps = {\n  displayStyle: \"default\"\n};\n","/* eslint-disable operator-linebreak */\n/* eslint-disable @typescript-eslint/no-extra-parens */\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Container, Row } from \"react-bootstrap\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { Price } from \"src/Catalog/controls/Price\";\nimport { ProductDetailsTabs } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabs\";\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\nimport { VariantDropdown } from \"src/Catalog/controls/VariantDropdown\";\nimport { ProductCardLotTimerWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport { MagicImageCarousel2 } from \"./controls/MagicImageCarousel2\";\nimport { AddToCartButton } from \"../Cart/controls/AddToCartButton\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { RelatedProductsList } from \"./views/RelatedProductsList\";\nimport { ProductDetailsTemplateProps } from \"./ProductDetails\";\nimport { useEffect, useState } from \"react\";\nimport { trackEvent } from \"src/Klaviyo/klaviyo_helpers\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\nexport const DefaultProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element => {\n  const [ displayStyle, setDisplayStyle ] = useState(null);\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  const currentUser = useCurrentUser();\n  useEffect(() => {\n    trackEvent(\"Viewed Product\",\n      {\n        \"Product Id\": props?.productVariant?.ID,\n        \"Price\": props?.prices?.base,\n        \"AccountId\": currentUser.AccountID,\n      });\n  }, [props]);\n\n  useEffect(() => {\n    const handleResize = () => {\n      if (window.innerWidth < 768) {\n        setDisplayStyle(\"collapse\");\n      } else {\n        setDisplayStyle(null);\n      }\n    };\n    handleResize();\n    window.addEventListener(\"resize\", handleResize);\n    return () => {\n      window.removeEventListener(\"resize\", handleResize);\n    };\n  }, []);\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  return (\n    <section>\n      {/* For DNN:cef:ProductMetaService */}\n      <input\n        id=\"productID\"\n        type=\"hidden\"\n        value={props.productVariant?.ID}\n      />\n      {Boolean(props.prices && props.prices.base && props.prices.base !== 0) && (\n        <input\n          id=\"productBasePrice\"\n          type=\"hidden\"\n          value={props.prices.base}\n        />\n      )}\n      <Container>\n        {props.viewState?.hasError && (\n          <Row className=\"mb-4\">\n            <Col xs={12}>\n              <ErrorView viewState={props.viewState} />\n            </Col>\n          </Row>\n        )}\n        <Row className=\"mb-5\">\n          <Col xs={12} md={6}>\n            {props.productVariant && (\n              <MagicImageCarousel2\n                product={props.productVariant}\n                magicScrollOptions={{\n                  items: 4,\n                  pagination: true,\n                  draggable: true,\n                  height: 51,\n                  orientation: \"vertical\"\n                }}\n                magicZoomOptions={{\n                  selectorTrigger: \"hover\",\n                  transitionEffect: false,\n                  zoomWidth: \"150%\"\n                }}\n                largeImageResizerParamsBody={{\n                  width: 1000,\n                  height: 1000,\n                  mode: \"pad\",\n                  scale: \"both\"\n                }}\n                thumbnailImageResizerParamsBody = {{\n                  width: 75,\n                  height: 75,\n                  mode: \"pad\",\n                  scale: \"both\"\n                }}\n              />\n            )}\n          </Col>\n          <Col xs={12}\n            md={6}\n            className=\"mt-4\">\n            <h1\n              id=\"productName\"\n              className=\"cef-product-title mt-0 mb-3\">\n              {props.productVariant?.Name}\n            </h1>\n            <Row>\n              <Col\n                xs={12}\n                className=\"cef-product-info\">\n                {/* {cefConfig.featureSet.reviews.enabled && (\n                  <div className=\"cef-ratings w-100 mb-2\">\n                    <RatingSummary\n                      scale={5}\n                      count={props.reviewsForAverage?.length ?? 0}\n                      value={props.average}\n                    />\n                  </div>\n                )} */}\n                <div className=\"product-info mb-3\">\n                  {cefConfig.featureSet.pricing.enabled\n                    && props.prices\n                    && (\n                      <Price\n                        prices={props.prices}\n                        colClasses=\"h1 mb-0\"\n                        sizeClass=\"very-small\"\n                        muteDiscountText={true}\n                        productID={props.masterProduct?.ID}\n                        product={props.productVariant}\n                      />\n                    )\n                  }\n                </div>\n                <p className=\"mb-4\">{props.masterProduct?.ShortDescription}</p>\n                <div className=\"mb-2\">\n                  {props.masterProduct?.TypeKey === \"VARIANT-MASTER\"\n                  && Boolean(props.listOfVariants?.length)\n                  && cefConfig.productDetails.variantDropdown.enabled\n                  && (\n                    <VariantDropdown\n                      formWidth=\"w-100 lg-w-50\"\n                      listOfVariants={props.listOfVariants}\n                      onVariantSelected={props.updateProductVariant}\n                      selectedVariantSeoUrl={props.productVariant?.SeoUrl}\n                    />\n                  )\n                  }\n                  {props.productVariant?.LotID\n                    ? <ProductCardLotTimerWidget product={props.productVariant} />\n                    : null}\n                </div>\n                <div className=\"mb-4\">\n                  <AddToCartButton\n                    masterProduct={props.masterProduct}\n                    product={props.productVariant}\n                    quantity={1}\n                    btnVariant=\"primary\"\n                    btnGroupClasses=\"w-100 sm-w-50\"\n                    excludeQuoteCart={true}\n                    label={t(\"ui.storefront.catalog.addToCartButton.OrderNow\", \"Order Now\")}\n                  />\n                </div>\n                {/* <ProductCardActionButtonWidget\n                  product={props.productVariant}\n                  addToCartBtnVariant=\"success\"\n                  buttonView=\"addToCart\"\n                  quoteCartBtnSeparated={true}\n                  useOutOfStockInsteadOfViewDetails={true}\n                  forceNoQuantitySelector={true}\n                /> */}\n                {/* {props.masterProduct?.TypeKey === \"VARIANT-MASTER\" && Boolean(props.listOfVariants?.length)\n                  ? (\n                    cefConfig.productDetails.variantSwatches.enabled\n                      ? (\n                        <VariantSwatches\n                          listOfVariants={props.listOfVariants}\n                          selectedVariantProductId={props.productVariant?.ID}\n                          onVariantSwatchClicked={props.updateProductVariant}\n                        />\n                      )\n                      : <VariantTable listOfVariants={props.listOfVariants} />\n                  )\n                  : null} */}\n              </Col>\n            </Row>\n          </Col>\n        </Row>\n        {props.productVariant && (\n          <div>\n            <Col xs={12}>\n              <ProductDetailsTabs product={props.productVariant} displayStyle={displayStyle} />\n            </Col>\n          </div>\n        )}\n      </Container>\n      <Container>\n        {props.productVariant?.ProductAssociations && (\n          <RelatedProductsList\n            desktopContainerClassName=\"mx-n6 px-4 gx-4\"\n            products={props.productVariant?.ProductAssociations}\n          />\n        )}\n      </Container>\n    </section>\n  );\n};\n","/**\n * @file React/src/Catalog/controls/RecentlyViewedProductsList.tsx\n * @author Copyright (c) 2022-2023 clarity-ventures.com. All rights reserved.\n * @desc Product detail recently viewed products list widget\n */\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ListGroup, ListGroupItem } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport promiser from \"src/_shared/Promiser\";\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets/ProductCardNameWidget\";\n\ninterface IRecentlyViewedProductsListProps {\n  size?: number;\n}\n\nexport const RecentlyViewedProductsList = (props: IRecentlyViewedProductsListProps): JSX.Element => {\n  const [ products, setProducts ] = useState<ProductModel[]>();\n  const promiserKey = \"cvApi.tracking.RecentlyViewedProducts\";\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  useEffect(() => {\n    setRunning();\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.tracking.GetRecentlyViewedProducts({ Paging: { Size: props.size ?? 4, StartIndex: 1 } })\n    )\n      .then(result => {\n        setProducts(result.data);\n        finishRunning();\n      })\n      .catch(error => {\n        finishRunning(true, error);\n      });\n  }, []);\n  if (!products?.length) {\n    return null;\n  }\n  if (viewState.running) {\n    return <LoadingWidget />;\n  }\n  return <>\n    <h4>{t(\"ui.storefront.product.widgets.recentlyViewed.recentlyViewed\")}</h4>\n    <ListGroup>\n      {products.map(product => {\n        return <ListGroupItem key={product.CustomKey + product.ID} className=\"border-0 d-flex\">\n          <ImageWithFallback\n            src={product.PrimaryImageFileName}\n            style={{ height: \"min-content\" }}\n            imageResizerParamsBody={{\n              width: 40,\n              height: 40,\n              mode: \"pad\",\n              scale: \"both\"\n            }}\n            className=\"me-2\"\n          />\n          <ProductCardNameWidget\n            productName={product.Name ?? product.CustomKey}\n            productSeoUrl={product.SeoUrl}\n          />\n        </ListGroupItem>;\n      })}\n    </ListGroup>\n  </>;\n};\n","/**\n * @file React/src/Catalog/controls/MoreFromCategoryList.tsx\n * @author Copyright (c) 2022-2023 clarity-ventures.com. All rights reserved.\n * @desc Product detail more from category list widget\n */\nimport { useEffect, useState } from \"react\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { ListGroup, ListGroupItem } from \"react-bootstrap\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets/ProductCardNameWidget\";\nimport { SearchSort } from \"src/_api/cvApi._DtoClasses\";\nimport { SearchProductCatalogWithProviderDto } from \"src/_api/cvApi.Providers\";\n\ninterface IRecentlyViewedProductsListProps {\n  size?: number;\n  categorySearchString: string;\n}\n\nexport const MoreFromCategoryList = (props: IRecentlyViewedProductsListProps): JSX.Element => {\n  const [ products, setProducts ] = useState<ProductModel[]>();\n  const searchDtoTemp = {\n    Category: props.categorySearchString,\n    PageFormat: \"grid\",\n    Page: 1,\n    PageSetSize: 5,\n    PageSize: props.size ?? 4,\n    Sort: SearchSort.Relevance,\n  };\n  const searchDto: SearchProductCatalogWithProviderDto = {} as any;\n  const keys = Object.keys(searchDtoTemp);\n  const sortedKeys = keys.sort();\n  for (let i = 0; i < sortedKeys.length; i++) {\n    if (Object.hasOwn(searchDtoTemp, sortedKeys[i])) {\n      (searchDto as any)[sortedKeys[i]] = (searchDtoTemp as any)[sortedKeys[i]] as any;\n    }\n  }\n  const searchPromiserKey = `cvApi.providers.SearchProductCatalogWithProvider(${JSON.stringify(searchDto)})`;\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  useEffect(() => {\n    setRunning();\n    promiser.resolve(\n      searchPromiserKey,\n      () => cvApi.providers.SearchProductCatalogWithProvider(searchDto)\n    ).then(result => {\n      if (!result.data.ResultIDs) {\n        finishRunning(true, \"Result IDS array was undefined\");\n        return;\n      }\n      const productPromiserKey = `cvApi.products.GetProductsByIDs({ IDs: ${result.data.ResultIDs} })`;\n      promiser.resolve(\n        productPromiserKey,\n        () => cvApi.products.GetProductsByIDs({ i: result.data.ResultIDs })\n      ).then(result2 => {\n        if (!result2.data) {\n          finishRunning(true, \"No data was returned from the server\");\n          return;\n        }\n        setProducts(result2.data);\n        finishRunning();\n      })\n        .catch(error2 => {\n          finishRunning(true, error2);\n        });\n    })\n      .catch(error1 => {\n        finishRunning(true, error1);\n      });\n  }, []);\n  if (!products?.length) {\n    return null;\n  }\n  if (viewState.running) {\n    return <LoadingWidget />;\n  }\n  return <>\n    <h4>{t(\"ui.storefront.product.detail.productDetails.moreFromCategory\")}</h4>\n    <ListGroup>\n      {products.map(product => {\n        return <ListGroupItem key={product.CustomKey + product.ID} className=\"border-0 d-flex\">\n          <ImageWithFallback\n            src={product.PrimaryImageFileName}\n            style={{ height: \"min-content\" }}\n            imageResizerParamsBody={{\n              width: 40,\n              height: 40,\n              mode: \"pad\",\n              scale: \"both\"\n            }}\n            className=\"me-2\"\n          />\n          <ProductCardNameWidget\n            productName={product.Name ?? product.CustomKey}\n            productSeoUrl={product.SeoUrl}\n          />\n        </ListGroupItem>;\n      })}\n    </ListGroup>\n  </>;\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Col, Container, ListGroup, Row } from \"react-bootstrap\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { Price } from \"src/Catalog/controls/Price\";\nimport Stock from \"src/Catalog/controls/Stock\";\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\nimport { RelatedProductsList } from \"src/Catalog/views/RelatedProductsList\";\n// import { MagicImageCarousel } from \"src/Catalog/controls/MagicImageCarousel\";\nimport { MagicImageCarousel2 } from \"src/Catalog/controls/MagicImageCarousel2\";\nimport { ProductDetailsTabs } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabs\";\nimport { RatingSummary } from \"src/Catalog/views/RatingSummary\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\nimport { VariantSwatches } from \"src/Catalog/controls/VariantSwatches\";\nimport { VariantDropdown } from \"src/Catalog/controls/VariantDropdown\";\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\nimport { RecentlyViewedProductsList } from \"src/Catalog/controls/RecentlyViewedProductsList\";\nimport { MoreFromCategoryList } from \"src/Catalog/controls/MoreFromCategoryList\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ProductCardLotTimerWidget } from \"src/Catalog/views/ProductCardWidgets\";\n\nexport const RecentlyViewedProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  if (!cefConfig) {\n    return null;\n  }\n  return (\n    <section>\n      {/* For DNN:cef:ProductMetaService */}\n      <input\n        id=\"productID\"\n        type=\"hidden\"\n        value={props.productVariant.ID}\n      />\n      {props.prices && props.prices.base\n        && <input\n          id=\"productBasePrice\"\n          type=\"hidden\"\n          value={props.prices.base}\n        />\n      }\n      <Container>\n        <Row>\n          {/* Default view */}\n          <Col xs={12} sm={9}>\n            <Container className=\"px-0\">\n              <Row className=\"product-one\">\n                <Col\n                  xs={12}\n                  md={4}\n                  className=\"mb-3\">\n                  <MagicImageCarousel2 product={props.productVariant}\n                    magicScrollOptions={{\n                      items: 4,\n                      pagination: true,\n                      draggable: true,\n                      height: 51\n                    }}\n                    magicZoomOptions={{\n                      selectorTrigger: \"hover\",\n                      transitionEffect: false,\n                      zoomWidth: \"150%\"\n                    }} />\n                </Col>\n                <Col\n                  xs={12}\n                  md={8}\n                  className=\"mb-3\">\n                  <h1\n                    id=\"productName\"\n                    className=\"cef-product-title mt-0\">\n                    {props.productVariant.Name}\n                  </h1>\n                  <hr />\n                  <Row>\n                    <Col\n                      xs={12}\n                      md={8}\n                      className=\"cef-product-info\">\n                      {cefConfig.featureSet.reviews.enabled\n                        && <div className=\"cef-ratings w-100 mb-3\">\n                          <RatingSummary\n                            scale={5}\n                            count={props.reviewsForAverage?.length ?? 0}\n                            value={props.average}\n                          />\n                        </div>\n                      }\n                      <div className=\"product-info\">\n                        {cefConfig.featureSet.pricing.enabled\n                          && <Price\n                            prices={props.prices}\n                            colClasses=\"h1\"\n                            sizeClass=\"very-small\"\n                            muteDiscountText={true}\n                          />\n                        }\n                        {cefConfig.featureSet.inventory.enabled\n                          && <div className=\"mb-3\">\n                            <Stock\n                              inventory={props.inventory}\n                              productID={props.productVariant.ID}\n                            />\n                          </div>\n                        }\n                        <ListGroup\n                          as=\"ul\"\n                          className=\"list-unstyled\">\n                          <ListGroup.Item className=\"border-0 p-0\">\n                            <span className=\"dt\">\n                              {t(\"ui.storefront.product.detail.productDetails.SKU\")}&nbsp;\n                              {props.productVariant?.CustomKey}\n                            </span>\n                          </ListGroup.Item>\n                          <ListGroup.Item className=\"border-0 p-0\">\n                            <span className=\"dt\">\n                              {t(\"ui.storefront.common.Unit\")}&nbsp;{props.productVariant?.UnitOfMeasure}\n                            </span>\n                          </ListGroup.Item>\n                        </ListGroup>\n                      </div>\n                      {cefConfig.productDetails.variantSwatches.enabled && props.listOfVariants\n                        && <VariantSwatches\n                          listOfVariants={props.listOfVariants}\n                          selectedVariantProductId={props.productVariant.ID}\n                          onVariantSwatchClicked={props.updateProductVariant}\n                        />\n                      }\n                      <hr />\n                      <div>\n                        <h5>{t(\"ui.storefront.product.detail.productDetails.quickDescription\")}</h5>\n                        <p>{props.productVariant?.ShortDescription}</p>\n                      </div>\n                    </Col>\n                    <Col\n                      xs={12}\n                      sm={4}>\n                      {/* <div className=\"d-block mb-1\">\n                        {cefConfig.productDetails.variantWizard.enabled && listOfVariants && (\n                          <VariantWizard\n                            listOfVariants={listOfVariants}\n                            selectedVariantProductId={productVariant.ID}\n                            onUpdateProductVariant={updateProductVariant}\n                          />\n                        )}\n                      </div> */}\n                      <div className=\"mb-2\">\n                        {props.listOfVariants?.length && cefConfig.productDetails.variantDropdown.enabled\n                          && <VariantDropdown\n                            listOfVariants={props.listOfVariants}\n                            onVariantSelected={props.updateProductVariant}\n                            selectedVariantSeoUrl={props.productVariant?.SeoUrl}\n                          />\n                        }\n                        {props.productVariant?.LotID\n                          ? <ProductCardLotTimerWidget product={props.productVariant} />\n                          : null}\n                        <ProductCardActionButtonWidget\n                          product={props.productVariant}\n                          addToCartBtnVariant=\"success\"\n                          buttonView=\"addToCart\"\n                          quoteCartBtnSeparated={true}\n                          useOutOfStockInsteadOfViewDetails={true}\n                        />\n                      </div>\n                      <ProductCardControlsWidget\n                        product={props.productVariant}\n                        inventory={props.inventory}\n                        render=\"vertical\"\n                      />\n                    </Col>\n                  </Row>\n                </Col>\n              </Row>\n              {props.productVariant\n                && <Row>\n                  <Col xs={12}>\n                    <ProductDetailsTabs product={props.productVariant} />\n                  </Col>\n                </Row>\n              }\n              {props.productVariant?.ProductAssociations\n                && <RelatedProductsList products={props.productVariant.ProductAssociations} />}\n            </Container>\n          </Col>\n          <Col xs={12} sm={3}>\n            <div className=\"mb-4\">\n              <RecentlyViewedProductsList />\n            </div>\n            <div className=\"mb-4\">\n              {<MoreFromCategoryList categorySearchString={getPrimaryCategorySearchString(props.productVariant)} />}\n            </div>\n          </Col>\n        </Row>\n      </Container>\n\n    </section>\n  );\n};\n\nfunction getPrimaryCategorySearchString(product: ProductModel): string {\n  if (!product.Categories) {\n    return null;\n  }\n  let string = \"\";\n  let depth = 0;\n  for (let i = 0; i < product.Categories.length; i++) {\n    const productCategory = product.Categories[i];\n    if (!productCategory.SlaveName || !productCategory.SlaveKey || !productCategory.SlaveSeoUrl) {\n      continue;\n    }\n    const { length } = productCategory.SlaveKey.split(\"_\");\n    if (length > depth) {\n      depth = length;\n      string = productCategory.SlaveSeoUrl;\n    }\n  }\n  return string;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"staticHeadphoneWrapper\":\"StaticHeadphonesProductDetailsTemplate_staticHeadphoneWrapper__1LwXN\",\"disabled\":\"StaticHeadphonesProductDetailsTemplate_disabled__ckIkq\",\"container\":\"StaticHeadphonesProductDetailsTemplate_container__9hVen\",\"btn\":\"StaticHeadphonesProductDetailsTemplate_btn__dO7ka\",\"title\":\"StaticHeadphonesProductDetailsTemplate_title__1wC49\",\"head-text\":\"StaticHeadphonesProductDetailsTemplate_head-text__QnZqO\",\"arrow-link\":\"StaticHeadphonesProductDetailsTemplate_arrow-link__jNSjx\",\"card\":\"StaticHeadphonesProductDetailsTemplate_card__zlKPI\",\"card-img-top\":\"StaticHeadphonesProductDetailsTemplate_card-img-top__xGgEO\",\"shadow-img\":\"StaticHeadphonesProductDetailsTemplate_shadow-img__48vvj\",\"card-title\":\"StaticHeadphonesProductDetailsTemplate_card-title__iQSWS\",\"card-body\":\"StaticHeadphonesProductDetailsTemplate_card-body__JURBo\",\"section-jumbotron\":\"StaticHeadphonesProductDetailsTemplate_section-jumbotron__-um6w\",\"slider-box\":\"StaticHeadphonesProductDetailsTemplate_slider-box__6ayMM\",\"slider-dots\":\"StaticHeadphonesProductDetailsTemplate_slider-dots__qRJPN\",\"slick-active\":\"StaticHeadphonesProductDetailsTemplate_slick-active__98GHU\",\"description-box\":\"StaticHeadphonesProductDetailsTemplate_description-box__ScOFI\",\"description\":\"StaticHeadphonesProductDetailsTemplate_description__+Us5G\",\"header-description\":\"StaticHeadphonesProductDetailsTemplate_header-description__+Bu4C\",\"description-wrap\":\"StaticHeadphonesProductDetailsTemplate_description-wrap__hH+2d\",\"subtitle\":\"StaticHeadphonesProductDetailsTemplate_subtitle__P0lUv\",\"input-group\":\"StaticHeadphonesProductDetailsTemplate_input-group__okbgj\",\"input-number\":\"StaticHeadphonesProductDetailsTemplate_input-number__fIdMa\",\"quantity-nav\":\"StaticHeadphonesProductDetailsTemplate_quantity-nav__o6rMY\",\"form-control\":\"StaticHeadphonesProductDetailsTemplate_form-control__eCgkm\",\"input-btn\":\"StaticHeadphonesProductDetailsTemplate_input-btn__jbD3b\",\"holder\":\"StaticHeadphonesProductDetailsTemplate_holder__VXCNw\",\"length-box\":\"StaticHeadphonesProductDetailsTemplate_length-box__69JpE\",\"text\":\"StaticHeadphonesProductDetailsTemplate_text__k2Wv9\",\"length-list\":\"StaticHeadphonesProductDetailsTemplate_length-list__QaEYn\",\"item\":\"StaticHeadphonesProductDetailsTemplate_item__otbyH\",\"active\":\"StaticHeadphonesProductDetailsTemplate_active__1rTVM\",\"sum-box\":\"StaticHeadphonesProductDetailsTemplate_sum-box__3tp8C\",\"text-uppercase\":\"StaticHeadphonesProductDetailsTemplate_text-uppercase__tXonj\",\"section-text\":\"StaticHeadphonesProductDetailsTemplate_section-text__-J2ny\",\"section-studio\":\"StaticHeadphonesProductDetailsTemplate_section-studio__0Mslz\",\"studio-box\":\"StaticHeadphonesProductDetailsTemplate_studio-box__maIAW\",\"position-box\":\"StaticHeadphonesProductDetailsTemplate_position-box__V-9gs\",\"play-btn\":\"StaticHeadphonesProductDetailsTemplate_play-btn__lWtQh\",\"section-similar\":\"StaticHeadphonesProductDetailsTemplate_section-similar__qLNu+\",\"similar-description\":\"StaticHeadphonesProductDetailsTemplate_similar-description__bF2JK\",\"section-look\":\"StaticHeadphonesProductDetailsTemplate_section-look__rBm+S\",\"box-list\":\"StaticHeadphonesProductDetailsTemplate_box-list__sAB9F\",\"img-box\":\"StaticHeadphonesProductDetailsTemplate_img-box__-gs-D\",\"pin\":\"StaticHeadphonesProductDetailsTemplate_pin__-DlmB\",\"descr-tooltip\":\"StaticHeadphonesProductDetailsTemplate_descr-tooltip__Gf5zk\",\"blurred-img\":\"StaticHeadphonesProductDetailsTemplate_blurred-img__sZb-1\",\"list\":\"StaticHeadphonesProductDetailsTemplate_list__VXyfe\",\"opener\":\"StaticHeadphonesProductDetailsTemplate_opener__L6CiY\",\"box\":\"StaticHeadphonesProductDetailsTemplate_box__E08kQ\",\"section-creator\":\"StaticHeadphonesProductDetailsTemplate_section-creator__3561i\",\"creator-holder\":\"StaticHeadphonesProductDetailsTemplate_creator-holder__3wHWo\",\"image-box\":\"StaticHeadphonesProductDetailsTemplate_image-box__insGL\",\"name-transform\":\"StaticHeadphonesProductDetailsTemplate_name-transform__f-SBj\",\"slider\":\"StaticHeadphonesProductDetailsTemplate_slider__0rjKu\",\"slick-list\":\"StaticHeadphonesProductDetailsTemplate_slick-list__vKOh6\",\"dragging\":\"StaticHeadphonesProductDetailsTemplate_dragging__xBYwl\",\"slick-track\":\"StaticHeadphonesProductDetailsTemplate_slick-track__L7-EV\",\"slick-loading\":\"StaticHeadphonesProductDetailsTemplate_slick-loading__U7aM6\",\"slick-slide\":\"StaticHeadphonesProductDetailsTemplate_slick-slide__snT4-\",\"slick-initialized\":\"StaticHeadphonesProductDetailsTemplate_slick-initialized__0Jeet\",\"slick-vertical\":\"StaticHeadphonesProductDetailsTemplate_slick-vertical__O7EZT\",\"slick-arrow\":\"StaticHeadphonesProductDetailsTemplate_slick-arrow__R2vhF\",\"slick-hidden\":\"StaticHeadphonesProductDetailsTemplate_slick-hidden__q6KDs\",\"compensate-for-scrollbar\":\"StaticHeadphonesProductDetailsTemplate_compensate-for-scrollbar__hUldz\",\"sidebar\":\"StaticHeadphonesProductDetailsTemplate_sidebar__H8051\",\"search-form\":\"StaticHeadphonesProductDetailsTemplate_search-form__DmGCy\",\"post-password-form\":\"StaticHeadphonesProductDetailsTemplate_post-password-form__n0T74\",\"navigation-single\":\"StaticHeadphonesProductDetailsTemplate_navigation-single__fh5eU\",\"next\":\"StaticHeadphonesProductDetailsTemplate_next__gXaDx\",\"prev\":\"StaticHeadphonesProductDetailsTemplate_prev__jvgKe\",\"bg-body\":\"StaticHeadphonesProductDetailsTemplate_bg-body__BvMKn\",\"fancybox-rotate\":\"StaticHeadphonesProductDetailsTemplate_fancybox-rotate__3DCrN\"};","/* eslint-disable jsx-a11y/anchor-is-valid */\n/* eslint-disable react/no-unescaped-entities */\n/* eslint-disable arrow-body-style */\n/* eslint-disable operator-linebreak */\n/* eslint-disable @typescript-eslint/no-extra-parens */\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { Col, Container, Row } from \"react-bootstrap\";\nimport { corsImageLink, corsLink } from \"src/_shared/common/Cors\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\nimport { ProductCardLotTimerWidget, ProductCardPricingWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useEffect } from \"react\";\nimport classes from \"src/Catalog/StaticHeadphonesProductDetailsTemplate.module.scss\";\nimport Interweave from \"interweave\";\n\nexport const StaticHeadphonesProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element | null => {\n  const cefConfig = useCefConfig() as CEFConfig;\n  useEffect(() => {\n    if (!cefConfig) {\n      return;\n    }\n    // add a bg to the body class only on this page to match master-qa.clarityclient.com\n    document.getElementsByTagName(\"body\")[0].classList.add(classes[\"bg-body\"]);\n  }, [ cefConfig ]);\n  if (!cefConfig) {\n    return null;\n  }\n  const primaryImage = props.productVariant.Images?.find(x => x.IsPrimary);\n  return (\n    <section>\n      {/* For DNN:cef:ProductMetaService */}\n      <input\n        id=\"productID\"\n        type=\"hidden\"\n        value={props.productVariant.ID}\n      />\n      {props.prices && props.prices.base && (\n        <input\n          id=\"productBasePrice\"\n          type=\"hidden\"\n          value={props.prices.base}\n        />\n      )}\n      <div id={classes.staticHeadphoneWrapper}>\n        <main\n          id=\"main\"\n          className={classes.headphone}\n          role=\"main\">\n          {/* \"Jumbotron section\" */}\n          <section className={`${classes[\"section-jumbotron\"]} ${classes.jumbotron}`}>\n            <Container>\n              <div className={`${classes[\"jumbotron-box\"]} d-lg-flex align-items-start`}>\n                <div className={`${classes[\"slider-box\"]}`}>\n                  <div className={classes.slider}>\n                    {/* TODO: slick slider? */}\n                    {primaryImage ?\n                      <div\n                        key={primaryImage.ID + primaryImage.OriginalFileName}\n                        className={classes.slide}>\n                        <ImageWithFallback\n                          kind=\"products\"\n                          src={primaryImage.OriginalFileName}\n                          imageResizerParamsBody={{ height: 445, width: 445 }}\n                          alt={primaryImage.Name} />\n                      </div> : null}\n                  </div>\n                </div>\n                <div className={`${classes[\"description-box\"]}`}>\n                  <div className={`${classes.description}`}>\n                    <div className={`${classes[\"header-description\"]}`}>\n                      <Row>\n                        <Col sm={12} md={6}>\n                          <h1 className={`${classes.title} mb-0`}>{props.productVariant.Name}</h1>\n                          {props.productVariant.SerializableAttributes\n                            && props.productVariant.SerializableAttributes[\"Model #\"]?.Value\n                            && <span className={`${classes.subtitle} text-uppercase`}>\n                              {props.productVariant.SerializableAttributes[\"Model #\"].Value}\n                            </span>\n                          }\n                        </Col>\n                        <Col sm={12} md={6}>\n                          {props.productVariant?.LotID\n                            ? <ProductCardLotTimerWidget product={props.productVariant} />\n                            : null}\n                          <ProductCardActionButtonWidget\n                            product={props.productVariant}\n                            addToCartBtnVariant=\"success\"\n                            buttonView=\"addToCart\"\n                            quoteCartBtnSeparated={true}\n                            useOutOfStockInsteadOfViewDetails={true}\n                            outOfStockBtnClasses=\"rounded\"\n                          />\n                        </Col>\n                      </Row>\n                    </div>\n                    <div className={`${classes[\"description-wrap\"]}`}>\n                      <div className={`${classes.holder} d-flex justify-content-between`}>\n                        <div className={`${classes[\"length-box\"]}`}>\n                          <span className=\"text text-uppercase\">Cord Length</span>\n                          <ul className={`${classes[\"length-list\"]} list-unstyled d-flex`}>\n                            <li className={classes.item}>\n                              <a href=\"#\">6'</a>\n                            </li>\n                            <li className={classes.item}>\n                              <a href=\"#\">8'</a>\n                            </li>\n                            <li className={classes.item}>\n                              <a\n                                className=\"active\"\n                                href=\"#\">\n                                12'\n                              </a>\n                            </li>\n                            <li className={classes.item}>\n                              <a href=\"#\">16'</a>\n                            </li>\n                            <li className={classes.item}>\n                              <a href=\"#\">20'</a>\n                            </li>\n                          </ul>\n                        </div>\n                        <ProductCardPricingWidget\n                          product={props.productVariant}\n                        />\n                      </div>\n                      <div id=\"ProductOverviewDescriptionText\">\n                        <Interweave content={props.productVariant.Description}\n                          allowAttributes={true}\n                          allowElements={true} />\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </Container>\n          </section>\n          {/* \"Text section\" */}\n          <section className={`${classes[\"section-text\"]}`}>\n            <Container>\n              <Row className=\"flex-md-row-reverse align-items-md-center\">\n                <Col sm={12}\n                  md={6}\n                  className=\"text-center\">\n                  <img src={corsImageLink(cefConfig, \"img02.png\", \"products\", null)}\n                    alt=\"img02.png\"\n                  />\n                </Col>\n                <Col sm={12} md={6}>\n                  <div className={`${classes[\"head-text\"]}`}>\n                    <h1 className={classes.title}>\n                      <mark>M</mark> usic like you've never heard it\n                    </h1>\n                  </div>\n                  <p>\n                    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore\n                    et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n                    aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate.\n                  </p>\n                </Col>\n              </Row>\n            </Container>\n          </section>\n          {/* Studio section */}\n          <section className={classes[\"section-studio\"]}\n            style={{ backgroundImage: `url(${corsImageLink(cefConfig, \"img-04.png\", \"products\", null)})` }}>\n            <Container>\n              <Row>\n                <Col xs={12}>\n                  <div className={classes[\"studio-box\"]}\n                    style={{ backgroundImage: `url(${corsImageLink(cefConfig, \"img03.jpg\", \"products\", null)})` }}>\n                    <div className={`${classes[\"position-box\"]} d-flex align-items-center`}>\n                      <div className={`${classes[\"play-btn\"]}`}>\n                        {/* eslint-disable-next-line jsx-a11y/anchor-has-content */}\n                        <a className=\"icon-icon06\"\n                          data-fancybox\n                          target={\"_blank\"}\n                          rel=\"noreferrer\"\n                          href=\"https://www.youtube.com/watch?v=_sI_Ps7JSEk\"></a>\n                      </div>\n                      <div className={`${classes.text}`}>\n                        <span className={`${classes.subtitle}`}>watch</span>\n                        <strong className={`${classes.title}`}>In the Studio</strong>\n                      </div>\n                    </div>\n                  </div>\n                </Col>\n              </Row>\n            </Container>\n          </section>\n          {/* Similar section */}\n          <section className={`${classes[\"section-similar\"]}`}>\n            <Container>\n              <Row>\n                <Col lg={6} xs={12}>\n                  <header className={`${classes[\"head-text\"]}`}>\n                    <h1 className={`${classes.title}`}>\n                      <mark>S</mark>imilar Headphones\n                    </h1>\n                  </header>\n                  <div className={`${classes.text}`}>\n                    <p>\n                      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut\n                      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris\n                      nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate.\n                    </p>\n                    <a\n                      className={`${classes[\"arrow-link\"]}`}\n                      href={\n                        corsLink(\n                          cefConfig,\n                          cefConfig.routes.catalog.root,\n                          \"catalog\",\n                          \"primary\",\n                          false,\n                          {\n                            category: \"Audio|Electronics_Audio\",\n                            term: null,\n                            categoriesAny: null,\n                            categoriesAll: null,\n                            attributesAny: null,\n                            attributesAll: null,\n                            priceRanges: null\n                          }\n                        )\n                      }>\n                      Shop Full Collection<i className={`${classes[\"icon-icon05\"]}`}></i>\n                    </a>\n                  </div>\n                </Col>\n                {/* Placeholder content */}\n                <Col lg={6} xs={12}>\n                  <div className={`${classes[\"similar-box\"]}`}>\n                    <Row>\n                      <Col md={6} xs=\"12\">\n                        <a\n                          href=\"#\">\n                          <div className={classes.card}>\n                            <div className={`${classes[\"card-img-top\"]}`}>\n                              <img\n                                className={`${classes[\"shadow-img\"]}`}\n                                src={corsImageLink(cefConfig, \"img05.png\", \"products\", null)}\n                                alt=\"images description\"\n                              />\n                            </div>\n                            <div className={`${classes[\"card-body\"]}`}>\n                              <div className=\"card-header d-flex align-items-center justify-content-between\">\n                                <div className={classes.text}>\n                                  <h5 className={`${classes[\"card-title\"]}`}>\n                                    <span>Doueppler</span>\n                                  </h5>\n                                  <span className={`${classes[\"similar-description\"]}`}>DPD-20X74</span>\n                                </div>\n                                <div className={classes.arrow}>\n                                  <span className={`${classes[\"arrow-link\"]}`}>\n                                    <i className={`${classes[\"icon-icon05\"]}`}></i>\n                                  </span>\n                                </div>\n                              </div>\n                            </div>\n                          </div>\n                        </a>\n                      </Col>\n                      <Col md={6} xs=\"12\">\n                        <a\n                          href=\"#\">\n                          <div className={classes.card}>\n                            <div className={`${classes[\"card-img-top\"]}`}>\n                              <img\n                                src={corsImageLink(cefConfig, \"img06.png\", \"products\", null)}\n                                alt=\"images description\"\n                              />\n                            </div>\n                            <div className={`${classes[\"card-body\"]}`}>\n                              <div id=\"udWalletCardHeader\"\n                                className=\"card-header d-flex align-items-center justify-content-between\">\n                                <div className={classes.text}>\n                                  <h5 className={`${classes[\"card-title\"]}`}>\n                                    <span>Susvara</span>\n                                  </h5>\n                                  <span className={`${classes[\"similar-description\"]}`}>Strybridge®</span>\n                                </div>\n                                <div className={classes.arrow}>\n                                  <span className={`${classes[\"arrow-link\"]}`}>\n                                    <i className={`${classes[\"icon-icon05\"]}`}></i>\n                                  </span>\n                                </div>\n                              </div>\n                            </div>\n                          </div>\n                        </a>\n                      </Col>\n                    </Row>\n                  </div>\n                </Col>\n              </Row>\n            </Container>\n          </section>\n        </main>\n      </div>\n    </section>\n  );\n};\n","import _ from \"lodash\";\nimport { useEffect, useState } from \"react\";\nimport { Button, Col, Container, Modal, Row } from \"react-bootstrap\";\nimport { ProductDetailsTemplateProps } from \"src/Catalog/ProductDetails\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\nimport {\n  ProductCardLotTimerWidget,\n  ProductCardNameWidget,\n  ProductCardPricingWidget\n} from \"src/Catalog/views/ProductCardWidgets\";\n\nexport const VariantsCustomProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element => {\n  const [ open, setOpen ] = useState<{[id: number]: boolean}>({});\n  const relatedProducts = _.filter(\n    props.productVariant?.ProductAssociations,\n    variant => variant.TypeKey === \"RELATED-PRODUCT\"\n  );\n  useEffect(() => {\n    setOpen(prev => {\n      const next = { ...prev };\n      _.forEach(relatedProducts, rp => {\n        next[rp.SlaveID] = false;\n      });\n      return next;\n    });\n  }, [ props.productVariant.ProductAssociations ]);\n  if (_.isEmpty(relatedProducts)) {\n    return null;\n  }\n  return (\n    <div>\n      {relatedProducts.map(rp => {\n        return <Modal\n          key={`productModal${rp.SlaveID}`}\n          show={open[rp.SlaveID]}\n          onHide={() => {\n            setOpen(prev => {\n              const next = { ...prev };\n              next[rp.SlaveID] = false;\n              return next;\n            });\n          }}\n          fullscreen={true}\n          centered={true}>\n          <Modal.Body>\n            <ImageWithFallback\n              className=\"pointer img-fluid w-100\"\n              src={rp.SlavePrimaryImageFileName}\n              kind=\"products\"\n              imageResizerParamsBody={{}}\n              onClick={() => {\n                setOpen(prev => {\n                  const next = { ...prev };\n                  next[rp.SlaveID] = false;\n                  return next;\n                });\n              }} />\n          </Modal.Body>\n        </Modal>;\n      })}\n      <Container>\n        <Row>\n          <Col xs={12} sm={8}>\n            <Row>\n              {relatedProducts.map(rp => <Col\n                key={`productModalOpener${rp.SlaveID}`}\n                xs={12}\n                sm={6}>\n                <ImageWithFallback\n                  className=\"pointer img-fluid w-100\"\n                  src={rp.SlavePrimaryImageFileName}\n                  kind=\"products\"\n                  onClick={() => {\n                    setOpen(prev => {\n                      const next = { ...prev };\n                      next[rp.SlaveID] = true;\n                      return next;\n                    });\n                  }\n                  }\n                />\n              </Col>)}\n            </Row>\n          </Col>\n          <Col xs={12} sm={4}>\n            <h2>\n              <ProductCardNameWidget\n                productName={props.productVariant.Name}\n                productSeoUrl={props.productVariant.SeoUrl}\n              />\n            </h2>\n            <ProductCardPricingWidget\n              product={props.productVariant}\n            />\n            {relatedProducts.map(rp => <Button\n              key={`relatedProductSwitcher${rp.SlaveID}`}\n              variant=\"none\">\n              <ImageWithFallback\n                src={rp.SlavePrimaryImageFileName}\n                kind=\"products\"\n                imageResizerParamsBody={{\n                  mode: \"pad\",\n                  scale: \"both\",\n                  maxheight: 100,\n                  maxwidth: 100\n                }}\n                onClick={() => props.updateProductVariant(rp.SlaveSeoUrl)}\n              />\n            </Button>)}\n            { props.productVariant.SerializableAttributes?.Size\n              && <Col xs={12} className=\"my-2\">\n                <Row>\n                  {props.productVariant.SerializableAttributes.Size.Value.split(\",\")\n                    .map(size => <Col sm={6} key={`size{${size}}`}>{`M ${size}`}</Col>)}\n                </Row>\n              </Col>}\n            {props.productVariant?.LotID\n              ? <ProductCardLotTimerWidget product={props.productVariant} />\n              : null}\n            <ProductCardActionButtonWidget product={props.productVariant} />\n          </Col>\n        </Row>\n      </Container>\n    </div>\n  );\n};\n","/* eslint-disable operator-linebreak */\n/* eslint-disable @typescript-eslint/no-extra-parens */\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Card, Col, Container, Row } from \"react-bootstrap\";\nimport _ from \"lodash\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ProductCardControlsWidget } from \"src/Catalog/controls/ProductCardControlsWidget/ProductCardControlsWidget\";\nimport { MagicImageCarousel2 } from \"src/Catalog/controls/MagicImageCarousel2\";\nimport { ProductDetailsTabs } from \"src/Catalog/views/ProductDetailsTabs/ProductDetailsTabs\";\nimport { VariantDropdown } from \"src/Catalog/controls/VariantDropdown\";\nimport { AddToCartButton } from \"../Cart/controls/AddToCartButton\";\nimport { ProductDetailsTemplateProps } from \"./ProductDetails\";\nimport { Price } from \"src/Catalog/controls/Price\";\nimport { RelatedProductsList } from \"./views/RelatedProductsList\";\n\nexport const PacksWithPurchaseOptionsProductDetailsTemplate = (props: ProductDetailsTemplateProps): JSX.Element => {\n  const [ displayStyle, setDisplayStyle ] = useState(null);\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    const handleResize = () => {\n      if (window.innerWidth < 768) {\n        setDisplayStyle(\"collapse\");\n      } else {\n        setDisplayStyle(null);\n      }\n    };\n    handleResize();\n    window.addEventListener(\"resize\", handleResize);\n    return () => {\n      window.removeEventListener(\"resize\", handleResize);\n    };\n  }, []);\n\n  if (!cefConfig) {\n    return null;\n  }\n  if (!props.productVariant) {\n    return null;\n  }\n  return (\n    <section>\n      {/* For DNN:cef:ProductMetaService */}\n      <input\n        id=\"productID\"\n        type=\"hidden\"\n        value={props.productVariant.ID}\n      />\n      {props.prices && props.prices.base ? (\n        <input\n          id=\"productBasePrice\"\n          type=\"hidden\"\n          value={props.prices.base}\n        />\n      ) : null}\n      <Container className=\"sm-px-0\">\n        <Row>\n          <div className=\"mt-4 small\">\n            <a href=\"/\" className=\"cat-gray-text\">{t(\"ui.storefront.common.Home\", \"Home\")}</a>\n            <span>&nbsp;/&nbsp;</span>\n            <a href=\"/Catalog\" className=\"cat-gray-text\">{t(\"ui.storefront.common.Catalog\", \"Catalog\")}</a>\n            <span>&nbsp;/&nbsp;</span>\n            <span className=\"text-primary\">{props.masterProduct.Name}</span>\n          </div>\n        </Row>\n        <Row className=\"mt-4\">\n          <Col\n            xs={12}\n            md={6}\n            className=\"mb-4\">\n            <MagicImageCarousel2\n              product={props.productVariant}\n              magicScrollOptions={{\n                items: 4,\n                pagination: true,\n                draggable: true,\n                height: 450,\n                orientation: \"vertical\",\n              }}\n              magicZoomOptions={{\n                selectorTrigger: \"hover\",\n                transitionEffect: false,\n                zoomWidth: \"150%\"\n              }}\n              largeImageResizerParamsBody={{\n                width: 1000,\n                height: 1000,\n                mode: \"pad\",\n                scale: \"both\"\n              }}\n              thumbnailImageResizerParamsBody = {{\n                width: 75,\n                height: 75,\n                mode: \"pad\",\n                scale: \"both\"\n              }}\n            />\n          </Col>\n          <Col\n            xs={12}\n            md={6}\n            className=\"mb-3\">\n            <Card className=\"border-0\">\n              <Card.Header\n                id=\"productName\"\n                data-sid=\"productName\"\n                as=\"h1\"\n                style={{ fontWeight: \"500\" }}\n                className=\"border-0 bg-transparent pt-0 px-0\">\n                {props.masterProduct.Name}\n              </Card.Header>\n              <Card.Body className=\"pt-0 pb-4 px-0\">\n                <Row>\n                  <Col\n                    xs={12}\n                    className=\"cef-product-info\">\n                    {/* {cefConfig.featureSet.reviews.enabled && (\n                      <div className=\"cef-ratings w-100 mt-1 mb-3\">\n                        <RatingSummary\n                          scale={5}\n                          count={props.reviewsForAverage?.length ?? 0}\n                          value={props.average}\n                        />\n                      </div>\n                    )} */}\n                    <div className=\"product-info mb-3\">\n                      {_.isFunction(props.subVariant?.readPrices) &&\n                        <Price\n                          prices={{\n                            ...props.subVariant.readPrices(),\n                            isSale: false,\n                            sale: null,\n                            haveSale: false\n                          }}\n                          colClasses=\"h1 mb-0\"\n                          sizeClass=\"very-small\"\n                          muteDiscountText={true}/>\n                      }\n                    </div>\n                    {props.masterProduct?.TypeKey === \"VARIANT-MASTER\" && (\n                      <p>{props.masterProduct.ShortDescription}</p>\n                    )}\n                    <Row className=\"mb-3\">\n                      {props.masterProduct?.TypeKey === \"VARIANT-MASTER\" && props.listOfVariants?.length && (\n                        <>\n                          <Col xs={12} className=\"col-tk-6\">\n                            <VariantDropdown\n                              formWidth=\"w-100 lg-w-50\"\n                              listOfVariants={props.listOfVariants}\n                              onVariantSelected={props.updateProductVariant}\n                              selectedVariantSeoUrl={props.productVariant.SeoUrl}\n                            />\n                          </Col>\n                          <Col className=\"d-none d-tk-block col-tk-6\" />\n                        </>\n                      )}\n                    </Row>\n                    {/* <div className=\"mb-3\">\n                      <label className=\"control-label text-capitalize mb-1\" htmlFor=\"supplyOptions\">\n                        {t(\n                          \"ui.storefront.product.detail.productDetails.SelectPurchaseOption\",\n                          \"Select a Purchase Option\"\n                        )}\n                      </label>\n                      <Row className=\"gx-1\">\n                        {props.productVariant?.ProductAssociations\n                        && [ ...props.productVariant.ProductAssociations ]\n                          .sort((a, b) => {\n                            if (a.SortOrder && b.SortOrder) {\n                              return a.SortOrder - b.SortOrder;\n                            }\n                            return 0;\n                          })\n                          .map((pAssoc, index) => {\n                            return <Col\n                              xs={12}\n                              md={12}\n                              lg={6}\n                              key={pAssoc.SlaveID}\n                              className=\"mb-3 lg-mb-0\">\n                              <SupplyOptionCard\n                                isSelected={props.subVariant?.SeoUrl === pAssoc.SlaveSeoUrl}\n                                onClick={() => {\n                                  props.updateSubVariant(pAssoc.SlaveSeoUrl);\n                                }}\n                                subVariant={pAssoc.Slave}\n                                index={index}\n                              />\n                            </Col>;\n                          })}\n                      </Row>\n                    </div> */}\n                    <AddToCartButton\n                      btnVariant=\"primary\"\n                      btnClasses=\"w-40 py-2\"\n                      btnGroupClasses=\"w-100 sm-w-50\"\n                      masterProduct={props.masterProduct}\n                      product={props.subVariant}\n                      quantity={1}\n                      excludeQuoteCart={true}\n                      label={t(\"ui.storefront.common.OrderNow\", \"Order Now\")}\n                      useErrorModal={true}\n                    />\n                    <div className=\"w-100 sm-w-50\">\n                      <ProductCardControlsWidget\n                        product={props.subVariant}\n                        render=\"vertical\"\n                        hideShoppingList={true}\n                      />\n                    </div>\n                    {/* <VariantSwatches\n                      listOfVariants={props.listOfVariants}\n                      selectedVariantProductId={props.productVariant?.ID}\n                      onVariantSwatchClicked={props.updateProductVariant}\n                    /> */}\n                  </Col>\n                </Row>\n              </Card.Body>\n            </Card>\n          </Col>\n          {props.productVariant && (\n            <div>\n              <Col xs={12}>\n                <ProductDetailsTabs product={props.productVariant} displayStyle={displayStyle}/>\n              </Col>\n            </div>\n          )}\n        </Row>\n      </Container>\n      <Container>\n        {props.masterProduct?.ProductAssociations && (\n          <RelatedProductsList\n            desktopContainerClassName=\"mx-n6 px-4 gx-4\"\n            products={props.masterProduct.ProductAssociations}\n          />\n        )}\n      </Container>\n    </section>\n  );\n};\n","import { ClothingProductDetailsTemplate } from \"src/Catalog/ClothingProductDetailsTemplate\";\nimport { DefaultProductDetailsTemplate } from \"src/Catalog/DefaultProductDetailsTemplate\";\nimport { RecentlyViewedProductDetailsTemplate } from \"src/Catalog/RecentlyViewedProductDetailsTemplate\";\nimport { StaticHeadphonesProductDetailsTemplate } from \"src/Catalog/StaticHeadphonesProductDetailsTemplate\";\nimport { VariantsCustomProductDetailsTemplate } from \"src/Catalog/VariantsCustomProductDetailsTemplate\";\nimport { Col, Container, Row } from \"react-bootstrap\";\nimport { PacksWithPurchaseOptionsProductDetailsTemplate } from \"./PacksWithPurchaseOptionsProductDetailsTemplate\";\nimport { ProductDetailsTemplateProps } from \"./ProductDetails\";\n\nexport const TemplatePicker = (props: ProductDetailsTemplateProps): JSX.Element => {\n  if (props.masterProduct?.SerializableAttributes?.Template?.Value === \"PacksWithPurchaseOptions\") {\n    return <PacksWithPurchaseOptionsProductDetailsTemplate {...props} />;\n  }\n  switch (props.productVariant?.SerializableAttributes?.Template?.Value) {\n    case \"StaticHeadphone\": {\n      return <StaticHeadphonesProductDetailsTemplate {...props} />;\n    }\n    case \"Clothing\": {\n      return (\n        <>\n          <Container>\n            <Row>\n              <Col xs={12}>\n                {props.children}\n              </Col>\n            </Row>\n          </Container>\n          <ClothingProductDetailsTemplate {...props} />\n        </>\n      );\n    }\n    case \"RecentlyViewed\": {\n      return (\n        <>\n          <Container>\n            <Row>\n              <Col xs={12}>\n                {props.children}\n              </Col>\n            </Row>\n          </Container>\n          <RecentlyViewedProductDetailsTemplate {...props} />\n        </>\n      );\n    }\n    case \"Shoes\": {\n      return (\n        <>\n          <Container>\n            <Row>\n              <Col xs={12}>\n                {props.children}\n              </Col>\n            </Row>\n          </Container>\n          <VariantsCustomProductDetailsTemplate {...props} />\n        </>\n      );\n    }\n    default: {\n      return (\n        <>\n          <Container>\n            <Row>\n              <Col xs={12}>\n                {props.children}\n              </Col>\n            </Row>\n          </Container>\n          <DefaultProductDetailsTemplate {...props} />\n        </>\n      );\n    }\n  }\n};\n","/* eslint-disable max-len */\n/* eslint-disable init-declarations */\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Breadcrumb, Container } from \"react-bootstrap\";\nimport { Route, useHistory, useParams } from \"react-router-dom\";\nimport _ from \"lodash\";\n\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { CalculatedInventories, CalculatedPrices, IHttpPromiseCallbackArg, ProductModel } from \"src/_api/cvApi.shared\";\nimport cvApi from \"src/_api/cvApi\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductAssociationModel, ProductReviewInformationModel, ReviewModel } from \"src/_api/cvApi._DtoClasses\";\nimport useEffectSkipFirst from \"src/_shared/customHooks/useEffectSkipFirst\";\nimport promiser from \"src/_shared/Promiser\";\nimport { TemplatePicker } from \"src/Catalog/TemplatePicker\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { StringParam, useQueryParams } from \"use-query-params\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\nexport type ProductDetailsTemplateProps = {\n  productVariant: ProductModel;\n  subVariant?: ProductModel;\n  masterProduct: ProductModel;\n  prices: CalculatedPrices;\n  inventory: CalculatedInventories;\n  reviewsForAverage: ReviewModel[];\n  listOfVariants: ProductAssociationModel[];\n  average: number;\n  updateProductVariant: (seoUrl: string) => Promise<void>;\n  updateSubVariant?: (subVariantSeoUrl: string) => Promise<void>;\n  children?: React.ReactNode;\n  viewState: IViewState;\n}\n\nconst ProductDetailsComponent = (): JSX.Element => {\n  const [ masterProduct, setMasterProduct ] = useState<ProductModel>(null);\n  const [ productVariant, setProductVariant ] = useState<ProductModel>(null);\n  const [ subVariant, setSubVariant ] = useState<ProductModel>(null);\n  const [ listOfVariants, setListOfVariants ] = useState<ProductAssociationModel[]>(null);\n  const [ reviewData, setReviewData ] = useState<ProductReviewInformationModel>(null);\n  const cefConfig = useCefConfig() as CEFConfig;\n  const user = useCurrentUser();\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const productFactory = useProductFactory();\n  const { seoUrl } = useParams<{ seoUrl: string }>();\n  const history = useHistory();\n\n  const [ params ] = useQueryParams({ recommended: StringParam });\n\n  window.dataLayer = window.dataLayer || [];\n  const urlParams = new URLSearchParams(window.location.search);\n  const isFunnel = urlParams.get(\"funnel\");\n\n  const pathSegments = window.location.pathname.split(\"/\");\n\n  const productValue = pathSegments.includes(\"Sildenafil\") ? \"Sildenafil\" : pathSegments.includes(\"Tadalafil\") ? \"Tadalafil\" : \"unknown\";\n\n  if (isFunnel === \"ed\") {\n    window.dataLayer.push({ event: \"ed_squeeze_complete\", product: productValue });\n  }\n\n  useEffectSkipFirst(() => {\n    if (!cefConfig || !productFactory || !seoUrl || user.Loading) {\n      return;\n    }\n    // Ignore the initial setting of the seoUrl if the product is a master, but watch and reinitialize for others\n    initializeProduct();\n  }, [ seoUrl, cefConfig, productFactory, user.Loading ]);\n\n  useEffect(() => {\n    if (masterProduct && masterProduct.ProductAssociations) {\n      const newListOfVariants: ProductAssociationModel[] = masterProduct.ProductAssociations.filter(\n        childProduct => childProduct.TypeKey === \"VARIANT-OF-MASTER\"\n      ).sort((variantOne, variantTwo) => {\n        if (variantOne.SortOrder && variantTwo.SortOrder) {\n          return variantOne.SortOrder - variantTwo.SortOrder;\n        }\n        return 0;\n      });\n      setListOfVariants(newListOfVariants);\n    }\n  }, [ masterProduct ]);\n\n  const loadReviews = (product: ProductModel) => {\n    setRunning();\n    return new Promise((resolve, reject) => {\n      // Always resolve, reviews shouldn't prevent the page from loading\n      if (!cefConfig.featureSet.reviews.enabled) {\n        resolve(true);\n        finishRunning();\n        return;\n      }\n      const promiserKey = `cvApi.products.GetProductReview(${product.ID})`;\n      promiser.resolve(\n        promiserKey,\n        () => cvApi.products.GetProductReview(product.ID)\n      )\n        .then((res: IHttpPromiseCallbackArg<ProductReviewInformationModel>) => {\n          if (res.data) {\n            setReviewData(res.data);\n          }\n          finishRunning();\n          resolve(true);\n        })\n        .catch((err: { Messages: any; }) => {\n          if (cefConfig.debug) {\n            console.error(err, ` Failed to fetch reviews for product ${product.Name}`);\n          }\n          finishRunning(true, null, err?.Messages ?? [ \"Failed to fetch reviews for product\" ]);\n          resolve(false);\n        });\n    });\n  };\n\n  async function initializeProduct() {\n    setRunning();\n    let masterProductI: ProductModel;\n    let variantToSet: ProductModel;\n    let subVariantToSet: ProductModel;\n    try {\n      if (!seoUrl) {\n        throw new Error(\"No seoUrl present\");\n      }\n      const urlProduct = await getProduct(seoUrl);\n      switch (urlProduct.TypeName.toLowerCase()) {\n        case \"variant master\": {\n          masterProductI = urlProduct;\n          if (!masterProductI.ProductAssociations || !masterProductI.ProductAssociations[0]) {\n            throw new Error(\"There are no variants for this master product\");\n          }\n          const hasInitial = user?.SerializableAttributes?.HasInitial?.Value?.split(',');\n          const hasInitialForCategory = masterProductI?.Categories?.find(c => hasInitial?.includes(c.SlaveID.toString()));\n\n          let variantSeoUrl = [ ...masterProductI.ProductAssociations ]\n            .filter(x => {\n              if (hasInitialForCategory) {\n                return x.Slave?.SerializableAttributes?.RequiresInitial?.Value === 'true';\n              }\n\n              return x.TypeKey === \"VARIANT-OF-MASTER\"\n            })\n            .sort((a, b) => {\n              if (a.Slave?.SortOrder && b.Slave?.SortOrder) {\n                return a.Slave.SortOrder - b.Slave.SortOrder;\n              }\n              return 0;\n            })[0]?.SlaveSeoUrl;\n\n          if (params.recommended) {\n            variantSeoUrl = params.recommended;\n          }\n          if (!variantSeoUrl) {\n            break;\n          }\n\n          variantToSet = await getProduct(variantSeoUrl);\n          if (variantToSet.ProductAssociations\n            && variantToSet.ProductAssociations[0]\n            && variantToSet.ProductAssociations[0]?.SlaveSeoUrl) {\n            const sorted = [ ...variantToSet.ProductAssociations ].sort((a, b) => {\n              const aHasPurchaseOption = a.Slave?.SerializableAttributes?.PurchaseOption;\n              const bHasPurchaseOption = b.Slave?.SerializableAttributes?.PurchaseOption;\n              if (aHasPurchaseOption && bHasPurchaseOption) {\n                if (aHasPurchaseOption.Value === \"Subscription\" && bHasPurchaseOption.Value !== \"Subscription\") {\n                  return -1;\n                } else if (aHasPurchaseOption.Value !== \"Subscription\" && bHasPurchaseOption.Value === \"Subscription\") {\n                  return 1;\n                }\n              } else if (a.SortOrder && b.SortOrder) {\n                return a.SortOrder - b.SortOrder;\n              }\n              return 0;\n            });\n            const filteredOptions = sorted.filter(x => {\n              if (hasInitialForCategory) {\n                return x.Slave?.SerializableAttributes?.RequiresInitial?.Value === 'true';\n              }\n\n              return x.TypeKey === \"PurchaseOption\"\n            });\n            if (filteredOptions[0]?.SlaveSeoUrl) {\n              subVariantToSet = await getProduct(filteredOptions[0]?.SlaveSeoUrl);\n            }\n          }\n          break;\n        }\n        default: {\n          // The url product is a variant. We need to push to its master's detail page/seoUrl\n          const urlProductAssociations = urlProduct.ProductsAssociatedWith;\n          const masterAssociation = urlProductAssociations?.find(x => x.TypeKey === \"VARIANT-OF-MASTER\");\n          let seoUrlForPush = masterAssociation?.MasterSeoUrl;\n          if (!urlProductAssociations?.length || !masterAssociation || !seoUrlForPush) {\n            // We can't find its master, attempt to climb using purchase options\n            const purchaseOptionAsssociation = urlProductAssociations?.find(x => x.TypeKey === \"PurchaseOption\");\n            const purchaseOptionSeoUrl = purchaseOptionAsssociation?.MasterSeoUrl;\n            if (!purchaseOptionSeoUrl) {\n              // This should not happen in MANGO as of 06-05-2024\n              masterProductI = urlProduct;\n              variantToSet = urlProduct;\n              return;\n            }\n            seoUrlForPush = purchaseOptionSeoUrl;\n          }\n          // We have the seoUrlForPush.\n          // Push to that URL and return.\n          // Do not replace the return with a break.\n          // initializeProduct will run again after the page reloads with the seoUrlForPush\n\n          const newRoute = corsLink(\n            cefConfig,\n            `${cefConfig.routes.productDetail.root}/${seoUrlForPush}`,\n            \"productDetail\"\n          );\n          history.push(newRoute);\n          history.go(0);\n          return;\n        }\n      }\n\n      await loadReviews(variantToSet);\n      finishRunning();\n    } catch (err: any) {\n      console.log(\"Error\", err);\n      if (cefConfig.debug) {\n        console.log(\"Error\", err);\n      }\n      finishRunning(true, err.Message ?? err.Messages ? err.Messages[0] : \"Failed to load product\");\n    }\n    if (masterProductI) {\n      setMasterProduct(masterProductI);\n      setSubVariant(subVariantToSet);\n    }\n    setProductVariant(variantToSet);\n  }\n\n  const updateSubVariant = useCallback(async (subVariantSeoUrl: string) => {\n    setRunning();\n    try {\n      const p = await getProduct(subVariantSeoUrl);\n      setSubVariant(p);\n      finishRunning();\n    } catch (err) {\n      console.log(err)\n      finishRunning(true, err);\n    }\n  }, [ cefConfig, seoUrl, productFactory ]);\n\n  const updateProductVariant = useCallback(async (variantSeoUrl: string) => {\n    if (variantSeoUrl === seoUrl) {\n      // Do Nothing\n      return;\n    }\n    setRunning();\n    try {\n      const p = await getProduct(variantSeoUrl);\n      setProductVariant(p);\n      if (p.ProductAssociations?.length) {\n        const sorted = [ ...p.ProductAssociations ].sort((a, b) => {\n          const aHasPurchaseOption = a.Slave?.SerializableAttributes?.PurchaseOption;\n          const bHasPurchaseOption = b.Slave?.SerializableAttributes?.PurchaseOption;\n          if (aHasPurchaseOption && bHasPurchaseOption) {\n            if (aHasPurchaseOption.Value === \"Subscription\" && bHasPurchaseOption.Value !== \"Subscription\") {\n              return -1;\n            } else if (aHasPurchaseOption.Value !== \"Subscription\" && bHasPurchaseOption.Value === \"Subscription\") {\n              return 1;\n            }\n          } else if (a.SortOrder && b.SortOrder) {\n            return a.SortOrder - b.SortOrder;\n          }\n          return 0;\n        });\n        const filteredOptions = sorted.filter(x => x.TypeKey === \"PurchaseOption\");\n        if (filteredOptions[0]?.SlaveSeoUrl) {\n          await updateSubVariant(filteredOptions[0].SlaveSeoUrl);\n        }\n      }\n      finishRunning();\n    } catch (err) {\n      console.log(err)\n      finishRunning(true, err);\n    }\n  }, [ cefConfig, seoUrl, productFactory ]);\n\n  // Force: boolean = false\n  async function getProduct(seoUrlI: string) {\n    const promiserKey1 = `CheckProductExistsBySeoUrl({ SeoUrl: ${seoUrlI} })`;\n    const promise1 = await promiser.resolve(\n      promiserKey1,\n      () => cvApi.products.CheckProductExistsBySeoUrl({ SeoUrl: seoUrlI }),\n      true,\n      2,\n      true\n    );\n    const productID = promise1.data;\n    if (typeof productID !== \"number\") {\n      throw new Error(\"Unable to retrieve product ID from server\");\n    }\n    const product = await productFactory.getProductByID(productID);\n    if (_.isUndefined(product)) {\n      throw new Error(\"Unable to retrieve product from server\");\n    }\n    if (product.ProductAssociations?.length) {\n      // SerializableAttributes of all associated products are needed\n      const associations = await productFactory.getProductsByIDs(\n        product.ProductAssociations.map(x => x.SlaveID),\n        true,\n        { skipForcedPage: true, skipInventory: true }\n      );\n      product.ProductAssociations = product.ProductAssociations\n        .map(x => ({\n          ...x,\n          Slave: associations\n            .filter(pa => pa.SerializableAttributes?.HideFromVariantSelect?.Value.toLowerCase() !== \"true\")\n            .find(y => y.ID === x.SlaveID)\n        }))\n        .filter(x => x.Slave !== undefined);\n    }\n    return product;\n  }\n\n  const getProductView = (): JSX.Element => {\n    const pricingEnabled = cefConfig?.featureSet?.pricing?.enabled;\n    const inventoryEnabled = cefConfig?.featureSet?.inventory?.enabled;\n    if (\n      viewState.running || !cefConfig\n    ) {\n      return (\n        <section>\n          <Container className=\"vh-100 d-flex justify-content-center\">\n            <LoadingWidget message=\"Loading...\" innerClasses=\"pt-6\"/>\n          </Container>\n        </section>\n      );\n    }\n\n    let prices: CalculatedPrices = null;\n    let inventory: CalculatedInventories = null;\n    if (pricingEnabled && productVariant?.readPrices) {\n      prices = productVariant?.readPrices();\n    }\n\n    if (pricingEnabled && inventoryEnabled && productVariant?.readInventory\n    ) {\n      inventory = productVariant?.readInventory();\n    }\n\n    const approvedReviews = reviewData?.Reviews?.filter(r => r.Approved).sort(\n      (a, b) => a.SortOrder - b.SortOrder\n    );\n    const reviewsForAverage = approvedReviews?.filter(ar => ar.Value > 0);\n    const average\n      = reviewsForAverage\n        ?.map((ar): number => ar.Value)\n        .reduce((a: number, b: number): number => a + b, 0) / reviewsForAverage?.length || 0;\n    const templateProps: ProductDetailsTemplateProps = {\n      average,\n      inventory,\n      listOfVariants,\n      masterProduct,\n      prices,\n      productVariant,\n      subVariant,\n      reviewsForAverage,\n      updateProductVariant,\n      updateSubVariant,\n      viewState\n    };\n    return <div className=\"position-relative\">\n      {viewState.running && <LoadingWidget overlay={true} />}\n      <TemplatePicker {...templateProps}>\n        <Breadcrumbs masterProduct={masterProduct} productVariant={productVariant} />\n      </TemplatePicker>\n    </div>;\n  };\n\n  return (\n    <>\n      {getProductView()}\n    </>\n  );\n};\n\nexport const ProductDetails = (): JSX.Element | null => {\n  const cefConfig = useCefConfig();\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  return <Route path={`${cefConfig.routes.productDetail.root}/:seoUrl`}>\n    <ProductDetailsComponent />\n  </Route>;\n};\n\nexport default ProductDetails;\n\ninterface IBreadcrumbsProps {\n  masterProduct: ProductModel;\n  productVariant: ProductModel;\n}\n\nfunction Breadcrumbs(props: IBreadcrumbsProps) {\n  const { masterProduct, productVariant } = props;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const { seoUrl } = useParams<{ seoUrl: string }>();\n\n  return <Breadcrumb className=\"mb-2\" listProps={{ className: \"mb-4 mt-4 small\" }}>\n    <Breadcrumb.Item\n      id=\"lblYouAreHereProducts\"\n      className=\"breadcrumbs-title\"\n      href={corsLink(cefConfig, cefConfig.routes.site.root, \"site\")}>\n      {t(\"ui.storefront.common.Home\")}\n    </Breadcrumb.Item>\n    <Breadcrumb.Item\n      className=\"cat-gray-text\"\n      href={corsLink(cefConfig, \"/\", \"catalog\")}\n      id=\"breadCatalogRootLink\">\n      {t(\"ui.storefront.product.catalog.productCatalog.Catalog\")}\n    </Breadcrumb.Item>\n    <Breadcrumb.Item>\n      <span>{productVariant?.SeoUrl === seoUrl\n        ? productVariant?.Name\n        : masterProduct?.SeoUrl}</span>\n    </Breadcrumb.Item>\n  </Breadcrumb>;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\nexport interface IAuthGuardProps {\n  requiresPermission?: string;\n  requiresRole?: string;\n  requiresAuth?: boolean;\n  requiresNoAuth?: boolean;\n  fallback?: JSX.Element;\n  redirectPath?: string;\n  delay?: number;\n}\n\nexport const AuthGuard = (props: React.PropsWithChildren<IAuthGuardProps>): JSX.Element | null => {\n  const authFactory = useAuthFactory();\n  const currentUser = useCurrentUser();\n\n  const [ canView, setCanView ] = useState<boolean>(false);\n  const [ isLoading, setIsLoading ] = useState<boolean>(true);\n\n  useEffect(() => {\n    if (!authFactory || currentUser.Loading) {\n      return;\n    }\n    // isLoading is already true\n    // eslint-disable-next-line init-declarations\n    let promise: Promise<boolean>;\n    if (props.requiresRole) {\n      promise = authFactory.hasRole(props.requiresRole);\n    } else if (props.requiresPermission) {\n      promise = authFactory.hasPermission(props.requiresPermission);\n    } else if (props.requiresAuth) {\n      promise = Promise.resolve(currentUser.ID > 0);\n    } else if (props.requiresNoAuth) {\n      promise = Promise.resolve(!currentUser.ID);\n    } else {\n      // By default, if no required role or permission is supplied, the content is shown\n      promise = Promise.resolve(true);\n    }\n    promise.then(r => {\n      setCanView(r);\n      setIsLoading(false);\n      if (!r && props.redirectPath) {\n        const t = setTimeout(() => {\n          clearTimeout(t);\n          // TODO: determine if we're in admin SPA or not, use history if so so we don't reload the page\n          window.location.href = props.redirectPath;\n        }, props.delay ?? 3000);\n      }\n    }).catch(_ => {\n      setCanView(false);\n      setIsLoading(false);\n      if (props?.redirectPath) {\n        const t = setTimeout(() => {\n          clearTimeout(t);\n          // TODO: determine if we're in admin SPA or not, use history if so so we don't reload the page\n          window.location.href = props.redirectPath;\n        }, props.delay ?? 3000);\n      }\n    });\n  }, [ authFactory, currentUser ]);\n\n  if (isLoading) {\n    return null;\n  }\n\n  if (!canView) {\n    if (props.fallback) {\n      return props.fallback;\n    }\n    return null;\n  }\n  return <>{props.children}</>;\n};\n","import React from \"react\";\n\ninterface IDashboardTabHeadingProps {\n  headingClassName?: string;\n  iconClassName?: string;\n  iconString: string;\n  id?: string;\n  title: string;\n}\n\nconst DashboardTabHeadingContent = (props: IDashboardTabHeadingProps): JSX.Element => {\n  const { headingClassName, iconClassName, iconString, id, title } = props;\n\n  return <h1 id={id} className={`title ${headingClassName ?? \"mb-4\"}`}>\n    <i className={`${iconString} fa-fw ${iconClassName ?? \"me-3\"}`} />\n    <span>{title}</span>\n  </h1>;\n};\n\nexport const DashboardTabHeading = React.memo(DashboardTabHeadingContent);\n","import { useTranslation } from \"react-i18next\";\nimport { Button, Card, Col, Form } from \"react-bootstrap\";\nimport { useEffect, useState } from \"react\";\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IAddressBookCardProps {\n  accountContactID?: number;\n  accountContacts: Array<AccountContactModel>;\n  bodyClassName?: string;\n  type: \"Shipping\" | \"Billing\" | \"Other\";\n  showDropdown?: boolean;\n  showDeleteAddressConfirmationModalID: number;\n  setShowDeleteAddressConfirmationModalID: Function;\n  handleDefaultAddressChanged?: Function;\n  handleEditAddressClicked: Function;\n  deleteAddress: Function;\n  markAccountContact?: Function;\n  headerClassName?: string;\n  hideFooter?: boolean;\n}\n\nexport const AddressBookCard = (props: IAddressBookCardProps): JSX.Element => {\n  const [ selectedAccountContact, setSelectedAccountContact ]\n    = useState<AccountContactModel>(null);\n  const {\n    accountContactID,\n    accountContacts,\n    bodyClassName,\n    deleteAddress,\n    handleEditAddressClicked,\n    handleDefaultAddressChanged,\n    headerClassName,\n    hideFooter,\n    setShowDeleteAddressConfirmationModalID,\n    showDeleteAddressConfirmationModalID,\n    showDropdown,\n    type,\n  } = props;\n  const { ID, Slave } = selectedAccountContact ?? {};\n  const { t } = useTranslation();\n\n  useEffect(() => {\n    if (!accountContacts) {\n      return;\n    }\n    let selectedContact = null;\n    if (accountContactID) {\n      selectedContact = accountContacts.find(\n        (accountContact: AccountContactModel) => accountContact.ID === accountContactID\n      );\n      setSelectedAccountContact(selectedContact);\n      return;\n    }\n    const findKey = type === \"Billing\" ? \"IsBilling\" : \"IsPrimary\";\n    selectedContact = accountContacts.find((contact: AccountContactModel) => contact[findKey]);\n    setSelectedAccountContact(selectedContact);\n  }, [ accountContacts ]);\n\n  const getAccountContact = (id: number) => accountContacts.find(\n    (accountContact: AccountContactModel) => accountContact.ID === id\n  );\n\n  return (\n    <Col xl=\"4\" className=\"mb-3\">\n      <Card className=\"h-100\">\n        <Card.Header\n          id={`DefaultLabel_${type}`}\n          className={headerClassName || \"\"}>\n          {type === \"Billing\" ? \"Default Billing\" : type === \"Shipping\" ? \"Default Shipping\" : Slave?.AddressKey}\n        </Card.Header>\n        <Card.Body className={bodyClassName || \"\"}>\n          {showDropdown && (\n            <Form.Select\n              className=\"form-control d-inline-block\"\n              data-sid={`menuItem_${type}`}\n              aria-label=\"sort\"\n              value={selectedAccountContact?.ID ?? -1}\n              onChange={e => {\n                const newAccountContactID = parseInt(e.target.value, 10);\n                handleDefaultAddressChanged(newAccountContactID, type === \"Billing\");\n                setSelectedAccountContact(getAccountContact(newAccountContactID));\n              }}>\n              <option value={-1} disabled={true}>\n                Please select a {type} address\n              </option>\n              {accountContacts\n                && accountContacts.map(\n                  (ac: AccountContactModel): JSX.Element => (\n                    <option\n                      key={ac.ID}\n                      label={\n                        ac.Slave.Address.CustomKey || ac.CustomKey || ac.Slave.CustomKey || ac.Slave.Address.Street1\n                      }\n                      value={ac.ID}>\n                      {ac.Slave.Address.CustomKey || ac.CustomKey || ac.Slave.CustomKey || ac.Slave.Address.Street1}\n                    </option>\n                  )\n                )}\n            </Form.Select>\n          )}\n          {selectedAccountContact && (\n            <div className=\"px-2 py-3\">\n              <AddressBlock\n                address={Slave.Address}\n                contact={Slave}\n                hideName\n                hideCountryKey\n              />\n            </div>\n          )}\n        </Card.Body>\n        {selectedAccountContact ? (\n          <>\n            {!hideFooter && (\n              <Card.Footer className=\"btn-group p-0 py-1\">\n                <Button\n                  variant=\"link\"\n                  className=\"text-decoration-none underline-hover text-black text-end pe-4\"\n                  onClick={() => handleEditAddressClicked(selectedAccountContact)}>\n                  <i className=\"fal fa-fw fa-edit me-1\" />{\" \"}\n                  <span>{t(\"ui.storefront.common.Edit\", \"Edit\")}</span>\n                </Button>\n                <Button\n                  variant=\"link\"\n                  className=\"text-danger text-decoration-none underline-hover text-start ps-4\"\n                  onClick={() => setShowDeleteAddressConfirmationModalID(ID)}>\n                  <i className=\"fal fa-fw fa-trash me-1\" />{\" \"}\n                  <span>{t(\"ui.storefront.common.Delete\", \"Delete\")}</span>\n                </Button>\n                <ConfirmationModal\n                  title=\"Do you really want to remove this address?\"\n                  confirmBtnLabel=\"Delete Address\"\n                  show={showDeleteAddressConfirmationModalID === ID}\n                  onConfirm={() => deleteAddress(ID)}\n                  onCancel={() => setShowDeleteAddressConfirmationModalID(null)}>\n                  <AddressBlock\n                    address={Slave.Address}\n                    contact={Slave}\n                  />\n                </ConfirmationModal>\n              </Card.Footer>\n            )}\n          </>\n        ) : null}\n      </Card>\n    </Col>\n  );\n};\n","import { useState } from \"react\";\nimport {\n  AvailableOrdersPagedResults,\n  SalesOrderModel,\n  SalesOrderPagedResults,\n  StatusModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { getDtoAsPromiserKeyFragment } from \"../common/Formatters\";\nimport { GetAvailableOrdersForProviderDto, GetSalesOrderStatusesDto } from \"src/_api\";\n\ninterface ISalesOrderFactory {\n  claimSalesOrder: (salesOrderID: number) => Promise<void>;\n  getAvailableSalesOrders: (\n    dto: GetAvailableOrdersForProviderDto,\n    force?: boolean\n  ) => Promise<AvailableOrdersPagedResults>;\n  getCurrentAccountSalesOrders: (ids: number[], force?: boolean) => Promise<SalesOrderPagedResults>;\n  getSalesOrder: (id: number, force?: boolean) => Promise<SalesOrderModel>;\n  getSalesOrderStatuses: (dto?: GetSalesOrderStatusesDto) => Promise<StatusModel[]>;\n  reassignProductOnOrderAsDoctor: (productID: number, salesOrderID: number) => Promise<void>;\n  unclaimSalesOrder: (salesOrderID: number) => Promise<void>;\n}\n\nconst getSalesOrderByIDPromiserPrefix = \"salesOrderFactory:getSalesOrder:\";\n\nexport const useSalesOrderFactory = (): ISalesOrderFactory => {\n  const [ salesOrderFactory ] = useState<ISalesOrderFactory>({\n    claimSalesOrder: async (salesOrderID: number): Promise<void> => {\n      const res = await cvApi.ordering.ClaimOrder(salesOrderID);\n      if (!res?.data?.ActionSucceeded) {\n        throw new Error(res?.data?.Messages?.length\n          ? res.data.Messages[0]\n          : \"Failed to claim sales order\");\n      }\n      // Flush all other getters this one's status shows up as correct\n      // @ts-ignore\n      promiser.flush(/salesOrderFactory/u);\n      // @ts-ignore\n      promiser.flush(/usePagedModels:salesOrderModel/u);\n    },\n    getAvailableSalesOrders: async (\n      dto: GetAvailableOrdersForProviderDto,\n      force?: boolean\n    ): Promise<AvailableOrdersPagedResults> => {\n      const promiserKey = `salesOrderFactory:getAvailableSalesOrders:${getDtoAsPromiserKeyFragment(dto)}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.ordering.GetAvailableOrdersForProvider(dto)\n      );\n      if (!res?.data?.Results) {\n        throw new Error(\"ERROR! Failed to fetch available orders\");\n      }\n      return res.data;\n    },\n    getCurrentAccountSalesOrders: async (ids: number[], force = false): Promise<SalesOrderPagedResults> => {\n      const promiserKey = `salesOrderFactory:getCurrentAccountSalesOrders:${[ ...ids ].sort().join(\",\")}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const orders = await promiser.resolve(\n        promiserKey,\n        () => cvApi.ordering.GetCurrentAccountSalesOrders({\n          IDs: ids,\n        })\n      );\n      if (!orders?.data) {\n        throw new Error(\"Failed to fetch sales orders\");\n      }\n      return orders.data;\n    },\n    getSalesOrder: async (id: number, force?: boolean) => {\n      const promiserKey = `${getSalesOrderByIDPromiserPrefix}${id}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.ordering.GetSecureSalesOrder(id)\n      );\n      if (!res?.data) {\n        throw new Error(\"Failed to fetch sales order\");\n      }\n      return res.data;\n    },\n    getSalesOrderStatuses: async (dto: GetSalesOrderStatusesDto = {\n      Active: true,\n      AsListing: true\n    }): Promise<StatusModel[]> => {\n      const res = await promiser.resolve(\n        `salesOrderFactory:getSalesOrderStatuses:${getDtoAsPromiserKeyFragment(dto)}`,\n        () => cvApi.ordering.GetSalesOrderStatuses(dto)\n      );\n      if (!res?.data) {\n        throw new Error(\"Failed to fetch sales order statuses\");\n      }\n      const selectedStatuses = [ \"Claimed\", \"Approved\", \"Denied\", \"Canceled\", \"Void\", \"Shipped\" ];\n      return res.data.Results.filter(status => selectedStatuses.includes(status.CustomKey));\n    },\n    reassignProductOnOrderAsDoctor: async (productID: number, salesOrderID: number): Promise<void> => {\n      const res = await cvApi.ordering.UpdateProductOnOrder({\n        ProductID: productID,\n        SalesOrderID: salesOrderID\n      });\n      if (!res?.data?.ActionSucceeded) {\n        throw new Error(res?.data?.Messages\n          ? res.data.Messages[0]\n          : \"Failed to update product on order\");\n      }\n      promiser.flush(`${getSalesOrderByIDPromiserPrefix}${salesOrderID}`);\n      // ClaimedOrders grid is not using promiser as of time this code was written\n      return null;\n    },\n    unclaimSalesOrder: async (salesOrderID: number): Promise<void> => {\n      const res = await cvApi.ordering.UnclaimOrder(salesOrderID);\n      if (!res?.data?.ActionSucceeded) {\n        throw new Error(res?.data?.Messages?.length\n          ? res.data.Messages[0]\n          : \"Failed to unclaim sales order\");\n      }\n      // Flush all other getters this one's status shows up as correct\n      // @ts-ignore\n      promiser.flush(/salesOrderFactory/u);\n    }\n  });\n\n  return salesOrderFactory;\n};\n","/* eslint-disable react/display-name */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { CVGrid } from \"../../_shared/CVGrid/CVGrid\";\nimport { AvailableOrdersModel, AvailableOrdersPagedResults } from \"src/_api/cvApi._DtoClasses\";\nimport { GetAvailableOrdersForProviderDto } from \"src/_api\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { confirm } from \"src/_shared/modals\";\nimport { DashboardTabHeading } from \"src/Dashboard/_shared/DashboardTabHeading\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\nimport { useRegions } from \"src/_redux/slices/geographySlice\";\n\ninterface IOrdersProps {\n  isDashboardMain?: boolean;\n}\n\nexport const AvailableOrders = (props: IOrdersProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 35 ];\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const salesOrderFactory = useSalesOrderFactory();\n  const regions = useRegions();\n\n  const [ data, setData ] = useState<AvailableOrdersPagedResults>({\n    CurrentCount: 0,\n    CurrentPage: 1,\n    TotalCount: 0,\n    TotalPages: 1,\n    Results: [],\n  });\n\n  if (!salesOrderFactory || !regions) {\n    return null;\n  }\n\n  const onClaimButtonClicked = async (order: AvailableOrdersModel) => {\n    try {\n      await confirm({\n        title: t(\"ui.storefront.common.ClaimOrder\", \"Claim Order\"),\n        children: t(\n          \"ui.storefront.common.AreYouSureYouWantToClaimThisOrder\",\n          \"Are you sure you want to claim this order?\"\n        ),\n      });\n      await salesOrderFactory.claimSalesOrder(order.SalesOrder.ID);\n      const res = await salesOrderFactory.getAvailableSalesOrders({\n        Paging: { Size: 35, StartIndex: 1 },\n        Sorts: [\n          {\n            field: \"CreatedDate\",\n            dir: \"desc\",\n          }\n        ]\n      }, true);\n      setData(res);\n      await confirm({\n        title: t(\"ui.storefront.common.OrderClaimed\", \"Order Claimed\"),\n        children: t(\n          \"ui.storefront.common.TheOrderHasBeenClaimedSuccessfully\",\n          \"The order has been claimed successfully.\"\n        ),\n      });\n    } catch (err) {\n      if (cefConfig.debug) {\n        console.error(err);\n      }\n    }\n  };\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-orders mt-3\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            <DashboardTabHeading\n              title={t(\"ui.storefront.userDashboard.AvailableOrders\", \"Available Orders\")}\n              iconString=\"fal fa-hospital-user\"\n            />\n          </div>\n          <CVGrid<AvailableOrdersModel, GetAvailableOrdersForProviderDto>\n            pageSizes={pageSizeOptions}\n            name=\"availableorders\"\n            data={data}\n            tableClasses=\"shadow-none border border-medium\"\n            onQueryChange={(query) => {\n              const queryWithOnlyTruthyValues = {\n                ...query\n              };\n              for (const key in queryWithOnlyTruthyValues) {\n                if (queryWithOnlyTruthyValues[key as keyof GetAvailableOrdersForProviderDto] === undefined) {\n                  delete queryWithOnlyTruthyValues[key as keyof GetAvailableOrdersForProviderDto];\n                }\n              }\n              salesOrderFactory.getAvailableSalesOrders(queryWithOnlyTruthyValues).then(res => {\n                setData(res);\n              });\n            }}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ],\n            }}>\n            <CVGrid.Column\n              title={t(\"ui.storefront.common.OrderNumberSymbol\", \"Order #\")}\n              binding=\"SalesOrder.ID\"\n            />\n            <CVGrid.Column\n              title={t(\"ui.storefront.common.OrderDate\", \"Order Date\")}\n              binding=\"SalesOrder.CreatedDate\"\n              format=\"date\"\n              dateFormat=\"MM/dd/yyyy\"\n            />\n            <CVGrid.Column\n              title=\"Patient Name\">\n              {rowData => (\n                <Fragment key={`patient_${rowData.Patient?.ID}`}>\n                  <div>\n                    {`${rowData.Patient?.FirstName} ${rowData.Patient?.LastName}`}\n                  </div>\n                </Fragment>\n              )}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title={t(\"ui.storefront.userDashboard.availableOrders.PatientState\", \"Patient State\")}\n              binding=\"StateOfResidence.Code\"\n            />\n            <CVGrid.Column\n              title=\"Product\">\n              {rowData => (\n                <Fragment>\n                  {rowData.Products && rowData.Products.length > 0 ? (\n                    rowData.Products.map((product: ProductModel, index: number) => (\n                      <Fragment key={`product_${product.ID ?? index}`}>\n                        <span>{product.CustomKey}</span>\n                      </Fragment>\n                    ))\n                  ) : (\n                    <span>N/A</span>\n                  )}\n                </Fragment>\n              )}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Patient Availability\"\n              binding=\"TimeOfDay\" />\n            <CVGrid.Column\n              title=\"Patient Phone\"\n              binding=\"PreferredPhone\" />\n            <CVGrid.Column\n              title=\"Details\"\n              tdClass=\"w-1\"\n              hideHeader>\n              {(x: AvailableOrdersModel) => <ClaimButton order={x} onClick={onClaimButtonClicked} />}\n            </CVGrid.Column>\n            <CVGrid.Filter\n              title=\"Patient Name\"\n              type=\"string\"\n              filterProperty=\"ShippingContactName\" />\n            <CVGrid.Filter\n              title=\"Patient State\"\n              type=\"select\"\n              filterProperty=\"ShippingContactRegionID\"\n              options={regions}\n              optionKey=\"ID\"\n              optionTitle={ opt => opt.DisplayName ?? opt.Name ?? opt.CustomKey } />\n          </CVGrid>\n        </section>\n      </Col>\n    </Row>\n  );\n};\n\ninterface IClaimButtonProps {\n  order: AvailableOrdersModel;\n  onClick?: (order: AvailableOrdersModel) => any;\n}\n\nfunction ClaimButton(props: IClaimButtonProps): JSX.Element {\n  const { order, onClick } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <Button\n      variant=\"primary\"\n      data-sid={`btnOrdersClaim${order.SalesOrder.ID}`}\n      onClick={() => {\n        onClick(order);\n      }}>\n      {t(\"ui.storefront.common.Claim\", \"Claim\")}\n    </Button>\n  );\n}\n","import { useState } from \"react\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { BaseModel, GeneralAttributeModel, SerializableAttributesDictionary } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IAttributesFactory {\n  applyGeneralAttributesToEntity: <T extends BaseModel>(entity: T) => Promise<T>;\n  getGeneralAttributes: () => Promise<GeneralAttributeModel[]>;\n  getAttributesAsDictionary: () => Promise<SerializableAttributesDictionary>;\n}\n\nconst getGeneralAttributes = (force?: boolean): Promise<GeneralAttributeModel[]> => {\n  const promiserKey = \"getGeneralAttributes\";\n  if (force) {\n    promiser.flush(promiserKey);\n  }\n  return new Promise((resolve, reject) => {\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.attributes.GetGeneralAttributes({\n        Active: true,\n        AsListing: true\n      })\n    ).then(res => {\n      resolve(res.data.Results);\n    })\n      .catch(reject);\n  });\n};\n\nconst getAttributesAsDictionary = async (): Promise<SerializableAttributesDictionary> => {\n  const attributes = await getGeneralAttributes();\n  const predefinedAttrs = attributes.filter(x => x.IsPredefined);\n  const predefinedResArr = await Promise.all(\n    predefinedAttrs.map(a => cvApi.attributes.GetGeneralAttributePredefinedOptions({\n      Active: true,\n      AsListing: true,\n      AttributeID: a.ID\n    }))\n  );\n  predefinedAttrs.forEach((a, index) => {\n    for (let i = 0; i < attributes.length; i++) {\n      if (attributes[i].CustomKey === a.CustomKey) {\n        // @ts-ignore\n        attributes[i].PredefinedOptions = predefinedResArr[index].data.Results;\n        break;\n      }\n    }\n  });\n  return attributes.reduce((dictionary, attribute) => {\n    dictionary[attribute.CustomKey] = {\n      ID: attribute.ID,\n      Key: attribute.CustomKey,\n      SortOrder: null,\n      UofM: null,\n      Value: null\n    };\n    return dictionary;\n  }, {} as SerializableAttributesDictionary);\n};\n\nexport const useAttributesFactory = (): IAttributesFactory | null => {\n  const [ attributesFactory ] = useState<IAttributesFactory>({\n    applyGeneralAttributesToEntity: async <T extends BaseModel>(entity: T): Promise<T> => {\n      const attributesAsDictionary = await getAttributesAsDictionary();\n      entity.SerializableAttributes = attributesAsDictionary;\n      return entity;\n    },\n    getGeneralAttributes,\n    getAttributesAsDictionary\n  });\n\n  return attributesFactory;\n};\n","import { useEffect, useState } from \"react\";\nimport { ILotFormConfirmData } from \"src/_shared/interfaces/ILotFormConfirmData\";\nimport { LotModel, PackageModel, Paging, ProductModel, StatusModel, TypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { PagedResultsBase } from \"src/_api/cvApi.shared\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\nimport _ from \"lodash\";\nimport { useCurrentAccount } from \"src/_redux/slices/authSlice\";\nimport { useAttributesFactory } from \"src/_shared/customHooks/useAttributesFactory\";\n\ninterface ILotFactory {\n  applyDefaultStatusToLot: (\n    lot: LotModel,\n    statuses?: StatusModel[]\n  ) => Promise<LotModel>;\n  applyDefaultTypeToLot: (\n    lot: LotModel,\n    types?: TypeModel[]\n  ) => Promise<LotModel>;\n  applyLotFormDataToExistingProduct: (\n    data: ILotFormConfirmData,\n    product: ProductModel\n  ) => ProductModel;\n  assignProductsToLots: (lots: LotModel[]) => Promise<LotModel[]>;\n  convertLotFormDataToLotModel: (\n    data: ILotFormConfirmData,\n    lot?: LotModel,\n    product?: ProductModel\n  ) => LotModel;\n  convertLotFormDataToProductModel: (\n    data: ILotFormConfirmData,\n    product?: ProductModel\n  ) => ProductModel;\n  createLot: (data: ILotFormConfirmData) => Promise<number>;\n  getCategoriesByLotIDs: (lotIDs: number[], force?: boolean) => Promise<{[lotID: number]: string[]}>;\n  getCategoriesForLot: (lotID: number, force?: boolean) => Promise<string[]>;\n  getEndedLots: (paging?: Paging, force?: boolean) => Promise<PagedResultsBase<IDashboardTableData>>;\n  // getFeaturedLots: () => Promise<LotModel[]>;\n  getProductFromLotFormData: (data: ILotFormConfirmData) => Promise<ProductModel>;\n  getSellingLotsForCurrentUser: (paging?: Paging, force?: boolean) => Promise<PagedResultsBase<IDashboardTableData>>;\n  getLostLots: (paging?: Paging, force?: boolean) => Promise<PagedResultsBase<IDashboardTableData>>;\n  getLotByID: (\n    id: number,\n    withProduct?: boolean,\n    force?: boolean\n  ) => Promise<LotModel>;\n  getLotStatuses: (force?: boolean) => Promise<StatusModel[]>;\n  getLotTypes: (force?: boolean) => Promise<TypeModel[]>;\n  getSoldLots: (paging?: Paging, force?: boolean) => Promise<PagedResultsBase<IDashboardTableData>>;\n  getWonLots: (paging?: Paging, force?: boolean) => Promise<PagedResultsBase<IDashboardTableData>>;\n  updateLot: (\n    data: ILotFormConfirmData,\n    lot: LotModel,\n    product?: ProductModel\n  ) => Promise<boolean>;\n}\n\nexport const useLotFactory = (): ILotFactory => {\n  const [ auctionFactory, setLotFactory ] = useState<ILotFactory | null>(null);\n\n  const productFactory = useProductFactory();\n  const currentAccount = useCurrentAccount();\n  const attributesFactory = useAttributesFactory();\n\n  useEffect(() => {\n    if (!productFactory || !attributesFactory || currentAccount.Loading) {\n      return;\n    }\n    const factory: ILotFactory = {\n      applyDefaultStatusToLot: async (\n        lot: LotModel,\n        statuses?: StatusModel[]\n      ): Promise<LotModel> => {\n        const lotStatuses = statuses ?? await factory.getLotStatuses();\n        const openStatus = lotStatuses.find(x => x.Name.toLowerCase() === \"open\");\n        lot.Status = openStatus;\n        lot.StatusID = openStatus.ID;\n        lot.StatusKey = openStatus.CustomKey;\n        return lot;\n      },\n      applyDefaultTypeToLot: async (\n        lot: LotModel,\n        types?: TypeModel[]\n      ): Promise<LotModel> => {\n        const lotTypes = types ?? await factory.getLotTypes();\n        const generalType = lotTypes.find(x => x.Name.toLowerCase() === \"general\");\n        lot.Type = generalType;\n        lot.TypeID = generalType.ID;\n        lot.TypeKey = generalType.CustomKey;\n        return lot;\n      },\n      applyLotFormDataToExistingProduct: (\n        data: ILotFormConfirmData,\n        product: ProductModel\n      ): ProductModel => {\n        return {\n          ...product,\n          Categories: data.Categories.map((x: any) => {\n            return {\n              Active: true,\n              CreatedDate: new Date(),\n              ID: null,\n              MasterID: product.ID,\n              MasterKey: product.CustomKey,\n              Slave: x,\n              SlaveID: x.ID\n            };\n          }),\n          CustomKey: data.txtLotFormTitle,\n          Description: data.txtLotDescription,\n          Images: data.Images,\n          Name: data.txtLotFormTitle,\n          ShortDescription: data.txtLotDescription,\n        };\n      },\n      assignProductsToLots: async (lots: LotModel[]): Promise<LotModel[]> => {\n        if (!_.isArray(lots) || lots.some(x => !x.ProductID)) {\n          throw new Error(\"Invalid argument received for assigning products to lots\");\n        }\n        const products = await productFactory.getProductsByIDs(\n          lots.map(x => x.ProductID)\n        );\n        return lots.map((x, i) => ({\n          ...x,\n          Product: products[i]\n        }));\n      },\n      convertLotFormDataToLotModel: (\n        data: ILotFormConfirmData,\n        lot?: LotModel,\n        product?: ProductModel\n      ): LotModel => {\n        return {\n          Account: currentAccount,\n          AccountID: currentAccount?.ID,\n          Active: true,\n          BuyNowAvailable: Boolean(data.intLotFormBuyItNowPrice),\n          ClosesAt: null,\n          CreatedDate: new Date(),\n          CustomKey: data.txtLotFormTitle,\n          Description: data.txtLotDescription,\n          Fee: null,\n          Hash: null,\n          ID: lot?.ID ?? null,\n          Name: data.txtLotFormTitle,\n          OpensAt: null,\n          Product: product,\n          ProductID: product?.ID,\n          ProductKey: product?.CustomKey,\n          ProductName: product?.Name,\n          ReservePrice: data.intLotFormReservePrice ? parseFloat(data.intLotFormReservePrice) : null,\n          SerializableAttributes: lot?.SerializableAttributes,\n          StartingPrice: data.intLotFormStartingBid ? parseFloat(data.intLotFormStartingBid) : null,\n          Status: lot?.Status,\n          StatusID: lot?.Status?.ID,\n          StatusKey: lot?.Status?.CustomKey,\n          Type: lot?.Type,\n          TypeID: lot?.Type?.ID,\n          TypeKey: lot?.Type?.CustomKey\n        };\n      },\n      convertLotFormDataToProductModel: (data: ILotFormConfirmData): ProductModel => {\n        return {\n          Accounts: [],\n          Active: true,\n          AllowBackOrder: false,\n          AllowPreSale: false,\n          Categories: data.Categories.map(x => {\n            return {\n              Active: true,\n              CreatedDate: new Date(),\n              ID: null,\n              MasterID: null,\n              Slave: x,\n              SlaveID: x.ID\n            };\n          }),\n          CreatedDate: new Date(),\n          CustomKey: data.txtLotFormTitle,\n          DepthUnitOfMeasure: \"in\",\n          Description: data.txtLotDescription,\n          DocumentRequiredForPurchaseOverrideFeeIsPercent: false,\n          DropShipOnly: false,\n          FlatShippingCharge: null,\n          HeightUnitOfMeasure: \"in\",\n          ID: null,\n          Images: data.Images,\n          InCompareCart: false,\n          InFavoritesList: false,\n          InNotifyMeList: false,\n          InWishList: false,\n          IsDiscontinued: false,\n          IsEligibleForReturn: false,\n          IsFreeShipping: false,\n          IsShippingRestricted: false,\n          IsTaxable: true,\n          IsUnlimitedStock: false,\n          IsVisible: true,\n          KitBaseQuantityPriceMultiplier: 1,\n          Manufacturers: [],\n          MasterPack: {\n            ID: -2,\n            IsCustom: false,\n            IsDummy: true,\n            Name: \"No Master Pack\",\n            SortOrder: -1,\n            TypeKey: \"Master Pack\"\n          } as unknown as PackageModel,\n          MasterPackID: -2,\n          MustPurchaseInMultiplesOfAmountOverrideFeeIsPercent: false,\n          Name: data.txtLotFormTitle,\n          NothingToShip: false,\n          Package: {\n            Active: true,\n            CreatedDate: new Date(),\n            Depth: 1,\n            DepthUnitOfMeasure: \"in\",\n            DimensionalWeight: 1,\n            DimensionalWeightUnitOfMeasure: \"lbs\",\n            Height: 1,\n            HeightUnitOfMeasure: \"in\",\n            ID: null,\n            IsCustom: true,\n            Name: \"Custom Package for How products are made\",\n            TypeID: null,\n            TypeKey: \"Package\",\n            Weight: 1,\n            WeightUnitOfMeasure: \"lbs\",\n            Width: 1,\n            WidthUnitOfMeasure: \"in\"\n          },\n          PackageID: null,\n          Pallet: {\n            Active: true,\n            CreatedDate: null,\n            Depth: null,\n            Height: null,\n            ID: -3,\n            IsCustom: false,\n            // @ts-ignore, reflects how admin does it\n            IsDummy: true,\n            Name: \"No Pallet\",\n            SortOrder: -1,\n            TypeID: null,\n            TypeKey: \"Pallet\",\n            Weight: null,\n            Width: null\n          },\n          PalletID: -3,\n          ProductAssociations: [],\n          ProductCategories: [],\n          ProductDownloads: [],\n          ProductNotifications: [],\n          ProductRestrictions: [],\n          ProductSubscriptionTypes: [],\n          ProductType: null,\n          ProductTypeID: null,\n          ProductsAssociatedWith: [],\n          PurchaseableByCurrentUser: true,\n          QuantityLayersPerPallet: null,\n          QuantityMasterPackLayersPerPallet: null,\n          QuantityMasterPackPerLayer: null,\n          QuantityMasterPackPerPallet: null,\n          QuantityPerLayer: null,\n          QuantityPerMasterPack: null,\n          QuantityPerPallet: null,\n          RequiresRolesList: [],\n          RequiresRolesListAlt: [],\n          RestockingFeeAmount: null,\n          RestockingFeePercent: null,\n          SeoDescription: null,\n          SeoKeywords: null,\n          SeoMetaData: null,\n          SeoPageTitle: null,\n          SeoUrl: data.txtLotFormTitle.replace(/\\s/gu, \"-\"),\n          SerializableAttributes: null,\n          ShippingLeadTimeIsCalendarDays: false,\n          ShortDescription: data.txtLotDescription,\n          SortOrder: null,\n          Status: null,\n          StatusID: null,\n          StockQuantity: 0,\n          StockQuantityAllocated: null,\n          StoredFiles: [],\n          Stores: [],\n          Type: null,\n          TypeID: null,\n          UnitOfMeasure: \"ea\",\n          Vendors: [],\n          WeightUnitOfMeasure: \"oz\",\n          WidthUnitOfMeasure: \"in\",\n        };\n      },\n      createLot: async (data: ILotFormConfirmData): Promise<number> => {\n        const productFromForm = await factory.getProductFromLotFormData(data);\n        let lotFromForm = factory.convertLotFormDataToLotModel(\n          data,\n          null,\n          productFromForm\n        );\n        const lotDefaultsResArr = await Promise.all([\n          attributesFactory.getAttributesAsDictionary(),\n          factory.getLotStatuses(),\n          factory.getLotTypes()\n        ]);\n        const [ attributesAsDictionary, lotStatuses, lotTypes ] = lotDefaultsResArr;\n        lotFromForm.SerializableAttributes = attributesAsDictionary;\n        lotFromForm = await factory.applyDefaultStatusToLot(lotFromForm, lotStatuses);\n        lotFromForm = await factory.applyDefaultTypeToLot(lotFromForm, lotTypes);\n        const lotRes = await cvApi.auctions.CreateLotAsSeller(lotFromForm);\n        if (!lotRes?.data?.ActionSucceeded) {\n          throw new Error(\"Failed to create lot\");\n        }\n        if (data.intLotFormBuyItNowPrice) {\n          await cvApi.auctions.UpdateProductPricingAsSeller({\n            ProductID: lotRes.data.Result.ProductID,\n            PriceBase: parseFloat(data.intLotFormBuyItNowPrice)\n          });\n        }\n        return lotRes.data.Result.LotID;\n      },\n      getCategoriesByLotIDs: async (lotIDs: number[], force?: boolean): Promise<{[lotID: number]: string[]}> => {\n        const promiserKey = `lotFactory:getCategoriesByLotIDs${lotIDs.join(\"\")}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetLotCategories({ LotIDs: lotIDs })\n        );\n        return res.data.Result.reduce((categoryMap, categoriesData) => {\n          categoryMap[categoriesData.LotID] = categoriesData.Categories;\n          return categoryMap;\n        }, {} as {[lotID: number]: string[]});\n      },\n      getCategoriesForLot: async (lotID: number, force?: boolean): Promise<string[]> => {\n        const promiserKey = `lotFactory:getCategoriesForLot${lotID}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetLotCategories({ LotIDs: [ lotID ] })\n        );\n        return res.data.Result[0].Categories;\n      },\n      getEndedLots: async (paging?: Paging, force?: boolean) => {\n        let pagingToUse = paging;\n        if (_.isUndefined(pagingToUse)) {\n          pagingToUse = {\n            StartIndex: 1,\n            Size: 8\n          };\n        }\n        const promiserKey = `auctionFactory:getEndedLots${Object.values(pagingToUse).join(\"\")}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetSellerNoWinTableData({\n            Paging: pagingToUse\n          })\n        );\n        if (!res?.data?.Results) {\n          throw new Error(\"Failed to fetch ended lots\");\n        }\n        return res.data.Results as unknown as PagedResultsBase<IDashboardTableData>;\n      },\n      getProductFromLotFormData: async (data: ILotFormConfirmData): Promise<ProductModel> => {\n        let productFromForm = factory.convertLotFormDataToProductModel(data);\n        const productDefaultsResArr = await Promise.all([\n          attributesFactory.getAttributesAsDictionary(),\n          productFactory.getProductStatuses(),\n          productFactory.getProductTypes()\n        ]);\n        const [ attributesAsDictionary, productStatuses, productTypes ] = productDefaultsResArr;\n        productFromForm.SerializableAttributes = attributesAsDictionary;\n        productFromForm = await productFactory.applyDefaultStatusToProduct(productFromForm, productStatuses);\n        productFromForm = await productFactory.applyDefaultTypeToProduct(productFromForm, productTypes);\n        return productFromForm;\n      },\n      getLostLots: async (paging?: Paging, force?: boolean) => {\n        let pagingToUse = paging;\n        if (_.isUndefined(pagingToUse)) {\n          pagingToUse = {\n            StartIndex: 1,\n            Size: 8\n          };\n        }\n        const promiserKey = `auctionFactory:getLostLots${Object.values(pagingToUse).join(\"\")}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetBuyerLostTableData({\n            Paging: pagingToUse\n          })\n        );\n        if (!res?.data?.Results) {\n          throw new Error(\"Failed to fetch lost lots\");\n        }\n        return res.data.Results as unknown as PagedResultsBase<IDashboardTableData>;\n      },\n      getLotByID: async (\n        id: number,\n        withProduct?: boolean,\n        force?: boolean\n      ): Promise<LotModel> => {\n        const promiserKey = `lotFactory:getLotByID${id}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetLotByID(id)\n        );\n        let lot = res.data;\n        if (withProduct) {\n          [ lot ] = await factory.assignProductsToLots([ lot ]);\n        }\n        return lot;\n      },\n      getLotStatuses: async (force?: boolean): Promise<StatusModel[]> => {\n        const promiserKey = \"lotFactory:getLotStatuses\";\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const lotStatusesRes = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetLotStatuses({\n            Active: true,\n            AsListing: true\n          })\n        );\n        return lotStatusesRes.data.Results;\n      },\n      getLotTypes: async (force?: boolean): Promise<TypeModel[]> => {\n        const promiserKey = \"lotFactory:getLotTypes\";\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const lotTypesRes = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetLotTypes({\n            Active: true,\n            AsListing: true\n          })\n        );\n        return lotTypesRes.data.Results;\n      },\n      getSellingLotsForCurrentUser: async (\n        paging?: Paging,\n        force?: boolean\n      ): Promise<PagedResultsBase<IDashboardTableData>> => {\n        let pagingToUse = paging;\n        if (_.isUndefined(pagingToUse)) {\n          pagingToUse = {\n            StartIndex: 1,\n            Size: 8\n          };\n        }\n        const promiserKey = `auctionFactory:getSellingLotsForCurrentUser${Object.values(pagingToUse).join(\"\")}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetSellerAuctionsLiveTableData({\n            Paging: paging\n          })\n        );\n        if (!res?.data?.Results) {\n          throw new Error(\"Failed to fetch lots current user is selling\");\n        }\n        return res.data.Results as unknown as PagedResultsBase<IDashboardTableData>;\n      },\n      getSoldLots: async (paging?: Paging, force?: boolean) => {\n        let pagingToUse = paging;\n        if (_.isUndefined(pagingToUse)) {\n          pagingToUse = {\n            StartIndex: 1,\n            Size: 8\n          };\n        }\n        const promiserKey = `auctionFactory:getSoldLots${Object.values(pagingToUse).join(\"\")}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetSellerAuctionsSoldTableData({\n            Paging: pagingToUse\n          })\n        );\n        if (!res?.data?.Results) {\n          throw new Error(\"Failed to fetch sold lots\");\n        }\n        return res.data.Results as unknown as PagedResultsBase<IDashboardTableData>;\n      },\n      getWonLots: async (paging?: Paging, force?: boolean) => {\n        let pagingToUse = paging;\n        if (_.isUndefined(pagingToUse)) {\n          pagingToUse = {\n            StartIndex: 1,\n            Size: 8\n          };\n        }\n        const promiserKey = `auctionFactory:getWonLots${Object.values(pagingToUse).join(\"\")}`;\n        if (force) {\n          promiser.flush(promiserKey);\n        }\n        const res = await promiser.resolve(\n          promiserKey,\n          () => cvApi.auctions.GetBuyerWonTableData({\n            Paging: pagingToUse\n          })\n        );\n        if (!res?.data?.Results) {\n          throw new Error(\"Failed to fetch won lots\");\n        }\n        return res.data.Results as unknown as PagedResultsBase<IDashboardTableData>;\n      },\n      updateLot: async (\n        data: ILotFormConfirmData,\n        lot: LotModel\n      ): Promise<boolean> => {\n        const lotFromForm = await factory.convertLotFormDataToLotModel(\n          data,\n          lot,\n          lot.Product\n        );\n        const updatedProduct = factory.applyLotFormDataToExistingProduct(data, lot.Product);\n        lotFromForm.Product = updatedProduct;\n        await cvApi.auctions.UpdateLotAsSeller(lotFromForm);\n        return true;\n      },\n    };\n    setLotFactory(factory);\n  }, [ productFactory, attributesFactory, currentAccount ]);\n\n  return auctionFactory;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { CategoryModel } from \"src/_api/cvApi.shared\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IUseCategoriesData {\n  categories: CategoryModel[] | null;\n  useCategoriesViewState: IViewState;\n}\n\nexport const useCategories = (): IUseCategoriesData => {\n  const [ categories, setCategories ] = useState<CategoryModel[] | null>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const loadCategories = useCallback((): void => {\n    setRunning();\n    promiser.resolve(\n      \"loadCategories\",\n      () => cvApi.categories.GetCategoriesThreeLevels()\n    )\n      .then(res => {\n        setCategories(res.data);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }, []);\n\n  useEffect(() => {\n    loadCategories();\n  }, []);\n\n  return {\n    categories,\n    useCategoriesViewState: viewState\n  };\n};\n","export const isDisplayableImage = (filename: string): boolean => {\n  const imageExtensions = [ \".jpg\", \".jpeg\", \".png\", \".gif\", \".svg\" ];\n\n  const extension = filename.slice(filename.lastIndexOf(\".\")).toLowerCase();\n  return imageExtensions.includes(extension);\n};\n","import React, { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { IUploadResult } from \"src/_api/cvApi.shared\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport axios from \"src/axios\";\nimport { FileEntityType } from \"src/_api/cvApi._DtoClasses\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { isDisplayableImage } from \"src/_shared/common/imageHelperFunctions\";\n// TODO: import scssVariables from \"src/_meta/css/exposedToJSVariables.module.scss\";\n\n/* TODO:\nconst ProgressBar = (props: any) => {\n  const { percentage } = props;\n  if (!percentage) {\n    return null;\n  }\n  return (\n    <div\n      className=\"w-100 rounded bg-light mt-3 position-relative\"\n      style={{ height: \"5px\" }}>\n      <div\n        style={{\n          width: `${percentage}%`,\n          transition: \"width 1s\",\n          background: scssVariables.success,\n          height: \"100%\"\n        }}></div>\n    </div>\n  );\n};\n*/\n\ninterface IAuctionFileUploadWidgetProps {\n  limit?: number;\n  acceptableFileTypes?: Array<string>;\n  uploadCallback?: Function;\n  // Should be required\n  uploadType: FileEntityType;\n  hideUploadedFilesList?: boolean;\n  inputContainerClasses?: string;\n  imageKind?: keyof CEFConfig[\"images\"];\n}\n\nexport const AuctionFileUploadWidget = (props: IAuctionFileUploadWidgetProps): JSX.Element => {\n  const {\n    limit,\n    acceptableFileTypes,\n    uploadCallback,\n    uploadType,\n    hideUploadedFilesList,\n    inputContainerClasses,\n    imageKind\n  } = props;\n\n  const [ uploadedFiles, setUploadedFiles ] = useState<Array<IUploadResult>>([]);\n  const [ inputKey, setInputKey ] = useState<string>(\"\");\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  function handleFile(e: React.ChangeEvent<HTMLInputElement>) {\n    if (e.target.files.length === 0) {\n      return;\n    }\n    let willBeUploadedFiles: IUploadResult[] = [];\n    const temp:any = [];\n    Array.from(e.target.files).forEach(async file => {\n      try {\n        setRunning();\n        const formData = new FormData();\n        formData.append(\"EntityFileType\", String(uploadType));\n        formData.append(\"file\", file, file.name);\n        // Using a direct axios post since uploadFiles sends an empty body to API\n        const fileUploadResponse = await axios.post(\n          [ \"Media\", \"StoredFiles\", \"Upload\", \".json\" ].join(\"/\"),\n          formData\n        );\n        if (!fileUploadResponse?.data) {\n          finishRunning(true, \"Failed to upload\");\n          return;\n        }\n        const files : IUploadResult[] = fileUploadResponse.data.UploadFiles;\n        if (_.isUndefined(limit)) {\n          willBeUploadedFiles = [ ...(uploadedFiles?.length ? uploadedFiles : []), ...files ];\n        } else if (limit === 1) {\n          willBeUploadedFiles = [ ...files ];\n        } else {\n        // Place the new one in first slot\n        // Remove the last one of the existing\n          temp.push(...files);\n          willBeUploadedFiles = [ ...(temp?.length ? temp.slice(0, limit - 1) : []) ];\n        }\n        // TODO: match FormData with IUpload and IUploadResult types\n        setUploadedFiles(willBeUploadedFiles);\n        if (uploadCallback) {\n          uploadCallback(willBeUploadedFiles.map(x => x.FileName));\n        }\n        setInputKey(Math.random().toString(36));\n        finishRunning();\n      } catch (err: any) {\n        finishRunning(true, err);\n      }\n    });\n  }\n\n  return (\n    <div>\n      <div className={inputContainerClasses ?? \"bg-light border-1 my-2 p-3\"}>\n        <label htmlFor=\"fileUploadWidget\"\n          className={`btn btn-light border border-dark w-100 fw-bold ${\n            viewState.running ? \"disabled\" : \"\"\n          }`}>\n          {t(\"ui.storefront.common.controls.fileUploadWidget.ChooseFile\")}\n        </label>\n        <input\n          key={inputKey}\n          onChange={handleFile}\n          type=\"file\"\n          name=\"StoredFiles\"\n          multiple={Boolean(limit > 1 || !limit)}\n          accept={acceptableFileTypes?.join(\", \")}\n          id=\"fileUploadWidget\"\n          className=\"d-none\"\n          disabled={viewState.running}\n        />\n      </div>\n      {uploadedFiles.length && !hideUploadedFilesList\n        ? <ul className=\"bg-white border list-unstyled py-2 px-3\">\n          {uploadedFiles.map(file => {\n            const pathPieces = file.FilePath.split(\"\\\\\");\n            const name = pathPieces[pathPieces.length - 1];\n            return (\n              <li\n                className=\"d-flex align-items-center justify-content-between\"\n                key={file.FileName}>\n                <div>\n                  {isDisplayableImage(name) && <ImageWithFallback\n                    src={name}\n                    className=\"me-2\"\n                    style={{ width: 150 }}\n                    imageResizerParamsBody={{\n                      pad: \"both\",\n                      scale: \"both\"\n                    }}\n                    kind={imageKind ?? \"users\"}\n                  />}\n                  <span>{name}</span>\n                </div>\n                <Button variant=\"none\"\n                  onClick={() => {\n                    setUploadedFiles(prevUploadedFiles => prevUploadedFiles.filter(x => x.FileName !== file.FileName));\n                    if (_.isFunction(uploadCallback)) {\n                      uploadCallback(uploadedFiles.filter(x => x.FileName !== file.FileName).map(x => x.FileName));\n                    }\n                  }}>\n                  <i className=\"fal fa-fw fa-trash text-danger\" />\n                </Button>\n              </li>\n            );\n          })}\n        </ul>\n        : null}\n    </div>\n  );\n};\n\nAuctionFileUploadWidget.defaultProps = {\n  allowMultiple: false,\n  acceptableFileTypes: [ \".jpg\", \".png\", \".docx\", \".pdf\" ]\n};\n","import { ExtendedProductImageModel } from \"../forms/LotForm\";\n\nexport const productImagesMatch = (\n  productImageOne: ExtendedProductImageModel,\n  productImageTwo: ExtendedProductImageModel\n): boolean => {\n  if (productImageOne.internalTrackingGUID\n    && productImageTwo.internalTrackingGUID\n    && productImageOne.internalTrackingGUID === productImageTwo.internalTrackingGUID) {\n    return true;\n  }\n  if (productImageOne.ID\n    && productImageTwo.ID\n    && productImageOne.ID === productImageTwo.ID) {\n    return true;\n  }\n  return false;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { Alert, Button, Col, Form, InputGroup, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { FileEntityType, LotModel, ProductImageModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCategories } from \"src/_shared/customHooks/useCategories\";\nimport {\n  SelectFormGroup,\n  TextAreaFormGroup,\n  TextInputFormGroup\n} from \"src/_shared/forms/formGroups\";\nimport { CheckboxFormGroup } from \"./formGroups/CheckboxFormGroup\";\nimport { ILotFormConfirmData } from \"src/_shared/interfaces/ILotFormConfirmData\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\nimport { AuctionFileUploadWidget } from \"src/_shared/common/AuctionFileUploadWidget\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { isDisplayableImage } from \"src/_shared/common/imageHelperFunctions\";\nimport { Guid } from \"src/_api/cvApi.shared\";\nimport { productImagesMatch } from \"src/_shared/common/productImageHelperFunctions\";\n\nexport interface ExtendedProductImageModel extends ProductImageModel {\n  willRemove?: boolean;\n  internalTrackingGUID?: string;\n}\n\ninterface ILotFormProps {\n  lot?: LotModel;\n  onConfirm: (formData: ILotFormConfirmData) => void;\n  onFieldChanged?: () => void;\n}\n\nexport const LotForm = (props: ILotFormProps): JSX.Element => {\n  const { lot, onConfirm, onFieldChanged } = props;\n\n  const [ uploadedImages, setUploadedImages ] = useState<\n    Array<ExtendedProductImageModel>\n  >(lot?.Product?.Images);\n  const [ lotCanBeEdited, setLotCanBeEdited ] = useState<boolean>(true);\n\n  const { t } = useTranslation();\n  const { categories, useCategoriesViewState } = useCategories();\n\n  const {\n    formState,\n    getValues,\n    handleSubmit,\n    register,\n    setValue,\n    trigger,\n    watch\n  } = useForm<ILotFormConfirmData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\",\n  });\n\n  const duration = watch(\"txtLotFormDuration\");\n\n  const onValueChanged = () => {\n    if (_.isFunction(onFieldChanged)) {\n      onFieldChanged();\n    }\n  };\n\n  const assignFormValuesFromLot = useCallback((): void => {\n    if (lot.StatusName.toLowerCase() !== \"open\") {\n      setLotCanBeEdited(false);\n      return;\n    }\n    const { Description, Name, Product, ReservePrice, StartingPrice, SerializableAttributes } = lot;\n    const { readPrices, Categories } = Product;\n    const productPrices = readPrices();\n    setValue(\"txtLotFormTitle\", Name);\n    setValue(\"txtLotDescription\", Description);\n    if (productPrices) {\n      setValue(\n        \"intLotFormBuyItNowPrice\",\n        productPrices.base.toString()\n      );\n    }\n    setValue(\n      \"txtLotFormDuration\",\n      SerializableAttributes?.AuctionDuration?.Value ?? \"1\"\n    );\n    setValue(\"intLotFormStartingBid\", StartingPrice.toString());\n    if (ReservePrice) {\n      setValue(\"intLotFormReservePrice\", ReservePrice.toString());\n    }\n    categories.forEach(c => {\n      setValue(\n        `ckLotFormCategory_${c.ID}`,\n        Categories?.some(x => x.SlaveID === c.ID) ?? false\n      );\n    });\n    setUploadedImages(Product.Images);\n  }, [ lot, categories ]);\n\n  useEffect(() => {\n    if (lot && categories) {\n      assignFormValuesFromLot();\n    }\n  }, [ lot, categories ]);\n\n  const markImageForRemoval = (productImage: ExtendedProductImageModel): void => {\n    setUploadedImages(uploadedImages.map(x => {\n      if (productImagesMatch(productImage, x)) {\n        x.willRemove = true;\n      }\n      return x;\n    }));\n  };\n\n  const undoImageMarkedForRemoval = (productImage: ExtendedProductImageModel): void => {\n    setUploadedImages(uploadedImages.map(x => {\n      if (productImagesMatch(productImage, x)) {\n        x.willRemove = false;\n      }\n      return x;\n    }));\n  };\n\n  const onImageUploaded = useCallback((data: string[]): void => {\n    setUploadedImages([\n      ...(uploadedImages ?? []),\n      ...data.map(fileName => {\n        return {\n          Active: true,\n          CreatedDate: new Date(),\n          ID: 0,\n          IsPrimary: true,\n          Name: fileName,\n          OriginalFileName: fileName,\n          OriginalIsStoredInDB: false,\n          ThumbnailIsStoredInDB: false,\n          TypeID: 1,\n          TypeKey: \"General\",\n          internalTrackingGUID: Guid.newGuid()\n        };\n      })\n    ]);\n  }, [ uploadedImages ]);\n\n  const onFormSubmitted = useCallback((data: ILotFormConfirmData): void => {\n    onConfirm({\n      ...data,\n      Categories: Object.entries(data)\n        .filter(([ formKey, selected ]) => formKey.startsWith(\"ckLotFormCategory\") && selected)\n        .map(([ formKey, _selected ]) => {\n          // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\n          const [ _startWithKey, IDAsString ] = formKey.split(\"_\");\n          return categories.find(c => c.ID === parseInt(IDAsString));\n        }),\n      Images: uploadedImages ? uploadedImages.filter(x => !x.willRemove) : null,\n    });\n  }, [ onConfirm, categories, uploadedImages ]);\n\n  if (!lotCanBeEdited) {\n    return <Row>\n      <Col xs={12}>\n        <Alert variant=\"warning\">\n          Only lots with an open status can be edited.\n        </Alert>\n      </Col>\n    </Row>;\n  }\n\n  return <Row as={Form}\n    className=\"position-relative\"\n    onSubmit={handleSubmit(onFormSubmitted)}>\n    {useCategoriesViewState.running && <LoadingWidget overlay={true} />}\n    <Col xs={12}>\n      <Row>\n        <Col xs={12}>\n          <TextInputFormGroup\n            register={register}\n            formIdentifier=\"txtLotFormTitle\"\n            errors={formState.errors}\n            required={true}\n            labelKey=\"ui.storefront.common.Title\"\n            placeholderKey=\"ui.storefront.common.Title\"\n            maxLength={128}\n            extraOnChange={() => {\n              onValueChanged();\n            }}\n          />\n          <hr />\n        </Col>\n        <Col xs={12}>\n          <TextAreaFormGroup\n            formIdentifier=\"txtLotDescription\"\n            labelKey=\"ui.storefront.common.Description\"\n            errors={formState.errors}\n            register={register}\n            required={true}\n            extraOnChange={() => {\n              onValueChanged();\n            }}\n          />\n          <hr />\n        </Col>\n        <input\n          hidden={true}\n          type=\"checkbox\"\n          {...register(\n            \"ckLotFormCategoriesHidden\",\n            {\n              validate: {\n                atLeastOneSelected: () => {\n                  const formValues = getValues();\n                  const selectedCats = Object.entries(formValues)\n                    .filter(([ key, value ]) => key.startsWith(\"ckLotFormCategory\") && value);\n                  if (selectedCats?.length) {\n                    return true;\n                  }\n                  return t(\"ui.storefront.forms.LotForm.Categories.MustSelectOne\");\n                }\n              }\n            }\n          )}\n        />\n        {categories && <Col xs={12}>\n          <CheckboxFormGroup\n            formIdentifier=\"ckLotFormCategories\"\n            labelKey=\"ui.storefront.common.Category.Plural\"\n            register={register}\n            errors={formState.errors}\n            extraOnChange={() => {\n              trigger(\"ckLotFormCategoriesHidden\");\n            }}\n            checkboxOptions={\n              categories.map(c => {\n                return {\n                  identifier: `ckLotFormCategory_${c.ID}`,\n                  labelKey: c.DisplayName ?? c.Name,\n                  required: false,\n                  onOptionToggled: () => {\n                    onValueChanged();\n                  }\n                };\n              })\n            }\n          />\n          {formState.errors.ckLotFormCategoriesHidden && <InputGroup.Text className=\"text-start text-wrap\" role=\"alert\">\n            <span className=\"text-danger\">\n              {formState.errors.ckLotFormCategoriesHidden.message}\n            </span>\n          </InputGroup.Text>}\n          <hr />\n        </Col>}\n        <Col xs={12} className=\"d-flex flex-column justify-content-end\">\n          <SelectFormGroup\n            register={register}\n            errors={formState.errors}\n            labelKey=\"ui.storefront.common.Duration\"\n            formIdentifier=\"txtLotFormDuration\"\n            options={\n              [\n                {\n                  option: \"1 Day\",\n                  value: \"1\"\n                },\n                {\n                  option: \"3 Days\",\n                  value: \"3\"\n                },\n                {\n                  option: \"5 Days\",\n                  value: \"5\"\n                },\n                {\n                  option: \"7 Days\",\n                  value: \"7\"\n                },\n                {\n                  option: \"10 Days\",\n                  value: \"10\"\n                },\n                {\n                  option: \"30 Days\",\n                  value: \"30\"\n                }\n              ]\n            }\n            watchOption={duration ? {\n              option: `${duration} Days`,\n              value: duration\n            } : null}\n            disabled={Boolean(lot)}\n            extraOnChange={() => {\n              onValueChanged();\n            }}\n          />\n        </Col>\n        <Col xs={12}>\n          <FormGroupLabel\n            label={t(\"ui.storefront.common.Bidding\")}\n            formIdentifier=\"null\"\n            required={false}\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"intLotFormStartingBid\"\n            labelKey=\"ui.storefront.forms.LotForm.StartingBid\"\n            required={true}\n            disabled={Boolean(lot)}\n            extraOnChange={() => {\n              onValueChanged();\n            }}\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"intLotFormBuyItNowPrice\"\n            labelKey=\"ui.storefront.forms.LotForm.BuyItNowPrice\"\n            disabled={Boolean(lot)}\n            extraOnChange={() => {\n              onValueChanged();\n            }}\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"intLotFormReservePrice\"\n            labelKey=\"ui.storefront.forms.LotForm.ReservePrice\"\n            disabled={Boolean(lot)}\n            extraOnChange={() => {\n              onValueChanged();\n            }}\n          />\n        </Col>\n        <Col xs={12}>\n          <div>\n            <FormGroupLabel\n              label={t(\"ui.storefront.common.Pictures\")}\n              formIdentifier=\"null\"\n              required={false}\n            />\n            <span className=\"d-block small\">\n              {t(\"ui.storefront.forms.LotForm.ImagesCannotExceed\")} 3MB\n            </span>\n          </div>\n          <AuctionFileUploadWidget\n            limit={1}\n            uploadType={FileEntityType.ImageProduct}\n            uploadCallback={(newFileNames: string[]) => {\n              onImageUploaded(newFileNames);\n              onValueChanged();\n            }}\n            imageKind=\"products\"\n          />\n          {Boolean(uploadedImages?.length) && <ul className=\"ps-0\">\n            {uploadedImages\n              .filter(x => x.ID)\n              .map(productImage => {\n                return <li\n                  className=\"d-flex align-items-center justify-content-between\"\n                  key={productImage.OriginalFileName}>\n                  <div>\n                    {isDisplayableImage(productImage.OriginalFileName) && <ImageWithFallback\n                      src={productImage.OriginalFileName}\n                      className=\"me-2\"\n                      style={{ width: 150 }}\n                      imageResizerParamsBody={{\n                        pad: \"both\",\n                        scale: \"both\"\n                      }}\n                    />}\n                    <span>{productImage.OriginalFileName}</span>\n                  </div>\n                  {productImage.willRemove\n                    ? <div className=\"d-flex align-items-center\">\n                      <span className=\"o-60 text-danger\">Save to Remove</span>\n                      <Button variant=\"none\"\n                        onClick={() => {\n                          undoImageMarkedForRemoval(productImage);\n                          onValueChanged();\n                        }}>\n                        {t(\"ui.storefront.common.Undo\")}\n                      </Button>\n                    </div>\n                    : <Button variant=\"none\"\n                      onClick={() => {\n                        markImageForRemoval(productImage);\n                        onValueChanged();\n                      }}>\n                      <i className=\"fal fa-fw fa-trash text-danger\" />\n                    </Button>}\n                </li>;\n              })}\n          </ul>}\n        </Col>\n      </Row>\n    </Col>\n    <Col xs={12}>\n      <div className=\"d-flex justify-content-center my-3\">\n        <Button\n          variant=\"secondary\"\n          type=\"submit\"\n          id=\"btnAddLot\"\n          name=\"btnAddLot\"\n          disabled={!formState.isValid}>\n          {t(\n            lot\n              ? \"ui.storefront.auction.SaveAuction\"\n              : \"ui.storefront.auction.AddAuction\"\n          )}\n        </Button>\n      </div>\n    </Col>\n  </Row>;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { Alert, Card, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useParams } from \"react-router\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useLotFactory } from \"src/_shared/customHooks/useLotFactory\";\nimport { LotForm } from \"src/_shared/forms/LotForm\";\nimport { ILotFormConfirmData } from \"src/_shared/interfaces/ILotFormConfirmData\";\nimport { LotModel, ProductCategoryModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCategories } from \"src/_shared/customHooks/useCategories\";\n\nexport const EditLot = (): JSX.Element => {\n  const [ lot, setLot ] = useState<LotModel>(null);\n  const [ saveSuccessful, setSaveSuccessful ] = useState<boolean>(false);\n\n  const { lotID } = useParams<{ lotID: string; }>();\n  const { categories, useCategoriesViewState } = useCategories();\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const lotFactory = useLotFactory();\n\n  const fetchLot = useCallback(() => {\n    setRunning();\n    let willBeLot: LotModel | null = null;\n    lotFactory.getLotByID(parseInt(lotID), true, true)\n      .then(res => {\n        willBeLot = res;\n        return lotFactory.getCategoriesForLot(res.ID);\n      })\n      .then(cats => {\n        willBeLot.Product.Categories = cats.reduce((productCatsArr, catString) => {\n          const [ Name, ] = catString.split(\"|\");\n          const relevantCategory = categories.find(x => x.Name === Name);\n          if (relevantCategory) {\n            productCatsArr.push({\n              Active: true,\n              CreatedDate: new Date(),\n              ID: null,\n              MasterID: willBeLot.Product.ID,\n              MasterKey: willBeLot.Product.CustomKey,\n              Slave: relevantCategory,\n              SlaveID: relevantCategory.ID,\n            });\n          }\n          return productCatsArr;\n        }, [] as ProductCategoryModel[]);\n        setLot(willBeLot);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }, [ lotFactory, lotID, categories ]);\n\n  const saveLotUpdates = useCallback((data: ILotFormConfirmData): void => {\n    setRunning();\n    lotFactory.updateLot(data, lot)\n      .then(() => {\n        setSaveSuccessful(true);\n        fetchLot();\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }, [ lotFactory, lot ]);\n\n  useEffect(() => {\n    if (lotFactory && categories?.length) {\n      fetchLot();\n    }\n  }, [ lotFactory, categories ]);\n\n  return <Row>\n    <Col xs={12}>\n      <h1 className=\"text-primary text-center\">\n        {t(\"ui.storefront.auction.EditAuction\")}\n      </h1>\n      {viewState.hasError && <ErrorView viewState={viewState} />}\n    </Col>\n    <Col xs={12} className=\"position-relative\">\n      {(viewState.running || useCategoriesViewState.running) && <LoadingWidget overlay={true} />}\n      <Card className=\"bg-white p-5\">\n        {saveSuccessful && <Alert variant=\"success\">\n          {t(\"ui.storefront.userDashboard2.controls.userProfile.SaveSuccessful\")}\n        </Alert>}\n        {lot && <LotForm\n          lot={lot}\n          onConfirm={saveLotUpdates}\n          onFieldChanged={() => {\n            if (saveSuccessful) {\n              setSaveSuccessful(false);\n            }\n          }}\n        />}\n      </Card>\n    </Col>\n  </Row>;\n};\n","/* eslint-disable max-len */\nimport { useEffect, useState } from \"react\";\nimport { format, subYears } from \"date-fns\";\nimport { Controller, SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { DateInputFormGroup, PasswordInputFormGroup, SelectFormGroup } from \"src/_shared/forms/formGroups\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useRegions } from \"src/_redux/slices/geographySlice\";\nimport { TextInputFormGroup } from \"../../_shared/forms/formGroups/TextInputFormGroup\";\nimport { DashboardTabHeading } from \"src/Dashboard/_shared/DashboardTabHeading\";\nimport { PatternFormat } from \"react-number-format\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\n\nconst genderOptions = [\n  { option: \"Male\", value: \"Male\" },\n  { option: \"Female\", value: \"Female\" }\n];\n\ninterface IMyProfilePatientDataEntry {\n  dateDateOfBirth: string;\n  txtProfileDisplayName: string;\n  txtProfileEmail: string;\n  txtProfileFirstName: string;\n  txtProfileLastName: string;\n  txtProfilePasswordCurrent: string;\n  txtProfilePasswordNew: string;\n  txtProfilePhone1: string;\n  txtPatientHeightFt: string;\n  txtPatientHeightIn: string;\n  txtPatientWeight: string;\n  txtPatientGender: string;\n  txtPatientState: string;\n}\n\nexport const MyProfilePatient = (): JSX.Element => {\n  const [ userName, setUserName ] = useState<string>(\"\");\n  const [ showSavedMessage, setShowSavedMessage ] = useState(false);\n  const [ doNotValidate, setDoNotValidate ] = useState(false);\n  const currentUser = useCurrentUser();\n  const authFactory = useAuthFactory();\n  const cart = useCart(\"Cart\");\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { register, handleSubmit, setValue, formState, control, trigger } = useForm<IMyProfilePatientDataEntry>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n  const { t } = useTranslation();\n  const regions = useRegions();\n\n  const eighteenYearsAgo = format(subYears(new Date(), 18), \"yyyy-MM-dd\");\n\n  const dateToDefaultValue = (date: string | Date): string => {\n    if (!date) {\n      return undefined;\n    }\n    // react-hook-form doesn't accept a Date object, nor a date ISO string as a default value\n    // instead the default value has to be YYYY-MM-DD...so this is a hack to make it so\n    if (typeof date === \"string\") {\n      return new Date(date).toISOString()\n        .substring(0, 10);\n    }\n    return date.toISOString().substring(0, 10);\n  };\n\n  useEffect(() => {\n    cart && !cart?.SalesItems ? setDoNotValidate(true) : setDoNotValidate(false);\n  }, [ cart ]);\n\n  useEffect(() => {\n    if (currentUser.ID > 0) {\n      const { DisplayName, UserName, DateOfBirth, Gender, HeightFeet, HeightInches, Weight, StateOfResidenceName, Email } = currentUser;\n      const { FirstName, LastName, FullName, Phone1 } = currentUser.Contact;\n      if (FirstName && LastName) {\n        setValue(\"txtProfileFirstName\", FirstName);\n        setValue(\"txtProfileLastName\", LastName);\n      } else {\n        const nameSegments = FullName.split(\" \");\n        setValue(\"txtProfileFirstName\", nameSegments[0]);\n        setValue(\"txtProfileLastName\", nameSegments[nameSegments.length - 1]);\n      }\n      setValue(\"txtProfileEmail\", Email);\n      setValue(\"txtProfilePhone1\", Phone1);\n      setValue(\"txtProfileDisplayName\", DisplayName);\n      setValue(\"txtPatientHeightFt\", HeightFeet?.toString());\n      setValue(\"txtPatientHeightIn\", HeightInches?.toString());\n      setValue(\"txtPatientWeight\", Weight?.toString());\n      setValue(\"txtPatientGender\", Gender);\n      setValue(\"txtPatientState\", StateOfResidenceName?.toString());\n      setValue(\"dateDateOfBirth\", DateOfBirth ? dateToDefaultValue(DateOfBirth) : \"\");\n      setUserName(UserName);\n    }\n  }, [ currentUser ]);\n\n  useEffect(() => {\n    const onValidation = async () => {\n      if (currentUser.ID > 0) {\n        await trigger();\n      }\n    };\n    onValidation();\n  }, [ currentUser ]);\n\n  const handleSaveButtonClicked: SubmitHandler<IMyProfilePatientDataEntry> = async (data): Promise<void> => {\n    setRunning();\n    const {\n      dateDateOfBirth,\n      txtProfileDisplayName,\n      txtProfileEmail,\n      txtProfileFirstName,\n      txtProfileLastName,\n      txtProfilePasswordCurrent,\n      txtProfilePasswordNew,\n      txtProfilePhone1,\n      txtPatientHeightFt,\n      txtPatientHeightIn,\n      txtPatientWeight,\n      txtPatientGender,\n      txtPatientState\n    } = data;\n    let state = regions?.find(region => region.CustomKey === txtPatientState);\n    if (!state) {\n      state = regions?.find(region => region.ID === Number(txtPatientState));\n    }\n    try {\n      // Validate if the email is unique\n      if (currentUser.Email !== txtProfileEmail) {\n        const emailValidationResult = await cvApi.authentication.ValidateEmailIsUnique({ Email: txtProfileEmail });\n        // If email is not unique, stop execution and return\n        if (!emailValidationResult?.data?.ActionSucceeded) {\n          finishRunning(true, \"Email must be unique\");\n          return;\n        }\n      }\n      // Validate current password\n      const passwordValidationResult = await cvApi.authentication.ValidatePassword({\n        UserName: userName,\n        Password: txtProfilePasswordCurrent\n      });\n      // If password validation fails, throw an error to handle it in the catch block\n      if (!passwordValidationResult?.data?.ActionSucceeded) {\n        finishRunning(true, \"Password is invalid\");\n        return;\n      }\n      // If there is a new password, change it\n      if (txtProfilePasswordNew.length) {\n        await cvApi.authentication.ChangePassword({\n          UserName: userName,\n          Password: txtProfilePasswordCurrent,\n          NewPassword: txtProfilePasswordNew\n        });\n      }\n\n      // Update current user with the new profile information\n      await authFactory.updateCurrentUser({\n        ...currentUser,\n        DisplayName: txtProfileDisplayName,\n        UserName: txtProfileEmail,\n        Email: txtProfileEmail,\n        Contact: {\n          ...currentUser.Contact,\n          Email1: txtProfileEmail,\n          FirstName: txtProfileFirstName,\n          LastName: txtProfileLastName,\n          Phone1: txtProfilePhone1\n        },\n        DateOfBirth: new Date(dateDateOfBirth),\n        Gender: txtPatientGender,\n        HeightFeet: Number(txtPatientHeightFt),\n        HeightInches: Number(txtPatientHeightIn),\n        Weight: Number(txtPatientWeight),\n        StateOfResidence: {\n          Active: true,\n          Code: state?.Code,\n          CountryCode: state?.CountryCode,\n          CountryID: state?.CountryID,\n          CountryKey: state?.CountryKey,\n          CountryName: state?.CountryName,\n          CreatedDate: state?.CreatedDate,\n          CustomKey: state?.CustomKey,\n          ID: state?.ID,\n          Name: state?.Name\n        },\n        StateOfResidenceCode: state?.Code,\n        StateOfResidenceID: state?.ID,\n        StateOfResidenceKey: state?.CustomKey,\n        StateOfResidenceName: state?.Name\n      });\n      // Show the success message and reset fields\n      setShowSavedMessage(true);\n      setValue(\"txtProfilePasswordCurrent\", \"\");\n      setValue(\"txtProfilePasswordNew\", \"\");\n      finishRunning();\n    } catch (err) {\n      // Handle errors and stop the running state\n      finishRunning(true, \"There has been an error, please try again\");\n    }\n  };\n  const numberInputOnly = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const inputValue = e.target.value;\n    function extractNumbers(str: string) {\n      // @ts-ignore\n      return str.replace(/\\D/gu, \"\");\n    }\n    if (isNaN(Number(inputValue))) {\n      e.target.value = extractNumbers(inputValue);\n    }\n  };\n\n  const regionOptions = regions?.map(region => ({\n    option: region.Name,\n    value: region.Name\n  }));\n\n  return (\n    <Row\n      as={Form}\n      className=\"position-relative\">\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <Col xs=\"12\">\n        <DashboardTabHeading\n          title={t(\"ui.storefront.userDashboard2.userDashboard.MyProfile\", \"My Profile\")}\n          iconString=\"fal fa-id-card\"\n        />\n      </Col>\n      <Col\n        xs={12}\n        sm={6}>\n        <Row>\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtProfileFirstName\"\n            formClasses=\"col-6 mb-3\"\n            labelKey=\"ui.storefront.common.FirstName\"\n            required={true}\n            hideRequired={true}\n            hideInvalidTooltip={true}\n            maxLength={128}\n            placeholderKey=\"ui.storefront.common.FirstName\"\n            disabled={currentUser.Contact.FirstName !== \"\"}\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtProfileLastName\"\n            formClasses=\"col-6 mb-3\"\n            labelKey=\"ui.storefront.common.LastName\"\n            required={true}\n            hideRequired={true}\n            hideInvalidTooltip={true}\n            maxLength={128}\n            placeholderKey=\"ui.storefront.common.LastName\"\n            disabled={currentUser.Contact.LastName !== \"\"}\n          />\n        </Row>\n        <Row>\n          <Form.Group className=\"col-6 mb-3\" controlId=\"phoneNumber\">\n            <Form.Label>Phone Number</Form.Label>\n            <Controller\n              name=\"txtProfilePhone1\"\n              control={control}\n              defaultValue=\"\"\n              render={({ field: { onChange, value, ref } }) => (\n                <PatternFormat\n                  format=\"###-###-####\"\n                  value={value}\n                  onValueChange={(values) => onChange(values.formattedValue)}\n                  getInputRef={ref}\n                  placeholder=\"Enter phone number\"\n                  className={`form-control ${formState.errors.txtProfilePhone1 ? \"is-invalid\" : \"\"}`}\n                />\n              )}\n            />\n            {formState.errors.txtProfilePhone1 && (\n              <Form.Text className=\"text-danger\">\n                {formState.errors.txtProfilePhone1.message}\n              </Form.Text>\n            )}\n          </Form.Group>\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtProfileEmail\"\n            formClasses=\"col-6 mb-3\"\n            labelKey=\"ui.storefront.common.Email\"\n            isEmail={true}\n          />\n        </Row>\n        <Row>\n          <DateInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"dateDateOfBirth\"\n            formClasses=\"col-12 mb-3\"\n            labelText={t(\"ui.storefront.storeDashboard.storeProductEditor.DateOfBirth\", \"Date of Birth\")}\n            placeholderText=\"MM/DD/YYYY\"\n            max={eighteenYearsAgo}\n            maxMessage={\"Must be 18 years old.\"}\n          />\n        </Row>\n        <Row className=\"mt-2\">\n          <Col\n            xs={6}\n            className=\"mb-3\">\n            <Row>\n              <Col xs={6}>\n                <TextInputFormGroup\n                  register={register}\n                  inputMode=\"numeric\"\n                  errors={formState.errors}\n                  required={true}\n                  hideRequired={true}\n                  hideInvalidTooltip={true}\n                  formIdentifier=\"txtPatientHeightFt\"\n                  labelKey=\"ui.storefront.storeDashboard.storeProductEditor.Height\"\n                  unitLabel={t(\"ui.storefront.common.Feet\", \"feet\").toLowerCase()}\n                  placeholderKey=\"0\"\n                  extraOnChange={numberInputOnly}\n                />\n              </Col>\n              <Col xs={6}>\n                <TextInputFormGroup\n                  register={register}\n                  errors={formState.errors}\n                  inputMode=\"numeric\"\n                  required={true}\n                  hideRequired={true}\n                  hideInvalidTooltip={true}\n                  formIdentifier=\"txtPatientHeightIn\"\n                  unitLabel={t(\"ui.storefront.common.Inches\", \"inches\").toLowerCase()}\n                  placeholderKey=\"0\"\n                  extraOnChange={numberInputOnly}\n                />\n              </Col>\n            </Row>\n          </Col>\n          <Col\n            xs={3}\n            className=\"mb-3\">\n            <TextInputFormGroup\n              register={register}\n              errors={formState.errors}\n              required={true}\n              hideRequired={true}\n              hideInvalidTooltip={true}\n              formIdentifier=\"txtPatientWeight\"\n              inputMode=\"decimal\"\n              placeholderKey=\"0\"\n              labelText={t(\"ui.storefront.storeDashboard.storeProductEditor.Weight\", \"Weight\")}\n              unitLabel={t(\"ui.storefront.common.Weight.Abbr\", \"lbs\").toLowerCase()}\n              extraOnChange={numberInputOnly}\n            />\n          </Col>\n          <Col xs={3} />\n        </Row>\n        <Row>\n          <SelectFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtPatientGender\"\n            formClasses=\"col-6 mb-3\"\n            required={true}\n            hideRequired={true}\n            hideInvalidTooltip={true}\n            labelText={t(\"ui.storefront.medical.Sex\", \"Sex\")}\n            includeNull={true}\n            nullKey=\"ui.storefront.common.Select\"\n            initialOption={genderOptions?.find(option => option.value === currentUser.Gender)}\n            options={genderOptions}\n          />\n          {regions?.length > 0 && (\n            <SelectFormGroup\n              formIdentifier=\"txtPatientState\"\n              dataSid=\"ddlRegionIDRegistrationAddressBook\"\n              formClasses=\"col-6 mb-3\"\n              errors={formState.errors}\n              register={register}\n              required={true}\n              hideRequired={true}\n              hideInvalidTooltip={true}\n              initialOption={regionOptions?.find(option => option.value === currentUser.StateOfResidenceName)}\n              options={regionOptions}\n              labelKey=\"ui.storefront.common.StateOfResidence\"\n              labelText=\"State of Residence\"\n              includeNull={true}\n              nullText=\"Select a State\"\n              nullKey=\"ui.storefront.common.geography.State.SelectA\"\n              doNotValidate={doNotValidate}\n            />\n          )}\n        </Row>\n      </Col>\n      <Col xs=\"12\">\n        <hr className=\"w-100 mt-0 my-3\" />\n      </Col>\n      <Col md=\"6\">\n        <Row>\n          <PasswordInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtProfilePasswordCurrent\"\n            formClasses=\"col-12 mb-3\"\n            labelKey=\"ui.storefront.userDashboard2.controls.userProfile.CurrentPasswordRequiredForProfileChanges\"\n            required={true}\n            hideInvalidTooltip={true}\n            tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\n            placeholderKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourCurrentPassword\"\n            suppressRequirements={true}\n          />\n          <PasswordInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtProfilePasswordNew\"\n            formClasses=\"col-12 mb-3\"\n            labelKey=\"ui.storefront.userDashboard2.controls.userProfile.OptionallySetANewPassword\"\n            tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\n            placeholderKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourNewPassword\"\n            minLength={7}\n            required={false}\n          />\n        </Row>\n      </Col>\n      <Col xs=\"12\">\n        <Row className=\"mt-3\">\n          <Col xs=\"auto\">\n            <Button\n              variant=\"primary\"\n              size=\"lg\"\n              className=\"mb-3\"\n              disabled={viewState.running || !formState.isValid || !formState.dirtyFields.dateDateOfBirth}\n              type=\"submit\"\n              onClick={handleSubmit(handleSaveButtonClicked)}\n              id=\"btnSaveUserProfile\"\n              name=\"btnSaveUserProfile\"\n              title=\"Save\">\n              {t(\"ui.storefront.common.Save\")}\n            </Button>\n          </Col>\n          <Col>\n            {showSavedMessage && (\n              <Alert\n                variant=\"success\"\n                className=\"mb-0\">\n                <i className=\"fal fa-fw fa-check-circle\" /> {t(\"ui.storefront.common.Success.Exclamation\")}{\" \"}\n                {t(\"ui.storefront.menu.miniMenu.Profile\")} {t(\"ui.storefront.product.reviews.reviewEntry.hasBeenSaved\")}\n              </Alert>\n            )}\n            {viewState.hasError && <ErrorView viewState={viewState} />}\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","/**\n * eslint-disable dot-notation\n *\n * @format\n */\n\n/* eslint-disable max-len */\nimport { useRef, useState } from \"react\";\nimport { Controller, SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Form, InputGroup, ListGroup, Row } from \"react-bootstrap\";\nimport { PatternFormat } from \"react-number-format\";\nimport cvApi from \"src/_api/cvApi\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useCurrentAccount, useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\nimport { AccountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { MyProfilePatient } from \"./MyProfilePatient\";\nimport { FormGroupLabel } from \"../../_shared/forms/formGroups/FormGroupLabel\";\n\ninterface IMyProfileDataEntry {\n  txtProfileDisplayName: string;\n  txtProfileEmail: string;\n  txtProfileFirstName: string;\n  txtProfileLastName: string;\n  txtProfilePasswordCurrent: string;\n  txtProfilePasswordNew: string;\n  txtProfilePhone1: string;\n  dateDateOfBirth: Date;\n}\n\nexport const MyProfile = (): JSX.Element => {\n  const currentUser = useCurrentUser();\n  const currentAccount = useCurrentAccount();\n  if (!currentUser || currentUser.Loading || !currentAccount || currentAccount.Loading) {\n    return <LoadingWidget overlay={true} />;\n  }\n  return (\n    <MyProfileContent\n      currentUser={currentUser}\n      currentAccount={currentAccount}\n    />\n  );\n};\n\nconst MyProfileContent = ({\n  currentUser,\n  currentAccount\n}: {\n  currentUser: UserModel;\n  currentAccount: AccountModel;\n}): JSX.Element => {\n  const authFactory = useAuthFactory();\n  const [ showSavedMessage, setShowSavedMessage ] = useState(false);\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const [ wasSent, setWasSent ] = useState(false);\n  const { t } = useTranslation();\n  const { handleSubmit, setValue, control, formState } = useForm<IMyProfileDataEntry>({\n    mode: \"onChange\",\n    criteriaMode: \"all\",\n    defaultValues: {\n      txtProfileFirstName: currentUser.Contact.FirstName || currentUser.Contact.FullName.split(\" \")[0],\n      txtProfileLastName:\n        currentUser.Contact.LastName\n        || currentUser.Contact.FullName.split(\" \")[currentUser.Contact.FullName.split(\" \").length - 1],\n      txtProfileEmail: currentUser.Email,\n      txtProfilePhone1: currentUser.Contact.Phone1,\n      txtProfileDisplayName: currentUser.DisplayName,\n      dateDateOfBirth: currentUser.DateOfBirth ? new Date(currentUser.DateOfBirth) : null,\n    }\n  });\n\n  const dateInputRef = useRef(null);\n\n  const handleSaveButtonClicked: SubmitHandler<IMyProfileDataEntry> = async (data): Promise<void> => {\n    try {\n      setRunning();\n      const {\n        txtProfileDisplayName,\n        txtProfileEmail,\n        txtProfileFirstName,\n        txtProfileLastName,\n        txtProfilePasswordCurrent,\n        txtProfilePasswordNew,\n        txtProfilePhone1\n      } = data;\n      // Validate if the email is unique\n      if (currentUser.Email !== txtProfileEmail) {\n        const emailValidationResult = await cvApi.authentication.ValidateEmailIsUnique({ Email: txtProfileEmail });\n        // If email is not unique, stop execution and return\n        if (!emailValidationResult?.data?.ActionSucceeded) {\n          finishRunning(true, \"Email must be unique\");\n          return;\n        }\n      }\n      const result = await cvApi.authentication.ValidatePassword({\n        UserName: currentUser.UserName,\n        Password: txtProfilePasswordCurrent\n      });\n      if (!result?.data?.ActionSucceeded) {\n        finishRunning(true, \"Password is invalid\");\n        return;\n      }\n      if (txtProfilePasswordNew.length) {\n        await cvApi.authentication.ChangePassword({\n          UserName: currentUser.UserName,\n          Password: txtProfilePasswordCurrent,\n          NewPassword: txtProfilePasswordNew\n        });\n      }\n      await authFactory.updateCurrentUser({\n        ...currentUser,\n        DisplayName: txtProfileDisplayName,\n        UserName: txtProfileEmail,\n        Email: txtProfileEmail,\n        Contact: {\n          ...currentUser.Contact,\n          Email1: txtProfileEmail,\n          FirstName: txtProfileFirstName,\n          LastName: txtProfileLastName,\n          Phone1: txtProfilePhone1\n        }\n      });\n      setShowSavedMessage(true);\n      setValue(\"txtProfilePasswordCurrent\", \"\");\n      setValue(\"txtProfilePasswordNew\", \"\");\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, \"There has been an error, please try again\");\n    }\n  };\n  const currentUserIsPatient = currentAccount.TypeKey === \"PATIENT\";\n  if (currentUserIsPatient) {\n    return <MyProfilePatient />;\n  }\n  function submitRequestForPasswordReset(): void {\n    setRunning();\n    cvApi.authentication\n      .ForgotPassword({ Email: currentUser && currentUser?.Email })\n      .then(res => {\n        setWasSent(true);\n        finishRunning(!res.data.ActionSucceeded, null, res.data.Messages);\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  return (\n    <Form\n      className=\"position-relative mt-3\"\n      onSubmit={handleSubmit(handleSaveButtonClicked)}>\n      <Row>\n        {viewState.running ? <LoadingWidget overlay={true} /> : null}\n        <Col xs={12}>\n          <h1 className=\"title mb-3\">\n            <i className=\"far fa-fw fa-address-card me-2\" />\n            <span>{t(\"ui.storefront.userDashboard2.userDashboard.MyProfile\")}</span>\n          </h1>\n        </Col>\n        <Col xs={6}>\n          <Row>\n            <Controller\n              name=\"txtProfileFirstName\"\n              control={control}\n              defaultValue=\"\"\n              rules={{ required: true }}\n              render={({ field }) => (\n                <Form.Group className=\"col-6 mb-2\">\n                  <FormGroupLabel\n                    formIdentifier=\"txtProfileFirstName\"\n                    label={t(\"ui.storefront.common.FirstName\", \"First Name\")}\n                    required\n                  />\n                  <Form.Control\n                    id=\"txtProfileFirstName\"\n                    {...field}\n                    isInvalid={Boolean(formState.errors.txtProfileFirstName)}\n                    className={Boolean(formState.dirtyFields.txtProfileFirstName) && \"is-dirty\"}\n                    disabled={Boolean(currentUser && currentUser?.Contact.FirstName)}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors.txtProfileFirstName?.message}\n                  </Form.Control.Feedback>\n                </Form.Group>\n              )}\n            />\n            <Controller\n              name=\"txtProfileLastName\"\n              control={control}\n              defaultValue=\"\"\n              rules={{ required: true }}\n              render={({ field }) => (\n                <Form.Group className=\"col-6 mb-2\">\n                  <FormGroupLabel\n                    formIdentifier=\"txtProfileLastName\"\n                    label={t(\"ui.storefront.common.LastName\", \"Last Name\")}\n                    required\n                  />\n                  <Form.Control\n                    id=\"txtProfileLastName\"\n                    {...field}\n                    isInvalid={Boolean(formState.errors.txtProfileLastName)}\n                    className={Boolean(formState.dirtyFields.txtProfileLastName) && \"is-dirty\"}\n                    disabled={Boolean(currentUser && currentUser?.Contact.LastName)}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors.txtProfileLastName?.message}\n                  </Form.Control.Feedback>\n                </Form.Group>\n              )}\n            />\n            <AuthGuard requiresRole=\"Doctor\">\n              <Col xs={12}>\n                <Controller\n                  name=\"dateDateOfBirth\"\n                  control={control}\n                  defaultValue={new Date()}\n                  // rules={{ required: true }}\n                  render={({ field }) => (\n                    <Form.Group className=\"mb-3 col-12\">\n                      <FormGroupLabel\n                        formIdentifier=\"dateDateOfBirth\"\n                        label={t(\"ui.storefront.common.DOB\", \"Date of Birth\")}\n                        required\n                      />\n                      <InputGroup className=\"date-input-group date-input-group-disabled\">\n                        <Button\n                          variant=\"default\"\n                          bsPrefix=\"null\"\n                          className=\"position-absolute input-group-text\"\n                          disabled={true}\n                          style={{ zIndex: 4, height: \"100%\", left: \"-1px\" }}\n                          onClick={() => {\n                            if (dateInputRef.current) {\n                              // @ts-ignore\n                              dateInputRef.current.showPicker();\n                            }\n                          }}>\n                          <i\n                            className=\"far fa-fw fa-calendar fa-fw\"\n                            style={{ zIndex: 2 }}></i>\n                        </Button>\n                        <Form.Control\n                          type=\"date\"\n                          id=\"dateDateOfBirth\"\n                          {...field}\n                          ref={dateInputRef}\n                          disabled={true}\n                          isInvalid={Boolean(formState.errors.dateDateOfBirth)}\n                          className={Boolean(formState.dirtyFields.dateDateOfBirth) && \"is-dirty\"}\n                          value={field.value ? field.value.toISOString().split(\"T\")[0] : \"\"}\n                        />\n                      </InputGroup>\n                      <Form.Control.Feedback type=\"invalid\">\n                        {formState.errors.dateDateOfBirth?.message}\n                      </Form.Control.Feedback>\n                    </Form.Group>\n                  )}\n                />\n              </Col>\n            </AuthGuard>\n          </Row>\n          <Row>\n            <Controller\n              name=\"txtProfilePhone1\"\n              control={control}\n              defaultValue=\"\"\n              rules={{ required: true }}\n              render={({ field }) => (\n                <Form.Group className=\"mb-3 col-12 mb-2\">\n                  <FormGroupLabel\n                    formIdentifier=\"txtProfilePhone1\"\n                    label={t(\"ui.storefront.common.Phone\", \"Phone\")}\n                    required\n                  />\n                  {currentAccount.TypeKey === \"DOCTOR\" && (\n                    <span className=\"mb-2 ms-2\" style={{ fontSize: \"small\" }}>\n                      {t(\"ui.storefront.common.ForInternalUseOnly\", \"For internal use only\")}\n                    </span>\n                  )}\n                  <InputGroup>\n                    <InputGroup.Text className=\"p-0\">\n                      <div\n                        className=\"px-2\"\n                        style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}>\n                        <i className=\"far fa-fw fa-phone\" />\n                      </div>\n                    </InputGroup.Text>\n                    <Form.Control\n                      id=\"txtProfilePhone1\"\n                      as={PatternFormat}\n                      format=\"###-###-####\"\n                      type=\"tel\"\n                      {...field}\n                      isInvalid={Boolean(formState.errors.txtProfilePhone1)}\n                      className={Boolean(formState.dirtyFields.txtProfilePhone1) && \"is-dirty\"}\n                      placeholder={t(\"ui.storefront.common.Phone\")}\n                      disabled={currentAccount.TypeKey === \"DOCTOR\" && Boolean(currentUser && currentUser?.Contact.Phone1)}\n                    />\n                  </InputGroup>\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors.txtProfilePhone1?.message}\n                  </Form.Control.Feedback>\n                </Form.Group>\n              )}\n            />\n            <Controller\n              name=\"txtProfileEmail\"\n              control={control}\n              defaultValue=\"\"\n              // @ts-ignore\n              rules={{ required: true, pattern: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/iu }}\n              render={({ field }) => (\n                <Form.Group className=\"mb-3 col-12\">\n                  <FormGroupLabel\n                    formIdentifier=\"txtProfileEmail\"\n                    label={t(\"ui.storefront.common.Email\", \"Email\")}\n                    required\n                  />\n                  {currentAccount.TypeKey === \"DOCTOR\" && (\n                    <span className=\"mb-2 ms-2\" style={{ fontSize: \"small\" }}>\n                      {t(\"ui.storefront.common.ForInternalUseOnly\", \"For internal use only\")}\n                    </span>\n                  )}\n                  <InputGroup>\n                    <InputGroup.Text className=\"p-0\">\n                      <div\n                        className=\"px-2\"\n                        style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}>\n                        <i className=\"far fa-fw fa-envelope\" />\n                      </div>\n                    </InputGroup.Text>\n                    <Form.Control\n                      id=\"txtProfileEmail\"\n                      {...field}\n                      isInvalid={Boolean(formState.errors.txtProfileEmail)}\n                      className={Boolean(formState.dirtyFields.txtProfileEmail) && \"is-dirty\"}\n                      placeholder={t(\"ui.storefront.common.Email\")}\n                      disabled={currentAccount.TypeKey === \"DOCTOR\" && Boolean(currentUser && currentUser?.Email)}\n                    />\n                  </InputGroup>\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors.txtProfileEmail?.message}\n                  </Form.Control.Feedback>\n                </Form.Group>\n              )}\n            />\n            <Col xs={12}>\n              <hr className=\"w-100 mt-0 my-3\" />\n            </Col>\n            <Col xs={12}>\n              <Row>\n                <Controller\n                  name=\"txtProfilePasswordCurrent\"\n                  control={control}\n                  defaultValue=\"\"\n                  rules={{ required: true }}\n                  render={({ field }) => (\n                    <Form.Group className=\"mb-3 col-12\">\n                      <FormGroupLabel\n                        formIdentifier=\"txtProfilePasswordCurrent\"\n                        label={t(\"ui.storefront.userDashboard2.controls.userProfile.CurrentPasswordRequiredForProfileChanges\")}\n                        required\n                      />\n                      <InputGroup>\n                        <InputGroup.Text className=\"p-0\">\n                          <div\n                            className=\"px-2\"\n                            style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}>\n                            <i className=\"far fa-fw fa-eye\" />\n                          </div>\n                        </InputGroup.Text>\n                        <Form.Control\n                          type=\"password\"\n                          id=\"txtProfilePasswordCurrent\"\n                          {...field}\n                          isInvalid={Boolean(formState.errors.txtProfilePasswordCurrent)}\n                          className={Boolean(formState.dirtyFields.txtProfilePasswordCurrent) && \"is-dirty\"}\n                          placeholder={t(\"ui.storefront.userDashboard2.controls.userProfile.EnterYourCurrentPassword\")}\n                        />\n                      </InputGroup>\n                      <Form.Control.Feedback type=\"invalid\">\n                        {formState.errors.txtProfilePasswordCurrent?.message}\n                      </Form.Control.Feedback>\n                    </Form.Group>\n                  )}\n                />\n              </Row>\n            </Col>\n          </Row>\n          <Row className=\"mt-3\">\n            <Col xs=\"auto\">\n              <Button\n                variant=\"primary\"\n                className=\"mb-3\"\n                disabled={viewState.running || !formState.isValid}\n                type=\"submit\"\n                onClick={handleSubmit(handleSaveButtonClicked)}\n                id=\"btnSaveUserProfile\"\n                name=\"btnSaveUserProfile\"\n                title=\"Save\">\n                {t(\"ui.storefront.common.Save\", \"Save\")}\n              </Button>\n            </Col>\n            <Col>\n              {showSavedMessage && (\n                <Alert\n                  variant=\"success\"\n                  className=\"mb-0\">\n                  <i className=\"fal fa-fw fa-check-circle\" />{\" \"}{t(\"ui.storefront.common.Success.Exclamation\")}{\" \"}\n                  {t(\"ui.storefront.menu.miniMenu.Profile\")}{\" \"}\n                  {t(\"ui.storefront.product.reviews.reviewEntry.hasBeenSaved\")}\n                </Alert>\n              )}\n              {viewState.hasError && <ErrorView viewState={viewState} />}\n            </Col>\n            <Row className=\"align-items-center pt-2\">\n              <Col xs={12}>\n                <Button\n                  id=\"btnForgotPasswordRequestPassword\"\n                  className=\"\"\n                  variant=\"primary\"\n                  disabled={wasSent}\n                  onClick={submitRequestForPasswordReset}\n                  title={t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}\n                  aria-label={t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}>\n                  {t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}\n                </Button>\n              </Col>\n            </Row>\n            {wasSent\n              ? <Row className=\"mt-3\">\n                <Col xs={12}>\n                  <Alert data-sid=\"txtPasswordRequestSuccess\"\n                    variant=\"success\"\n                    className=\"d-flex align-items-center\">\n                    <i className=\"fal fa-fw fa-check fa-2x fa-fw\" aria-hidden={true} />\n                    <b>{t(\"ui.storefront.user.forgotPassword.CheckYourEmailForAPasswordResetLink\")}</b>\n                  </Alert>\n                </Col>\n              </Row>\n              : null}\n          </Row>\n        </Col>\n      </Row>\n    </Form>\n  );\n};\n","import { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { ContactSwitch } from \"src/Dashboard/AddressBook/ContactSwitch\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { NewAddressForm } from \"src/_shared/forms/NewAddressForm\";\n\nexport const InvoiceModalBillingContactSection = (props: {\n  addressBook: AccountContactModel[];\n  onChange: (contact: AccountContactModel) => void;\n  initialContact?: AccountContactModel\n}): JSX.Element => {\n  const { addressBook, onChange, initialContact } = props;\n\n  const [ showNewAddressForm, setShowNewAddressForm ] = useState<boolean>(false);\n\n  const addressFactory = useAddressBookFactory();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  function addAddressToAddressBookAndSelect(addressData: AccountContactModel) {\n    setRunning();\n    addressFactory.createNewAddress(addressData)\n      .then(newContact => {\n        onChange(newContact);\n        setShowNewAddressForm(false);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  return (\n    <div className=\"position-relative\">\n      {viewState.running && <LoadingWidget overlay={true} />}\n      <div className=\"d-flex align-items-start\">\n        <ContactSwitch\n          accountContacts={addressBook}\n          initialContact={initialContact}\n          onChange={onChange}\n          classes=\"flex-grow-1\"\n          disabled={showNewAddressForm}\n          hideAddressBlock={showNewAddressForm}\n        />\n        {showNewAddressForm ? <Button variant=\"outline-danger\" onClick={() => setShowNewAddressForm(false)}>\n          Cancel\n        </Button> : <Button data-sid=\"btnInvoicePaymentModalAddressAdd\"\n          variant=\"secondary\"\n          onClick={() => {\n          /* Do nothing */\n            setShowNewAddressForm(true);\n          }}>\n          Add\n        </Button>}\n      </div>\n      {showNewAddressForm && <div className=\"mb-3\">\n        <NewAddressForm type=\"billing\" onConfirm={addAddressToAddressBookAndSelect} />\n      </div>}\n    </div>\n  );\n};\n","import { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useDispatch } from \"react-redux\";\nimport { useTranslation } from \"react-i18next\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport cvApi from \"src/_api/cvApi\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { INewWalletFormConfirmData, NewWalletForm } from \"src/_shared/forms/NewWalletForm\";\nimport { WalletSwitch } from \"src/Dashboard/Wallet/WalletSwitch\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { setWallet, useWallet } from \"src/_redux/slices/walletSlice\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\n\nexport const InvoiceModalWalletSection = (props: {\n  onChange: (walletItem: WalletModel) => void;\n  onCVVChange: (cvv: string) => void;\n  CVV: string;\n  initialWalletItem?: WalletModel\n}): JSX.Element => {\n  const { onChange, onCVVChange, CVV, initialWalletItem } = props;\n\n  const [ showNewWalletForm, setShowNewWalletForm ] = useState<boolean>(false);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const currentUser = useCurrentUser();\n  const wallet = useWallet();\n  const dispatch = useDispatch();\n\n  function addCardToWalletAndSelect(cardData: INewWalletFormConfirmData) {\n    setRunning();\n    const {\n      CreditCardNumber,\n      CreditCardCVV,\n      CardNickName,\n      CardHolderName,\n      ExpirationMonth,\n      ExpirationYear\n    } = cardData;\n    const walletData = {\n      CardHolderName,\n      CreditCardNumber,\n      ExpirationMonth,\n      ExpirationYear,\n      Name: CardNickName\n    };\n    let newWalletItemID: number = null;\n    cvApi.payments\n      .CreateCurrentUserWalletEntry({\n        ...walletData,\n        Active: true,\n        CreatedDate: new Date(),\n        ExpirationYear: parseInt(walletData.ExpirationYear, 10),\n        ID: null,\n        IsDefault: false,\n        UserID: currentUser.ID\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          throw new Error(\"Failed to create wallet item\");\n        }\n        newWalletItemID = res.data.Result.ID;\n        return cvApi.payments.GetCurrentUserWallet();\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          throw new Error(\" Failed to fetch wallet\");\n        }\n        dispatch(setWallet(res.data.Result));\n        const newWalletItem = res.data.Result.find(\n          w => w.ID === newWalletItemID\n        );\n        if (!newWalletItem) {\n          finishRunning(true, \" Failed to find added wallet item\");\n          return;\n        }\n        onChange(newWalletItem);\n        onCVVChange(CreditCardCVV);\n        setShowNewWalletForm(false);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  return (\n    <div className=\"position-relative\">\n      {viewState.running && <LoadingWidget overlay={true} />}\n      {viewState.hasError && <ErrorView viewState={viewState} />}\n      <div className=\"d-flex align-items-start\">\n        {wallet && <WalletSwitch\n          onChange={onChange}\n          onCVVChange={onCVVChange}\n          CVV={CVV}\n          initialWalletID={initialWalletItem?.ID}\n          classes=\"flex-grow-1\"\n          disabled={showNewWalletForm}\n          hideWalletBlock={showNewWalletForm}\n          excludeAdd={true}\n        >\n          {showNewWalletForm\n            ? <Button\n              data-sid=\"btInvoiceModalNewWalletCancel\"\n              variant=\"outline-danger\"\n              onClick={() => setShowNewWalletForm(false)}>\n              {t(\"ui.storefront.common.Cancel\")}\n            </Button>\n            : <Button\n              data-sid=\"btnInvoiceModalNewWalletAdd\"\n              variant=\"secondary\"\n              onClick={() => {\n                setShowNewWalletForm(true);\n              }}>\n              {t(\"ui.storefront.checkout.views.paymentInformation.AddCardToWallet\")}\n            </Button>}\n        </WalletSwitch>}\n      </div>\n      {showNewWalletForm && <div className=\"mb-3\">\n        <NewWalletForm onConfirm={addCardToWalletAndSelect} submitBtnDisabled={viewState.running} />\n      </div>}\n    </div>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, FormControl, FormGroup, Table } from \"react-bootstrap\";\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { AccountContactModel, SalesInvoiceModel, WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport cvApi from \"src/_api/cvApi\";\nimport { GetCurrentAccountSalesInvoicesDto, GetSurchargeForInvoicePaymentDto } from \"src/_api\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { InvoiceModalBillingContactSection } from \"src/Dashboard/Invoices/InvoiceModalBillingContactSection\";\nimport { InvoiceModalWalletSection } from \"src/Dashboard/Invoices/InvoiceModalWalletSection\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\n\ninterface IPayMultipleInvoicesModalProps {\n  show: boolean;\n  onConfirm?: () => void;\n  onCancel: () => void;\n}\n\nexport const PayMultipleInvoicesModal = (props: IPayMultipleInvoicesModalProps): JSX.Element => {\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState<WalletModel>(null);\n  const [ selectedWalletItemCVV, setSelectedWalletItemCVV ]\n    = useState<string>(\"\");\n  const [ selectedBillingContact, setSelectedBillingContact ]\n    = useState<AccountContactModel>(null);\n  const [ unpaidInvoices, setUnpaidInvoices ] = useState<SalesInvoiceModel[]>(null);\n  const [ selectedAmounts, setSelectedAmounts ] = useState<{ [ID: string]: string }>(null);\n  const [ surchargeAmount, setSurchargeAmount ] = useState<number>(null);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const addressBook = useAddressBook();\n\n  const { show, onConfirm, onCancel } = props;\n\n  useEffect(() => {\n    if (!addressBook || selectedBillingContact) {\n      return;\n    }\n    const defaultBilling = addressBook.find(ac => ac.IsBilling);\n    setSelectedBillingContact(defaultBilling ?? null);\n  }, [ addressBook ]);\n\n  useEffect(() => {\n    if (show) {\n      if (!unpaidInvoices) {\n        getInvoices();\n      }\n    } else {\n      setSelectedAmounts(null);\n      setUnpaidInvoices(null);\n    }\n  }, [ show, unpaidInvoices ]);\n\n  useEffect(() => {\n    if (selectedAmounts) {\n      calcSurcharge();\n    }\n  }, [ selectedAmounts, selectedWalletItem, selectedBillingContact ]);\n\n  async function getInvoices(data: GetCurrentAccountSalesInvoicesDto = {}) {\n    setRunning();\n    const sendData: GetCurrentAccountSalesInvoicesDto = {\n      Sorts: [\n        {\n          dir: \"desc\",\n          field: \"ID\",\n          order: 1\n        }\n      ],\n      MinBalanceDue: 0.01,\n      ...data\n    };\n    await cvApi.providers\n      .GetCurrentAccountSalesInvoices(sendData)\n      .then(result => {\n        const invoicesWithReadableDate = result.data.Results.map(r => {\n          if (!r.CreatedDate) {\n            return r;\n          }\n          const date = new Date(r.CreatedDate);\n          return {\n            ...r,\n            CreatedDate: `${date.toDateString()} ${date.toLocaleTimeString()}`\n          };\n        });\n        setUnpaidInvoices(invoicesWithReadableDate);\n        if (!selectedAmounts) {\n          setSelectedAmounts(invoicesWithReadableDate.reduce((curVal, curInvoice) => {\n            curVal[curInvoice.ID.toString()] = curInvoice.BalanceDue.toFixed(2);\n            return curVal;\n          }, {} as { [ID: string]: string }));\n        }\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"failed to get current account sales invoices\");\n      });\n  }\n\n  const getTotalPaymentAmount = (): number => {\n    if (!selectedAmounts) {\n      return 0;\n    }\n    return Object.values(selectedAmounts).reduce((curVal, amt) => curVal + parseFloat(amt), 0);\n  };\n\n  const getTotalFees = (): number => {\n    if (!unpaidInvoices || !selectedAmounts) {\n      return 0;\n    }\n    const invoicesReceivingPayment = unpaidInvoices.filter(inv => parseFloat(selectedAmounts[inv.ID.toString()]) > 0);\n    return invoicesReceivingPayment.reduce((sum, inv) => sum + (inv.Totals.Fees || 0), 0) + (surchargeAmount ?? 0);\n  };\n\n  function payInvoices(): void {\n    const {\n      ID,\n      CardHolderName,\n      CardType,\n      CreditCardNumber,\n      ExpirationMonth,\n      ExpirationYear\n    } = selectedWalletItem;\n    setRunning();\n    const amountsOverZero: { [ID: string]: number } = {};\n    for (const id in selectedAmounts) {\n      if (parseFloat(selectedAmounts[id])) {\n        amountsOverZero[id] = parseFloat(selectedAmounts[id]);\n      }\n    }\n    cvApi.providers\n      .PayMultipleInvoicesByAmounts({\n        Billing: selectedBillingContact.Slave,\n        Amounts: amountsOverZero,\n        Payment: {\n          Active: true,\n          Amount: getTotalPaymentAmount() + getTotalFees() + (surchargeAmount ?? 0),\n          CVV: selectedWalletItemCVV,\n          CardHolderName,\n          CardNumber: CreditCardNumber,\n          CardType,\n          CreatedDate: new Date(),\n          // CustomKey: null,\n          ExpirationMonth,\n          ExpirationYear,\n          ID: 0,\n          StatusID: null,\n          TypeID: null,\n          WalletID: ID,\n          Zip: null\n        }\n      })\n      .then(res => {\n        finishRunning();\n        onConfirm();\n      })\n      .catch(err => {\n        finishRunning(true, err?.data?.Message ?? \"Failed to pay invoices\");\n      });\n  }\n\n  function calcSurcharge(): void {\n    if (!cefConfig?.featureSet?.surcharges?.enabled || !unpaidInvoices || !selectedAmounts) {\n      return;\n    }\n    // TODO: implement debounce\n    if (!selectedWalletItem) {\n      finishRunning(true, \"Cannot calculate surcharge, no selected card.\");\n      return;\n    }\n    if (!selectedWalletItem?.SerializableAttributes?.BIN?.Value) {\n      finishRunning(true, \"Cannot calculate surcharge, selected card has no BIN number assigned.\");\n      return;\n    }\n    if (!selectedBillingContact?.SlaveID) {\n      finishRunning(true, \"Cannot calculate surcharge, current account contact not set.\");\n      return;\n    }\n    const ids = unpaidInvoices.filter(invoice => parseFloat(selectedAmounts[invoice.ID.toString()]) > 0).map(x => x.ID);\n    const dto = {\n      BIN: selectedWalletItem.SerializableAttributes.BIN.Value,\n      BillingContactID: selectedBillingContact.SlaveID,\n      InvoiceIDs: new Set(ids),\n      TotalAmount: getTotalPaymentAmount() + getTotalFees()\n    } as GetSurchargeForInvoicePaymentDto;\n    if (cefConfig?.debug) {\n      console.log(`Sending ${dto}`);\n    }\n    cvApi.payments.GetSurchargeForInvoicePayment(dto).then(r => {\n      if (!r.data || !r.data.ActionSucceeded) {\n        finishRunning(true, \"Cannot calculate surcharge, network error.\");\n        return;\n      }\n      finishRunning();\n      setSurchargeAmount(r.data.Result);\n    })\n      .catch(reason => finishRunning(true, reason));\n  }\n\n  let totalBalanceDue = 0;\n  if (unpaidInvoices?.length) {\n    totalBalanceDue = unpaidInvoices.reduce((sum, curInvoice) => sum + (curInvoice.BalanceDue || 0), 0);\n  }\n  const totalPaymentAmount = getTotalPaymentAmount();\n\n  return (\n    <ConfirmationModal\n      title={t(\"ui.storefront.userDashboard.controls.salesDetail.PayInvoice.OptionalPlural\")}\n      show={show}\n      onConfirm={payInvoices}\n      confirmDisabled={\n        !selectedWalletItem\n        || selectedWalletItemCVV.length < 3\n        || selectedWalletItemCVV.length > 4\n        || !selectedAmounts\n        || !totalPaymentAmount\n        || !selectedBillingContact\n        || viewState.running\n        || viewState.hasError\n      }\n      onCancel={onCancel}\n      size={ServiceStrings.modalSizes.lg}>\n      <div className=\"text-body position-relative\">\n        {selectedAmounts && unpaidInvoices && <div className=\"table-responsive w-100 scroll-over-300 mb-2\">\n          <Table hover\n            size=\"sm\"\n            striped>\n            <thead>\n              <tr>\n                <th className=\"w-15 text-end\">\n                  {t(\"ui.storefront.common.Number.Symbol\")}\n                </th>\n                {cefConfig?.featureSet.salesInvoices.hasIntegratedKeys && <th className=\"w-25\">\n                  {t(\"ui.storefront.common.Key\")}\n                </th>}\n                <th className=\"w-25 text-end\">{t(\"ui.storefront.userDashboard2.controls.salesDetail.BalanceDue\")}</th>\n                <th className=\"w-35 text-center\">{t(\"ui.storefront.cart.amount\")}</th>\n              </tr>\n            </thead>\n            <tbody className=\"scroll-over-300\">\n              {unpaidInvoices.map(invoice => {\n                const { ID, CustomKey, BalanceDue } = invoice;\n                return <tr key={ID}>\n                  <td>\n                    <label className=\"fw-normal form-control-static w-100 text-end mb-0\">\n                      {ID}\n                    </label>\n                  </td>\n                  {cefConfig?.featureSet.salesInvoices.hasIntegratedKeys && <td>\n                    <label\n                      className=\"fw-normal form-control-static w-100 small mb-0\"\n                      style={{ wordBreak: \"break-all\" }}>{CustomKey}\n                    </label>\n                  </td>}\n                  <td>\n                    <label className=\"font-weight-normal form-control-static w-100 text-end mb-0\">\n                      {currencyFormatter.format(BalanceDue)}\n                    </label>\n                  </td>\n                  <td>\n                    <FormGroup className=\"mb-0\">\n                      <FormControl\n                        type=\"number\"\n                        className=\"text-end\"\n                        value={selectedAmounts[ID.toString()]}\n                        onChange={e => {\n                          // eslint-disable-next-line require-unicode-regexp, prefer-named-capture-group\n                          if ((/^[0-9]{1,6}(\\.[0-9]{1,2})?$/).test(e.target.value)\n                            && parseFloat(e.target.value) <= invoice.BalanceDue\n                            && parseFloat(e.target.value) >= 0) {\n                            setSelectedAmounts({\n                              ...selectedAmounts,\n                              [ID.toString()]: parseFloat(e.target.value).toString()\n                            });\n                          }\n                        }}\n                        onBlur={() => {\n                          let newValue = selectedAmounts[ID.toString()];\n                          if (newValue.includes(\".\")) {\n                            const lengthAfterDecimal = selectedAmounts[ID.toString()].split(\".\")[1].length;\n                            if (lengthAfterDecimal < 2) {\n                              newValue += \"0\";\n                            }\n                          } else {\n                            newValue += \".00\";\n                          }\n                          setSelectedAmounts({\n                            ...selectedAmounts,\n                            [ID.toString()]: newValue\n                          });\n                        }}\n                        id={`nudAmountInv_${ID}`}\n                        name={`nudAmountInv_${ID}`}\n                        step={0.01}\n                        min={0}\n                        max={BalanceDue}\n                        required={false} />\n                    </FormGroup>\n                  </td>\n                </tr>;\n              })}\n            </tbody>\n          </Table>\n        </div> }\n        {viewState.running ? <LoadingWidget overlay={true} /> : null}\n        <span>\n          {t(\"ui.storefront.checkout.views.paymentInformation.selectACard\")}\n        </span>\n        <InvoiceModalWalletSection\n          onChange={walletItem => {\n            setSelectedWalletItem(walletItem);\n            setSelectedWalletItemCVV(\"\");\n          }}\n          onCVVChange={setSelectedWalletItemCVV}\n          CVV={selectedWalletItemCVV}\n          initialWalletItem={selectedWalletItem}\n        />\n        <span>\n          {t(\n            \"ui.storefront.userDashboard2.controls.addressBook.PleaseSelectABillingAddress\"\n          )}\n        </span>\n        <InvoiceModalBillingContactSection\n          addressBook={addressBook}\n          onChange={contact => {\n            setSelectedBillingContact(contact);\n          }}\n          initialContact={selectedBillingContact}\n        />\n        <div className=\"bg-light p-3\">\n          <div className=\"d-flex\">\n            <div className={\n              cefConfig?.featureSet.salesInvoices.canPayViaUserDashboard.multiple.partial ? \"w-50\" : \"w-100\"\n            }>\n              <p className=\"mb-1\">\n                {t(\"ui.storefront.userDashboard.invoices.BalanceDue\")}\n              </p>\n              <p className=\"h3 mt-0 mb-1\">{currencyFormatter.format(totalBalanceDue)}</p>\n            </div>\n          </div>\n          <div className=\"d-flex\">\n            <div className=\"w-50\">\n              <p className=\"mb-2\">{t(\"ui.storefront.purchasing.transactionFee\")}</p>\n              {viewState.running ? <p className=\"h3 mt-0 mb-1\">{t(\"ui.storefront.purchasing.calculating.ellipsis\")}</p>\n                : <p className=\"h3 mt-0 mb-1\">{currencyFormatter.format(surchargeAmount)}</p>\n              }\n            </div>\n          </div>\n          <div className=\"d-flex\">\n            <div className=\"w-50\">\n              <p className=\"mb-1\">Total Fees</p>\n              <p className=\"h3 mt-0 mb-1\">\n                {currencyFormatter.format(getTotalFees())}\n              </p>\n            </div>\n            <div className=\"w-50\">\n              <p className=\"mb-1\">Total Payment Amount</p>\n              <p className=\"h3 my-0\">\n                {/* SumTotal || ManualAmount + surchargeAmount */}\n                {currencyFormatter.format(totalPaymentAmount + surchargeAmount)}\n              </p>\n            </div>\n          </div>\n          {/* TODO: Remarks about useGreater uplift fee result setting when active (default off) */}\n          <div>\n            {cefConfig?.featureSet?.payments?.methods?.creditCard?.uplifts?.percent > 0\n              && <p className=\"mb-0 mt-2\">\n                <small className=\"small\">\n                  {t(\"ui.storefront.purchasing.weMayApplyFeeToCCtransToCoverCosts\")}\n                </small>\n              </p>\n            }\n            {cefConfig?.featureSet?.payments?.methods?.creditCard?.uplifts?.amount > 0\n              && <p className=\"mb-0 mt-2\">\n                <b>NOTE:</b>\n                A {currencyFormatter.format(cefConfig?.featureSet?.payments?.methods?.creditCard?.uplifts?.amount)}\n                {\" \"}processing fee is charged for credit card transactions.\n              </p>\n            }\n          </div>\n          {/* TODO: implement alternative ways to pay */}\n          {/* {selectedPaymentMethod === ServiceStrings?.checkout.paymentMethods.echeck && <div>\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent > 0 && <p className=\"mb-0 mt-2\">\n              <small className=\"small\">\n                <b>NOTE:</b> A {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent * 100}%\n                processing fee is charged for eCheck transactions.\n              </small>\n            </p>}\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.amount > 0 && <p className=\"mb-0 mt-2\">\n              <small className=\"small\">\n                <b>NOTE:</b> A {currencyFormatter.format(cefConfig?.featureSet.payments.methods.eCheck.uplifts.amount)}\n                processing fee is charged for eCheck transactions.\n              </small>\n            </p>}\n          </div>} */}\n        </div>\n      </div>\n      <Table className=\"w-100\">\n        <tbody>\n          <tr>\n            <td className=\"text-start px-0\">\n              {viewState.running && <Alert variant=\"info\"\n                className=\"md-mb-0 lg-mb-0 text-start\"\n                style={{ padding: \"6px 12px\" }}>\n                <p className=\"mb-0\">\n                  <i className=\"fal fa-fw fa-question-circle\" />\n                &nbsp;\n                  <span>{t(\"ui.storefront.common.Running.Ellipses\")}</span>\n                </p>\n              </Alert>}\n              {viewState.hasError && <Alert variant=\"danger\"\n                className=\"md-mb-0 lg-mb-0 text-start\"\n                style={{ padding: \"6px 12px\" }}>\n                <p className=\"mb-0\">\n                  <i className=\"fal fa-fw fa-question-circle\" />\n                  &nbsp;\n                  {viewState.errorMessage ? <span>{viewState.errorMessage}</span> : <span>\n                    {t(\"ui.storefront.userDashboard2.modals.paymultipleInvoices.OopsSomethingWentWrongWithYourPayment\")}\n                  </span>}\n                </p>\n              </Alert>}\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n    </ConfirmationModal>\n  );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { SalesInvoiceModel } from \"src/_api/cvApi._DtoClasses\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { PayMultipleInvoicesModal } from \"src/Dashboard/Invoices/PayMultipleInvoicesModal\";\nimport { Modal } from \"src/_shared/modals\";\n\ninterface IInvoicesProps {\n  isDashboardMain?: boolean;\n}\n\nexport const Invoices = (props: IInvoicesProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n  const [ showPayMultipleInvoicesModal, setShowPayMultipleInvoicesModal ] = useState(false);\n  const [ showInvoicesPaidModal, setShowInvoicesPaidModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  function ViewDetailsButton(rowData: SalesInvoiceModel): JSX.Element {\n    const { ID, SalesGroupID } = rowData;\n    return (\n      <Link\n        className=\"btn btn-outline-primary\"\n        to={corsLink(cefConfig, `/sales-group/${SalesGroupID}/invoice/${ID}`, \"dashboard\")}>\n        {t(\"ui.storefront.common.View\")}\n      </Link>\n    );\n  }\n\n  return (\n    <>\n      <Modal show={showInvoicesPaidModal}\n        onCancel={() => setShowInvoicesPaidModal(false)}\n        size=\"sm\">\n        <span>{t(\"ui.storefront.userDashboard2.modals.payInvoice.multi.Success.Message\")}</span>\n        <hr className=\"mx-n3\" />\n        <div className=\"d-flex justify-content-end\">\n          <Button\n            variant=\"primary\"\n            onClick={() => {\n              setShowInvoicesPaidModal(false);\n            }}>\n            {t(\"ui.storefront.common.OK\")}\n          </Button>\n        </div>\n      </Modal>\n      <PayMultipleInvoicesModal show={showPayMultipleInvoicesModal}\n        onCancel={() => setShowPayMultipleInvoicesModal(false)}\n        onConfirm={() => {\n          setShowPayMultipleInvoicesModal(false);\n          setShowInvoicesPaidModal(true);\n        }}\n      />\n      <Row>\n        <Col xs={12}>\n          <div className=\"d-flex align-items-center justify-content-between\">\n            {isDashboardMain\n              ? <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"fal fa-fw fa-file-invoice-dollar me-2\" />\n                  <span>Recent {t(\"ui.storefront.common.Invoice.Plural\")}</span>\n                </h4>\n              </Fragment>\n              : <h1 className=\"title\">\n                <i className=\"fal fa-fw fa-file-invoice-dollar me-2\" />\n                <span>{t(\"ui.storefront.common.Invoice.Plural\")}</span>\n              </h1>\n            }\n            <div>\n              {cefConfig?.featureSet.salesInvoices.canPayViaUserDashboard.multiple.enabled\n                && <Button variant=\"outline-secondary\"\n                  className=\"rounded\"\n                  id=\"btnPayInvoices\"\n                  name=\"btnPayInvoices\"\n                  title={t(\"ui.storefront.userDashboard2.views.salesinvoices.PayInvoices\")}\n                  aria-label={t(\"ui.storefront.userDashboard2.views.salesinvoices.PayInvoices\")}\n                  // Disabled=\"payInvoicesCtrl.disabled\"\n                  onClick={() => setShowPayMultipleInvoicesModal(true)}>\n                  {t(\"ui.storefront.userDashboard2.views.salesinvoices.PayInvoices\")}\n                </Button>}\n              {isDashboardMain\n                && <Link\n                  to={corsLink(cefConfig, \"/invoices\", \"dashboard\")}\n                  className=\"btn btn-link\"\n                  id=\"userDashboard_salesInvoice_viewAll\">\n                  <span className=\"me-1\">View All</span>\n                  <i className=\"fal fa-fw fa-angle-double-right\" />\n                </Link>}\n            </div>\n          </div>\n        </Col>\n      </Row>\n      <Row>\n        <Col xs={12}>\n          <CVGrid\n            name=\"invoices\"\n            data={p => cvApi.providers.GetCurrentAccountSalesInvoices(p)}\n            pageSizes={pageSizeOptions}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"ID\"\n              binding=\"ID\" />\n            <CVGrid.Column\n              title=\"CustomKey\"\n              binding=\"CustomKey\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Order Date\"\n              binding=\"CreatedDate\"\n              format=\"datetime\" />\n            <CVGrid.Column\n              title=\"Status\"\n              binding=\"StatusKey\" />\n            <CVGrid.Column\n              title=\"Total\"\n              binding=\"Totals.Total\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Details\"\n              tdClass=\"w-1\"\n              hideHeader>\n              {ViewDetailsButton}\n            </CVGrid.Column>\n            <CVGrid.Filter\n              title=\"ID\"\n              type=\"number\"\n              filterProperty=\"ID\" />\n            <CVGrid.Filter\n              title=\"Invoice Date\"\n              type=\"minmaxdate\"\n              filterProperty=\"CreatedDate\" />\n            <CVGrid.Filter\n              title=\"Status\"\n              type=\"select\"\n              filterProperty=\"StatusID\"\n              options={() => cvApi.invoicing.GetSalesInvoiceStatuses().then(r => r.data.Results)}\n              optionKey=\"ID\"\n              optionTitle={opt => opt.DisplayName ?? opt.Name ?? opt.CustomKey} />\n          </CVGrid>\n        </Col>\n      </Row>\n    </>\n  );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CVGrid } from \"../../_shared/CVGrid/CVGrid\";\nimport { SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\nimport { GetCurrentAccountSalesOrdersDto } from \"src/_api\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { DashboardTabHeading } from \"src/Dashboard/_shared/DashboardTabHeading\";\n\ninterface IOrdersProps {\n  isDashboardMain?: boolean;\n}\n\nexport const Orders = (props: IOrdersProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const [ correctedTotals, setCorrectedTotals ] = useState<any>(null);\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-orders mt-3\">\n          <div className=\"section-title d-flex align-items-center justify-content-between mb-2\">\n            {isDashboardMain\n              ? <Fragment>\n                <DashboardTabHeading\n                  title={t(\"ui.storefront.userDashboard2.views.dashboard.RecentSalesOrders\", \"Recent Orders\")}\n                  iconString=\"far fa-receipt\"\n                  headingClassName=\"mb-2 ms-n2 h4\"\n                  iconClassName=\"me-1\"\n                />\n                <p className=\"text-end mb-0\">\n                  <Link\n                    to={corsLink(cefConfig, \"/orders\", \"dashboard\")}\n                    className=\"btn btn-link small\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">View All Orders</span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n              : <h1 className=\"title\">\n                <i className=\"far fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udOrdersTitleText\">Orders</span>\n              </h1>\n            }\n          </div>\n          <CVGrid<SalesOrderModel, GetCurrentAccountSalesOrdersDto>\n            pageSizes={pageSizeOptions}\n            name=\"orders\"\n            data={p => cvApi.ordering.GetCurrentAccountSalesOrders(p).then(res => {\n              res.data.Results.forEach(order => {\n                cvApi.sales\n                  .GetSecureSalesGroup(Number(order.SalesGroupAsSubID))\n                  .then(res2 => {\n                    setCorrectedTotals(res2.data.SalesOrderMasters[0]?.Totals);\n                    if (!res2.data.SalesOrderMasters) {\n                      // Set the NoMasterOrder attribute on res if SalesOrderMasters is null\n                      order.NoMasterOrder = true;\n                    } else {\n                      order.NoMasterOrder = false;\n                    }\n                  });\n              });\n              return res;\n            })}\n            tableClasses=\"shadow-none border border-medium\"\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ],\n              HasSalesGroupAsSub: true\n            }}>\n            <CVGrid.Column\n              title=\"ID\"\n              binding=\"ID\"\n              thClass=\"w-4\" />\n            <CVGrid.Column\n              title=\"Key\"\n              binding=\"CustomKey\"\n              thClass=\"w-10\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Product\"\n              binding=\"ProductName\"\n              thClass=\"w-20\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Order Type\"\n              binding=\"OrderType\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Quantity\"\n              binding=\"QTY\"\n              fallback=\"N/A\"\n              thClass=\"text-center\"\n              tdClass=\"text-center\" />\n            <CVGrid.Column\n              title=\"Total\"\n              binding=\"BalanceDue\"\n              format=\"currency\"\n              thClass=\"text-center\"\n              tdClass=\"text-center\" />\n            <CVGrid.Column\n              title=\"Date\"\n              binding=\"CreatedDate\"\n              thClass=\"w-16\"\n              format=\"datetime\" />\n            <CVGrid.Column\n              title=\"Status\"\n              binding=\"StatusKey\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Details\"\n              tdClass=\"w-1\"\n              hideHeader>\n              {(order: SalesOrderModel) => <ViewDetailsButton order={order} />}\n            </CVGrid.Column>\n            {!isDashboardMain && (\n              <CVGrid.Filter\n                title=\"Status\"\n                type=\"select\"\n                filterProperty=\"StatusID\"\n                options={ () => cvApi.ordering.GetSalesOrderStatuses().then(r => r.data.Results) }\n                optionKey=\"ID\"\n                optionTitle={ opt => opt.DisplayName ?? opt.Name ?? opt.CustomKey }\n              />\n            )}\n            {!isDashboardMain && (\n              <CVGrid.Filter\n                title=\"ID\"\n                placeholder=\"ID...\"\n                type=\"number\"\n                filterProperty=\"ID\"\n              />\n            )}\n            {!isDashboardMain && (\n              <CVGrid.Filter\n                title=\"Key\"\n                placeholder=\"Key...\"\n                type=\"string\"\n                filterProperty=\"CustomKey\"\n              />\n            )}\n            {!isDashboardMain && (\n              <CVGrid.Filter\n                title=\"Order Date\"\n                type=\"minmaxdate\"\n                filterProperty=\"CreatedDate\"\n              />\n            )}\n          </CVGrid>\n        </section>\n      </Col>\n    </Row>\n  );\n};\n\nfunction ViewDetailsButton(props: { order: SalesOrderModel }): JSX.Element {\n  const { SalesGroupAsMasterID, SalesGroupAsSubID, ID, NoMasterOrder } = props.order;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  return (\n    <>\n      {NoMasterOrder ? null : (\n        <Link\n          to={corsLink(cefConfig, `/sales-group/${SalesGroupAsMasterID || SalesGroupAsSubID}/order/${ID}`, \"dashboard\")}\n          className=\"btn btn-primary\"\n          data-sid={`btnOrdersView_${ID}`}\n        >\n          {t(\"ui.storefront.common.View\")}\n        </Link>\n      )}\n    </>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport { Link, useHistory, useParams } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { auto } from \"@popperjs/core\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { AddAllToCartButton } from \"src/Cart/controls\";\nimport {\n  ProductModel,\n  SalesItemBaseModel\n} from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel, CartModel, CartTypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\nimport promiser from \"src/_shared/Promiser\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport const ShoppingListsDetail = (): JSX.Element => {\n  const [ shoppingList, setShoppingList ] = useState<CartTypeModel>(null);\n  const [ shoppingListCart, setShoppingListCart ] = useState<CartModel>(null);\n  const [ , setShoppingListItems ] = useState<SalesItemBaseModel<AppliedCartItemDiscountModel>[]>([]);\n  const [ shoppingListProducts, setShoppingListProducts ] = useState<{ [id: string]: ProductModel }>(null);\n  const [ shoppingListFetched, setShoppingListFetched ] = useState<boolean>(false);\n  const [ isEditingName, setIsEditingName ] = useState<boolean>(false);\n  const [ editedName, setEditedName ] = useState<string>(\"\");\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const productFactory = useProductFactory();\n  const history = useHistory();\n\n  const { typeName } = useParams<{ typeName: string }>();\n\n  useEffect(() => {\n    if (!productFactory) {\n      return;\n    }\n    getShoppingList();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ productFactory ]);\n\n  async function getShoppingList() {\n    setRunning(\"Fetching shopping list...\");\n    try {\n      const shoppingListCartResPromiserKey = `GetCurrentStaticCart({ TypeName: ${typeName} })`;\n      const shoppingListCartRes = await promiser.resolve(\n        shoppingListCartResPromiserKey,\n        () => cvApi.shopping.GetCurrentStaticCart({ TypeName: typeName })\n      );\n      const shoppingListRes = await cvApi.shopping.GetCartTypeForCurrentUser({ TypeName: typeName });\n      const shoppingListSalesItems = shoppingListCartRes?.data?.SalesItems;\n      if (!shoppingListSalesItems) {\n        setShoppingListFetched(true);\n        finishRunning();\n        return;\n      }\n      const products = await productFactory.getProductsByIDs(shoppingListSalesItems.map(item => item.ProductID));\n\n      const productsMap: { [id: string]: ProductModel } = {};\n      products.forEach(product => {\n        productsMap[product.ID.toString()] = product;\n      });\n      setShoppingListCart(shoppingListCartRes.data);\n      setShoppingListProducts(productsMap);\n      setShoppingListItems(shoppingListSalesItems);\n      setShoppingList(shoppingListRes.data.Result);\n      setShoppingListFetched(true);\n      finishRunning();\n    } catch (err: any) {\n      setShoppingListFetched(true);\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch shopping list items\" ]);\n    }\n  }\n\n  function renameShoppingList() {\n    setRunning();\n    const failMsg = \"Failed to update shopping list name\";\n    cvApi.shopping.UpdateCartType({\n      ...shoppingList,\n      Name: editedName,\n      UpdatedDate: new Date()\n    }).then(res => {\n      if (!res?.data?.ActionSucceeded) {\n        throw new Error(failMsg);\n      }\n      return cvApi.shopping.GetCartTypeForCurrentUser({ TypeName: editedName });\n    })\n      .then(res => {\n        if (!res?.data?.ActionSucceeded) {\n          throw new Error(failMsg);\n        }\n        history.replace(`/dashboard/shopping-lists/detail/${editedName}`);\n        setShoppingList(res.data.Result);\n        setEditedName(\"\");\n        setIsEditingName(false);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, null, err?.Messages ?? [ \"Failed to update shopping list name\" ]);\n      });\n  }\n\n  /* MouseEventHandler<HTMLButtonElement> */\n  function clearShoppingList(): void {\n    setRunning();\n    setShoppingListItems([]);\n    cvApi.shopping\n      .ClearCurrentStaticCart({ TypeName: typeName })\n      .then(_res => finishRunning())\n      .catch(err => {\n        finishRunning(true, err.message || `Failed to clear the shopping list, ${typeName}`);\n      });\n  }\n\n  /* MouseEventHandler<HTMLButtonElement> */\n  function deleteShoppingList(): void {\n    setRunning();\n    setShoppingListItems([]);\n    cvApi.shopping\n      .DeleteCartTypeForCurrentUser({ TypeName: typeName })\n      .then(() => {\n        finishRunning();\n        history.push(\"/dashboard/shopping-lists\");\n      })\n      .catch(err => {\n        finishRunning(\n          true,\n          err.message || `Failed to delete the shopping list, ${typeName}`\n        );\n      });\n  }\n\n  function removeShoppingListItem(salesItemID: number): void {\n    setRunning();\n    cvApi.shopping\n      .RemoveCartItemByID(salesItemID)\n      .then(res => {\n        if (res.data) {\n          getShoppingList();\n          finishRunning();\n        }\n      })\n      .catch(err => {\n        finishRunning(true, err.message);\n      });\n  }\n\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void => {\n    setRunning();\n    cvApi.shopping\n      .UpdateCartItemQuantity({\n        CartItemID: cartItemID,\n        Quantity: quantity,\n        QuantityBackOrdered: 0,\n        QuantityPreSold: 0\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          finishRunning(true, null, res.data.Messages);\n          return;\n        }\n        getShoppingList();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  if (!shoppingListFetched) {\n    return <LoadingWidget />;\n  }\n  return (\n    <>\n      <Row className=\"justify-content-between\">\n        <Col xs=\"auto\" className=\"form-inline\">\n          {isEditingName\n            ? <div className=\"input-group\">\n              <Form.Control\n                type=\"text\"\n                value={editedName}\n                onChange={e => setEditedName(e.target.value)}\n              />\n              <span id=\"EditShoppingListNameBtn\" className=\"input-group-append input-group-btn\">\n                <Button\n                  variant=\"link\"\n                  id=\"btnSaveShoppingListNameEdit\"\n                  name=\"btnSaveShoppingListNameEdit\"\n                  title={t(\"ui.storefront.common.Save\")}\n                  aria-label={t(\"ui.storefront.common.Save\")}\n                  onClick={renameShoppingList}>\n                  <i className=\"fal fa-fw fa-save\" />{\" \"}\n                  <span\n                    id=\"EditShoppingListNameSaveBtn\"\n                    className=\"sr-only\">\n                    {t(\"ui.storefront.common.Save\")}\n                  </span>\n                </Button>{\" \"}\n                <Button\n                  variant=\"link\"\n                  id=\"btnCancelShoppingListNameEdit\"\n                  name=\"btnCancelShoppingListNameEdit\"\n                  title={t(\"ui.storefront.common.Cancel\")}\n                  aria-label={t(\"ui.storefront.common.Cancel\")}\n                  onClick={() => {\n                    setIsEditingName(false);\n                    setEditedName(\"\");\n                  }}>\n                  <i className=\"fal fa-fw fa-undo\"/>{\" \"}\n                  <span\n                    id=\"EditShoppingListNameCancelBtn\"\n                    className=\"sr-only\">\n                    {t(\"ui.storefront.common.Cancel\")}\n                  </span>\n                </Button>\n              </span>\n            </div>\n            : <div className=\"d-flex\">\n              <h2 className=\"mb-0\" id=\"ShoppingListNameText\">\n                {typeName}\n              </h2>\n              <Button\n                variant=\"link\"\n                id=\"btnEditShoppingListName\"\n                name=\"btnEditShoppingListName\"\n                onClick={() => {\n                  setIsEditingName(true);\n                  setEditedName(typeName);\n                }}\n                aria-label={t(\"ui.storefront.common.Edit\")}\n                title={t(\"ui.storefront.common.Edit\")}>\n                <i className=\"fal fa-fw fa-pencil\" />{\" \"}\n                <span id=\"ShoppingListEditBtn\" className=\"sr-only\">\n                  {t(\"ui.storefront.common.Edit\")}\n                </span>\n              </Button>\n              <Link to={corsLink(cefConfig, \"/shopping-lists\", \"dashboard\")}\n                className=\"btn btn-secondary ms-1 underline-hover-none\"\n                type=\"button\">\n                {t(\"ui.storefront.userDashboard.shoppingLists.BackToShoppingLists\")}\n              </Link>\n            </div>\n          }\n        </Col>\n        <Col xs={auto} className=\"mb-3\">\n          <AddAllToCartButton\n            salesItems={shoppingListCart?.SalesItems}\n            excludeQuoteCart={true}\n            label={t(\"ui.storefront.cart.addAllToCart\")}\n            useConfirmModal={true}\n          />\n          <Button variant=\"secondary\"\n            className=\"mx-2\"\n            onClick={() => clearShoppingList()}>\n            {t(\"ui.storefront.common.Clear\")}\n          </Button>\n          <Button variant=\"secondary\"\n            onClick={() => deleteShoppingList()}>\n            {t(\"ui.storefront.common.Delete\")}\n          </Button>\n        </Col>\n      </Row>\n      <CartTableWideScreen\n        includeAddToCart={true}\n        cartProducts={shoppingListProducts}\n        cartHasItems={shoppingListCart?.SalesItems?.length > 0}\n        cartToUse={shoppingListCart}\n        orderDiscounts={null}\n        shippingDiscounts={null}\n        onChangeSalesItemQuantity={onChangeSalesItemQuantity}\n        onRemoveItemFromCartClicked={(productName: string, salesItemId: number) => removeShoppingListItem(salesItemId)}\n        queuedIDs={[]}\n        parentRunning={viewState.running}\n        excludeBackorderInfo={true}\n      />\n    </>\n  );\n};\n","import { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, ButtonGroup, Card, Col, Form } from \"react-bootstrap\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\nimport { CardInputFormGroup } from \"src/_shared/forms/formGroups/CardInputFormGroup\";\n\ninterface IWalletEntryData {\n  txtWalletCardNumber: string;\n  txtWalletCardNickname: string;\n  txtWalletCardHolderName: string;\n  txtWalletCardType: string;\n  ddlWalletExpirationMonth: string;\n  ddlWalletExpirationYear: number;\n}\n\nconst monthsAbbreviated = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\"\n];\n\nconst thisYear = new Date().getFullYear();\n\nconst availableExpirationYears: number[] = [];\nfor (let i = 0; i < 11; i++) {\n  availableExpirationYears.push(thisYear + i);\n}\n\ninterface INewWalletModalAltProps {\n  onConfirm: (data: INewWalletFormConfirmData) => void;\n  onCancel: Function;\n  loading?: boolean;\n}\n\nexport const NewWalletModalAlt = (props: INewWalletModalAltProps): JSX.Element => {\n  const { t } = useTranslation();\n  const { onConfirm, onCancel, loading } = props;\n  const { register, handleSubmit, setValue, clearErrors, reset, formState } = useForm<IWalletEntryData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const handleConfirmButtonClicked: SubmitHandler<IWalletEntryData> = (data): void => {\n    const formatted: INewWalletFormConfirmData = {\n      CardHolderName: data.txtWalletCardHolderName,\n      CardNickName: data.txtWalletCardNickname,\n      CardType: data.txtWalletCardType,\n      CreditCardNumber: data.txtWalletCardNumber?.replaceAll(/[\\s-]+/gu, \"\"),\n      ExpirationMonth: monthsAbbreviated.indexOf(data.ddlWalletExpirationMonth) + 1,\n      ExpirationYear: String(data.ddlWalletExpirationYear)\n    };\n    if (onConfirm) {\n      onConfirm(formatted);\n      reset(\n        {\n          ddlWalletExpirationMonth: monthsAbbreviated[0],\n          ddlWalletExpirationYear: availableExpirationYears[0],\n          txtWalletCardHolderName: \"\",\n          txtWalletCardNickname: \"\",\n          txtWalletCardNumber: \"\"\n        },\n        {\n          keepDirty: false,\n          keepErrors: false,\n          keepIsSubmitted: false,\n          keepIsValid: false,\n          keepSubmitCount: false,\n          keepTouched: false\n        }\n      );\n      clearErrors();\n    }\n  };\n\n  function handleCancel() {\n    onCancel();\n    reset(\n      {\n        ddlWalletExpirationMonth: monthsAbbreviated[0],\n        ddlWalletExpirationYear: availableExpirationYears[0],\n        txtWalletCardHolderName: \"\",\n        txtWalletCardNickname: \"\",\n        txtWalletCardNumber: \"\"\n      },\n      {\n        keepDirty: false,\n        keepErrors: false,\n        keepIsSubmitted: false,\n        keepIsValid: false,\n        keepSubmitCount: false,\n        keepTouched: false\n      }\n    );\n  }\n\n  return (\n    <Col xs={4} class=\"mb-3\">\n      {/* TODO: replace this form with NewWalletForm */}\n      <Form\n        className=\"form-vertical wallet-card-panel h-100 card border-0 mb-3\"\n        autoComplete=\"off\"\n        onSubmit={handleSubmit(handleConfirmButtonClicked)}>\n        {loading\n          ? <LoadingWidget />\n          : <div className=\"p-2 border border-medium rounded\">\n            <Card.Body>\n              <TextInputFormGroup\n                register={register}\n                formIdentifier=\"txtWalletCardNickname\"\n                dataSid=\"txtWalletCardNickname\"\n                errors={formState.errors}\n                formClasses=\"mb-2\"\n                required={true}\n                labelKey=\"ui.storefront.wallet.walletCard.CardNickname\"\n                placeholderKey=\"ui.storefront.wallet.walletCard.CardNickname\"\n                maxLength={128}\n              />\n              <TextInputFormGroup\n                register={register}\n                formIdentifier=\"txtWalletCardHolderName\"\n                dataSid=\"txtWalletCardHolderName\"\n                errors={formState.errors}\n                formClasses=\"mb-2\"\n                required={true}\n                labelKey=\"ui.storefront.wallet.walletCard.CardHolderName\"\n                placeholderKey=\"ui.storefront.wallet.walletCard.CardHolderName\"\n                maxLength={128}\n              />\n              <CardInputFormGroup\n                formIdentifier=\"txtCreditCard\"\n                dataSid=\"txtCreditCard\"\n                register={register}\n                errors={formState.errors}\n                setValue={setValue}\n              />\n              <div className=\"mb-2\">\n                <Form.Label htmlFor=\"txtWalletCardExpiration\">\n                  <span data-sid=\"txtWalletCardExpiration\">{t(\"ui.storefront.wallet.walletCard.Expiration\")}</span>\n                  <span className=\"text-danger\">&nbsp;*</span>\n                </Form.Label>\n                <div className=\"d-flex align-items-center\">\n                  <Form.Select\n                    className=\"me-1 custom-select\"\n                    id=\"ddlWalletExpirationMonth\"\n                    data-sid=\"ddlWalletExpirationMonth\"\n                    {...register(\"ddlWalletExpirationMonth\")}>\n                    {monthsAbbreviated.map(month => <option key={month}>{month}</option>)}\n                  </Form.Select>\n                  <Form.Select\n                    className=\"ms-1 custom-select\"\n                    id=\"ddlWalletExpirationYear\"\n                    data-sid=\"ddlWalletExpirationYear\"\n                    {...register(\"ddlWalletExpirationYear\")}>\n                    {availableExpirationYears.map(year => <option key={year.toString()}>{year}</option>)}\n                  </Form.Select>\n                </div>\n              </div>\n            </Card.Body>\n            <hr className=\"border border-medium mb-1\"/>\n            <ButtonGroup as={Card.Footer} className=\"p-0 justify-content-around   d-flex bg-transparent border-0\">\n              <Button\n                variant=\"none\"\n                className=\"ms-2\"\n                id=\"btnWalletSave\"\n                data-sid=\"btnWalletSave\"\n                name=\"btnWalletSave\"\n                type=\"submit\"\n                disabled={loading || !formState.isValid}\n                title={t(\"ui.storefront.userDashboard.wallet.AddEntry\")}>\n                <i className=\"fal fa-fw fa-edit\" aria-hidden=\"true\" />\n                <span className=\"ms-1\">{t(\"ui.storefront.common.Save\")}</span>\n              </Button>\n              <Button\n                variant=\"none\"\n                id=\"btnWalletCancel\"\n                name=\"btnWalletCancel\"\n                title=\"Cancel\"\n                aria-label=\"Cancel\"\n                onClick={() => handleCancel()}>\n                <i className=\"fal fa-fw fa-redo\" aria-hidden=\"true\" />\n                <span className=\"ms-1\">{t(\"ui.storefront.common.Cancel\")}</span>\n              </Button>\n            </ButtonGroup>\n          </div>\n        }\n      </Form>\n    </Col>\n  );\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Button, ButtonGroup, Card, Col, Form, InputGroup, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IWalletEntryCardProps {\n  // Used in data-sids\n  index?: number;\n  isDefault?: boolean;\n  onDeleteClicked?: () => void;\n  setWalletCVV?: Function;\n  title?: string;\n  walletCVV?: string;\n  walletItem: WalletModel;\n}\n\nexport const WalletEntryCard = (props: IWalletEntryCardProps): JSX.Element => {\n  const { index, isDefault, onDeleteClicked, setWalletCVV, walletCVV, walletItem } = props;\n  const { t } = useTranslation();\n\n  return (\n    <Card className=\"h-100 position-relative\">\n      <Card.Header className=\"bg-transparent border-0\">\n        <h4 id={`CardNickname_${index}`} className=\"mb-0 d-flex align-items-center justify-content-between\">\n          <span>{walletItem.Name}</span>\n          <i className={`${getIconByCardType(walletItem.CardType)} fs-1`} />\n          <span className=\"sr-only\">{walletItem.CardType}</span>\n        </h4>\n      </Card.Header>\n      {walletItem && (\n        <>\n          <Card.Body>\n            <div className=\"w-100 wallet-panel border-start border-3 border-dark ps-3\">\n              <Row>\n                <Col xs={12}>\n                  <p id={`CardHolderName_${index}`} className=\"mb-1\">{walletItem.CardHolderName}</p>\n                  <p className=\"mb-0\" id={`CardNumberText_${index}`}>\n                    &bull;&bull;&bull;&bull;&nbsp; &bull;&bull;&bull;&bull;&nbsp;\n                    &bull;&bull;&bull;&bull;&nbsp;\n                    {walletItem.CreditCardNumber}\n                  </p>\n                  <p\n                    id={`CardExpirationText_${index}`}\n                    className=\"mb-1\">\n                    <span id=\"CheckoutCardValidThrough\">\n                      {t(\"ui.storefront.checkout.checkoutCard.ExpiresAbbreviated\", \"Exp.\")}\n                    </span>&nbsp;\n                    {walletItem.ExpirationMonth.toString().padStart(2, \"0\")}\n                    &#47;\n                    {walletItem.ExpirationYear.toString().substring(2)}\n                  </p>\n                </Col>\n                {setWalletCVV && (\n                  <Col xs={12} sm={3}>\n                    <Form.Group className=\"d-flex align-items-center h-100\">\n                      <Form.Label htmlFor=\"txtWalletCVV\" className=\"mb-0 me-2\">\n                        <span>{t(\"ui.storefront.checkout.views.paymentInformation.CVV\")}</span>\n                      </Form.Label>\n                      <InputGroup className=\"justify-content-end\">\n                        <Form.Control\n                          value={walletCVV}\n                          onChange={e => setWalletCVV(e.target.value)}\n                          style={{ width: \"60px\" }}\n                          id=\"txtWalletCVV\"\n                          data-sid=\"txtWalletCVV\"\n                        />\n                      </InputGroup>\n                    </Form.Group>\n                    {walletCVV.length && walletCVV.length < 3\n                      || walletCVV.length > 4\n                      || !(/^\\d*$/u).test(walletCVV) && <div className=\"d-flex justify-content-end\">\n                        <ul className=\"list-unstyled\">\n                          {Boolean(walletCVV.length) && walletCVV.length < 3\n                        && <li>\n                          <span className=\"text-danger\">\n                            CVV must be at least 3 digits\n                          </span>\n                        </li>\n                          }\n                          {walletCVV.length > 4\n                        && <li>\n                          <span className=\"text-danger\">\n                            CVV may not be more than 4 digits\n                          </span>\n                        </li>\n                          }\n                          {!(/^\\d*$/u).test(walletCVV)\n                        && <li>\n                          <span className=\"text-danger\">\n                            CVV must contain only numbers\n                          </span>\n                        </li>\n                          }\n                        </ul>\n                      </div>}\n                  </Col>\n                )}\n              </Row>\n            </div>\n          </Card.Body>\n          {!isDefault && onDeleteClicked && (\n            <ButtonGroup as={Card.Footer} className=\"p-0\">\n              {/* TODO- show errors */}\n              <Button\n                variant=\"link\"\n                size=\"lg\"\n                className=\"text-danger text-decoration-none underline-hover\"\n                onClick={() => onDeleteClicked()}\n                id={`btnCardEntryDelete_${index}`}\n                name={`btnCardEntryDelete_${index}`}\n                title=\"Delete\">\n                <i className=\"fal fa-fw fa-trash\" aria-hidden=\"true\" />\n                <span className=\"ms-1\">\n                  {t(\"ui.storefront.common.Delete\", \"Delete\")}\n                </span>\n              </Button>\n            </ButtonGroup>\n          )}\n        </>\n      )}\n    </Card>\n  );\n};\n\nfunction getIconByCardType(type: string): string {\n  switch (type) {\n    case \"visa\": {\n      return \"fab fa-fw fa-cc-visa\";\n    }\n    case \"mastercard\": {\n      return \"fab fa-fw fa-cc-mastercard\";\n    }\n    case \"discover\": {\n      return \"fab fa-fw fa-cc-discover\";\n    }\n    default: {\n      return \"fal fa-fw fa-credit-card\";\n    }\n  }\n}\n","/* eslint-disable arrow-body-style */\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\nimport { NewWalletModalAlt } from \"src/Dashboard/Wallet/NewWalletModalAlt\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { INewWalletFormConfirmData } from \"src/_shared/forms/NewWalletForm\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useACHWallet, useWallet } from \"src/_redux/slices/walletSlice\";\nimport { convertWalletFormDataToWalletModel, useWalletFactory } from \"src/_redux/factories/walletFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { INewACHWalletFormConfirmData } from \"../../_shared/forms/NewWalletForm\";\nimport { NewACHWalletModal } from \"src/Dashboard/Wallet/NewACHWalletModal\";\nimport { ACHWalletEntryCard } from \"src/Dashboard/Wallet/ACHWalletEntryCard\";\nimport { WalletEntryCard } from \"./WalletEntryCard\";\n\nconst thisYear = new Date().getFullYear();\n\nconst availableExpirationYears: number[] = [];\nfor (let i = 0; i < 11; i++) {\n  availableExpirationYears.push(thisYear + i);\n}\n\nexport const Wallet = (): JSX.Element => {\n  const [ showAddACHModal, setShowAddACHModal ] = useState(false);\n  const [ showAddCardAlt, setShowAddCardAlt ] = useState<boolean>(false);\n  const [ deleteWalletItem, setDeleteWalletItem ] = useState<WalletModel>(null);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const wallet = useWallet();\n  const ACHWallet = useACHWallet();\n  const walletFactory = useWalletFactory();\n  const currentUser = useCurrentUser();\n\n  function addUserWalletItem(data: INewWalletFormConfirmData, isACH?: boolean): void {\n    setRunning();\n    const walletData = convertWalletFormDataToWalletModel(data, currentUser);\n    walletFactory\n      .addWalletEntry(walletData)\n      .then(() => {\n        setShowAddCardAlt(false);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to add wallet item.\");\n      });\n  }\n\n  function addUserACHWalletItem(data: INewACHWalletFormConfirmData): void {\n    if (!currentUser) {\n      return;\n    }\n    setRunning();\n    const { FirstName, LastName, AccountNumber, CardType, RoutingNumber, BankName } = data;\n    const walletData = {\n      AccountNumber,\n      Active: true,\n      BankName,\n      FirstName,\n      LastName,\n      CardType,\n      CreatedDate: new Date(),\n      ID: 0,\n      IsDefault: false,\n      RoutingNumber,\n      User: currentUser,\n      UserID: currentUser.ID\n    } as WalletModel;\n    walletFactory\n      .addWalletEntry(walletData)\n      .then(res => {\n        setShowAddACHModal(false);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  function deactiveUserWalletItem(id: number): void {\n    setRunning();\n    walletFactory\n      .deactivateWalletEntry(id)\n      .then(() => {\n        finishRunning();\n        setDeleteWalletItem(null);\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  if (wallet === null) {\n    return <LoadingWidget />;\n  }\n\n  return (\n    <Row className=\"position-relative\">\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <Col xs={12}>\n        <h1 id=\"udWalletTitleText\">{t(\"ui.storefront.userDashboard2.userDashboard.Wallet\")}</h1>\n        <Row className=\"row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 row-cols-xl-3 row-cols-tk-5 row-cols-fk-6\">\n          <Col className=\"mb-3\">\n            <Card className=\"h-100\">\n              <Card.Header>\n                {t(\"ui.storefront.wallet.walletList.AddCard\", \"Add Card\")}\n              </Card.Header>\n              <Card.Body className=\"p-2\">\n                <Button\n                  variant=\"default\"\n                  className=\"btn-block p-4 w-100 mb-1 border-medium rounded\"\n                  onClick={() => setShowAddCardAlt(true)}\n                  id=\"btnAddCreditCardWallet\"\n                  name=\"btnAddCreditCardWallet\"\n                  disabled={showAddCardAlt}>\n                  <i className=\"far fa-fw fa-circle-plus fa-2x text-primary\" />\n                  <br />\n                  <span className=\"text-capitalize text-primary\">\n                    {t(\"ui.storefront.wallet.walletList.AddAnotherCard\", \"Add Another Card\")}\n                  </span>\n                </Button>\n                <Button\n                  variant=\"default\"\n                  className=\"btn-block p-4 w-100 mb-1 border-medium rounded\"\n                  onClick={() => setShowAddACHModal(true)}\n                  id=\"btnAddACHWallet\"\n                  name=\"btnAddACHWallet\"\n                  disabled={showAddACHModal}>\n                  <i className=\"far fa-fw fa-circle-plus fa-2x text-primary\" />\n                  <br />\n                  <span className=\"text-capitalize text-primary\">\n                    {t(\"ui.storefront.wallet.walletList.AddACH\", \"Add ACH\")}\n                  </span>\n                </Button>\n              </Card.Body>\n            </Card>\n          </Col>\n          {wallet && wallet.map((walletItem: WalletModel, i: number): JSX.Element => {\n            return (\n              <Col key={`card${walletItem.ID.toString()}`} className=\"mb-3\">\n                <WalletEntryCard\n                  walletItem={walletItem}\n                  onDeleteClicked={() => setDeleteWalletItem(walletItem)}\n                  index={i} />\n              </Col>\n            );\n          })}\n          {ACHWallet\n            && ACHWallet.map((walletItem: WalletModel, i: number): JSX.Element => {\n              return (\n                <Col\n                  key={`ach${walletItem.ID.toString()}`}\n                  className=\"mb-3\">\n                  <ACHWalletEntryCard\n                    walletItem={walletItem}\n                    onDeleteClicked={setDeleteWalletItem}\n                    index={i + 100}\n                  />\n                </Col>\n              );\n            })}\n        </Row>\n        {showAddCardAlt && (\n          <Row>\n            <NewWalletModalAlt\n              onConfirm={addUserWalletItem}\n              onCancel={() => setShowAddCardAlt(false)}\n              loading={viewState.running}\n            />\n          </Row>\n        )}\n        <NewACHWalletModal\n          show={showAddACHModal}\n          onConfirm={addUserACHWalletItem}\n          onCancel={() => setShowAddACHModal(false)}\n          loading={viewState.running}\n        />\n        <Row className=\"row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 row-cols-xl-3 row-cols-tk-5 row-cols-fk-6\">\n          <ConfirmationModal\n            show={Boolean(deleteWalletItem)}\n            title=\"Are you sure you want to remove this card/account?\"\n            confirmBtnLabel={t(\"ui.storefront.common.Yes\")}\n            cancelBtnLabel={t(\"ui.storefront.common.No\")}\n            onConfirm={() => deactiveUserWalletItem(deleteWalletItem.ID)}\n            onCancel={() => setDeleteWalletItem(null)}\n            size=\"md\">\n            <Card.Body className=\"p-2\">\n              {deleteWalletItem?.AccountNumber && deleteWalletItem?.RoutingNumber\n                ? <>\n                  <p className=\"font-weight-bold\">\n                    {deleteWalletItem?.CardHolderName}\n                  </p>\n                  <p id=\"AccountNumberText\">\n                    &bull;&bull;&bull;&bull;&bull;&bull;&nbsp;\n                    {deleteWalletItem?.AccountNumber}\n                  </p>\n                  <p id=\"RoutingNumberText\">\n                    &bull;&bull;&bull;&bull;&bull;&bull;&nbsp;\n                    {deleteWalletItem?.RoutingNumber}\n                  </p>\n                  <p id=\"BankName\">\n                    {deleteWalletItem?.BankName}\n                  </p>\n                </>\n                : <>\n                  <p className=\"font-weight-bold\">\n                    {deleteWalletItem?.CardHolderName}\n                  </p>\n                  <p id=\"CardNumberText\">\n                    &bull;&bull;&bull;&bull;&nbsp;&bull;&bull;&bull;&bull;&nbsp;&bull;&bull;&bull;&bull;&nbsp;\n                    {deleteWalletItem?.CreditCardNumber}\n                  </p>\n                  <div className=\"mb-0\" id=\"WalletEntryExpirationText\">\n                    <span>\n                      {t(\"ui.storefront.wallet.walletCard.Expiration.Abbreviation\")}\n                    </span>\n                    <span>\n                      {deleteWalletItem?.ExpirationMonth?.toString().padStart(\n                        2,\n                        \"0\"\n                      )}\n                      /{deleteWalletItem?.ExpirationYear}\n                    </span>\n                  </div>\n                </>\n              }\n            </Card.Body>\n          </ConfirmationModal>\n        </Row>\n      </Col>\n      {viewState.hasError\n        && <Col xs={12}>\n          <ErrorView viewState={viewState} componentName=\"Wallet.tsx\" />\n        </Col>\n      }\n    </Row>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { CEFActionResponseT, IHttpPromiseCallbackArg } from \"src/_api/cvApi.shared\";\nimport { TextAreaFormGroup } from \"src/_shared/forms/formGroups\";\nimport { useForm } from \"react-hook-form\";\nimport { Alert, Button, Card, Form } from \"react-bootstrap\";\nimport { IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface IPrivacyDataActionCardProps {\n  headerKey: string;\n  headerIcon: IconDefinition;\n  bodyKey: string;\n  placeholderKey: string;\n  formKey: string;\n  request: Function;\n}\n\nexport const PrivacyDataActionCard = (props: IPrivacyDataActionCardProps): JSX.Element => {\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const {\n    register,\n    handleSubmit,\n    formState,\n    reset\n  } = useForm<{ [key: string]: string }>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const handleConfirm = (data: { [key: string]: string }): void => {\n    const reason = { Message: \"\" };\n    reason.Message = data[props.formKey];\n    // Props.request can receive a dto object that can have \"reason\", from the text input\n    setRunning();\n    props.request(reason)\n      .then((result: IHttpPromiseCallbackArg<CEFActionResponseT<any>>) => {\n        finishRunning();\n        reset();\n      })\n      .catch((error: any) => {\n        finishRunning(true, error);\n        reset();\n      });\n  };\n\n  return (\n    <>\n      {formState.isSubmitSuccessful\n      && <Alert key=\"success\" variant=\"success\">\n        {t(\"ui.storefront.userDashboard2.userDashboard.PrivacySettings.SuccessMessage\")}\n      </Alert>}\n      <Form autoComplete=\"off\"\n        onSubmit={handleSubmit(handleConfirm)}>\n        <Card className=\"privacy-card shadow\">\n          <Card.Header className=\"text-white bg-header-footer d-flex justify-content-between\">\n            <h4>{t(props.headerKey)}</h4>\n            <FontAwesomeIcon className=\"very-big\" icon={props.headerIcon as IconProp} />\n          </Card.Header>\n          <Card.Body>\n            <p>{t(props.bodyKey)}</p>\n            <TextAreaFormGroup\n              formIdentifier={props.formKey}\n              errors={formState.errors}\n              register={register}\n              required={false}\n              placeholderKey={props.placeholderKey}\n            />\n          </Card.Body>\n          <Card.Footer>\n            <Button type=\"submit\"\n              disabled={viewState.running || !formState.isValid}>\n              {t(\"ui.storefront.common.SendRequest\")}\n            </Button>\n          </Card.Footer>\n        </Card>\n      </Form>\n    </>\n  );\n};\n","import { Fragment } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { SalesQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface IQuotesProps {\n  isDashboardMain?: boolean;\n}\n\nexport const Quotes = (props: IQuotesProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  function ViewDetailsButton(rowData: SalesQuoteModel): JSX.Element {\n    const { ID, SalesGroupAsRequestMasterID, SalesGroupAsRequestSubID }\n      = rowData;\n    return (\n      <Link\n        className=\"btn btn-outline-primary\"\n        to={corsLink(cefConfig, `/sales-group/${\n          SalesGroupAsRequestMasterID ?? SalesGroupAsRequestSubID\n        }/quote/${ID}`, \"dashboard\")}>\n        {t(\"ui.storefront.common.View\")}\n      </Link>\n    );\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-quotes\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            {isDashboardMain\n              ? <Fragment>\n                <h4 className=\"title me-2\">\n                  <i className=\"fal fa-fw fa-quote-right me-2\" />\n                  <span>Recent {t(\"ui.storefront.common.Quote.Plural\")}</span>\n                </h4>\n                <p className=\"text-end\">\n                  <Link\n                    to={corsLink(cefConfig, \"/quotes\", \"dashboard\")}\n                    className=\"btn btn-link\"\n                    id=\"userDashboard_salesQuote_viewAll\">\n                    <span className=\"me-1\">View All</span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n              : <h1 className=\"title me-2\">\n                <i className=\"fal fa-fw fa-quote-right me-2\" />\n                <span>{t(\"ui.storefront.common.Quote.Plural\")}</span>\n              </h1>\n            }\n          </div>\n          <CVGrid\n            data={p => cvApi.providers.GetCurrentAccountSalesQuotes(p)}\n            pageSizes={pageSizeOptions}\n            name=\"quotes\"\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"ID\"\n              binding=\"ID\" />\n            <CVGrid.Column\n              title=\"CustomKey\"\n              binding=\"CustomKey\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Order Date\"\n              binding=\"CreatedDate\"\n              format=\"datetime\" />\n            <CVGrid.Column\n              title=\"Status\"\n              binding=\"StatusKey\" />\n            <CVGrid.Column\n              title=\"Total\"\n              binding=\"Totals.Total\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Details\"\n              tdClass=\"w-1\"\n              hideHeader>\n              {ViewDetailsButton}\n            </CVGrid.Column>\n            <CVGrid.Filter\n              title=\"ID\"\n              type=\"number\"\n              filterProperty=\"ID\" />\n            <CVGrid.Filter\n              title=\"Quote Date\"\n              type=\"minmaxdate\"\n              filterProperty=\"CreatedDate\" />\n            <CVGrid.Filter\n              title=\"Status\"\n              type=\"select\"\n              filterProperty=\"StatusID\"\n              options={() => cvApi.quoting.GetSalesQuoteStatuses().then(r => r.data.Results)}\n              optionKey=\"ID\"\n              optionTitle={opt => opt.DisplayName ?? opt.Name ?? opt.CustomKey} />\n          </CVGrid>\n        </section>\n      </Col>\n    </Row>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\nimport { ContactModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface ISalesGroupContactBlockProps {\n  contact: ContactModel;\n  headerKey: string;\n}\n\nexport const SalesGroupContactBlock = (props: ISalesGroupContactBlockProps): JSX.Element => {\n  const { contact, headerKey } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <div>\n      <h4 className=\"bold\" id=\"SalesOrderShippingInfoText\">\n        {t(headerKey)}\n      </h4>\n      <hr className=\"my-2 border-bottom\" />\n      {contact\n        ? <AddressBlock\n          address={contact.Address}\n          contact={contact}\n          hideCountryKey\n        />\n        : <div>\n          {t(\"ui.storefront.storeDashboard.storeOrderDetail.BillingInformation.MissingText\")}\n        </div>\n      }\n    </div>\n  );\n};\n","import { Alert } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IOrderShippingTrackerProps {\n  order: SalesOrderModel;\n}\n\nexport const OrderShippingTracker = (props: IOrderShippingTrackerProps): JSX.Element => {\n  const { order } = props;\n\n  const { t } = useTranslation();\n\n  if (!order?.TrackingNumber) {\n    return null;\n  }\n\n  return <div>\n    <h6 className=\"text-capitalize\">\n      {t(\"ui.storefront.userDashboard.salesGroup.OvernightShipping\", \"Overnight Shipping\")}\n    </h6>\n    <Alert\n      variant=\"primary\"\n      className=\"d-flex justify-content-between align-items-center p-2\">\n      <span>{order.TrackingNumber}</span>\n      <a\n        href={`https://www.ups.com/track?loc=en_US&tracknum=${order.TrackingNumber}`}\n        className=\"btn btn-primary text-capitalize\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\">\n        {t(\"ui.storefront.userDashboard.salesGroup.Track\", \"Track\")}\n      </a>\n    </Alert>\n  </div>;\n};\n","import { DateTime } from \"luxon\";\nimport { Table } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { SalesInvoiceModel, SalesOrderModel, SalesQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport { OrderShippingTracker } from \"./OrderShippingTracker\";\n\ninterface ISalesGroupDetailsBlockProps {\n  salesObject: SalesOrderModel | SalesQuoteModel | SalesInvoiceModel;\n  type: \"order\" | \"quote\" | \"invoice\";\n}\n\nexport const SalesGroupDetailsBlock = (props: ISalesGroupDetailsBlockProps): JSX.Element => {\n  const { salesObject, type } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <>\n      <h4 id=\"SalesOrderDetailsText\" className=\"px-2\">\n        {t(\"ui.storefront.common.Detail.Plural\")}\n      </h4>\n      <hr className=\"my-2 border-bottom\" />\n      <Table className=\"w-100 mb-3\" bsPrefix=\"null\">\n        <tbody>\n          <tr>\n            <td className=\"px-2\">\n              {t(\"ui.storefront.common.ID\", \"ID\")}\n            </td>\n            <td className=\"px-2\">\n              {salesObject.ID}\n            </td>\n          </tr>\n          <tr>\n            <td className=\"px-2\">\n              <span id=\"SalesOrderDateText\" className=\"text-capitalize\">\n                {t(\"ui.storefront.common.OrderDate\", \"Order Date\")}\n              </span>\n            </td>\n            <td className=\"px-2\">\n              <span id=\"sales-order-salesDate\">\n                {DateTime\n                  .fromISO(salesObject.CreatedDate as unknown as string)\n                  .toFormat(\"dd-MM-yyyy\")}\n              </span>\n            </td>\n          </tr>\n          <tr>\n            <td className=\"text-capitalize px-2\">\n              <span id=\"SalesOrderStatusText\">\n                {t(\"ui.storefront.common.Status\", \"Status\")}\n              </span>\n            </td>\n            <td className=\"text-capitalize px-2\">\n              <span id=\"SalesOrderStatusKey\">{salesObject.StatusTranslationKey\n                ? t(salesObject.StatusTranslationKey)\n                : salesObject.StatusName}\n              </span>\n            </td>\n          </tr>\n          <tr>\n            <td className=\"text-capitalize px-2\">\n              {t(\"ui.storefront.common.Number\", \"Number\")}\n            </td>\n            <td className=\"px-2\">\n              {salesObject.CustomKey}\n            </td>\n          </tr>\n          <tr>\n            <td className=\"text-capitalize px-2\">\n              {t(\"ui.storefront.storeDashboard.print.OrderType\", \"Order Type\")}\n            </td>\n            <td className=\"px-2\">\n              {salesObject.TypeDisplayName || salesObject.TypeName}\n            </td>\n          </tr>\n          <tr>\n            <td className=\"px-2\">\n              {t(\"ui.storefront.common.Card\", \"Card\")}\n            </td>\n            <td className=\"px-2\">\n              {/* TODO */}\n              Visa ending in 1234\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n      {type === \"order\" && <OrderShippingTracker order={salesObject as SalesOrderModel} />}\n    </>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { AccountContactModel, SalesInvoiceModel, WalletModel } from \"src/_api/cvApi._DtoClasses\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { InvoiceModalBillingContactSection } from \"src/Dashboard/Invoices/InvoiceModalBillingContactSection\";\nimport { InvoiceModalWalletSection } from \"src/Dashboard/Invoices/InvoiceModalWalletSection\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport promiser from \"src/_shared/Promiser\";\nimport { PayMultipleInvoicesByAmountsDto } from \"src/_api\";\n\ninterface IPayInvoiceModalProps {\n  invoice: SalesInvoiceModel;\n  show: boolean;\n  onConfirm: Function;\n  onCancel: Function;\n  loading?: boolean;\n}\n\nexport const PayInvoiceModal = (props: IPayInvoiceModalProps): JSX.Element => {\n  const [ selectedWalletItem, setSelectedWalletItem ] = useState<WalletModel>(null);\n  const [ selectedWalletItemCVV, setSelectedWalletItemCVV ]\n    = useState<string>(\"\");\n  const [ selectedBillingContact, setSelectedBillingContact ]\n    = useState<AccountContactModel>(null);\n  const [ chosenAmount, setChosenAmount ] = useState<string>(\"\");\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n\n  const { invoice, show, onConfirm, onCancel } = props;\n\n  const addressBook = useAddressBook();\n\n  useEffect(() => {\n    if (invoice && !chosenAmount) {\n      setChosenAmount(invoice.BalanceDue.toString());\n    }\n  }, [ invoice ]);\n\n  useEffect(() => {\n    if (!addressBook || selectedBillingContact) {\n      return;\n    }\n    const defaultBilling = addressBook.find(ac => ac.IsBilling);\n    setSelectedBillingContact(defaultBilling ?? null);\n  }, [ addressBook ]);\n\n  function payInvoice(): void {\n    const {\n      ID,\n      CardHolderName,\n      CardType,\n      CreditCardNumber,\n      ExpirationMonth,\n      ExpirationYear\n    } = selectedWalletItem;\n    setRunning();\n    const amount = parseFloat(chosenAmount) + invoice.Totals.Fees;\n    const dto: PayMultipleInvoicesByAmountsDto = {\n      Billing: selectedBillingContact.Slave,\n      Amounts: {},\n      Payment: {\n        Active: true,\n        Amount: amount,\n        CVV: selectedWalletItemCVV,\n        CardHolderName,\n        CardNumber: CreditCardNumber,\n        CardType,\n        CreatedDate: new Date(),\n        CustomKey: null,\n        ExpirationMonth,\n        ExpirationYear,\n        ID: 0,\n        StatusID: invoice.StatusID,\n        TypeID: invoice.TypeID,\n        WalletID: ID,\n        Zip: null\n      }\n    };\n    dto.Amounts[invoice.ID] = amount;\n    cvApi.providers\n      .PayMultipleInvoicesByAmounts(dto)\n      .then(res => {\n        promiser.flush(\"cvApi.payments.GetSalesInvoicePaymentsForCurrentAccount\");\n        finishRunning();\n        onConfirm();\n      })\n      .catch(err => {\n        console.error(err);\n        finishRunning(true, err);\n      });\n  }\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  const totalFees = invoice.Totals.Fees\n    + cefConfig.featureSet.payments.methods.creditCard.uplifts.amount\n    // eslint-disable-next-line @typescript-eslint/no-extra-parens\n    + ((invoice.Totals.Fees\n    + invoice.Totals.Total)\n      * cefConfig.featureSet.payments.methods.creditCard.uplifts.percent);\n\n  return (\n    <ConfirmationModal\n      title={t(\"ui.storefront.userDashboard.controls.salesDetail.PayInvoice\")}\n      show={show}\n      onConfirm={payInvoice}\n      confirmDisabled={\n        !selectedWalletItem\n        || selectedWalletItemCVV.length < 3\n        || selectedWalletItemCVV.length > 4\n        || !chosenAmount.length\n        || parseFloat(chosenAmount) <= 0\n        || !selectedBillingContact\n        || viewState.running\n      }\n      onCancel={onCancel}\n      size={ServiceStrings.modalSizes.lg}>\n      <div className=\"text-body position-relative\">\n        {viewState.running ? <LoadingWidget overlay={true} /> : null}\n        <span id=\"pimSelectACardText\">\n          {t(\"ui.storefront.checkout.views.paymentInformation.selectACard\")}\n        </span>\n        <InvoiceModalWalletSection\n          onChange={walletItem => {\n            setSelectedWalletItem(walletItem);\n            setSelectedWalletItemCVV(\"\");\n          }}\n          onCVVChange={(cvv: string) => {\n            setSelectedWalletItemCVV(cvv);\n          }}\n          CVV={selectedWalletItemCVV}\n          initialWalletItem={selectedWalletItem}\n        />\n        <span id=\"pimSelectABillingAddressText\">\n          {t(\n            \"ui.storefront.userDashboard2.controls.addressBook.PleaseSelectABillingAddress\"\n          )}\n        </span>\n        <InvoiceModalBillingContactSection\n          addressBook={addressBook}\n          onChange={contact => {\n            setSelectedBillingContact(contact);\n          }}\n          initialContact={selectedBillingContact}\n        />\n        <div className=\"bg-light p-3\">\n          <div className=\"d-flex\">\n            <div className=\"w-50\">\n              <p id=\"pimBalanceDueTitle\" className=\"mb-1\">\n                {t(\"ui.storefront.userDashboard.invoices.BalanceDue\")}\n              </p>\n              <p id=\"pimBalanceDueText\" className=\"h3 mt-0 mb-1\">{currencyFormatter.format(invoice.BalanceDue)}</p>\n            </div>\n            <div className=\"w-50\">\n              <p id=\"pimChosenAmountTitle\" className=\"mb-1\">\n                {t(\"ui.storefront.userDashboard.invoices.ChosenAmount\")}\n              </p>\n              <InputGroup>\n                <InputGroup.Text>\n                  <i className=\"fal fa-fw fa-dollar-sign\" />\n                </InputGroup.Text>\n                <Form.Control\n                  id=\"pimChosenAmountText\"\n                  type=\"number\"\n                  className=\"text-end\"\n                  value={chosenAmount}\n                  onChange={e => {\n                    if (!e.target.value.length) {\n                      setChosenAmount(\"0\");\n                      return;\n                    }\n                    if (isNaN(Number(e.target.value))\n                      || Number(e.target.value) > invoice.BalanceDue\n                      || e.target.value.includes(\"-\")\n                      || Number(e.target.value) < 0) {\n                      return;\n                    }\n                    setChosenAmount(e.target.value);\n                  }}\n                />\n              </InputGroup>\n            </div>\n          </div>\n          <div className=\"d-flex\">\n            <div className=\"w-50\">\n              <p id=\"pimTotalFeesTitle\" className=\"mb-1\">Total Fees</p>\n              <p id=\"pimTotalFeesText\" className=\"h3 mt-0 mb-1\">\n                {currencyFormatter.format(totalFees)}\n              </p>\n            </div>\n            <div className=\"w-50\">\n              <p id=\"pimTotalPaymentAmountTitle\" className=\"mb-1\">Total Payment Amount</p>\n              <p id=\"pimTotalPaymentAmountText\" className=\"h3 mt-0 mb-1\">\n                {/* @ts-ignore */}\n                {currencyFormatter.format(invoice.Totals.Fees + parseFloat(chosenAmount) + totalFees)}\n              </p>\n            </div>\n          </div>\n          {/* TODO: Remarks about useGreater uplift fee result setting when active (default off) */}\n          <div>\n            {cefConfig.featureSet.payments.methods.creditCard.uplifts.percent > 0\n              && <p className=\"mb-0 mt-2\">\n                <small className=\"small\">\n                  {t(\"ui.storefront.purchasing.weMayApplyFeeToCCtransToCoverCosts\")}\n                </small>\n              </p>\n            }\n            {cefConfig.featureSet.payments.methods.creditCard.uplifts.amount > 0\n              && <p className=\"mb-0 mt-2\">\n                <b>NOTE:</b>\n                A {currencyFormatter.format(cefConfig.featureSet.payments.methods.creditCard.uplifts.amount)}\n                {\" \"}processing fee is charged for credit card transactions.\n              </p>\n            }\n          </div>\n          {/* {selectedPaymentMethod === ServiceStrings?.checkout.paymentMethods.echeck && <div>\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent > 0 && <p className=\"mb-0 mt-2\">\n              <small className=\"small\">\n                <b>NOTE:</b> A {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.percent * 100}%\n                processing fee is charged for eCheck transactions.\n              </small>\n            </p>}\n            {cefConfig?.featureSet?.payments?.methods?.eCheck?.uplifts?.amount > 0 && <p className=\"mb-0 mt-2\">\n              <small className=\"small\">\n                <b>NOTE:</b>\n                A {currencyFormatter.format(cefConfig?.featureSet.payments.methods.eCheck.uplifts.amount)}\n                processing fee is charged for eCheck transactions.\n              </small>\n            </p>}\n          </div>} */}\n        </div>\n      </div>\n    </ConfirmationModal>\n  );\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, ButtonGroup } from \"react-bootstrap\";\nimport { PayInvoiceModal } from \"src/Dashboard/Invoices/PayInvoiceModal\";\n// TODO: Switch to use which modal based on setting\n// TODO: import { PayInvoiceModalEmbedded } from \"src/Dashboard/Invoices/PayInvoiceModalEmbedded\";\nimport { SalesInvoiceModel, SalesOrderModel, SalesQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\n\ninterface IMakeAPaymentProps {\n  classes?: string;\n  icon?: boolean;\n  excludeQuoteCart?: boolean;\n  label?: string;\n  disabled?: boolean;\n  product?: ProductModel;\n  quantity?: number;\n  balanceIsPastDue: boolean;\n  salesObject: SalesOrderModel | SalesInvoiceModel | SalesQuoteModel;\n  onPaymentConfirmed?: Function;\n}\n\nexport const MakeAPaymentButton = (props: IMakeAPaymentProps): JSX.Element => {\n  const { classes, disabled, balanceIsPastDue, salesObject, onPaymentConfirmed } = props;\n\n  const [ showPayInvoiceModal, setShowPayInvoiceModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n\n  return (\n    <div className=\"position-relative\">\n      <PayInvoiceModal\n        show={showPayInvoiceModal}\n        invoice={salesObject}\n        onConfirm={() => {\n          setShowPayInvoiceModal(false);\n          if (onPaymentConfirmed) {\n            onPaymentConfirmed();\n          }\n        }}\n        onCancel={() => setShowPayInvoiceModal(false)}\n      />\n      {/* <PayInvoiceModalEmbedded\n        show={showPayInvoiceModal}\n        invoice={salesObject}\n        onHide={() => setShowPayInvoiceModal(false)}\n      /> */}\n      <ButtonGroup className=\"w-100\">\n        <Button\n          id=\"btnMakeAPayment\"\n          variant={balanceIsPastDue ? \"danger\" : \"warning\"}\n          className={classes ?? \"btn-block btn-md rounded-start text-nowrap\"}\n          disabled={disabled || false}\n          type=\"button\"\n          onClick={() => setShowPayInvoiceModal(true)}>\n          {t(\"ui.storefront.userDashboard.controls.salesGroupDetail.MakeAPayment\")}\n        </Button>\n      </ButtonGroup>\n    </div>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Table } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport { PaymentModel } from \"src/_api/cvApi._DtoClasses\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport promiser from \"src/_shared/Promiser\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { DateTime } from \"luxon\";\n\ninterface InvoicePaymentsTableProps {\n  invoiceID: number;\n}\nexport const InvoicePaymentsTable = (props: InvoicePaymentsTableProps): JSX.Element => {\n  const [ payments, setPayments ] = useState<PaymentModel[]>([]);\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  useEffect(() => {\n    const promiserKey = \"cvApi.payments.GetSalesInvoicePaymentsForCurrentAccount\";\n    setRunning();\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.payments.GetSalesInvoicePaymentsForCurrentAccount({\n        Active: true,\n        AsListing: true,\n        MasterID: props.invoiceID,\n        Paging: {\n          Size: 9,\n          StartIndex: 1\n        }\n      })\n    )\n      .then(result => {\n        if (!result.data?.Results) {\n          finishRunning(true, \"Could not find payment results.\");\n          return;\n        }\n        let payments2 = result.data.Results;\n        payments2 = payments2.sort((a, b) => {\n          const createdDateComp = new Date(b.CreatedDate).getTime() - new Date(a.CreatedDate).getTime();\n          if (createdDateComp === 0) {\n            return new Date(b.UpdatedDate).getTime() - new Date(a.CreatedDate).getTime();\n          }\n          return createdDateComp;\n        });\n        setPayments(payments2);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }, [ props.invoiceID ]);\n  if (viewState.running) {\n    return <LoadingWidget size=\"1x\" />;\n  }\n  if (!payments.length) {\n    return null;\n  }\n  return <Table>\n    <thead>\n      <tr>\n        <th className=\"text-nowrap\">{t(\"ui.storefront.common.PaymentDate\")}</th>\n        <th className=\"text-nowrap\">{t(\"ui.storefront.common.TransactionID\")}</th>\n        <th className=\"text-nowrap\">{t(\"ui.storefront.common.Status\")}</th>\n        <th className=\"text-nowrap\">{t(\"ui.storefront.common.Amount\")}</th>\n      </tr>\n    </thead>\n    <tbody>\n      {payments.map(payment => {\n        return <tr key={`invoicePayment_${props.invoiceID}_${payment.ID}`}>\n          <td className=\"text-nowrap\">\n            {DateTime.fromISO(\n              new Date(payment.UpdatedDate ?? payment.CreatedDate).toISOString()\n            ).toFormat(\"yyyy MMM dd h:mm a\")}\n          </td>\n          <td className=\"text-nowrap\">{payment.TransactionID ?? payment.TransactionNumber}</td>\n          <td className=\"text-nowrap\">{payment.StatusName}</td>\n          <td className=\"text-nowrap\">{currencyFormatter.format(payment.Amount)}</td>\n        </tr>;\n      })}\n    </tbody>\n  </Table>;\n};\n","import { Fragment } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col } from \"react-bootstrap\";\nimport { SalesInvoiceModel, SalesOrderModel, SalesQuoteModel } from \"src/_api/cvApi._DtoClasses\";\nimport { SalesGroupContactBlock } from \"src/_shared/salesGroup/SalesGroupContactBlock\";\nimport { SalesGroupDetailsBlock } from \"src/_shared/salesGroup/SalesGroupDetailsBlock\";\nimport { MakeAPaymentButton } from \"src/Cart/controls/MakeAPaymentButton\";\nimport { InvoicePaymentsTable } from \"src/Dashboard/Invoices/InvoicePaymentsTable\";\n\ninterface ISalesGroupDetailsAdditionalDetailsProps {\n  type: \"order\" | \"quote\" | \"invoice\";\n  salesObject: SalesOrderModel | SalesInvoiceModel | SalesQuoteModel;\n  onPaymentConfirmed?: Function;\n}\n\nexport const SalesGroupDetailsAdditionalDetails = (props: ISalesGroupDetailsAdditionalDetailsProps): JSX.Element => {\n  const { type, salesObject, onPaymentConfirmed } = props;\n\n  const { t } = useTranslation();\n\n  function today(): string {\n    return new Date().toDateString();\n  }\n\n  function hasDueDate(): boolean {\n    if (salesObject.StatusKey !== \"Unpaid\" && salesObject.BalanceDue <= 0) {\n      return false;\n    }\n    return \"DueDate\" in salesObject;\n  }\n\n  const balanceIsPastDue = hasDueDate() ? Date.parse(salesObject.DueDate) < Date.parse(today()) : false;\n\n  return (\n    <Fragment>\n      <Col\n        sm={6}\n        md={4}\n        className=\"order-2 order-md-1\">\n        <SalesGroupDetailsBlock\n          salesObject={salesObject}\n          type={type}\n        />\n        {type === \"invoice\" ? (\n          <>\n            <div className=\"d-flex flex-column w-100 mb-3\">\n              <b id=\"SalesOrderBalanceDueText\">{t(\"ui.storefront.userDashboard2.controls.salesDetail.BalanceDue\")}</b>\n              <div\n                id=\"SalesOrderBalanceDueAmount\"\n                className={`p-2 alert d-flex justify-content-between align-items-center ${\n                  salesObject.StatusKey === \"Paid\" || salesObject.BalanceDue <= 0\n                    ? \"alert-success\"\n                    : balanceIsPastDue\n                      ? \"alert-danger\"\n                      : \"alert-warning\"\n                }`}>\n                {salesObject.BalanceDue && salesObject.BalanceDue > 0 ? `$${salesObject.BalanceDue}` : \"Paid\"}\n                {salesObject.StatusKey !== \"Paid\" && salesObject.BalanceDue > 0 ? (\n                  <MakeAPaymentButton\n                    balanceIsPastDue={balanceIsPastDue}\n                    salesObject={salesObject}\n                    onPaymentConfirmed={onPaymentConfirmed}\n                  />\n                ) : null}\n              </div>\n              {balanceIsPastDue && salesObject.BalanceDue > 0 ? (\n                <div className=\"alert alert-danger\">\n                  <span>Your payment is passed due.</span>\n                </div>\n              ) : null}\n            </div>\n          </>\n        ) : null}\n      </Col>\n      <Col\n        sm={6}\n        md={4}\n        className=\"order-2 order-md-1\">\n        {salesObject?.ShippingContact && (\n          <SalesGroupContactBlock\n            contact={salesObject.ShippingContact}\n            headerKey=\"ui.storefront.common.Shipping\"\n          />\n        )}\n      </Col>\n      {type === \"invoice\" && (\n        <Col\n          sm={12}\n          className=\"mt-2 order-3 order-md-2\">\n          <InvoicePaymentsTable invoiceID={salesObject.ID} />\n        </Col>\n      )}\n    </Fragment>\n  );\n};\n","import { Fragment } from \"react\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ProductCardActionButtonWidget } from \"src/Catalog/controls\";\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport { SalesItemQuantityLine } from \"src/_shared/salesGroup/SalesItemQuantityLine\";\nimport { CVGrid } from \"../CVGrid/CVGrid\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ISalesGroupItemsTableProps {\n  salesItems: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>[];\n  productsMap: { [id: string]: ProductModel };\n}\n\nexport const SalesGroupItemsTable = (props: ISalesGroupItemsTableProps): JSX.Element => {\n  const { salesItems, productsMap } = props;\n  const { t } = useTranslation();\n\n  return (\n    <CVGrid\n      data={salesItems}\n      noStripes\n      hidePaging\n      tableClasses=\"table-shadow-none border border-medium\">\n      <CVGrid.Column\n        title={t(\"ui.storefront.userDashboard.salesGroup.ERX\", \"ERX\")}\n        thClass=\"border-top border-medium\">\n        {(item: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => <ERX item={item} />}\n      </CVGrid.Column>\n      <CVGrid.Column\n        title=\"Name\"\n        thClass=\"border-top border-medium\"\n        tdClass=\"w-100\">\n        {(item: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => <ColumnRenderProductName\n          item={item}\n          productsMap={productsMap}\n        />}\n      </CVGrid.Column>\n      <CVGrid.Column\n        title=\"Price\"\n        thClass=\"border-top border-medium\">\n        {(item: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => <ColumnRenderPrice\n          item={item}\n          productsMap={productsMap}\n        />}\n      </CVGrid.Column>\n      <CVGrid.Column\n        title=\"Quantity\"\n        thClass=\"text-center border-top border-medium\">\n        {(item: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => <ColumnRenderQuantity\n          item={item}\n          productsMap={productsMap}\n        />}\n      </CVGrid.Column>\n      <CVGrid.Column\n        title=\"Subtotal\"\n        thClass=\"border-top border-medium\">\n        {(item: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => <ColumnRenderSubtotal\n          item={item}\n          productsMap={productsMap}\n        />}\n      </CVGrid.Column>\n      <CVGrid.Column\n        title=\"AddToCart\"\n        thClass=\"border-top border-medium\"\n        hideHeader>\n        {(item: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => <ColumnRenderAddToCart\n          item={item}\n          productsMap={productsMap}\n        />}\n      </CVGrid.Column>\n    </CVGrid>\n  );\n};\n\ninterface ICustomColumnProps {\n  item: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>;\n  productsMap?: { [productID: string]: ProductModel };\n}\n\nfunction ERX(props: ICustomColumnProps): JSX.Element {\n  const { item } = props;\n\n  const cefConfig = useCefConfig();\n\n  return <a href={corsLink(\n    cefConfig,\n    `/${item.ProductSeoUrl}`,\n    \"productDetail\"\n  )}>\n    {item.CustomKey || \"N/A\"}\n  </a>;\n}\n\nfunction ColumnRenderProductName(props: ICustomColumnProps): JSX.Element {\n  const cefConfig = useCefConfig();\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  const { item, productsMap } = props;\n  const itemProductIDAsString = item.ProductID.toString();\n  let productSeoUrl = \"\";\n  if (productsMap && productsMap[itemProductIDAsString]) {\n    productSeoUrl = productsMap[itemProductIDAsString].SeoUrl;\n  }\n\n  return (\n    <ProductCardNameWidget\n      productName={item.Name}\n      productSeoUrl={productSeoUrl}\n      className=\"text-primary fw-normal\"\n    />\n  );\n}\n\nconst ColumnRenderPrice = (props: ICustomColumnProps): JSX.Element => {\n  const { item } = props;\n  const discountTotal = item.Discounts\n    ? item.Discounts.reduce((curVal, accu) => curVal + accu.DiscountTotal, 0)\n    : 0;\n\n  return (\n    <Fragment>\n      <div\n        className={`form-control-static cart-price price text-end py-0 ${\n          item.UnitCorePrice && item.UnitSoldPrice > 0 && item.UnitCorePrice !== item.UnitSoldPrice\n            ? \"strike-through small text-disabled pb-0\"\n            : \"\"\n        }`}\n        id={`ProductLineItemCorePrice_${item?.ID ?? \"\"}`}>\n        {currencyFormatter.format(item.UnitCorePrice)}\n      </div>\n      {item.UnitSoldPrice && item.UnitCorePrice !== item.UnitSoldPrice && item.UnitSoldPrice > 0\n        ? <div\n          className={`form-control-static cart-price price text-end text-danger py-0 ${\n            discountTotal && discountTotal > 0 ? \"strike-through small text-disabled pb-0\" : \"\"\n          }`}\n          id={`ProductLineItemSalePrice_${item?.ID ?? \"\"}`}>\n          {currencyFormatter.format(item.UnitSoldPrice)}\n        </div>\n        : null}\n      {discountTotal && discountTotal > 0\n        ? <div className=\"form-control-static cart-price price text-end text-success py-0\">\n          {currencyFormatter.format(item.UnitSoldPrice || item.UnitCorePrice || 0)}\n        </div>\n        : null}\n    </Fragment>\n  );\n};\n\nfunction ColumnRenderQuantity(props: ICustomColumnProps): JSX.Element {\n  const { item } = props;\n  if (item.QuantityBackOrdered <= 0) {\n    return <div className=\"text-center\">{(item.Quantity ?? 0) + (item.QuantityPreSold ?? 0)}</div>;\n  }\n  return (\n    <div className=\"text-center\">\n      <SalesItemQuantityLine salesItem={item} />\n    </div>\n  );\n}\n\nfunction ColumnRenderSubtotal(props: ICustomColumnProps): JSX.Element {\n  const { item } = props;\n\n  const discountTotal = item.Discounts\n    ? item.Discounts.reduce((curVal, accu) => curVal + accu.DiscountTotal, 0)\n    : 0;\n\n  return (\n    <Fragment>\n      <div\n        id={`ProductLineItemPriceSubtotal_${item.ID ?? \"\"}`}\n        className={`form-control-static font-weight-normal text-end py-0 ${\n          item.UnitCorePrice && item.UnitCorePrice !== item.UnitSoldPrice && item.UnitSoldPrice > 0\n          || discountTotal > 0\n            ? \"strike-through small text-disabled pb-0\"\n            : null\n        }`}>\n        {currencyFormatter.format(item.UnitCorePrice * item.TotalQuantity)}\n      </div>\n      {item.UnitCorePrice !== item.UnitSoldPrice && item.UnitSoldPrice > 0\n        ? <div\n          id={`ProductLineItemSalePriceSubtotal_${item.ID ?? \"\"}`}\n          className={`form-control-static font-weight-normal text-end text-danger py-0 ${\n            discountTotal && discountTotal < 0 ? \"strike-through small text-disabled pb-0\" : \"\"\n          }`}>\n          {currencyFormatter.format(item.ExtendedPrice)}\n        </div>\n        : null}\n      {discountTotal < 0\n        ? <div\n          id={`cartProductSubtotalWithDiscounts_${item.ID ?? \"\"}`}\n          className={\"form-control-static font-weight-normal text-end text-success py-0\"}>\n          {currencyFormatter.format(item.ExtendedPrice + discountTotal)}\n        </div>\n        : null}\n    </Fragment>\n  );\n}\n\nfunction ColumnRenderAddToCart(props: ICustomColumnProps): JSX.Element {\n  const { item, productsMap } = props;\n  const itemProductIDAsString = item.ProductID.toString();\n  if (!productsMap || !productsMap[itemProductIDAsString]) {\n    return null;\n  }\n  const itemProduct = productsMap[itemProductIDAsString];\n\n  return <ProductCardActionButtonWidget\n    product={itemProduct}\n    forceNoQuantitySelector={true}\n    addToCartBtnClasses={\"text-nowrap rounded-pill ms-3\"}\n    addToCartBtnVariant=\"primary\"\n  />;\n}\n","import React, { useState } from \"react\";\nimport { ConfirmationModal } from \"src/_shared/modals/ConfirmationModal\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { SetSalesQuoteAsCancelledDto, SetSalesQuoteAsRejectedDto } from \"src/_api\";\nimport cvApi from \"src/_api/cvApi\";\nimport { Anchor } from \"react-bootstrap\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface propTypes {\n  masterQuoteId: number;\n  getSalesObject: Function;\n  showApprovedModal: boolean;\n  showRejectedModal: boolean;\n  setShowRejectedModal: React.Dispatch<React.SetStateAction<boolean>>;\n  showCancelledModal: boolean;\n  setShowCancelledModal: React.Dispatch<React.SetStateAction<boolean>>;\n  setIsQuoteApproved: React.Dispatch<React.SetStateAction<boolean>>;\n  salesGroupId: string;\n  invoiceID: number;\n}\n\nexport const SalesGroupQuoteModals = ({ masterQuoteId,\n  getSalesObject,\n  showApprovedModal,\n  showRejectedModal,\n  setShowRejectedModal,\n  showCancelledModal,\n  setShowCancelledModal,\n  setIsQuoteApproved,\n  salesGroupId,\n  invoiceID }: propTypes): JSX.Element => {\n  const [ rejectionReason, setRejectionReason ] = useState<string>(\"\");\n  const [ cancellationReason, setCancellationReason ] = useState<string>(\"\");\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const { setRunning, finishRunning } = useViewState();\n\n  const rejectQuote = () => {\n    setRunning();\n    const dto: SetSalesQuoteAsRejectedDto = {\n      QuoteID: masterQuoteId,\n      Note: rejectionReason\n    };\n    cvApi.providers\n      .SetSalesQuoteAsRejected(dto)\n      .then(res => {\n        if (!res?.data?.ActionSucceeded) {\n          finishRunning(true, null, res?.data?.Messages ?? [ \"Failed to register or authenticate\" ]);\n          return;\n        }\n        getSalesObject(masterQuoteId);\n      })\n      .catch(err => {\n        finishRunning(true, err.data?.Message ?? \"Failed to register or authenticate\");\n      });\n  };\n\n  const cancelQuote = () => {\n    setRunning();\n    const dto: SetSalesQuoteAsCancelledDto = {\n      QuoteID: masterQuoteId,\n      Note: cancellationReason\n    };\n    cvApi.providers\n      .SetSalesQuoteAsCancelled(dto)\n      .then(res => {\n        if (!res?.data?.ActionSucceeded) {\n          finishRunning(true, null, res?.data?.Messages ?? [ \"Failed to register or authenticate\" ]);\n          return;\n        }\n        getSalesObject(masterQuoteId);\n      })\n      .catch(err => {\n        finishRunning(true, err.data?.Message ?? \"Failed to register or authenticate\");\n      });\n  };\n\n  const handleRejectionReasonChange = (e: any) => {\n    setRejectionReason(e.target.value);\n  };\n\n  const handleCancellationReasonChange = (e: any) => {\n    setCancellationReason(e.target.value);\n  };\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  return <>\n    <ConfirmationModal\n      show={showApprovedModal}\n      title={\"Quote Approved\"}\n      onConfirm={(): void => setIsQuoteApproved(false)}\n      onCancel={() => {\n        setIsQuoteApproved(false);\n        window.location.reload();\n      }}\n      // btn label is a link\n      confirmBtnLabel={\n        <Anchor\n          className=\"text-white\"\n          href={corsLink(cefConfig, `/sales-group/${salesGroupId}/invoice/${invoiceID}`, \"dashboard\")}>\n          {t(\"ui.storefront.userDashboard.controls.salesDetail.PayInvoice\")}\n        </Anchor>\n      }\n      cancelBtnLabel={t(\"ui.storefront.common.OK\")}\n    >\n      <section className=\"modal-body justify-content-center align-items-center\">\n        <h3 className=\"modal-title text-center mb-3\">Your quote has been approved.</h3>\n        <p>Click OK to continue viewing this page or go to the invoice to review and/or make a payment.</p>\n      </section>\n    </ConfirmationModal>\n    <ConfirmationModal\n      show={showRejectedModal}\n      title={\"Reject Quote\"}\n      onConfirm={rejectQuote}\n      onCancel={() => setShowRejectedModal(false)}\n      confirmBtnLabel={\"Reject Quote\"}\n      cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}>\n      <section className=\"modal-body justify-content-center align-items-center\">\n        <h5 className=\"modal-title mb-3\">\n          Please provide a reason for rejecting this quote for our team to consider during review. (optional)\n        </h5>\n        <textarea name=\"rejectionMessage\"\n          id=\"rejectionMessage\"\n          cols={50}\n          rows={5}\n          onChange={e => handleRejectionReasonChange(e)} />\n      </section>\n    </ConfirmationModal>\n    <ConfirmationModal\n      show={showCancelledModal}\n      title={\"Reject Quote\"}\n      onConfirm={cancelQuote}\n      onCancel={() => setShowCancelledModal(false)}\n      confirmBtnLabel={\"Cancel Quote\"}\n      cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}>\n      <section className=\"modal-body justify-content-center align-items-center\">\n        <h5 className=\"modal-title mb-3\">\n          Please provide a reason for cancelling this quote for our team to review. (optional)\n        </h5>\n        <textarea name=\"cancellationMessage\"\n          id=\"cancellationMessage\"\n          cols={50}\n          rows={5}\n          onChange={e => handleCancellationReasonChange(e)} />\n      </section>\n    </ConfirmationModal>\n  </>;\n};\n","/* eslint-disable max-len */\n/* eslint-disable capitalized-comments */\nimport { Fragment, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { SalesGroupDetailsAdditionalDetails } from \"src/Dashboard/SalesGroup/SalesGroupDetailsAdditionalDetails\";\nimport { AddAllToCartButton } from \"src/Cart/controls\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ISalesGroupDetailsProps } from \"src/Dashboard/SalesGroup/_salesGroupTypes\";\nimport { SalesGroupItemsTable } from \"src/_shared/salesGroup/SalesGroupItemsTable\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { Link } from \"react-router-dom\";\nimport { SetSalesQuoteAsApprovedDto } from \"src/_api\";\nimport { SalesGroupQuoteModals } from \"src/Dashboard/SalesGroup/SalesGroupQuoteModals\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { TotalsWidget } from \"../../Cart/views/TotalsWidget\";\n\nexport const SalesGroupDetails = (props: ISalesGroupDetailsProps): JSX.Element => {\n  const { params, salesGroup, salesObject, onPaymentConfirmed, onSelectedSalesTabChange, getSalesObject, isQuoteApproved, setIsQuoteApproved, invoiceID, setInvoiceID } = props;\n  const { type, typeId, salesGroupId } = params;\n\n  const [ productsMap, setProductsMap ] = useState<{ [id: string]: ProductModel }>(null);\n  const [ isMasterQuote, setIsMasterQuote ] = useState<boolean>(true);\n  const [ showApprovedModal, setShowApprovedModal ] = useState<boolean>(false);\n  const [ showRejectedModal, setShowRejectedModal ] = useState<boolean>(false);\n  const [ showCancelledModal, setShowCancelledModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning } = useViewState();\n  const cefConfig = useCefConfig();\n  const productFactory = useProductFactory();\n\n  const masterQuoteId: number = salesGroup.SalesQuoteRequestMasters?.length > 0\n    ? salesGroup.SalesQuoteRequestMasters[0].ID\n    : null;\n\n  useEffect(() => {\n    setIsMasterQuote(Number(typeId) === masterQuoteId);\n  }, [ typeId ]);\n\n  useEffect(() => {\n    setShowApprovedModal(isQuoteApproved);\n  }, [ isQuoteApproved ]);\n\n  useEffect(() => {\n    if (!productFactory || !salesGroup) {\n      return;\n    }\n\n    if (\n      type === \"invoice\"\n      && Boolean(salesGroup?.SalesOrderMasters?.length)\n      && Boolean(salesGroup?.SubSalesOrders?.length)\n    ) {\n      setItemsAndProductsForInvoice();\n    } else if (salesObject?.SalesItems?.length) {\n      setProductsForSalesObject();\n    }\n  }, [ productFactory ]);\n\n  async function setProductsForSalesObject() {\n    setRunning();\n    const itemsWithQuantity = salesObject.SalesItems.filter(\n      item => item.Quantity > 0 || item.QuantityBackOrdered > 0 || item.QuantityPreSold > 0\n    );\n    const productsOfSalesObject = await getProductsForSalesItems(itemsWithQuantity.map(x => x.ProductID));\n    setProductsMap(productsOfSalesObject);\n    finishRunning();\n  }\n\n  function setItemsAndProductsForInvoice(): void {\n    if (!salesGroup || !salesGroup.SalesOrderMasters || !salesGroup.SubSalesOrders) {\n      return;\n    }\n    setRunning();\n    const allOrders = [ ...salesGroup.SalesOrderMasters, ...salesGroup.SubSalesOrders ];\n    Promise.all(allOrders.map(order => cvApi.ordering.GetSecureSalesOrder(order.ID))).then(resArr => {\n      const salesItemsOfOrders: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>[] = [];\n      const productIdsOfOrders: number[] = [];\n      resArr.forEach(orderRes => {\n        salesItemsOfOrders.push(...orderRes.data.SalesItems);\n      });\n      for (let i = 0; i < salesItemsOfOrders.length; i++) {\n        const curItem = salesItemsOfOrders[i];\n        const totalQuantity\n          = curItem.Quantity + (curItem.QuantityBackOrdered || 0) + (curItem.QuantityPreSold || 0);\n        if (totalQuantity < 1) {\n          continue;\n        }\n        if (!productIdsOfOrders.includes(curItem.ProductID)) {\n          productIdsOfOrders.push(curItem.ProductID);\n        }\n      }\n      return getProductsForSalesItems(productIdsOfOrders);\n    })\n      .then(salesOrderProducts => {\n        setProductsMap(salesOrderProducts);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  async function getProductsForSalesItems(productIds: number[]) {\n    try {\n      const products = await productFactory.getProductsByIDs(productIds);\n\n      const productsMapI: { [id: string]: ProductModel } = {};\n      products.forEach(product => {\n        productsMapI[product.ID.toString()] = product;\n      });\n      return productsMapI;\n    } catch (err) {\n      if (cefConfig.debug) {\n        console.error(err);\n      }\n      return null;\n    }\n  }\n\n  const approveQuoteAndShowModal = () => {\n    setRunning();\n    const dto: SetSalesQuoteAsApprovedDto = {\n      QuoteID: masterQuoteId,\n    };\n    cvApi.providers\n      .SetSalesQuoteAsApproved(dto)\n      .then(res => {\n        if (!res?.data?.ActionSucceeded) {\n          finishRunning(true, null, res?.data?.Messages ?? [ \"Failed to approve quote\" ]);\n          return;\n        }\n        getSalesObject(masterQuoteId);\n        setInvoiceID(res.data.Result.InvoiceID);\n        setIsQuoteApproved(true);\n      })\n      .catch(err => {\n        finishRunning(true, err.data?.Message ?? \"Failed to approve quote\");\n      });\n  };\n\n  if (!salesObject) {\n    return null;\n  }\n\n  return (\n    <Fragment>\n      <SalesGroupQuoteModals masterQuoteId={masterQuoteId}\n        getSalesObject={getSalesObject}\n        showApprovedModal={showApprovedModal}\n        showRejectedModal={showRejectedModal}\n        setShowRejectedModal={setShowRejectedModal}\n        showCancelledModal={showCancelledModal}\n        setShowCancelledModal={setShowCancelledModal}\n        setIsQuoteApproved={setIsQuoteApproved}\n        salesGroupId={salesGroupId}\n        invoiceID={invoiceID} />\n      <Col>\n        <div className=\"sales-group-inner-detail\">\n          <Row className=\"align-items-center mb-3\">\n            <Col xs=\"auto\">\n              <h4 className=\"mb-0\">\n                {type === \"order\" && t(\"ui.storefront.common.OrderDetails\", \"Order Details\")}\n                {type === \"quote\" && t(\"ui.storefront.common.QuoteDetails\", \"Quote Details\")}\n                {type === \"invoice\" && t(\"ui.storefront.common.InvoiceDetails\", \"Invoice Details\")}\n              </h4>\n            </Col>\n            <Col />\n            <Col xs=\"auto\" className=\"d-print-none\">\n              {type === \"quote\" && isMasterQuote\n                  && <>\n                    <Button\n                      className=\"btn btn-success\"\n                      disabled={salesObject.StatusKey !== \"ReadyForApproval\"}\n                      style={{ marginRight: \"0.5rem\", color: \"white\" }}\n                      onClick={approveQuoteAndShowModal}\n                      id=\"btnApproveQuote\"\n                      title=\"ApproveQuote\"\n                      aria-label=\"ApproveQuote\">\n                      <span>{t(\"ui.storefront.common.Approve\")}</span>\n                    </Button>\n                    <Button\n                      className=\"btn btn-warning\"\n                      disabled={salesObject.StatusKey !== \"ReadyForApproval\"}\n                      style={{ marginRight: \"0.5rem\", color: \"white\" }}\n                      onClick={() => setShowRejectedModal(true)}\n                      id=\"btnRejectQuote\"\n                      title=\"RejectQuote\"\n                      aria-label=\"RejectQuote\">\n                      <span>{t(\"ui.storefront.common.Reject\")}</span>\n                    </Button>\n                    <Button\n                      className=\"btn btn-danger\"\n                      disabled={[ \"Approved\", \"Completed\", \"Cancelled\", \"ReadyForApproval\" ].includes(salesObject.StatusKey)}\n                      style={{ marginRight: \"0.5rem\", color: \"white\" }}\n                      onClick={() => setShowCancelledModal(true)}\n                      id=\"btnCancelQuote\"\n                      title=\"CancelQuote\"\n                      aria-label=\"CancelQuote\">\n                      <span>{t(\"ui.storefront.common.Cancel\")}</span>\n                    </Button>\n                  </>\n              }\n              {type === \"quote\" && !isMasterQuote\n                && <Link to={corsLink(cefConfig, `/sales-group/${salesGroupId}/quote/${masterQuoteId}`, \"dashboard\")}\n                  onClick={() => onSelectedSalesTabChange(masterQuoteId)}\n                  className=\"btn btn-secondary\"\n                  style={{ marginRight: \"0.5rem\" }}>Go to master order for approvals\n                </Link>\n              }\n            </Col>\n          </Row>\n          <Row className=\"mb-3\">\n            <Col xs={12}>\n              <SalesGroupItemsTable\n                salesItems={salesObject.SalesItems.filter(x => x.TotalQuantity > 0)}\n                productsMap={productsMap}\n              />\n            </Col>\n          </Row>\n          <Row className=\"mb-3\">\n            <Col xs={12}\n              sm={6}\n              md={4}\n              className=\"order-1 order-md-2\">\n              <Row>\n                <Col>\n                  <TotalsWidget\n                    totals={salesGroup.SalesOrderMasters && salesGroup.SalesOrderMasters[0]?.Totals}\n                    padAlign\n                  />\n                  <div className=\"d-flex align-items-center justify-content-between h4 mt-5 mb-3 px-3\">\n                    <span>\n                      {t(\"ui.storefront.common.Total\", \"Total\")}\n                    </span>\n                    <span>\n                      {currencyFormatter.format(salesGroup.SalesOrderMasters && salesGroup.SalesOrderMasters[0]?.Totals.Total || 0)}\n                    </span>\n                  </div>\n                  <div className=\"d-print-none\">\n                    <AddAllToCartButton\n                      btnVariant=\"success\"\n                      btnClasses=\"btn-block text-white text-nowrap\"\n                      salesItems={salesObject.SalesItems}\n                      useConfirmModal={true}\n                      classes=\"w-100\"\n                    />\n                  </div>\n                </Col>\n              </Row>\n            </Col>\n            <SalesGroupDetailsAdditionalDetails\n              type={type}\n              salesObject={salesObject}\n              onPaymentConfirmed={() => {\n                if (onPaymentConfirmed) {\n                  onPaymentConfirmed();\n                }\n              }}\n            />\n          </Row>\n        </div>\n      </Col>\n    </Fragment>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Collapse, Row } from \"react-bootstrap\";\nimport { Link, useRouteMatch } from \"react-router-dom\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\nimport { SalesGroupDetails } from \"src/Dashboard/SalesGroup/SalesGroupDetails\";\nimport cvApi from \"src/_api/cvApi\";\nimport {\n  SalesGroupModel,\n  SalesInvoiceModel,\n  SalesOrderModel,\n  SalesQuoteModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { ISalesGroupParams } from \"src/Dashboard/SalesGroup/_salesGroupTypes\";\nimport promiser from \"src/_shared/Promiser\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\n\n// This has been refactored to be a detail page\nexport const SalesGroup = (): JSX.Element => {\n  const [ salesGroup, setSalesGroup ] = useState<SalesGroupModel>(null);\n  const [ salesGroupFetched, setSalesGroupFetched ] = useState<boolean>(false);\n  const [ salesObjectFetched, setSalesObjectFetched ] = useState<boolean>(false);\n  const [ salesOrder, setSalesOrder ] = useState<SalesOrderModel>(null);\n  const [ salesInvoice, setSalesInvoice ] = useState<SalesInvoiceModel>(null);\n  const [ salesQuote, setSalesQuote ] = useState<SalesQuoteModel>(null);\n  const [ billingCollapseOpen, setBillingCollapseOpen ] = useState(false);\n  const [ isQuoteApproved, setIsQuoteApproved ] = useState(false);\n  const [ invoiceID, setInvoiceID ] = useState<number>();\n  const cefConfig = useCefConfig();\n  const { params } = useRouteMatch<ISalesGroupParams>(\n    corsLink(cefConfig, \"/sales-group/:salesGroupId/:type/:typeId\", \"dashboard\")\n  );\n  const { salesGroupId, type, typeId } = params;\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const salesOrderFactory = useSalesOrderFactory();\n\n  useEffect(() => {\n    setSalesGroupFetched(false);\n    setSalesObjectFetched(false);\n    getSalesObject();\n    getSalesGroup();\n  }, [ type, typeId ]);\n\n  function getSalesGroup(): void {\n    setRunning();\n    cvApi.sales\n      .GetSecureSalesGroup(Number(salesGroupId))\n      .then(res => {\n        setSalesGroup(res.data);\n        setSalesGroupFetched(true);\n        finishRunning();\n      })\n      .catch(err => {\n        setSalesGroupFetched(true);\n        finishRunning(true, err);\n      });\n  }\n\n  function getSalesOrder(id: number): void {\n    setRunning();\n    salesOrderFactory.getSalesOrder(id)\n      .then(res => {\n        setSalesOrder(res);\n        setSalesObjectFetched(true);\n        finishRunning();\n      })\n      .catch(err => {\n        setSalesObjectFetched(true);\n        finishRunning(true, err);\n      });\n  }\n\n  function getSalesQuote(id: number): void {\n    setRunning();\n    const promiserKey = `GetSecureSalesQuote(${id})`;\n    promiser.resolve(promiserKey, () => cvApi.providers.GetSecureSalesQuote(id))\n      .then(res => {\n        setSalesQuote(res.data);\n        setSalesObjectFetched(true);\n        finishRunning();\n      })\n      .catch(err => {\n        setSalesObjectFetched(true);\n        finishRunning(true, err);\n      });\n  }\n\n  function getSalesInvoice(id: number, force?: boolean): void {\n    setRunning();\n    const promiserKey = `GetSecureSalesInvoice(${id})`;\n    if (force) {\n      promiser.flush(promiserKey);\n    }\n    promiser.resolve(promiserKey, () => cvApi.providers.GetSecureSalesInvoice(id))\n      .then(res => {\n        setSalesInvoice(res.data);\n        setSalesObjectFetched(true);\n        finishRunning();\n      })\n      .catch(err => {\n        setSalesObjectFetched(true);\n        finishRunning(true, err);\n      });\n  }\n\n  function getSalesObject(id = Number(typeId)): void {\n    switch (type) {\n      case \"order\": {\n        promiser.flush(`GetSecureSalesOrder(${id})`);\n        getSalesOrder(id);\n        break;\n      }\n      case \"quote\": {\n        promiser.flush(`GetSecureSalesQuote(${id})`);\n        getSalesQuote(id);\n        break;\n      }\n      case \"invoice\": {\n        promiser.flush(`GetSecureSalesInvoice(${id})`);\n        getSalesInvoice(id);\n        break;\n      }\n      default: {\n        break;\n      }\n    }\n  }\n\n  function salesObjectInSalesGroup(): boolean {\n    if (!salesGroup) {\n      return false;\n    }\n    switch (type) {\n      case \"order\": {\n        return [\n          ...salesGroup.SalesOrderMasters,\n          ...salesGroup.SubSalesOrders\n        ].filter(order => order.ID === Number(typeId)).length > 0;\n      }\n      case \"invoice\": {\n        return salesGroup.SalesInvoices\n          .filter(invoice => invoice.ID === Number(typeId)).length > 0;\n      }\n      case \"quote\": {\n        return (\n          [\n            ...salesGroup.SalesQuoteRequestMasters,\n            ...salesGroup.SalesQuoteRequestSubs\n          ].filter(quote => quote.ID === Number(typeId)).length > 0\n        );\n      }\n      default: {\n        return false;\n      }\n    }\n  }\n\n  function onSelectedSalesTabChange(id: number): void {\n    getSalesObject(id);\n  }\n\n  const refreshForSalesInvoice = () => {\n    getSalesInvoice(Number(typeId), true);\n  };\n\n  const renderTabMainContent = () => {\n    if (viewState.running) {\n      return <LoadingWidget />;\n    }\n    if (salesGroup) {\n      switch (type) {\n        case \"order\": {\n          if (!salesOrder) {\n            getSalesOrder(parseInt(typeId, 10));\n          }\n          return (\n            <SalesGroupDetails\n              params={params}\n              salesGroup={salesGroup}\n              salesObject={salesOrder}\n            />\n          );\n        }\n        case \"invoice\": {\n          if (!salesInvoice) {\n            getSalesInvoice(parseInt(typeId, 10));\n          }\n          return (\n            <SalesGroupDetails\n              params={params}\n              salesGroup={salesGroup}\n              salesObject={salesInvoice}\n              onPaymentConfirmed={refreshForSalesInvoice}\n            />\n          );\n        }\n        case \"quote\": {\n          if (!salesQuote) {\n            getSalesQuote(parseInt(typeId, 10));\n          }\n          return (\n            <SalesGroupDetails\n              params={params}\n              salesGroup={salesGroup}\n              salesObject={salesQuote}\n              onSelectedSalesTabChange={onSelectedSalesTabChange}\n              getSalesObject={getSalesObject}\n              isQuoteApproved={isQuoteApproved}\n              setIsQuoteApproved={setIsQuoteApproved}\n              invoiceID={invoiceID}\n              setInvoiceID={setInvoiceID}\n            />\n          );\n        }\n        default: {\n          return undefined;\n        }\n      }\n    }\n    return undefined;\n  };\n\n  if (!salesGroup && viewState.running || !salesGroupFetched || !salesObjectFetched) {\n    return <LoadingWidget />;\n  }\n\n  if (!viewState.running && (!salesGroup || !salesObjectInSalesGroup())) {\n    return (\n      <ErrorView viewState={viewState} />\n    );\n  }\n\n  return (\n    <Row className=\"mb-3\">\n      <Col xs={12}>\n        <Row className=\"mb-2\">\n          <Col xs={12}>\n            <Link\n              to={corsLink(\n                cefConfig,\n                cefConfig.dashboard.find(x => x.name === \"Orders\").href.replace(\"/dashboard\", \"\"),\n                \"dashboard\",\n              )}\n              className=\"d-flex align-items-center ps-2\">\n              <i className=\"fa fa-fw fa-chevron-double-left smaller d-inline-block me-1\" />\n              <span>\n                {t(\"ui.storefront.userDashboard.orders.BackToAllOrders\", \"Back to all Orders\")}\n              </span>\n            </Link>\n          </Col>\n        </Row>\n        <Row>\n          <Col xs={12}>\n            <h1 className=\"mt-0 mb-3\">\n              <i className=\"fal fa-fw fa-receipt me-2\" />\n              {type === \"order\" && <span>{salesOrder?.CustomKey || \"N/A\"}</span>}\n              {type === \"quote\" && <span>{salesQuote?.CustomKey || \"N/A\"}</span>}\n              {type === \"invoice\" && <span>{salesInvoice?.CustomKey || \"N/A\"}</span>}\n            </h1>\n          </Col>\n        </Row>\n        <Row className=\"mb-4\">\n          {salesGroup\n            && salesGroup.BillingContact\n            && <Col xs={12} sm={4}>\n              <Button\n                variant=\"none\"\n                className=\"px-0 w-100\"\n                onClick={() => setBillingCollapseOpen(!billingCollapseOpen)}\n                aria-controls=\"billing-address-block-table\"\n                aria-expanded={billingCollapseOpen}>\n                <h4\n                  className=\"d-flex justify-content-between align-items-center mb-0\"\n                  id=\"IndividualSalesGroupBillingInformation\">\n                  {t(\n                    \"ui.storefront.storeDashboard.storeOrderDetail.BillingInfo\",\n                    \"Billing Info\"\n                  )}\n                  {billingCollapseOpen\n                    ? <i className=\"fal fa-fw fa-angle-up\"></i>\n                    : <i className=\"fal fa-fw fa-angle-down\"></i>}\n                </h4>\n              </Button>\n              <hr className=\"my-2 border-bottom\" />\n              <Collapse in={billingCollapseOpen}>\n                <div id=\"billing-address-block-table\">\n                  <AddressBlock\n                    address={salesGroup.BillingContact.Address}\n                    contact={salesGroup.BillingContact}\n                  />\n                </div>\n              </Collapse>\n            </Col>\n          }\n          <Col xs={12} sm={8} />\n        </Row>\n        <Row>\n          {salesGroup && (salesOrder || salesInvoice || salesQuote)\n            ? renderTabMainContent()\n            : <LoadingWidget />\n          }\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\n\ninterface IRemoveFromSubscriptionsModalProps {\n  productName: string;\n  show: boolean;\n  onConfirm: Function;\n  onCancel: Function;\n  cancelBtnLabel?: string;\n  confirmBtnLabel?: string;\n  parentRunning?: boolean;\n  cartTypeText?: string;\n}\n\nexport const RemoveFromSubscriptionsModal = (props: IRemoveFromSubscriptionsModalProps): JSX.Element => {\n  const { productName, show, onConfirm, onCancel, cancelBtnLabel, parentRunning, confirmBtnLabel } = props;\n  const { t } = useTranslation();\n\n  return (\n    <ConfirmationModal\n      title={t(\"ui.storefront.common.DeactivateSubscription\", \"Deactivate Subscription\")}\n      show={show}\n      confirmBtnLabel={confirmBtnLabel ?? t(\"ui.storefront.common.RemoveItem\")}\n      confirmBtnVariant=\"danger\"\n      confirmBtnSID=\"removeFromSubscriptionsConfirmationModalConfirm\"\n      confirmDisabled={parentRunning}\n      cancelBtnLabel={cancelBtnLabel ?? t(\"ui.storefront.common.Cancel\")}\n      onConfirm={onConfirm}\n      onCancel={onCancel}\n      size=\"md\">\n      <p id=\"lbRFSMContent\">\n        <span>\n          {t(\n            \"ui.storefront.cart.AreYouSureYouWantToDeactivate\",\n            \"Are you sure you want to deactive your subscription for\"\n          )}\n        </span>\n        &nbsp;\n        <b>{productName}</b>?\n      </p>\n      {parentRunning && <LoadingWidget overlay={true} />}\n    </ConfirmationModal>\n  );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useState } from \"react\";\nimport { Alert, Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\nimport cvApi from \"src/_api/cvApi\";\nimport { SubscriptionsGrid } from \"src/_api/cvApi._DtoClasses\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { GetAccountPatientSubscriptionsDto } from \"src/_api/cvApi.Accounts\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { DeactivateCurrentUserSubscriptionByIDDto } from \"src/_api\";\nimport { RemoveFromSubscriptionsModal } from \"./modals/RemoveFromSubscriptionsModal\";\nimport { CVGrid } from \"../../_shared/CVGrid/CVGrid\";\n\ninterface ISubscriptionsProps {\n  isDashboardMain?: boolean;\n}\n\ninterface IRemoveFromSubscriptionsModalInfo {\n  show: boolean;\n  productName?: string;\n  subscriptionID?: number;\n}\n\nexport const Subscriptions = (props: ISubscriptionsProps): JSX.Element => {\n  const { isDashboardMain } = props;\n\n  const [ removeFromSubscriptionsModalInfo, setRemoveFromSubscriptionsModalInfo ]\n    = useState<IRemoveFromSubscriptionsModalInfo>({\n      show: false\n    });\n  const [ errorDeactivatingSubscrtiptionMessage, setErrorDeactivatingSubscriptionMessage ] = useState<boolean>(false);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  async function handleDeactivate(subscriptionID: number) {\n    try {\n      setRunning();\n      setErrorDeactivatingSubscriptionMessage(false);\n      const dto: DeactivateCurrentUserSubscriptionByIDDto = {\n        SubscriptionID: subscriptionID\n      };\n      const res = await cvApi.payments.DeactivateCurrentUserSubscriptionByID(dto);\n      if (!res.data.ActionSucceeded) {\n        setErrorDeactivatingSubscriptionMessage(true);\n        setRemoveFromSubscriptionsModalInfo({ show: false });\n      }\n      setRemoveFromSubscriptionsModalInfo({ show: false });\n      window.location.reload();\n      finishRunning();\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-orders mt-3\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            <h1 className=\"title\">\n              <i className=\"fal fa-fw fa-calendar-day me-2\" />\n              <span data-sid=\"udSubscriptionsTitleText\">Subscriptions</span>\n            </h1>\n          </div>\n          <CVGrid<SubscriptionsGrid, GetAccountPatientSubscriptionsDto>\n            pageSizes={pageSizeOptions}\n            name=\"subscriptions\"\n            tableClasses=\"border border-medium\"\n            data={p => cvApi.accounts.GetAccountPatientSubscriptions(p)}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"Product\"\n              binding=\"Product.Name\"\n              fallback=\"N/A\"\n            />\n            <CVGrid.Column\n              title=\"Dosage\"\n              binding=\"Dosage\"\n              fallback=\"N/A\"\n            />\n            <CVGrid.Column\n              title=\"Quantity\"\n              binding=\"QTY\"\n              fallback=\"N/A\"\n            />\n            <CVGrid.Column\n              title=\"Subscription Start\"\n              binding=\"StartsOn\"\n              fallback=\"N/A\"\n              format=\"date\"\n            />\n            <CVGrid.Column\n              title=\"Subscription End\"\n              binding=\"EndsOn\"\n              fallback=\"N/A\"\n              format=\"date\"\n            />\n            <CVGrid.Column\n              title=\"Status\"\n              binding=\"Status\"\n              fallback=\"N/A\">\n              {(rowData: SubscriptionsGrid) => {\n                return (\n                  <span\n                    className={\n                      rowData.Status === \"Active\" ? \"text-success\" : rowData.Status === \"Inactive\" ? \"text-danger\" : \"\"\n                    }>\n                    {rowData.Status}\n                  </span>\n                );\n              }}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Status Buttons\"\n              tdClass=\"w-1\"\n              hideHeader>\n              {(subscription: SubscriptionsGrid) => (\n                <CancelRenewButtons\n                  subscription={subscription}\n                  onCancelClicked={(productName, subscriptionID) => {\n                    setRemoveFromSubscriptionsModalInfo({\n                      show: true,\n                      productName,\n                      subscriptionID\n                    });\n                  }}\n                />\n              )}\n            </CVGrid.Column>\n            <CVGrid.Filter\n              title=\"Status\"\n              type=\"string\"\n              filterProperty=\"Status\"\n            />\n            <CVGrid.Filter\n              title=\"ID\"\n              placeholder=\"ID...\"\n              type=\"number\"\n              filterProperty=\"SubscriptionId\"\n            />\n            <CVGrid.Filter\n              title=\"Key\"\n              placeholder=\"Key...\"\n              type=\"string\"\n              filterProperty=\"Key\"\n            />\n            <CVGrid.Filter\n              title=\"Date\"\n              type=\"minmaxdate\"\n              filterProperty=\"CreatedDate\"\n            />\n          </CVGrid>\n        </section>\n      </Col>\n      <RemoveFromSubscriptionsModal\n        productName={removeFromSubscriptionsModalInfo.productName}\n        show={removeFromSubscriptionsModalInfo.show}\n        onConfirm={() => handleDeactivate(removeFromSubscriptionsModalInfo.subscriptionID)}\n        onCancel={() => setRemoveFromSubscriptionsModalInfo({ show: false })}\n        parentRunning={viewState.running}\n        confirmBtnLabel=\"Deactivate\"\n      />\n      {errorDeactivatingSubscrtiptionMessage && (\n        <Alert className=\"alert-danger\">\n          {t(\n            \"ui.storefront.subscriptions.ThereWasAnErrorDeactivating\",\n            \"There was an error deactivating subscription.\"\n          )}\n        </Alert>\n      )}\n    </Row>\n  );\n};\n\ninterface ICustomColumnProps {\n  subscription: SubscriptionsGrid;\n}\n\ninterface ICancelRenewButtonsProps extends ICustomColumnProps {\n  onCancelClicked?: (productName: string, subscriptionID: number) => void;\n}\n\nfunction CancelRenewButtons(props: ICancelRenewButtonsProps): JSX.Element {\n  const { Status, SubscriptionID, Product } = props.subscription;\n\n  const seoUrl = Product.SeoUrl;\n  const productName = Product.Name;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const history = useHistory();\n\n  if (Status === \"Active\") {\n    return (\n      <Button\n        variant=\"none\"\n        className=\"btn btn-outline-danger\"\n        onClick={() => props.onCancelClicked(productName, SubscriptionID)}>\n        {t(\"ui.storefront.common.Cancel\")}\n      </Button>\n    );\n  }\n\n  if (Status === \"Inactive\") {\n    return (\n      <Button\n        variant=\"none\"\n        className=\"btn btn-outline-warning\"\n        onClick={() => {\n          history.push(corsLink(cefConfig, `/${seoUrl}`, \"productDetail\"));\n          window.location.reload();\n        }}\n        data-sid={`btnProductDetailView_${Product.ID}`}>\n        {t(\"ui.storefront.common.Renew\", \"Renew\")}\n      </Button>\n    );\n  }\n}\n","/* eslint-disable react/no-unescaped-entities */\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useCallback, useState } from \"react\";\nimport _ from \"lodash\";\nimport { SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\nimport { Modal } from \"src/_shared/modals\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\n\ninterface IEditClaimedOrderProps {\n  order: SalesOrderModel;\n  afterActionTaken: () => any;\n}\n\nexport function EditClaimedOrderButton(props: IEditClaimedOrderProps): JSX.Element {\n  const { afterActionTaken, order } = props;\n\n  const [ showPossibleEditsModal, setShowPossibleEditsModal ] = useState(false);\n\n  return (\n    <>\n      <EditClaimedOrderModal\n        show={showPossibleEditsModal}\n        onCancel={() => {\n          setShowPossibleEditsModal(false);\n        }}\n        order={order}\n        onOrderChangeSucceeded={afterActionTaken}\n      />\n      <Button\n        variant=\"default\"\n        onClick={_e => {\n          setShowPossibleEditsModal(true);\n        }}>\n        <i className=\"fa fa-fw fa-edit\"></i>\n      </Button>\n    </>\n  );\n}\n\nexport default EditClaimedOrderButton;\n\ninterface IEditClaimedOrderModalProps {\n  onCancel: () => void;\n  onOrderChangeSucceeded?: () => void;\n  order: SalesOrderModel;\n  show: boolean;\n}\n\nfunction EditClaimedOrderModal(props: IEditClaimedOrderModalProps): JSX.Element {\n  const { onCancel, onOrderChangeSucceeded, order, show } = props;\n\n  const [ actionDidSucceed, setActionDidSucceed ] = useState(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const salesOrderFactory = useSalesOrderFactory();\n\n  const unclaimOrder = useCallback(async () => {\n    if (!salesOrderFactory || !order) {\n      return;\n    }\n    setRunning();\n    try {\n      await new Promise(resolve => {\n        const timeout = setTimeout(() => {\n          clearTimeout(timeout);\n          resolve(null);\n        }, 2000);\n      });\n      await salesOrderFactory.unclaimSalesOrder(order.ID);\n      setActionDidSucceed(true);\n      if (_.isFunction(onOrderChangeSucceeded)) {\n        onOrderChangeSucceeded();\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ order, salesOrderFactory ]);\n\n  return (\n    <Modal\n      show={show}\n      onCancel={onCancel}\n      title={`${t(\"ui.storefront.common.Edit\", \"Edit\")} Order #${order.ID}`}\n      modalBodyClasses=\"position-relative\">\n      {viewState.running && <LoadingWidget overlay={true} />}\n      {viewState.hasError && (\n        <Row>\n          <Col xs={12}>\n            <ErrorView viewState={viewState} componentName=\"EditClaimedOrderButton\" />\n          </Col>\n        </Row>\n      )}\n      <Row>\n        <Col xs={6}>\n          <p className=\"small\">\n            Clicking this button will immediately put this order back into the\n            &quot;Available Orders&quot; grid where other providers will be able to view and claim it.\n            The order's status will be changed to \"Pending\".\n          </p>\n        </Col>\n        <Col xs />\n        <Col xs>\n          <div className=\"d-flex justify-content-end w-100\">\n            {actionDidSucceed\n              ? (\n                <Button\n                  variant=\"success\"\n                  disabled={true}>\n                  Success!\n                </Button>\n              )\n              : (\n                <Button\n                  variant=\"default\"\n                  className=\"border\"\n                  disabled={!salesOrderFactory || viewState.running}\n                  onClick={() => {\n                    unclaimOrder();\n                  }}>\n                  {t(\"ui.storefront.userDashboard.claimedOrders.Unclaim\", \"Unclaim this order\")}\n                </Button>\n              )}\n          </div>\n        </Col>\n      </Row>\n    </Modal>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport _ from \"lodash\";\nimport { BaseModel, NameableBaseSearchModel } from \"src/_api/cvApi._DtoClasses\";\nimport { IHttpPromise, PagedResultsBase } from \"src/_api/cvApi.shared\";\nimport promiser from \"src/_shared/Promiser\";\nimport { IViewState } from \"./_customHooksTypes\";\nimport { useViewState } from \"./useViewState\";\nimport { getDtoAsPromiserKeyFragment } from \"../common/Formatters\";\n\ninterface IUsePagedModelsData<T extends BaseModel> {\n  forceReload: () => void;\n  models?: T[];\n  viewState: IViewState;\n  pageCount?: number;\n}\n\nexport const usePagedModels = <T extends BaseModel, U extends NameableBaseSearchModel>(\n  dto: U,\n  toCall: (dto?: any) => IHttpPromise<PagedResultsBase<T>>,\n  modelName: string,\n): IUsePagedModelsData<T> => {\n  const [ models, setModels ] = useState<T[]>(null);\n  const [ pageCount, setPageCount ] = useState<number>(1);\n\n  const {\n    setRunning,\n    finishRunning,\n    viewState\n  } = useViewState();\n\n  const fetchModels = async (force?: boolean): Promise<void> => {\n    setRunning();\n    const promiserKey = `usePagedModels:${modelName}:${getDtoAsPromiserKeyFragment(dto)}`;\n    if (force) {\n      promiser.flush(promiserKey);\n    }\n    try {\n      const res = await promiser.resolve(\n        promiserKey,\n        () => toCall(dto)\n      );\n      if (!res?.data) {\n        throw new Error(`Unable to fetch models of ${modelName}`);\n      }\n      setModels(res.data.Results);\n      setPageCount(res.data.TotalPages);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  };\n\n  const forceReload = () => {\n    fetchModels(true);\n  };\n\n  useEffect(() => {\n    if (!dto || !_.isFunction(toCall)) {\n      return;\n    }\n    fetchModels();\n  }, [ dto ]);\n\n  return {\n    forceReload,\n    models,\n    viewState,\n    pageCount\n  };\n};\n","import { useEffect, useState } from \"react\";\nimport { StatusModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { IViewState } from \"./_customHooksTypes\";\n\nexport interface ISalesOrderStatusDictionary {\n  [statusID: number]: StatusModel;\n}\n\ninterface IUseSalesOrderStatusesData {\n  salesOrderStatuses?: ISalesOrderStatusDictionary;\n  useSalesOrderStatusesViewState: IViewState;\n}\n\nexport const useSalesOrderStatuses = (): IUseSalesOrderStatusesData => {\n  const [ salesOrderStatuses, setSalesOrderStatuses ] = useState<ISalesOrderStatusDictionary>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const salesOrderFactory = useSalesOrderFactory();\n\n  useEffect(() => {\n    if (!salesOrderFactory) {\n      return;\n    }\n    const loadSalesOrderStatuses = async () => {\n      setRunning();\n      try {\n        const res = await salesOrderFactory.getSalesOrderStatuses();\n        setSalesOrderStatuses(res.reduce((dict, stat) => {\n          dict[stat.ID as keyof ISalesOrderStatusDictionary] = stat;\n          return dict;\n        }, {} as ISalesOrderStatusDictionary));\n        finishRunning();\n      } catch (err) {\n        finishRunning(true, err);\n      }\n    };\n    loadSalesOrderStatuses();\n  }, [ salesOrderFactory ]);\n\n  return {\n    salesOrderStatuses,\n    useSalesOrderStatusesViewState: viewState,\n  };\n};\n","/* eslint-disable max-len */\nimport { Fragment, useMemo, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport _ from \"lodash\";\nimport cvApi from \"src/_api/cvApi\";\nimport { SalesOrderModel, StatusModel } from \"src/_api/cvApi._DtoClasses\";\nimport { GetAllOrdersForProviderDto, GetCurrentAccountSalesOrdersDto } from \"src/_api\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { CVGrid } from \"../../_shared/CVGrid/CVGrid\";\nimport { EditClaimedOrderButton } from \"./EditClaimedOrderButton\";\nimport { usePagedModels } from \"src/_shared/customHooks/usePagedModels\";\nimport { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { ISalesOrderStatusDictionary, useSalesOrderStatuses } from \"src/_shared/customHooks/useSalesOrderStatuses\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\n\ninterface IClaimedOrdersProps {\n  isDashboardMain?: boolean;\n}\n\nexport const ClaimedOrders = (props: IClaimedOrdersProps): JSX.Element => {\n  const cefConfig = useCefConfig();\n\n  const { salesOrderStatuses } = useSalesOrderStatuses();\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-orders mt-3 position-relative\">\n          <div className=\"section-title d-flex align-items-center justify-content-between mb-2\">\n            {props.isDashboardMain ? (\n              <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"far fa-fw fa-receipt me-2\" />\n                  <span>Recent Orders</span>\n                </h4>\n                <p className=\"text-end mb-0\">\n                  <Link\n                    to={corsLink(cefConfig, \"/orders\", \"dashboard\")}\n                    className=\"btn btn-link small\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">View All Orders</span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n            ) : (\n              <h1 className=\"title\">\n                <i className=\"far fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udClaimedOrdersTitleText\">Claimed Orders</span>\n              </h1>\n            )}\n          </div>\n          {salesOrderStatuses\n            ? (\n              <ClaimedOrdersGrid\n                isDashboardMain={props.isDashboardMain}\n                salesOrderStatuses={salesOrderStatuses}\n              />\n            )\n            : <LoadingWidget overlay />}\n        </section>\n      </Col>\n    </Row>\n  );\n};\n\ninterface IClaimedOrdersGridProps {\n  isDashboardMain: boolean;\n  salesOrderStatuses: ISalesOrderStatusDictionary;\n}\n\nfunction ClaimedOrdersGrid(props: IClaimedOrdersGridProps) {\n  const { isDashboardMain, salesOrderStatuses } = props;\n\n  const [ selectedStatusName, setSelectedStatusName ] = useState(\"Claimed\");\n  const [ selectedVisitType, setSelectedVisitType ] = useState<string | null>(\"All\");\n\n  const salesOrderStatusesAsArray: StatusModel[] = useMemo(() => {\n    return Object.values(salesOrderStatuses);\n  }, [ salesOrderStatuses ]);\n\n  const claimedSalesOrderStatus = salesOrderStatusesAsArray.find(x => x.CustomKey === \"Claimed\");\n\n  const pageSizeOptions = useMemo(() => {\n    return isDashboardMain ? [ 5, 10, 15 ] : [ 35 ];\n  }, []);\n\n  const [ dto, setDto ] = useState<GetAllOrdersForProviderDto>({\n    Active: true,\n    AsListing: true,\n    CustomKey: null,\n    Sorts: [\n      {\n        field: \"CreatedDate\",\n        dir: \"desc\"\n      }\n    ],\n    HasSalesGroupAsSub: true,\n    Paging: {\n      Size: 35,\n      StartIndex: 1,\n    },\n    StatusID: claimedSalesOrderStatus.ID,\n    UserContactFirstNameOrLastName: \"\",\n    MinUpdatedOrCreatedDate: null,\n    MaxUpdatedOrCreatedDate: null,\n    SelectedVisitType: null,\n  });\n\n  const {\n    models: claimedOrders,\n    viewState,\n    pageCount,\n    forceReload,\n    // @ts-expect-error sales order model has the missing properties\n  } = usePagedModels<SalesOrderModel, GetAllOrdersForProviderDto>(\n    dto,\n    cvApi.ordering.GetAllOrdersForProvider,\n    \"salesOrderModel\"\n  );\n\n  const { t } = useTranslation();\n  const salesOrderFactory = useSalesOrderFactory();\n\n  const visitTypes = [\n    { visitType: \"Synchronous\" },\n    { visitType: \"Asynchronous\" },\n  ];\n\n  const asyncOrders = claimedOrders && claimedOrders.filter(order => !order.UserAvailability);\n\n  const syncOrders = claimedOrders && claimedOrders.filter(order => order.UserAvailability);\n\n  const [ isLoading, setIsLoading ] = useState(false);\n\n  return (\n    <>\n      {viewState.hasError && <ErrorView viewState={viewState} />}\n      {viewState.running && <LoadingWidget overlay/>}\n      {isLoading && <LoadingWidget overlay />}\n      <CVGrid<SalesOrderModel, GetCurrentAccountSalesOrdersDto>\n        hideFilterButtons={true}\n        pageSizes={pageSizeOptions}\n        pageCount={pageCount}\n        name=\"orders\"\n        data={selectedVisitType === \"Synchronous\"\n          ? syncOrders\n          : selectedVisitType === \"Asynchronous\"\n            ? asyncOrders\n            : claimedOrders}\n        tableClasses=\"shadow-none border border-medium\"\n        onQueryChange={query => {\n          for (const key in query) {\n            if (query[key as keyof GetCurrentAccountSalesOrdersDto] === undefined) {\n              delete query[key as keyof GetCurrentAccountSalesOrdersDto];\n            }\n          }\n          if (_.isEqual(query, dto)) {\n            return;\n          }\n\n          if (query.MinUpdatedOrCreatedDate\n            || query.MaxUpdatedOrCreatedDate\n          ) {\n            setIsLoading(true);\n          }\n          // diff of query\n          const diff = _.omitBy(query, (value, key) => _.isEqual(value, dto[key as keyof GetCurrentAccountSalesOrdersDto]));\n\n          if (typeof diff.StatusID === \"string\" && diff.StatusID === \"\") {\n            // The user selected the \"All\" option\n            setSelectedStatusName(\"All\");\n          }\n          if (diff.SelectedVisitType === \"Synchronous\") {\n            setSelectedVisitType(\"Synchronous\");\n            query.Paging.StartIndex = 1;\n          }\n          if (diff.SelectedVisitType === \"Asynchronous\") {\n            setSelectedVisitType(\"Asynchronous\");\n            query.Paging.StartIndex = 1;\n          }\n          if (diff.SelectedVisitType === \"\" || diff.SelectedVisitType === null) {\n            setSelectedVisitType(\"All\");\n          }\n          if (diff && !diff.Paging) {\n            query.Paging.StartIndex = 1;\n          }\n          if (Object.values(diff).find(x => x !== null)) {\n            if (!diff.StatusID && !diff.Paging) {\n              // Automatically set the status to \"All\" if the user has selected a filter other than status\n              setSelectedStatusName(\"All\");\n            } else if (diff.StatusID) {\n              // If they selected a statusId besides all\n              setSelectedStatusName(salesOrderStatuses[diff.StatusID as keyof ISalesOrderStatusDictionary].Name);\n              query.Paging.StartIndex = 1;\n            }\n          }\n          setDto({ ...query });\n          setTimeout(\n            () => {\n              setIsLoading(false);\n            }\n            , 5000\n          );\n        }}\n        initialFilters={{\n          Active: true,\n          AsListing: true,\n          HasSalesGroupAsSub: true,\n          Sorts: [\n            {\n              field: \"CreatedDate\",\n              dir: \"desc\"\n            }\n          ],\n          StatusID: claimedSalesOrderStatus?.ID,\n          ID: null,\n          CustomKey: null,\n          MinUpdatedOrCreatedDate: null,\n          MaxUpdatedOrCreatedDate: null,\n          AccountID: null,\n          UserContactFirstNameOrLastName: \"\",\n          SelectedVisitType: null,\n        }}\n      >\n        <CVGrid.Column\n          title={t(\"ui.storefront.common.OrderNumberSymbol\", \"Order #\")}\n          binding=\"ID\"\n          thClass=\"w-4\"\n        />\n        <CVGrid.Column\n          title={t(\"ui.storefront.common.OrderDate\", \"Order Date\")}\n          binding=\"CreatedDate\"\n          format=\"date\"\n          dateFormat=\"MM/dd/yyyy\"\n        />\n        <CVGrid.Column\n          title=\"Account ID\"\n          binding=\"AccountID\"\n          thClass=\"w-4\"\n        />\n        <CVGrid.Column title=\"Patient Name\">\n          {(order: SalesOrderModel) => <Name order={order} />}\n        </CVGrid.Column>\n        <CVGrid.Column title=\"Patient State\">\n          {(order: SalesOrderModel) => order.UserStateOfResidence?.Code || \"N/A\"}\n        </CVGrid.Column>\n        <CVGrid.Column\n          title=\"Product\"\n          binding=\"ProductKey\"\n          thClass=\"w-20\"\n          fallback=\"N/A\"\n        />\n        <CVGrid.Column title=\"Visit Type\">\n          {(order: SalesOrderModel) => (order.UserAvailability ? \"Sync\" : \"Async\")}\n        </CVGrid.Column>\n        <CVGrid.Column\n          title=\"Patient Availability\"\n          binding=\"UserAvailability\"\n        />\n        <CVGrid.Column\n          title=\"Patient Phone\"\n          binding=\"UserContactPhone1\"\n        />\n        <CVGrid.Column\n          title=\"Status\"\n          binding=\"StatusKey\"\n          fallback=\"N/A\"\n        >\n          {(order: SalesOrderModel) => <StatusCell\n            order={order}\n            afterStatusChanged={forceReload} />}\n        </CVGrid.Column>\n        <CVGrid.Column\n          title=\"Details\"\n          tdClass=\"w-1\"\n          hideHeader>\n          {(order: SalesOrderModel) => <ViewDetailsButton order={order} />}\n        </CVGrid.Column>\n        {!isDashboardMain && (\n          <CVGrid.Filter\n            title=\"Order Status\"\n            type=\"select\"\n            filterProperty=\"StatusID\"\n            defaultOptionTitle={selectedStatusName}\n            options={() => salesOrderFactory.getSalesOrderStatuses()}\n            optionKey=\"ID\"\n            optionTitle={opt => opt.DisplayName ?? opt.Name ?? opt.CustomKey}\n          />\n        )}\n        {!isDashboardMain && (\n          <CVGrid.Filter\n            title=\"Order ID\"\n            type=\"number\"\n            filterProperty=\"ID\"\n          />\n        )}\n        {!isDashboardMain && (\n          <CVGrid.Filter\n            title=\"Account ID\"\n            type=\"number\"\n            filterProperty=\"AccountID\"\n          />\n        )}\n        {!isDashboardMain && (\n          <CVGrid.Filter\n            title=\"Last Name\"\n            type=\"string\"\n            filterProperty=\"UserContactFirstNameOrLastName\"\n          />\n        )}\n        {!isDashboardMain && (\n          <CVGrid.Filter\n            title=\"Visit Type\"\n            type=\"select\"\n            filterProperty=\"SelectedVisitType\"\n            defaultOptionTitle={selectedVisitType}\n            options={visitTypes}\n            optionKey=\"visitType\"\n            optionTitle={(opt: { visitType: string }) => opt.visitType}\n          />\n        )}\n        {/* {!isDashboardMain && (\n          <CVGrid.Filter\n            title=\"Key\"\n            type=\"string\"\n            filterProperty=\"CustomKey\"\n          />\n        )} */}\n        {!isDashboardMain && (\n          <CVGrid.Filter\n            title=\"\"\n            type=\"minmaxdate\"\n            filterProperty=\"CreatedDate\"\n          />\n        )}\n      </CVGrid>\n    </>\n  );\n}\n\ninterface ICustomColumnProps {\n  order: SalesOrderModel;\n}\n\nfunction ViewDetailsButton(props: ICustomColumnProps): JSX.Element {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const { ID, UserID } = props.order;\n  return (\n    <Link\n      to={corsLink(cefConfig, `/claimed-orders/${ID}-${UserID}`, \"dashboard\")}\n      className=\"btn btn-primary\"\n      data-sid={`btnOrdersView_${ID}`}>\n      {t(\"ui.storefront.common.View\")}\n    </Link>\n  );\n}\n\nfunction Name(props: ICustomColumnProps): JSX.Element {\n  const { order } = props;\n  const { t } = useTranslation();\n  if (!order.UserContactFirstName && !order.UserContactLastName) {\n    return t(\"ui.storefront.common.Unknown\", \"Unknown\");\n  }\n  return (\n    <>\n      {order.UserContactFirstName || \"\"}{order.UserContactFirstName ? \" \" : \"\"}{order.UserContactLastName}\n    </>\n  );\n}\n\ninterface IStatusCellProps extends ICustomColumnProps {\n  afterStatusChanged?: () => void;\n}\n\nfunction StatusCell(props: IStatusCellProps): JSX.Element {\n  const { afterStatusChanged, order } = props;\n\n  const { salesOrderStatuses } = useSalesOrderStatuses();\n\n  const status = salesOrderStatuses\n  && order.StatusID\n  && salesOrderStatuses[order.StatusID as keyof ISalesOrderStatusDictionary]\n    ? salesOrderStatuses[order.StatusID as keyof ISalesOrderStatusDictionary].Name\n    : order.StatusID === 12\n      ? \"Completed\"\n      : \"Loading...\";\n\n  return (\n    <div className=\"d-flex align-items-center\">\n      <span>\n        {salesOrderStatuses\n        && order.StatusID\n          && salesOrderStatuses[order.StatusID as keyof ISalesOrderStatusDictionary]\n          ? salesOrderStatuses[order.StatusID as keyof ISalesOrderStatusDictionary].Name\n          : order.StatusID === 12\n            ? \"Completed\"\n            : \"Loading...\"}\n      </span>\n      {status !== \"Denied\"\n      && status !== \"Completed\"\n      && (\n        <EditClaimedOrderButton\n          order={order}\n          afterActionTaken={() => {\n            if (_.isFunction(afterStatusChanged)) {\n              afterStatusChanged();\n            }\n          }}\n        />\n      )}\n    </div>\n  );\n}\n","import { useEffect, useState } from \"react\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { usePatientFactory } from \"./usePatientFactory\";\n\ninterface IUsePatientData {\n  patient?: UserModel;\n  reloadPatient: () => void;\n  usePatientViewState: IViewState;\n}\n\nexport const usePatient = (id: number): IUsePatientData => {\n  const [ patient, setPatient ] = useState<UserModel>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const patientFactory = usePatientFactory();\n\n  const fetchPatient = async (force?: boolean) => {\n    setRunning();\n    try {\n      const p = await patientFactory.getPatient(id, force);\n      setPatient(p);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  };\n\n  useEffect(() => {\n    if (patient || !patientFactory) {\n      return;\n    }\n    fetchPatient();\n  }, [ patientFactory ]);\n\n  return {\n    patient,\n    reloadPatient: () => {\n      fetchPatient(true);\n    },\n    usePatientViewState: viewState,\n  };\n};\n","import React, { useContext } from \"react\";\nimport { SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\n\ninterface IClaimedOrderContext {\n  patient?: UserModel;\n  reloadOrder: () => void;\n  reloadPatient: () => void;\n  salesOrder?: SalesOrderModel;\n}\n\nexport const ClaimedOrderContext = React.createContext<IClaimedOrderContext>({\n  patient: null,\n  reloadOrder: () => null,\n  reloadPatient: () => null,\n  salesOrder: null,\n});\n\nexport const useClaimedOrderContext = (): IClaimedOrderContext => {\n  const context = useContext(ClaimedOrderContext);\n  return context;\n};\n","import { Table } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { DateTime } from \"luxon\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\n\ninterface IPatientDetailsTableProps {\n  patient?: UserModel;\n}\n\nexport const PatientDetailsTable = (props: IPatientDetailsTableProps): JSX.Element => {\n  const { patient } = props;\n\n  const { t } = useTranslation();\n\n  return <div className=\"position-relative\">\n    <Table borderless className=\"table-shadow-none table-sm\">\n      <colgroup>\n        <col className=\"w-50\" />\n        <col className=\"w-50\" />\n      </colgroup>\n      <tbody>\n        <tr>\n          <td className=\"text-capitalize\">{t(\"ui.storefront.common.Phone\", \"Phone\")}</td>\n          <td>{patient?.Contact?.Phone1 ?? \"N/A\"}</td>\n        </tr>\n        <tr>\n          <td className=\"text-capitalize\">{t(\"ui.storefront.common.DOB\", \"Date of Birth\")}</td>\n          <td>{patient?.DateOfBirth\n            ? DateTime.fromISO(patient.DateOfBirth as unknown as string).toFormat(\"MM/dd/yyyy\")\n            : \"N/A\"}</td>\n        </tr>\n        <tr>\n          <td className=\"text-capitalize\">{t(\"ui.storefront.storeDashboard.storeProductEditor.Height\", \"Height\")}</td>\n          <td>{patient?.HeightFeet && patient?.HeightInches\n            ? `${patient.HeightFeet}' ${patient.HeightInches}\"`\n            : \"N/A\"}</td>\n        </tr>\n        <tr>\n          <td className=\"text-capitalize\">{t(\"ui.storefront.storeDashboard.storeProductEditor.Weight\", \"Weight\")}</td>\n          <td>{patient?.Weight\n            ? `${patient.Weight} lbs`\n            : \"N/A\"}</td>\n        </tr>\n        <tr>\n          <td className=\"text-capitalize\">{t(\"ui.storefront.common.gender\", \"Sex\")}</td>\n          <td>{patient?.Gender ?? \"N/A\"}</td>\n        </tr>\n        <tr>\n          <td className=\"text-capitalize\">{t(\"ui.storefront.common.StateOfResidence\", \"State of Resident\")}</td>\n          <td>{patient?.StateOfResidenceKey ?? \"N/A\"}</td>\n        </tr>\n      </tbody>\n    </Table>\n  </div>;\n};\n\nexport default PatientDetailsTable;\n","import { Table } from \"react-bootstrap\";\nimport { DateTime } from \"luxon\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\n\ninterface IContactPreferenceTableProps {\n  patient: UserModel;\n}\n\nexport const ContactPreferenceTable = (props: IContactPreferenceTableProps): JSX.Element => {\n  const { patient } = props;\n\n  return <div className=\"position-relative\">\n    <Table borderless className=\"table-shadow-none table-sm\">\n      <colgroup>\n        <col />\n        <col className=\"w-100\" />\n      </colgroup>\n      <tbody>\n        <tr>\n          <td>\n            <i className=\"far fa-phone fa-fw\" />\n          </td>\n          <td>{patient?.Contact?.Phone1 ?? \"N/A\"}</td>\n        </tr>\n        <tr>\n          <td><i className=\"far fa-calendar fa-fw\" /></td>\n          <td>{patient?.DateOfBirth\n            ? DateTime.fromISO(patient.DateOfBirth as unknown as string).toFormat(\"MM/dd/yyyy\")\n            : \"N/A\"}</td>\n        </tr>\n      </tbody>\n    </Table>\n  </div>;\n};\n\nexport default ContactPreferenceTable;\n","/** @format */\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\nimport { FieldValues, SubmitHandler, useForm } from \"react-hook-form\";\nimport { DateTime } from \"luxon\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport cvApi from \"src/_api/cvApi\";\nimport { RescheduleAppointmentDto, ScheduleAppointmentWithGoogleDto } from \"src/_api/cvApi.Appointments\";\nimport { Modal } from \"../../_shared/modals/Modal\";\n\ninterface ISchedulingModalProps {\n  onCancel: () => void;\n  onConfirm?: () => void;\n  show: boolean;\n  showCancel?: boolean;\n  appointmentID?: number;\n  salesOrderID?: number;\n  patientAccountID?: number;\n  reloadConsultations?: () => Promise<void>;\n  titleText?: string;\n  typeText?: string;\n}\n\nexport const SchedulingModal = (props: ISchedulingModalProps): JSX.Element => {\n  const {\n    show,\n    onCancel,\n    showCancel,\n    appointmentID,\n    salesOrderID,\n    patientAccountID,\n    reloadConsultations,\n    titleText,\n    typeText\n  } = props;\n\n  const [ selectedStartTime, setSelectedStartTime ] = useState<Date | null>(null);\n  const [ showErrorMessage, setShowErrorMessage ] = useState<boolean>(false);\n  const [ showSuccessMessage, setShowSuccessMessage ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { viewState } = useViewState();\n\n  const { reset, handleSubmit } = useForm({\n    mode: \"all\",\n    criteriaMode: \"all\"\n  });\n\n  const currentTime = new Date();\n  const currentHour = currentTime.getHours();\n  const currentMinute = currentTime.getMinutes();\n  const nextMinute = currentMinute === 59 ? 0 : currentMinute + 1;\n\n  const minTimeStart\n    = selectedStartTime && selectedStartTime.toDateString() === currentTime.toDateString()\n      ? new Date().setHours(currentHour, nextMinute)\n      : new Date().setHours(0, 0);\n  const maxTimeStart = new Date().setHours(23, 59);\n\n  const minSelectableDate = new Date();\n  minSelectableDate.setHours(0, 0, 0, 0);\n\n  const handleCancel = (): void => {\n    reset();\n    setShowErrorMessage(false);\n    if (onCancel) {\n      onCancel();\n    }\n  };\n\n  const scheduleInitialAppointment: SubmitHandler<unknown> = async data => {\n    const selectedEndTime = DateTime.fromJSDate(selectedStartTime).plus({ minutes: 30 })\n      .toJSDate();\n    const dto: ScheduleAppointmentWithGoogleDto = {\n      SalesOrderID: salesOrderID,\n      PatientAccountID: patientAccountID,\n      StartTime: selectedStartTime,\n      EndTime: selectedEndTime\n    };\n    const res = await cvApi.appointments.ScheduleAppointmentWithGoogle(dto);\n    if (!res.data.ActionSucceeded) {\n      setShowErrorMessage(true);\n    } else {\n      setShowSuccessMessage(true);\n      setTimeout(() => {\n        setShowSuccessMessage(false);\n        onCancel();\n      }, 3000);\n    }\n  };\n\n  const rescheduleAppointment: SubmitHandler<unknown> = async data => {\n    const selectedEndTime = DateTime.fromJSDate(selectedStartTime).plus({ minutes: 30 })\n      .toJSDate();\n    const dto: RescheduleAppointmentDto = {\n      AppointmentID: appointmentID,\n      StartTime: selectedStartTime,\n      EndTime: selectedEndTime\n    };\n    const res = await cvApi.appointments.RescheduleAppointment(dto);\n    if (!res.data.ActionSucceeded) {\n      setShowErrorMessage(true);\n    } else {\n      setShowSuccessMessage(true);\n      setTimeout(() => {\n        setShowSuccessMessage(false);\n        onCancel();\n        reloadConsultations();\n      }, 3000);\n    }\n  };\n  const handleScheduling = (formData: FieldValues) => {\n    if (typeText === \"schedule\") {\n      scheduleInitialAppointment(formData);\n    }\n    if (typeText === \"reschedule\") {\n      rescheduleAppointment(formData);\n    }\n  };\n\n  return (\n    <Modal\n      title={titleText ?? \"Scheduling Modal\"}\n      titleID=\"txtScheduleModalTitle\"\n      size=\"md\"\n      onCancel={handleCancel}\n      show={show}\n      headerClasses=\"bg-light rounded-0 py-2 mt-0\">\n      {viewState.running ? (\n        <LoadingWidget />\n      ) : (\n        <Form onSubmit={handleSubmit(data => handleScheduling(data))}>\n          <Row>\n            <p className=\"text-center\">\n              {t(\"ui.storefront.consultations.PleaseSelectDateTime\", \"Please select a date and time to\")}\n              &nbsp;\n              {`${typeText}`}\n              &nbsp;\n              {t(\"ui.storefront.consultations.Consultation\", \"consultation\")}\n              {\".\"}\n            </p>\n            <Col\n              xs={12}\n              className=\"d-flex justify-content-center\">\n              <DatePicker\n                className=\"d-flex justify-content-center mb-4 mt-2\"\n                selected={selectedStartTime}\n                onChange={date => setSelectedStartTime(date)}\n                showTimeSelect\n                timeFormat=\"h:mm aa\"\n                timeIntervals={30}\n                dateFormat=\"MMMM d, yyyy h:mm aa\"\n                placeholderText=\"Select a date and time\"\n                inline\n                required={true}\n                minDate={new Date(minSelectableDate)}\n                minTime={new Date(minTimeStart)}\n                maxTime={new Date(maxTimeStart)}\n              />\n            </Col>\n            <hr className=\"border border-medium\" />\n            <Col\n              xs={12}\n              className=\"d-flex justify-content-between\">\n              {showCancel && (\n                <Button\n                  variant=\"outline-secondary\"\n                  onClick={handleCancel}>\n                  {t(\"ui.storefront.common.Cancel\")}\n                </Button>\n              )}\n              <Button\n                id=\"btnScheduleModalSubmit\"\n                data-sid=\"btnScheduleModalSubmit\"\n                variant=\"primary\"\n                disabled={!selectedStartTime}\n                type=\"submit\">\n                {t(\"ui.storefront.common.Submit\")}\n              </Button>\n            </Col>\n          </Row>\n          {showSuccessMessage && (\n            <Row className=\"mt-3\">\n              <Col xs={12}>\n                <Alert variant=\"success\">\n                  {t(\n                    \"ui.storefront.consultations.ConsultationScheduledSuccessfully\",\n                    \"Consultation scheduled successfully.\"\n                  )}\n                </Alert>\n              </Col>\n            </Row>\n          )}\n          {showErrorMessage && (\n            <Row className=\"mt-3\">\n              <Col xs={12}>\n                <Alert variant=\"danger\">\n                  {t(\"ui.storefront.consultations.ErrorScheduling\", \"There was an error scheduling this appointment.\")}\n                </Alert>\n              </Col>\n            </Row>\n          )}\n        </Form>\n      )}\n    </Modal>\n  );\n};\n","import { useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { SchedulingModal } from \"../../Dashboard/ScheduledAppointments/SchedulingModal\";\n\ninterface IScheduleAConsultationProps {\n  salesOrderID: number;\n  patientAccountID: number;\n}\n\nexport const ScheduleAConsultation = (props: IScheduleAConsultationProps): JSX.Element => {\n  const { salesOrderID, patientAccountID } = props;\n\n  const [ showSchedulingModal, setShowSchedulingModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n\n  return (\n    <div className=\"bg-light rounded p-3\">\n      <div className=\"text-center\">\n        <i className=\"fal fa-fw fa-3x fa-calendar-circle-user text-primary py-3\" />\n      </div>\n      <div>\n        <Button\n          variant=\"primary\"\n          className=\"text-capitalize w-100\"\n          onClick={() => setShowSchedulingModal(true)}>\n          {t(\"ui.storefront.userDashboard.myOrders.ScheduleAConsultation\", \"Schedule a Consultation\")}\n        </Button>\n      </div>\n      <SchedulingModal\n        onCancel={() => setShowSchedulingModal(false)}\n        show={showSchedulingModal}\n        showCancel={true}\n        salesOrderID={salesOrderID}\n        patientAccountID={patientAccountID}\n        titleText=\"Schedule Consultation\"\n        typeText=\"schedule\"\n      />\n    </div>\n  );\n};\n\nexport default ScheduleAConsultation;\n","import { Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useClaimedOrderContext } from \"./ClaimedOrderContext\";\nimport PatientDetailsTable from \"../../_shared/patients/PatientDetailsTable\";\nimport ContactPreferenceTable from \"../../_shared/patients/ContactPreferenceTable\";\nimport ScheduleAConsultation from \"../../_shared/patients/ScheduleAConsultation\";\n\nexport const ClaimedOrderPatientDetails = (): JSX.Element => {\n  const { patient, salesOrder } = useClaimedOrderContext();\n\n  const { t } = useTranslation();\n\n  return (\n    <Row>\n      <Col\n        xs={12}\n        lg={4}>\n        <h4 className=\"text-capitalize\">\n          {t(\"ui.storefront.userDashboard.claimedOrders.PatientDetails\", \"Patient Details\")}\n        </h4>\n        <hr className=\"mb-1 border\" />\n        <PatientDetailsTable patient={patient} />\n      </Col>\n      <Col\n        xs={12}\n        lg={4}>\n        {/* Contact Preference */}\n        <h4 className=\"text-capitalize\">\n          {t(\"ui.storefront.userDashboard.claimedOrders.ContactPreference\", \"Contact Preference\")}\n        </h4>\n        <hr className=\"mb-1 border\" />\n        <ContactPreferenceTable patient={patient} />\n        {patient && salesOrder && (\n          <ScheduleAConsultation\n            patientAccountID={patient.AccountID}\n            salesOrderID={salesOrder.ID}\n          />\n        )}\n      </Col>\n      <Col\n        xs={12}\n        lg={4}\n      />\n    </Row>\n  );\n};\n\nexport default ClaimedOrderPatientDetails;\n","import { ButtonHTMLAttributes, useCallback, useMemo, useState } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { modal } from \"src/_shared/modals\";\nimport cvApi from \"src/_api/cvApi\";\nimport { SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IUnableToContactButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  order: SalesOrderModel;\n  afterIncrement?: () => void;\n  variant?: string;\n}\n\nexport const UnableToContactButton = (props: IUnableToContactButtonProps): JSX.Element => {\n  const { order, afterIncrement, ...remaining } = props;\n\n  const [ updateSuccessful, setUpdateSuccessful ] = useState(false);\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const handleClick = useCallback(async () => {\n    if (updateSuccessful) {\n      return;\n    }\n    setRunning();\n    try {\n      const res = await cvApi.accounts.IncrementContactAttemptsMade({ OrderID: order.ID });\n      if (!res?.data?.ActionSucceeded) {\n        throw new Error(res?.data?.Messages\n          ? res.data.Messages[0]\n          : \"Failed to update contact attempts\");\n      }\n      setUpdateSuccessful(true);\n      finishRunning();\n      if (_.isFunction(afterIncrement)) {\n        afterIncrement();\n      }\n    } catch (err) {\n      await modal({\n        children: <span>\n          {(err as Error)?.message || `${t(\"ui.storfront.common.SomethingWentWrong\")} ${JSON.stringify(err)}`}\n        </span>,\n        showHeader: false,\n      });\n      finishRunning();\n    }\n  }, [ afterIncrement, order, updateSuccessful ]);\n\n  const timesAlreadyAttempted = useMemo(() => {\n    return order?.ContactAttempts\n      ? Number(order?.ContactAttempts)\n      : 0;\n  }, [ order ]);\n\n  if (timesAlreadyAttempted >= cefConfig.featureSet.attemptContactLimit && !updateSuccessful) {\n    return null;\n  }\n\n  return <>\n    {viewState.running && <LoadingWidget overlay={true} />}\n    <Button\n      {...remaining}\n      variant={updateSuccessful ? \"outline-success\" : \"outline-dark\"}\n      onClick={() => {\n        handleClick();\n      }}>\n      {t(updateSuccessful\n        ? \"ui.storefront.common.Success.Exclamation\"\n        : \"ui.storefront.userDashboard.patientDetail.UnableToContact\")}\n    </Button>\n  </>;\n};\n","import { useTranslation } from \"react-i18next\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\nimport { UnableToContactButton } from \"./UnableToContactButton\";\n\ninterface IContactAttemptTrackerProps {\n  order: SalesOrderModel;\n  afterIncrement?: () => void;\n}\n\nexport const ContactAttemptTracker = (props: IContactAttemptTrackerProps): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  return <div className=\"bg-light d-flex align-items-center justify-content-between p-3\">\n    <div>\n      <span className=\"d-block text-capitalize mb-2\">\n        {t(\"ui.storefront.userDashboard.patientDetail.ContactAttemptTracker\", \"Contact Attempt Tracker\")}\n      </span>\n      <span className=\"text-capitalize\">\n        {t(\"ui.storefront.userDashboard.patientDetail.AttemptsMade\")}: <span>\n          {props.order?.ContactAttempts || 0}{\" \"}\n          {t(\"ui.storefront.common.Of.Lowercase\")}{\" \"}\n          {cefConfig.featureSet.attemptContactLimit}\n        </span>\n      </span>\n    </div>\n    <UnableToContactButton\n      order={props.order}\n      afterIncrement={props.afterIncrement}\n    />\n  </div>;\n};\n","// <copyright file=\"UpdateProductButtonContext.ts\" company=\"clarity-ventures.com\">\n// Copyright (c) clarity-ventures.com. All rights reserved.\n// </copyright>\n\nimport _ from \"lodash\";\nimport React, { createContext, useCallback, useContext, useEffect, useState } from \"react\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\n\ninterface IUpdateProductButtonContext {\n  changeChosenProductID: (productID: number) => void;\n  currentProduct: ProductModel;\n  hideUpdateProductModal: () => void;\n  possibleProducts: ProductModel[];\n  selectedProductID: number;\n  showUpdateProductModal: () => void;\n  updateProductModalIsShowing: boolean;\n  swapProduct: () => Promise<void>;\n  swapSucceeded: boolean;\n  viewState: IViewState;\n}\n\nconst UpdateProductButtonContext = createContext<IUpdateProductButtonContext>({\n  changeChosenProductID: (_productID: number) => null,\n  currentProduct: null,\n  hideUpdateProductModal: () => null,\n  possibleProducts: [],\n  selectedProductID: null,\n  showUpdateProductModal: () => null,\n  updateProductModalIsShowing: false,\n  swapProduct: () => Promise.resolve(null),\n  swapSucceeded: false,\n  viewState: {\n    running: true,\n    hasError: false,\n    errorMessage: null\n  }\n});\n\nexport const useUpdateProductButtonContext = (): IUpdateProductButtonContext => {\n  const context = useContext(UpdateProductButtonContext);\n  return context;\n};\n\ninterface IUpdateProductButtonContextProviderProps {\n  currentProductID?: number;\n  salesOrderID?: number;\n  onProductSwapped?: () => void;\n}\n\nexport const UpdateProductButtonContextProvider = (\n  props: React.PropsWithChildren<IUpdateProductButtonContextProviderProps>\n): JSX.Element => {\n  const { currentProductID, onProductSwapped, salesOrderID } = props;\n\n  const [ updateProductModalIsShowing, setUpdateProductModalIsShowing ] = useState(false);\n  const [ currentProduct, setCurrentProduct ] = useState<ProductModel>(null);\n  const [ possibleProducts, setPossibleProducts ] = useState<ProductModel[]>(null);\n  const [ selectedNewProductID, setSelectedNewProductID ] = useState<number>(null);\n  const [ swapSucceeded, setSwapSucceeded ] = useState<boolean>(false);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const productFactory = useProductFactory();\n  const salesOrderFactory = useSalesOrderFactory();\n\n  const alterSelectedNewProduct = useCallback((productID: number) => {\n    setSelectedNewProductID(productID);\n    setSwapSucceeded(false);\n  }, []);\n\n  const swapCurrentProductForSelection = useCallback(async () => {\n    setRunning();\n    try {\n      await salesOrderFactory.reassignProductOnOrderAsDoctor(selectedNewProductID, salesOrderID);\n      setSwapSucceeded(true);\n      if (_.isFunction(onProductSwapped)) {\n        onProductSwapped();\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [\n    onProductSwapped,\n    salesOrderFactory,\n    salesOrderID,\n    selectedNewProductID\n  ]);\n\n  useEffect(() => {\n    if (!productFactory || !currentProductID) {\n      return;\n    }\n    const load = async (): Promise<void> => {\n      setRunning();\n      try {\n        const res = await productFactory.getProductByID(\n          currentProductID,\n          false,\n          { skipPricing: true, skipInventory: true }\n        );\n        const possibles = await productFactory.getReplacementProductOptions(currentProductID);\n        setCurrentProduct(res);\n        setPossibleProducts(possibles);\n        finishRunning();\n      } catch (err) {\n        finishRunning(true, err, null, true);\n      }\n    };\n    load();\n  }, [ currentProductID, productFactory ]);\n\n  return <UpdateProductButtonContext.Provider\n    value={{\n      changeChosenProductID: alterSelectedNewProduct,\n      currentProduct,\n      hideUpdateProductModal: () => {\n        setSelectedNewProductID(null);\n        setUpdateProductModalIsShowing(false);\n        setSwapSucceeded(false);\n      },\n      possibleProducts,\n      selectedProductID: selectedNewProductID,\n      showUpdateProductModal: () => {\n        setUpdateProductModalIsShowing(true);\n      },\n      swapProduct: swapCurrentProductForSelection,\n      swapSucceeded,\n      updateProductModalIsShowing,\n      viewState,\n    }}>\n    {props.children}\n  </UpdateProductButtonContext.Provider>;\n};\n","import { useMemo } from \"react\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { CVGrid } from \"../CVGrid/CVGrid\";\nimport { useUpdateProductButtonContext } from \"./UpdateProductButtonContext\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const PossibleProductsTable = (): JSX.Element => {\n  const { possibleProducts } = useUpdateProductButtonContext();\n\n  if (!possibleProducts) {\n    return <></>;\n  }\n\n  return (\n    <div id=\"possible-products-table\">\n      <CVGrid<ProductModel, any>\n        data={possibleProducts}\n        hidePaging\n        noStripes\n        tableClasses=\"table-shadow-none\">\n        <CVGrid.Column\n          title=\"Image\"\n          hideHeader\n          thClass=\"py-0 border-0\"\n          tdClass=\"text-start ps-0\">\n          {(p: ProductModel) => <Image product={p} />}\n        </CVGrid.Column>\n        <CVGrid.Column\n          title=\"CustomKey\"\n          hideHeader\n          thClass=\"py-0 border-0\">\n          {(p: ProductModel) => <CustomKey product={p} />}\n        </CVGrid.Column>\n        <CVGrid.Column\n          title=\"Name\"\n          hideHeader\n          thClass=\"py-0 border-0\">\n          {(p: ProductModel) => <Name product={p} />}\n        </CVGrid.Column>\n        <CVGrid.Column\n          title=\"Dosage\"\n          hideHeader\n          thClass=\"py-0 border-0\"\n          binding=\"SerializableAttributes.Dosage.Value\"\n        />\n        <CVGrid.Column\n          title=\"Select\"\n          hideHeader\n          thClass=\"py-0 border-0\"\n          tdClass=\"text-end\">\n          {(p: ProductModel) => <SelectButton product={p} />}\n        </CVGrid.Column>\n      </CVGrid>\n    </div>\n  );\n};\n\nexport default PossibleProductsTable;\n\ninterface ICustomColumnProps {\n  product: ProductModel;\n}\n\nfunction Image(props: ICustomColumnProps): JSX.Element {\n  const { Images } = props.product;\n\n  const primaryImage = useMemo(() => {\n    if (!Images?.length) {\n      return null;\n    }\n    return Images?.find(x => x.IsPrimary) ?? Images[0];\n  }, [ Images ]);\n\n  return (\n    <ImageWithFallback\n      className=\"img-fluid\"\n      alt={props.product.Name}\n      // eslint-disable-next-line camelcase\n      src={primaryImage?.OriginalFileName}\n      imageResizerParamsBody={{\n        maxwidth: 100,\n        maxheight: 100,\n        scale: \"both\",\n        mode: \"pad\"\n      }}\n    />\n  );\n}\n\nfunction CustomKey(props: ICustomColumnProps): JSX.Element {\n  const cefConfig = useCefConfig();\n\n  return (\n    <a\n      href={\n        corsLink(\n          cefConfig,\n          `${cefConfig.routes.productDetail.root}/${props.product.SeoUrl}`,\n          \"productDetail\"\n        )\n      }>\n      {props.product.CustomKey}\n    </a>\n  );\n}\n\nfunction Name(props: ICustomColumnProps): JSX.Element {\n  const cefConfig = useCefConfig();\n\n  return (\n    <a\n      href={\n        corsLink(\n          cefConfig,\n          `${cefConfig.routes.productDetail.root}/${props.product.SeoUrl}`,\n          \"productDetail\"\n        )\n      }>\n      {props.product.Name}\n    </a>\n  );\n}\n\nfunction SelectButton(props: ICustomColumnProps): JSX.Element {\n  const { selectedProductID, changeChosenProductID } = useUpdateProductButtonContext();\n\n  const { t } = useTranslation();\n  const isSelected = selectedProductID === props.product.ID;\n\n  if (isSelected) {\n    return (\n      <Button\n        variant=\"outline-success\"\n        className=\"d-flex align-items-center\">\n        <span>\n          {t(\"ui.storefront.userDashboard.products.SwapForThisOne\", \"Swap for this one\")}\n        </span>\n        <i className=\"fal fa-fw fa-circle-check ms-1\" />\n      </Button>\n    );\n  }\n\n  return (\n    <>\n      <Button\n        variant=\"outline-success\"\n        className=\"align-items-center d-flex pt-0 pb-0 possible-products-table-select-btn-spacer\">\n        <span>Swap for this one</span>\n        <i className=\"fal fa-fw fa-circle-check ms-1\" />\n      </Button>\n      <Button\n        variant=\"outline-black\"\n        onClick={() => changeChosenProductID(props.product.ID)}>\n        {t(\"ui.storefront.common.Select\", \"Select\")}\n      </Button>\n    </>\n  );\n}\n","import { useTranslation } from \"react-i18next\";\nimport PossibleProductsTable from \"./PossibleProductsTable\";\nimport { useUpdateProductButtonContext } from \"./UpdateProductButtonContext\";\nimport { Alert } from \"react-bootstrap\";\n\nexport const UpdateProductModalContent = (): JSX.Element => {\n  const { swapSucceeded } = useUpdateProductButtonContext();\n\n  const { t } = useTranslation();\n\n  return <div className=\"text-center\">\n    <h4 className=\"mb-1\">\n      {t(\"ui.storefront.common.SelectAProduct\", \"Select a Product\")}...\n    </h4>\n    <p className=\"mb-2\">\n      {t(\n        \"ui.storefront.common.ChooseFromProductOptionsBelow\",\n        \"Choose from the product options below\"\n      )}\n    </p>\n    <PossibleProductsTable />\n    {swapSucceeded && <Alert variant=\"success\">\n      {t(\n        \"ui.storefront.userDashboard.updateProductModal.ProductHasBeenUpdated\",\n        \"The product has been updated. To change the selection again, click Select next to the new product you'd like.\"\n      )}\n    </Alert>}\n  </div>;\n};\n","// <copyright file=\"UpdateProductModalHeader.ts\" company=\"clarity-ventures.com\">\n// Copyright (c) clarity-ventures.com. All rights reserved.\n// </copyright>\n\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { useUpdateProductButtonContext } from \"./UpdateProductButtonContext\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\n\nexport const UpdateProductModalHeader = (): JSX.Element => {\n  const { currentProduct } = useUpdateProductButtonContext();\n\n  const { t } = useTranslation();\n\n  const primaryImage = useMemo(() => {\n    if (!currentProduct?.Images?.length) {\n      return null;\n    }\n    return currentProduct?.Images?.find(x => x.IsPrimary) ?? currentProduct?.Images[0];\n  }, [ currentProduct ]);\n\n  if (!currentProduct) {\n    return <></>;\n  }\n\n  return <Row className=\"align-items-center\">\n    <Col xs=\"auto\">\n      <ImageWithFallback\n        className=\"img-fluid\"\n        alt={currentProduct?.Name}\n        // eslint-disable-next-line camelcase\n        src={primaryImage?.OriginalFileName}\n        imageResizerParamsBody={{\n          maxwidth: 80,\n          maxheight: 80,\n          scale: \"both\",\n          mode: \"pad\"\n        }}\n      />\n    </Col>\n    <Col xs className=\"gx-0\">\n      <span className=\"d-block small\">\n        {t(\"ui.storefront.common.CurrentProduct\", \"Current Product\")}:\n      </span>\n      <span className=\"d-block\">\n        {currentProduct.Name}\n      </span>\n      <span>\n        {currentProduct?.SerializableAttributes?.Dosage?.Value || \"N/A\"}\n      </span>\n    </Col>\n  </Row>;\n};\n","import { useTranslation } from \"react-i18next\";\nimport { ConfirmationModal } from \"../modals/ConfirmationModal\";\nimport { useUpdateProductButtonContext } from \"./UpdateProductButtonContext\";\nimport { UpdateProductModalContent } from \"./UpdateProductModalContent\";\nimport { UpdateProductModalHeader } from \"./UpdateProductModalHeader\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\n\nexport const UpdateProductModal = (): JSX.Element => {\n  const {\n    hideUpdateProductModal,\n    swapProduct,\n    swapSucceeded,\n    updateProductModalIsShowing,\n    viewState\n  } = useUpdateProductButtonContext();\n\n  const { t } = useTranslation();\n\n  return <ConfirmationModal\n    show={updateProductModalIsShowing}\n    onCancel={() => hideUpdateProductModal()}\n    onConfirm={() => swapProduct()}\n    customHeaderComponent={<UpdateProductModalHeader />}\n    headerClasses=\"bg-transparent\"\n    bodyClasses=\"position-relative\"\n    footerClasses=\"d-flex justify-content-between align-items-center\"\n    confirmBtnLabel={swapSucceeded\n      ? t(\"ui.storefront.common.Success.Exclamation\", \"Success!\")\n      : t(\"ui.storefront.common.Update\", \"Update\")}\n    confirmDisabled={swapSucceeded}\n    size=\"lg\">\n    {viewState.running && <LoadingWidget overlay={true} />}\n    <UpdateProductModalContent />\n  </ConfirmationModal>;\n};\n\nexport default UpdateProductModal;\n","// extracted by mini-css-extract-plugin\nexport default {\"updateProductButton\":\"UpdateProductButton_updateProductButton__cWYyJ\"};","import { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport UpdateProductModal from \"./UpdateProductModal\";\n// @ts-ignore\nimport classes from \"./UpdateProductButton.module.scss\";\nimport { useUpdateProductButtonContext } from \"./UpdateProductButtonContext\";\n\nexport const UpdateProductButton = (): JSX.Element => {\n  const { showUpdateProductModal } = useUpdateProductButtonContext();\n\n  const { t } = useTranslation();\n\n  return <>\n    <Button\n      variant=\"outline-dark\"\n      onClick={() => showUpdateProductModal()}\n      className={classes.updateProductButton}>\n      <span className=\"text-capitalize me-3\">\n        {t(\"ui.storefront.common.UpdateProduct\", \"Update Product\")}\n      </span>\n      <i className=\"far fa-fw fa-pen-to-square\" />\n    </Button>\n    <UpdateProductModal />\n  </>;\n};\n","import { useTranslation } from \"react-i18next\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\n\ninterface IApproveOrDenySalesOrderModalProps {\n  productName: string;\n  show: boolean;\n  onConfirm: Function;\n  onCancel: Function;\n  cancelBtnLabel?: string;\n  confirmBtnLabel?: string;\n  parentRunning?: boolean;\n  approveOrDeny?: string;\n}\n\nexport const ApproveOrDenySalesOrderModal = (props: IApproveOrDenySalesOrderModalProps): JSX.Element => {\n  const { productName, show, onConfirm, onCancel, cancelBtnLabel, parentRunning, confirmBtnLabel, approveOrDeny }\n    = props;\n  const { t } = useTranslation();\n\n  return (\n    <ConfirmationModal\n      title={\n        approveOrDeny === \"Approve\"\n          ? t(\"ui.storefront.common.ApproveOrder\", \"Approve Order\")\n          : approveOrDeny === \"Deny\"\n            ? t(\"ui.storefront.common.DenyOrder\", \"Deny Order\")\n            : \"\"\n      }\n      show={show}\n      confirmBtnLabel={confirmBtnLabel ?? t(\"ui.storefront.common.Confirm\")}\n      confirmBtnVariant=\"primary\"\n      confirmBtnSID=\"approveOrDenySalesOrderConfirmationModalConfirm\"\n      confirmDisabled={parentRunning}\n      cancelBtnLabel={cancelBtnLabel ?? t(\"ui.storefront.common.Cancel\")}\n      onConfirm={onConfirm}\n      onCancel={onCancel}\n      size=\"md\">\n      <p id=\"lbRFSMContent\">\n        <span>{t(\"ui.storefront.cart.AreYouSureYouWantTo\", \"Are you sure you want to\")}</span>\n        &nbsp;\n        <span className=\"text-lowercase\">\n          {approveOrDeny === \"Approve\"\n            ? t(\"ui.storefront.common.Approve\", \"Approve\")\n            : approveOrDeny === \"Deny\"\n              ? t(\"ui.storefront.common.Deny\", \"Deny\")\n              : \"\"}\n        </span>\n        &nbsp;\n        <b>{productName}</b>?\n      </p>\n      {parentRunning && <LoadingWidget overlay={true} />}\n    </ConfirmationModal>\n  );\n};\n","import { useMemo, useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport { AppliedSalesOrderItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { ContactAttemptTracker } from \"./ContactAttemptTracker\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { UpdateProductButton } from \"../../_shared/products/UpdateProductButton\";\nimport { CVGrid } from \"../../_shared/CVGrid/CVGrid\";\nimport { UpdateProductButtonContextProvider } from \"../../_shared/products/UpdateProductButtonContext\";\nimport { useClaimedOrderContext } from \"./ClaimedOrderContext\";\nimport DownloadPatientFilesButton from \"./DownloadPatientFilesButton\";\nimport { ApproveOrDenySalesOrderModal } from \"./modals/ApproveOrDenySalesOrderModal\";\n\nexport const ClaimedOrderOrderDetails = (): JSX.Element => {\n  const { patient, reloadOrder, salesOrder } = useClaimedOrderContext();\n\n  const { t } = useTranslation();\n  const additionalTableDataClasses = useMemo(() => {\n    let classes = \"py-4\";\n    if (salesOrder?.StatusName?.toLowerCase() === \"claimed\") {\n      classes += \" border-bottom-0\";\n    }\n    return classes;\n  }, [ salesOrder ]);\n\n  return (\n    <>\n      <Row>\n        <Col xs=\"auto\">\n          <div className=\"d-flex align-items-center justify-content-center\">\n            <i className=\"far fa-fw fa-receipt fa-2x me-2\" />\n            <h3 className=\"mb-0\">{t(\"ui.storefront.common.OrderDetails\", \"Order Details\")}</h3>\n          </div>\n        </Col>\n        <Col xs />\n        <Col xs=\"auto\">\n          <div className=\"d-flex align-items-center\">\n            <Button\n              variant=\"outline-dark\"\n              className=\"ms-3 d-none\"\n              onClick={() => {\n                if (_.isFunction(window.print)) {\n                  window.print();\n                }\n              }}>\n              {t(\"ui.storefront.common.Print\", \"Print\")}\n            </Button>\n          </div>\n        </Col>\n      </Row>\n      {salesOrder && (\n        <Row>\n          <Col xs={12}>\n            <hr className=\"mb-0\" />\n            <CVGrid\n              name=\"orders\"\n              hidePaging\n              noStripes\n              tableClasses=\"table-shadow-none border border-medium\"\n              extraRow={{\n                condition: _o => salesOrder.StatusName.toLowerCase() === \"claimed\",\n                element: _item => (\n                  <ContactAttemptTracker\n                    order={salesOrder}\n                    afterIncrement={() => reloadOrder()}\n                  />\n                ),\n                cols: 5\n              }}\n              data={salesOrder?.SalesItems}>\n              <CVGrid.Column\n                title={t(\"ui.storefront.common.OrderNumberSymbol\", \"Order #\")}\n                binding=\"MasterID\"\n                thClass=\"fw-normal\"\n                tdClass={`${additionalTableDataClasses} text-primary`}\n              />\n              <CVGrid.Column\n                title={t(\"ui.storefront.cart.productName\", \"Product Name\")}\n                binding=\"Name\"\n                thClass=\"fw-normal\"\n                tdClass={`${additionalTableDataClasses} text-primary position-relative`}>\n                {(salesItem: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => (\n                  <ProductName salesItem={salesItem} />\n                )}\n              </CVGrid.Column>\n              <CVGrid.Column\n                title={t(\"ui.storefront.common.Dosage\", \"Dosage\")}\n                binding=\"SerializableAttributes.Dosage.Value\"\n                thClass=\"fw-normal\"\n                tdClass={additionalTableDataClasses}\n              />\n              <CVGrid.Column\n                title={t(\"ui.storefront.common.Duration\", \"Duration\")}\n                binding=\"SerializableAttributes.Duration.Value\"\n                thClass=\"fw-normal\"\n                tdClass={additionalTableDataClasses}\n              />\n              <CVGrid.Column\n                title={t(\"ui.storefront.common.OrderDate\", \"Order Date\")}\n                binding=\"CreatedDate\"\n                format=\"datetime\"\n                dateFormat=\"MM/dd/yyyy\"\n                thClass=\"fw-normal\"\n                tdClass={additionalTableDataClasses}\n              />\n              <CVGrid.Column\n                title={t(\"ui.storefront.common.Status\", \"Status\")}\n                thClass=\"fw-normal\"\n                tdClass={additionalTableDataClasses}>\n                {_item => (\n                  <span className=\"text-capitalize\">{salesOrder.StatusName ?? salesOrder.StatusDisplayName}</span>\n                )}\n              </CVGrid.Column>\n              <CVGrid.Column\n                title={\"approveOrDeny\"}\n                hideHeader\n                thClass=\"w-1\"\n                tdClass={`${additionalTableDataClasses} w-1`}>\n                {(salesItem: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>) => {\n                  return salesOrder.StatusName.toLowerCase() === \"claimed\" ? (\n                    <ApproveAndDenyButtons salesItem={salesItem} />\n                  ) : (\n                    <></>\n                  );\n                }}\n              </CVGrid.Column>\n            </CVGrid>\n          </Col>\n        </Row>\n      )}\n    </>\n  );\n};\n\nexport default ClaimedOrderOrderDetails;\n\ninterface ICustomColumnProps {\n  salesItem: SalesItemBaseModel<AppliedSalesOrderItemDiscountModel>;\n}\ninterface IApproveOrDenySalesOrderModalInfo {\n  productName?: string;\n  show: boolean;\n  orderID?: number;\n  approveOrDeny?: string;\n}\n\nfunction ApproveAndDenyButtons(props: ICustomColumnProps): JSX.Element {\n  const [ approveOrDenySalesOrderModalInfo, setApproveOrDenySalesOrderModalInfo ]\n    = useState<IApproveOrDenySalesOrderModalInfo>({\n      show: false\n    });\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  async function handleApproveSalesOrder(id: number) {\n    setRunning();\n    try {\n      const dto = {\n        SalesOrderID: id\n      };\n      const results = await cvApi.ordering.ApproveSalesOrder(dto);\n      if (!results.data?.ActionSucceeded) {\n        if (results.data?.Messages[0]) {\n          throw new Error(results.data?.Messages[0]);\n        } else {\n          throw new Error(t(\n            \"ui.storefront.claimedOrdersDetail.ThereWasAnErrorUpdatingOrderStatus\",\n            \"There was an error updating order status.\"\n          ));\n        }\n      }\n      setApproveOrDenySalesOrderModalInfo({ show: false });\n      finishRunning();\n      window.location.reload();\n    } catch (err) {\n      finishRunning(true, err as any as Error);\n      setApproveOrDenySalesOrderModalInfo({ show: false });\n    }\n  }\n\n  async function handleDenySalesOrder(id: number) {\n    setRunning();\n    try {\n      const dto = {\n        SalesOrderID: id\n      };\n      const results = await cvApi.ordering.DenySalesOrder(dto);\n      if (!results.data) {\n        if (results.data?.Messages[0]) {\n          throw new Error(results.data?.Messages[0]);\n        } else {\n          throw new Error(t(\n            \"ui.storefront.claimedOrdersDetail.ThereWasAnErrorUpdatingOrderStatus\",\n            \"There was an error updating order status.\"\n          ));\n        }\n      }\n      setApproveOrDenySalesOrderModalInfo({ show: false });\n      finishRunning();\n      window.location.reload();\n    } catch (err) {\n      finishRunning(true, err as any as Error);\n      setApproveOrDenySalesOrderModalInfo({ show: false });\n    }\n  }\n\n  return (\n    <div className=\"d-flex align-items-center flex-column\">\n      <div className=\"d-flex\">\n        <Button\n          variant=\"success\"\n          className=\"me-3\"\n          onClick={() => {\n            setApproveOrDenySalesOrderModalInfo({\n              show: true,\n              productName: props.salesItem.Name,\n              orderID: props.salesItem.MasterID,\n              approveOrDeny: \"Approve\"\n            });\n          }}>\n          {t(\"ui.storefront.common.Approve\", \"Approve\")}\n        </Button>\n        <Button\n          variant=\"danger\"\n          onClick={() => {\n            setApproveOrDenySalesOrderModalInfo({\n              show: true,\n              productName: props.salesItem.Name,\n              orderID: props.salesItem.MasterID,\n              approveOrDeny: \"Deny\"\n            });\n          }}>\n          {t(\"ui.storefront.common.Deny\", \"Deny\")}\n        </Button>\n      </div>\n      <ApproveOrDenySalesOrderModal\n        productName={approveOrDenySalesOrderModalInfo.productName}\n        show={approveOrDenySalesOrderModalInfo.show}\n        onConfirm={() => {\n          if (approveOrDenySalesOrderModalInfo.approveOrDeny === \"Approve\") {\n            handleApproveSalesOrder(props.salesItem.MasterID);\n          }\n          if (approveOrDenySalesOrderModalInfo.approveOrDeny === \"Deny\") {\n            handleDenySalesOrder(props.salesItem.MasterID);\n          }\n        }}\n        onCancel={() => setApproveOrDenySalesOrderModalInfo({ show: false })}\n        parentRunning={viewState.running}\n        approveOrDeny={approveOrDenySalesOrderModalInfo.approveOrDeny}\n      />\n      {viewState.hasError && (\n        <ErrorView viewState={viewState} componentName=\"ClaimedOrderOrderDetails\" />\n      )}\n    </div>\n  );\n}\n\nfunction ProductName(props: ICustomColumnProps): JSX.Element {\n  const { salesOrder, reloadOrder } = useClaimedOrderContext();\n\n  return (\n    <div className=\"d-flex align-items-center\">\n      <span>{props.salesItem.Name}</span>\n      {salesOrder?.StatusName.toLowerCase() === \"claimed\" && (\n        <UpdateProductButtonContextProvider\n          currentProductID={salesOrder?.SalesItems[0].ProductID}\n          salesOrderID={salesOrder?.ID}\n          onProductSwapped={() => {\n            reloadOrder();\n          }}>\n          <UpdateProductButton />\n        </UpdateProductButtonContextProvider>\n      )}\n    </div>\n  );\n}\n","/* eslint-disable max-len */\nimport { ListGroupItem } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { DateTime } from \"luxon\";\nimport { StoredFileModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink, getCorsStoredFilesLink } from \"src/_shared/common/Cors\";\nimport { toast } from \"react-hot-toast\";\n\ninterface IBloodWorkListItemProps {\n  file?: StoredFileModel;\n}\n\nexport const BloodWorkListItem = (props: IBloodWorkListItemProps): JSX.Element => {\n  const { file } = props;\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const downloadUrl = `/DesktopModules/ClarityEcommerce/API-Repo/SecureFileDownload/Download/${file.ID}`;\n\n  const openFile = async () => {\n    try {\n      const response = await fetch(downloadUrl, {\n        method: \"GET\",\n        headers: {\n          \"Cache-Control\": \"no-store\",\n        },\n      });\n      if (!response || !response.ok) {\n        throw new Error(\"Failed to fetch the file\");\n      }\n      const blob = await response.blob();\n      const blobUrl = URL.createObjectURL(blob);\n      const newTab = window.open(blobUrl, \"_blank\");\n      if (!newTab) {\n        toast.error(\"Popup blocked; please allow popups for this site\");\n      }\n      setTimeout(() => {\n        URL.revokeObjectURL(blobUrl);\n      }, 5000);\n    } catch (error) {\n      console.error(\"Error fetching the file:\", error);\n    }\n  };\n\n  return <ListGroupItem className=\"d-flex align-items-center justify-content-between border-0 bg-light\">\n    <div>\n      <div>{file.FileName}</div>\n      <div className=\"py-2\">\n        {DateTime.fromISO(file.CreatedDate as unknown as string).toFormat(\"MM/dd/yyyy\")}\n      </div>\n    </div>\n    <div>\n      <button\n        key={`open_${file.ID}`}\n        onClick={openFile}\n        className=\"d-inline-block btn btn-link me-3\">\n        <span className=\"me-3\">\n        Open in new tab\n        </span>\n        <i className=\"far fa-up-right-from-square fa-fw\" />\n      </button>\n      <a\n        key={`download_${file.ID}`}\n        className={\"d-inline-block btn btn-link\"}\n        href={corsLink(cefConfig, `/SecureFileDownload/Download/${file.ID}`, \"repoApi\")}>\n        <span className=\"me-3\">\n          {t(\"ui.storefront.messaging.messaging-detail.Download\", \"Download\")}\n        </span>\n        <i className=\"far fa-arrow-down-to-arc fa-fw\" />\n      </a>\n    </div>\n  </ListGroupItem>;\n};\n","import { useEffect, useState } from \"react\";\nimport { ListGroup } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { StoredFileModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useClaimedOrderContext } from \"../ClaimedOrderContext\";\nimport { usePatientFactory } from \"../../../_shared/customHooks/usePatientFactory\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { BloodWorkListItem } from \"./BloodWorkListItem\";\n\nexport const BloodWorkList = (): JSX.Element => {\n  const [ bloodWorkFiles, setBloodworkFiles ] = useState<StoredFileModel[]>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const { patient } = useClaimedOrderContext();\n  const patientFactory = usePatientFactory();\n\n  useEffect(() => {\n    if (!patientFactory || !patient) {\n      return;\n    }\n    const fetchBloodWorkFiles = async () => {\n      setRunning();\n      try {\n        const pagedFiles = await patientFactory.getPatientBloodworkFiles(patient.AccountID);\n        if (pagedFiles.Results.length) {\n          setBloodworkFiles(pagedFiles.Results);\n        }\n        finishRunning();\n      } catch (err) {\n        finishRunning(true, err);\n      }\n    };\n    fetchBloodWorkFiles();\n  }, [ patient, patientFactory ]);\n\n  return <>\n    {viewState.hasError && <ErrorView viewState={viewState} componentName=\"BloodWorkList\" />}\n    <ListGroup className=\"p-4 position-relative\">\n      {viewState.running && <LoadingWidget overlay />}\n      {bloodWorkFiles\n        ? bloodWorkFiles.map(f => <BloodWorkListItem key={f.ID} file={f} />)\n        : <span>{t(\"ui.storefront.common.ListIsEmpty\")}</span>}\n    </ListGroup>\n  </>;\n};\n","import { useEffect, useState } from \"react\";\nimport { useClaimedOrderContext } from \"./ClaimedOrderContext\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\nimport { useCategoryFactory } from \"src/_shared/customHooks/useCategoryFactory\";\nimport { QuestionnaireComponent } from \"src/Questionnaire/QuestionnaireComponent\";\nimport { useTranslation } from \"react-i18next\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\n\nexport const PatientQuestionnaire = (): JSX.Element => {\n  const [ questionnaireID, setQuestionnaireID ] = useState<number>(null);\n\n  const { salesOrder, patient } = useClaimedOrderContext();\n  const productFactory = useProductFactory();\n  const categoryFactory = useCategoryFactory();\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  useEffect(() => {\n    if (!salesOrder?.SalesItems || !productFactory) {\n      return;\n    }\n    const fetchQuestionnaireID = async () => {\n      setRunning();\n      try {\n        const productID = salesOrder.SalesItems[0]?.ProductID;\n        if (!productID) {\n          finishRunning(true, \"There is not a product attached to the items of this order\");\n          return;\n        }\n        const product = await productFactory.getProductByID(productID);\n        const category = await categoryFactory.getCategoryByID(product.Categories[0].SlaveID);\n        setQuestionnaireID(category.QuestionnaireID);\n        finishRunning();\n      } catch (err) {\n        finishRunning(true, err);\n      }\n    };\n    fetchQuestionnaireID();\n  }, [ productFactory ]);\n\n  return <div className=\"px-3\">\n    <h6 className=\"mt-4 mb-2 fw-normal\">\n      {t(\n        \"ui.storefront.userDashboard.claimedOrders.QuestionnaireResponsesAreBelow\",\n        \"Below are the questions and responses for the questionnaire\"\n      )}\n    </h6>\n    {viewState.hasError && <ErrorView viewState={viewState} />}\n    <div className=\"patient-questionnaire-container\">\n      <QuestionnaireComponent\n        questionnaireID={questionnaireID}\n        showTitle={false}\n        showSubmitButton={false}\n        forUserID={patient.ID}\n      />\n    </div>\n  </div>;\n};\n","import { useState } from \"react\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { CategoryModel } from \"src/_api/cvApi.shared\";\n\ninterface ICategoryFactory {\n  getCategoryByID: (id: number, force?: boolean) => Promise<CategoryModel>;\n}\n\nexport const useCategoryFactory = (): ICategoryFactory => {\n  const [ categoryFactory ] = useState<ICategoryFactory>({\n    getCategoryByID: async (id: number, force?: boolean): Promise<CategoryModel> => {\n      const promiserKey = `categoryFactory:getCategoryByID:${id}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.categories.GetCategoryByID({\n          ExcludeProductCategories: true,\n          ID: id\n        })\n      );\n      return res.data;\n    }\n  });\n\n  return categoryFactory;\n};\n","import { Table } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { DateTime } from \"luxon\";\nimport { NoteModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface INotesTableProps {\n  notes: NoteModel[];\n  parentRunning?: boolean;\n}\n\nexport const NotesTable = (props: INotesTableProps): JSX.Element => {\n  const { notes, parentRunning } = props;\n\n  const { t } = useTranslation();\n\n  if (parentRunning) {\n    return null;\n  }\n\n  return <div className=\"px-3\">\n    <Table>\n      <colgroup>\n        <col className=\"w-25\" />\n        <col className=\"w-75\" />\n      </colgroup>\n      <thead>\n        <tr>\n          <th className=\"fw-normal\">{t(\"ui.storefront.common.Date\", \"Date\")}</th>\n          <th className=\"fw-normal\">{t(\"ui.storefront.common.Note\", \"Note\")}</th>\n        </tr>\n      </thead>\n      <tbody>\n        {notes?.length\n          ? notes.map(note => {\n            const { CreatedDate, ID, Note1 } = note;\n            return <tr key={ID}>\n              <td>\n                {DateTime.fromISO(CreatedDate as unknown as string).toFormat(\"MM/dd/yyyy\")}\n              </td>\n              <td>\n                {Note1}\n              </td>\n            </tr>;\n          })\n          : <tr>\n            <td colSpan={2}>\n              <span>{t(\"ui.storefront.common.ListIsEmpty\", \"List is empty\")}</span>\n            </td>\n          </tr>\n        }\n      </tbody>\n    </Table>\n  </div>;\n};\n","import { useFormContext } from \"react-hook-form\";\nimport { ListGroup } from \"react-bootstrap\";\n\ninterface IFormGroupErrorsProps {\n  formIdentifier: string;\n}\n\nexport const FormGroupErrors = (props: IFormGroupErrorsProps): JSX.Element => {\n  const context = useFormContext();\n\n  if (!context?.formState?.errors[props.formIdentifier]) {\n    return null;\n  }\n\n  const errors = context?.formState?.errors[props.formIdentifier];\n\n  return <div className=\"w-100\">\n    <ListGroup as=\"ul\" className=\"list-unstyled\">\n      {errors && Object.values(errors.types).map(\n        // eslint-disable-next-line react/no-array-index-key\n        (msg, index): JSX.Element => <li className=\"text-danger\" key={`${props.formIdentifier}_error_${index}`}>\n          {msg}\n        </li>\n      )}\n    </ListGroup>\n  </div>;\n};\n","import { Button } from \"react-bootstrap\";\nimport { Controller, FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { FormGroupLabel } from \"src/_shared/forms/formGroups/FormGroupLabel\";\nimport { FormGroupErrors } from \"src/_shared/forms/formGroups/FormGroupErrors\";\nimport { useNoteFactory } from \"src/_shared/customHooks/useNoteFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport _ from \"lodash\";\nimport { useCallback, useState } from \"react\";\n\ninterface ICreatePatientNoteWidgetFormData {\n  newPatientNote: string;\n}\n\ninterface ICreatePatientNoteWidgetProps {\n  accountID?: number;\n  afterNoteCreated?: () => unknown;\n  typeName: \"Patient\" | \"Doctor\";\n}\n\nexport const CreatePatientNoteWidget = (props: ICreatePatientNoteWidgetProps): JSX.Element => {\n  const { accountID, afterNoteCreated, typeName } = props;\n\n  const [ saveSuccessful, setSaveSuccessful ] = useState(false);\n\n  const currentUser = useCurrentUser();\n  const noteFactory = useNoteFactory();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const formMethods = useForm<ICreatePatientNoteWidgetFormData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\",\n  });\n\n  const getNoteType = useCallback(async () => {\n    const pagedTypes = await noteFactory.getNoteTypes();\n    const typeNameLowered = typeName.toLowerCase();\n    return pagedTypes.Results.find(x => x.Name.toLowerCase() === typeNameLowered);\n  }, [ typeName ]);\n\n  const handleAfterSaveSuccessful = () => {\n    if (_.isFunction(afterNoteCreated)) {\n      afterNoteCreated();\n    }\n    setSaveSuccessful(true);\n    const timeout = setTimeout(() => {\n      clearTimeout(timeout);\n      setSaveSuccessful(false);\n    }, 4000);\n    formMethods.setValue(\"newPatientNote\", \"\");\n  };\n\n  const onSubmit = async (data: ICreatePatientNoteWidgetFormData): Promise<void> => {\n    setRunning();\n    try {\n      const patientNoteType = await getNoteType();\n      if (!patientNoteType) {\n        throw new Error(\"Cannot find patient note type\");\n      }\n      await noteFactory.createNote({\n        AccountID: accountID,\n        Active: true,\n        CreatedByUser: currentUser,\n        CreatedDate: new Date(),\n        ID: null,\n        Note1: data.newPatientNote,\n        Type: patientNoteType,\n        TypeID: patientNoteType.ID,\n      });\n      handleAfterSaveSuccessful();\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  };\n\n  return <FormProvider {...formMethods}>\n    <form onSubmit={formMethods.handleSubmit(onSubmit)} className=\"position-relative\">\n      <Controller\n        control={formMethods.control}\n        name=\"newPatientNote\"\n        defaultValue=\"\"\n        render={({ field }) => (\n          <div className=\"mb-3 w-100\">\n            <FormGroupLabel\n              formIdentifier=\"newPatientNote\"\n              label={t(\"ui.storefront.userDashboard.claimedOrders.notes.AddANewNote\", \"Add a new Note\")}\n              labelClassName=\"mb-0\"\n            />\n            <textarea\n              data-sid=\"newPatientNote\"\n              id=\"newPatientNote\"\n              name=\"newPatientNote\"\n              className=\"custom-control d-block w-100\"\n              {...formMethods.register(\"newPatientNote\", {\n                required: {\n                  value: true,\n                  message: t(\n                    \"ui.storefront.common.validation.ThisFieldIsRequired\",\n                    \"This field is required\"\n                  )\n                }\n              })}\n              onChange={e => {\n                field.onChange(e);\n                if (saveSuccessful) {\n                  setSaveSuccessful(false);\n                }\n              }}\n            />\n            <FormGroupErrors formIdentifier=\"newPatientNote\" />\n          </div>\n        )}\n      />\n      <Button\n        type=\"submit\"\n        variant={saveSuccessful ? \"success\" : \"primary\"}\n        className=\"text-capitalize\">\n        {saveSuccessful\n          ? t(\"ui.storefront.common.NoteSaved\", \"Note Saved\")\n          : t(\"ui.storefront.userDashboard.claimedOrders.notes.PostNote\", \"Post Note\")}\n      </Button>\n      {viewState.hasError && <ErrorView viewState={viewState} />}\n      {viewState.running && <LoadingWidget overlay={true} />}\n    </form>\n  </FormProvider>;\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { NotePagedResults } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { TabContent } from \"src/_shared/common/TabContent\";\nimport { Tabs } from \"src/_shared/common/Tabs\";\nimport { useClaimedOrderContext } from \"../ClaimedOrderContext\";\nimport { usePatientFactory } from \"../../../_shared/customHooks/usePatientFactory\";\nimport { NotesTable } from \"../../../_shared/NotesTable\";\nimport { CreatePatientNoteWidget } from \"./CreatePatientNoteWidget\";\nimport { sortByCreatedDateDescending } from \"src/_shared/common/Helpers\";\n\nexport const PatientNotes = (): JSX.Element => {\n  const [ patientNotes, setPatientNotes ] = useState<NotePagedResults>();\n  const [ doctorNotes, setDoctorNotes ] = useState<NotePagedResults>();\n  const { patient } = useClaimedOrderContext();\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const patientFactory = usePatientFactory();\n\n  const fetchPatientNotes = async (force?: boolean) => {\n    setRunning();\n    try {\n      const patientNotesRes = await patientFactory.getPatientNotes(patient.AccountID, force);\n      const doctorNotesRes = await patientFactory.getDoctorNotesForPatient(patient.AccountID, force);\n      patientNotesRes.Results.sort(sortByCreatedDateDescending);\n      doctorNotesRes.Results.sort(sortByCreatedDateDescending);\n      setPatientNotes(patientNotesRes);\n      setDoctorNotes(doctorNotesRes);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  };\n\n  useEffect(() => {\n    if (!patient || !patientFactory) {\n      return;\n    }\n    fetchPatientNotes();\n  }, [ patient, patientFactory ]);\n\n  return <div className=\"position-relative\">\n    {viewState.hasError && <ErrorView viewState={viewState} />}\n    {viewState.running && <LoadingWidget overlay />}\n    <Tabs\n      tabContainerClasses=\"patient-notes-tabs\"\n      getTabClasses={(isActive: boolean) => {\n        let classes = \"position-relative rounded-0 border-0 \";\n        if (isActive) {\n          classes += \"btn btn-primary nav-link text-secondary patient-note-active-tab\";\n        } else {\n          classes += \"text-black-50\";\n        }\n        return classes;\n        // return isActive\n        //   ? \"border-0 btn btn-primary nav-link text-secondary patient-note-active-tab\"\n        //   : \"text-black-50 position-relative rounded-0\";\n      }}\n      tabListClasses=\"border-0\">\n      <TabContent label={t(\"ui.storefront.userDashboard.claimedOrders.DoctorNotes\", \"Physician Notes\")}>\n        <Row>\n          <Col xs={12} lg={8}>\n            <NotesTable\n              notes={doctorNotes?.Results}\n              parentRunning={viewState.running}\n            />\n          </Col>\n          <Col xs={12} lg={4}>\n            <CreatePatientNoteWidget\n              afterNoteCreated={() => {\n                fetchPatientNotes(true);\n              }}\n              accountID={patient?.AccountID}\n              typeName=\"Doctor\"\n            />\n          </Col>\n        </Row>\n      </TabContent>\n      <TabContent label={t(\"ui.storefront.userDashboard.claimedOrders.PatientNotes\", \"Patient Notes\")}>\n        <Row>\n          <Col xs={12} lg={8}>\n            <NotesTable\n              notes={patientNotes?.Results}\n              parentRunning={viewState.running}\n            />\n          </Col>\n          <Col xs={12} lg={4}>\n            <CreatePatientNoteWidget\n              afterNoteCreated={() => {\n                fetchPatientNotes(true);\n              }}\n              accountID={patient?.AccountID}\n              typeName=\"Patient\"\n            />\n          </Col>\n        </Row>\n      </TabContent>\n    </Tabs>\n  </div>;\n};\n","import { Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { Tabs } from \"src/_shared/common/Tabs\";\nimport { TabContent } from \"src/_shared/common/TabContent\";\nimport { BloodWorkList } from \"./BloodWork/BloodWorkList\";\nimport { PatientQuestionnaire } from \"./PatientQuestionnaire\";\nimport { PatientNotes } from \"./Notes/PatientNotes\";\nimport { usePatientFiles } from \"../../_shared/customHooks/usePatientFiles\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useClaimedOrderContext } from \"./ClaimedOrderContext\";\n\nexport const ClaimedOrderTabs = (): JSX.Element => {\n  const { patient } = useClaimedOrderContext();\n\n  const patientFileOptions = useMemo(() => ({\n    useModalForFailure: true,\n    condition: patient !== null\n  }), [ patient ]);\n  const { patientFiles } = usePatientFiles(patient && patient.AccountID, patientFileOptions);\n\n  const { t } = useTranslation();\n\n  const [ imageSrc, setImageSrc ] = useState<string | null>(null);\n  const [ fileId, setFileId ] = useState<number | null>(patientFiles && patientFiles[0]?.ID) || null;\n  const [ imgIsLoading, setImgIsLoading ] = useState<boolean>(true);\n  // eslint-disable-next-line quotes, max-len\n  const downloadUrl = fileId && `/DesktopModules/ClarityEcommerce/API-Repo/SecureFileDownload/Download/${fileId}`;\n\n  useEffect(() => {\n    if (!fileId) {\n      setFileId(patientFiles && patientFiles[0]?.ID);\n    }\n  }, [ patientFiles ]);\n\n  useEffect(() => {\n    const fetchImage = async () => {\n      try {\n        const response = await fetch(downloadUrl, {\n          method: \"GET\",\n        });\n        if (!response || !response.ok) {\n          throw new Error(\"Failed to fetch the image\");\n        }\n        const blob = await response.blob();\n        const blobUrl = URL.createObjectURL(blob);\n        if (blobUrl) {\n          setImageSrc(blobUrl);\n        }\n      } catch (error) {\n        console.error(\"Error fetching the image:\", error);\n      }\n    };\n\n    fetchImage();\n  }, [ downloadUrl ]);\n  return <Row>\n    <Col xs={12}>\n      <Tabs\n        getTabClasses={(isActive: boolean) => {\n          return isActive\n            ? \"text-primary border-start border-top border-end border-medium rounded-0 claimed-order-active-tab\"\n            : \"text-black-50 btn-outline-primary rounded-0\";\n        }}\n        tabContainerClasses=\"claimed-order-tabs position-relative\"\n        tabListClasses=\"border-medium\">\n        <TabContent\n          label=\"Identification\"\n          key=\"Identification\">\n          <div>\n            {imgIsLoading && <LoadingWidget/>}\n            <div className=\"d-flex flex-column align-items-center mt-3\">\n              <p className=\"mb-0 fs-5\">Click image to download</p>\n              <a href={downloadUrl}\n              >\n                <img src={imageSrc}\n                  alt=\"Identification\"\n                  width=\"100%\"\n                  onLoad={() => setImgIsLoading(false)}/>\n              </a>\n            </div>\n          </div>\n        </TabContent>\n        <TabContent\n          label={t(\"ui.storefront.userDashboard.claimedOrders.BloodWork\", \"Blood Work\")}\n          key=\"Blood Work\">\n          <BloodWorkList />\n        </TabContent>\n        <TabContent\n          label={t(\n            \"ui.storefront.userDashboard.claimedOrders.QuestionnaireInformation\",\n            \"Questionnaire Information\"\n          )}\n          key=\"Questionnaire Information\">\n          <PatientQuestionnaire />\n        </TabContent>\n        <TabContent\n          label={t(\n            \"ui.storefront.quotes.cart.notes\",\n            \"Notes\"\n          )}\n          key=\"Notes\">\n          <PatientNotes />\n        </TabContent>\n      </Tabs>\n    </Col>\n  </Row>;\n};\n\nexport default ClaimedOrderTabs;\n","/**\n * eslint-disable camelcase\n *\n * @format\n */\n\nimport { useEffect, useState } from \"react\";\nimport cvApi from \"src/_api/cvApi\";\nimport { DoseSpotCreatePatientResponseDto, UserModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface IDoseSpotFactory {\n  createPatient: (user: UserModel) => Promise<DoseSpotCreatePatientResponseDto>;\n  getIFrameURL: (patient: UserModel, doseSpotPatientID: number) => Promise<string>;\n}\n\nexport const useDoseSpotFactory = (): IDoseSpotFactory => {\n  const [ doseSpotFactory, setDoseSpotFactory ] = useState<IDoseSpotFactory>();\n\n  const cefConfig = useCefConfig();\n  const authFactory = useAuthFactory();\n  const currentUser = useCurrentUser();\n\n  useEffect(() => {\n    if (!authFactory || !cefConfig || !currentUser?.ID) {\n      return;\n    }\n    const factory = {\n      createPatient: async (user: UserModel): Promise<DoseSpotCreatePatientResponseDto> => {\n        /* const res = await cvApi.doseSpot.CreateDoseSpotPatient({\n          UserID: user.ID\n        });\n        if (!res?.data?.ActionSucceeded) {\n          throw new Error(res?.data?.Messages ? res.data.Messages[0] : \"Failed to create new patient in DoseSpot\");\n        } */\n        // @ts-ignore\n\n        const response = await fetch('https://maui.mangorx.com/api/dosespot/patient', {\n          method: 'POST',\n          body: JSON.stringify({\n            \"doctorId\": currentUser.AccountID.toString(),\n            \"patientUserId\": user.ID.toString()\n          }),\n          headers: {\n            'Content-Type': 'application/json',\n            'Accept': 'application/json',\n          }\n        });\n        const data = await response.json();\n        return data;\n      },\n      getIFrameURL: async (patient: UserModel, doseSpotPatientID: number): Promise<string> => {\n        /* const url = await cvApi.doseSpot.GetDoseSpotIFrameUrl({\n          PatientID: patient.ID,\n          DoseSpotPatientID: doseSpotPatientID\n        }); */\n        const response = await fetch('https://maui.mangorx.com/api/dosespot/iframe?' + new URLSearchParams({\n          patientId: patient.ID.toString(),\n          doseSpotPatientId: doseSpotPatientID.toString(),\n          doctorId: currentUser.AccountID.toString()\n        }), {\n          headers: {\n            'Accept': 'application/json',\n          }\n        });\n        const data = await response.json();\n        return data.url;\n      }\n    };\n    setDoseSpotFactory(factory);\n  }, [ authFactory, cefConfig, currentUser ]);\n\n  return doseSpotFactory;\n};\n","import React, { useContext, useState } from \"react\";\nimport _ from \"lodash\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { DoseSpotCreatePatientResponseDto, UserModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useDoseSpotFactory } from \"../../_shared/customHooks/useDoseSpotFactory\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\n\ninterface IDoseSpotContext {\n  viewState: IViewState;\n  iFrameURL?: string;\n  populateIFrame: (\n    patient?: UserModel,\n    callback?: () => any\n  ) => Promise<number>;\n}\n\nexport const DoseSpotContext = React.createContext<IDoseSpotContext>({\n  viewState: {\n    running: true,\n    hasError: false,\n    errorMessage: null\n  },\n  iFrameURL: null,\n  populateIFrame: (_user, _callback) => null,\n});\n\nexport const useDoseSpotContext = (): IDoseSpotContext => {\n  const context = useContext(DoseSpotContext);\n  return context;\n};\n\nexport const DoseSpotContextProvider = (\n  props: React.PropsWithChildren<{ patient: UserModel; }>\n): JSX.Element => {\n  const authFactory = useAuthFactory();\n  // const {} = props;\n  const [ iFrameURL, setIFrameURL ] = useState<string>(\"\");\n\n  const doseSpotFactory = useDoseSpotFactory();\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const generateIFrameURL = async (doseSpotPatientID: number) => {\n    const res = await doseSpotFactory.getIFrameURL(props.patient, doseSpotPatientID);\n    setIFrameURL(res);\n  };\n\n  const populateIFrame = async (\n    patient?: UserModel,\n    callback?: () => any\n  ): Promise<number> => {\n    const doseSpotPatientId = patient?.SerializableAttributes?.DoseSpotPatientID?.Value\n      ? parseInt(patient.SerializableAttributes?.DoseSpotPatientID?.Value)\n      : null;\n    setRunning();\n    try {\n      const account = await authFactory.loadCurrentAccount();\n      // if there isn't an ID, the user on the order being viewed\n      // doesn't exist in DoseSpot, so we need to make a new DoseSpot patient\n      if (!doseSpotPatientId) {\n        const result: DoseSpotCreatePatientResponseDto = await doseSpotFactory.createPatient(patient);\n        await generateIFrameURL(result.doseSpotPatientId);\n      } else {\n        await generateIFrameURL(doseSpotPatientId);\n      }\n      if (_.isFunction(callback)) {\n        callback();\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n    return doseSpotPatientId;\n  };\n\n  return <DoseSpotContext.Provider\n    value={{\n      viewState,\n      iFrameURL,\n      populateIFrame\n    }}>\n    {props.children}\n  </DoseSpotContext.Provider>;\n};\n","import { AllHTMLAttributes, useCallback } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useDoseSpotContext } from \"./DoseSpotContext\";\nimport { useClaimedOrderContext } from \"./ClaimedOrderContext\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\n\nexport const OrderPrescriptionButton = (props: AllHTMLAttributes<HTMLButtonElement>): JSX.Element => {\n  const { ...remaining } = props;\n\n  const { patient, reloadPatient } = useClaimedOrderContext();\n  const { populateIFrame } = useDoseSpotContext();\n  const { t } = useTranslation();\n  const { setRunning, finishRunning } = useViewState();\n\n  const handleClick = useCallback(async () => {\n    setRunning();\n    try {\n      await populateIFrame(patient, reloadPatient);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err, null, true);\n    }\n  }, [ patient, reloadPatient ]);\n\n  if (!patient) {\n    return null;\n  }\n\n  // @ts-ignore\n  return <Button\n    variant=\"outline-black\"\n    onClick={() => {\n      handleClick();\n    }}\n    {...remaining}>\n    {t(\"ui.storefront.userDashboard.claimedOrders.OrderPrescription\", \"Order Prescription\")}\n  </Button>;\n};\n","import { Col, Row } from \"react-bootstrap\";\nimport { SizeMe } from \"react-sizeme\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { UserModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ErrorView } from \"../../_shared/common/ErrorView\";\nimport { DoseSpotContextProvider, useDoseSpotContext } from \"./DoseSpotContext\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { OrderPrescriptionButton } from \"./OrderPrescriptionButton\";\n\nconst ClaimedOrderDoseSpotContent = (): JSX.Element => {\n  const { viewState, iFrameURL } = useDoseSpotContext();\n\n  return <>\n    {/*\n      if the iFrameURL is populated, the button has already been pressed\n    */}\n    <AuthGuard requiresRole=\"Doctor\">\n      <Row className={iFrameURL ? \"d-none\" : \"\"}>\n        <Col xs={12}>\n          <OrderPrescriptionButton />\n        </Col>\n      </Row>\n    </AuthGuard>\n    <Row className=\"mt-2 mb-3\">\n      <Col xs={12}>\n        {iFrameURL\n          ? (\n            <SizeMe monitorHeight={false}>\n              {({ size }) => {\n                const { width } = size;\n                return (\n                  <iframe\n                    id=\"dosespotIFrame\"\n                    title=\"dosespotIFrame\"\n                    width={width - 32}\n                    height={(width - 32) * 0.56}\n                    src={iFrameURL}\n                    allowFullScreen\n                  />\n                );\n              }}\n            </SizeMe>\n          )\n          : null}\n        {viewState.hasError && <ErrorView viewState={viewState} componentName=\"ClaimedOrderDoseSpot\" />}\n        {viewState.running && <LoadingWidget />}\n      </Col>\n    </Row>\n  </>;\n};\n\ninterface IClaimedOrderDoseSpotProps {\n  patient: UserModel\n}\n\nexport const ClaimedOrderDoseSpot = (props: IClaimedOrderDoseSpotProps): JSX.Element => {\n  return <DoseSpotContextProvider patient={props.patient}>\n    <ClaimedOrderDoseSpotContent />\n  </DoseSpotContextProvider>;\n};\n","/** @format */\n\nimport { Col, Row } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CVGrid } from \"../../_shared/CVGrid/CVGrid\";\nimport { PrescriptionModel, ProductModel } from \"src/_api/cvApi._DtoClasses\";\nimport { GetCurrentPatientPrescriptionsDto } from \"src/_api\";\nimport { t } from \"i18next\";\nimport { AddToCartButton } from \"../../Cart/controls/AddToCartButton\";\nimport { useEffect, useState } from \"react\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\n\nexport const Prescriptions = (): JSX.Element => {\n  const [prescriptions, setPrescriptions] = useState<PrescriptionModel[]>(null);\n  const [products, setProducts] = useState<ProductModel[]>(null);\n  const [prescriptionProps, setPrescriptionProps] = useState<GetCurrentPatientPrescriptionsDto>({});\n\n  const { setRunning, finishRunning } = useViewState();\n  const productFactory = useProductFactory();\n\n  const pageSizeOptions = [8, 16, 24];\n\n  useEffect(() => {\n    if (!productFactory) {\n      return;\n    }\n    getPrescriptions();\n  }, [productFactory, prescriptionProps]);\n\n  async function getPrescriptions() {\n    setRunning();\n    try {\n      const results = await cvApi.accounts.GetCurrentPatientPrescriptions(prescriptionProps);\n      if (!results.data || !results.data.Results) {\n        finishRunning();\n        return;\n      }\n      setPrescriptions(results.data.Results);\n      const productIds = results.data.Results.map(prescription => prescription.ProductID);\n      if (productIds.length > 0) {\n        const productsRes = await productFactory.getProductsByIDs(productIds);\n        setProducts(productsRes);\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err as any as Error);\n    }\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-prescriptions mt-3\">\n          <div className=\"section-title d-flex align-items-center justify-content-between mb-2\">\n            <h1 className=\"title\">\n              <i className=\"far fa-prescription-bottle me-2\" />\n              <span data-sid=\"udprescriptionsTitleText\">\n                {t(\"ui.storefront.common.Prescription.Plural\", \"Prescriptions\")}\n              </span>\n            </h1>\n          </div>\n          {prescriptions && (\n            <CVGrid<PrescriptionModel, GetCurrentPatientPrescriptionsDto>\n              pageSizes={pageSizeOptions}\n              name=\"orders\"\n              data={prescriptions}\n              tableClasses=\"shadow-none border border-medium\"\n              onQueryChange={request => {\n                setPrescriptionProps(request);\n              }}\n              initialFilters={{\n                Sorts: [\n                  {\n                    field: \"CreatedDate\",\n                    dir: \"desc\"\n                  }\n                ]\n              }}>\n              <CVGrid.Column\n                title=\"Product\"\n                binding=\"ProductName\"\n                fallback=\"N/A\"\n                thClass=\"w-20\"\n              />\n              <CVGrid.Column\n                title=\"Dosage\"\n                binding=\"Dosage\"\n                fallback=\"N/A\"\n                thClass=\"w-10\"\n              />\n              <CVGrid.Column\n                title=\"Qty\"\n                binding=\"QuantityOrdered\"\n                fallback=\"N/A\"\n                thClass=\"w-10 text-center\"\n                tdClass=\"text-center\"\n              />\n              <CVGrid.Column\n                title=\"Refills Remaining\"\n                binding=\"RefillsRemaining\"\n                fallback=\"0\"\n                thClass=\"w-15 text-center\"\n                tdClass=\"text-center\"\n              />\n              <CVGrid.Column\n                title=\"Expiration Date\"\n                binding=\"ExpirationDate\"\n                format=\"date\"\n                thClass=\"w-20 text-center\"\n                tdClass=\"text-center\"\n              />\n              <CVGrid.Column\n                title=\"Status\"\n                binding=\"StatusName\"\n                fallback=\"N/A\"\n                thClass=\"w-10\">\n                {(rowData: PrescriptionModel) => {\n                  return (\n                    <span\n                      className={\n                        rowData.StatusName === \"Active\"\n                          ? \"text-success\"\n                          : rowData.StatusName === \"Expired\"\n                          ? \"text-danger\"\n                          : \"\"\n                      }>\n                      {rowData.StatusName}\n                    </span>\n                  );\n                }}\n              </CVGrid.Column>\n              <CVGrid.Column\n                title=\"RequestRefillButton\"\n                tdClass=\"w-15\"\n                hideHeader>\n                {(rowData: PrescriptionModel) => {\n                  const productToUse = products?.find(product => product.ID === rowData.ProductID);\n                  return (\n                    <RequestRefillButton\n                      rowData={rowData}\n                      product={productToUse}\n                      productFactory={productFactory}\n                    />\n                  );\n                }}\n              </CVGrid.Column>\n              <CVGrid.Filter\n                title=\"Status\"\n                type=\"string\"\n                filterProperty=\"StatusName\"\n              />\n              <CVGrid.Filter\n                title=\"ID\"\n                type=\"number\"\n                filterProperty=\"ID\"\n              />\n              <CVGrid.Filter\n                title=\"Key\"\n                type=\"string\"\n                filterProperty=\"CustomKey\"\n              />\n              <CVGrid.Filter\n                title=\"Order Date\"\n                type=\"minmaxdate\"\n                filterProperty=\"ExpirationDate\"\n              />\n            </CVGrid>\n          )}\n        </section>\n      </Col>\n    </Row>\n  );\n};\n\ninterface ICustomColumnProps {\n  rowData: PrescriptionModel;\n  product: ProductModel;\n  productFactory: ReturnType<typeof useProductFactory>;\n}\n\nfunction RequestRefillButton(props: ICustomColumnProps): JSX.Element {\n  const [productToUse, setProductToUse] = useState<ProductModel | null>(props.product);\n  useEffect(() => {\n    const fetchProductVariant = async () => {\n      if (props.product && props.rowData) {\n        const res = await props.productFactory.getOneTimeVariantFromAnyProductID(props.product.ID);\n        if (res) {\n          // res.ID = 33; // HARDCODE MIDLEVEL\n          setProductToUse(res);\n        } else {\n          setProductToUse(props.product);\n        }\n      }\n    };\n\n    fetchProductVariant();\n  }, [props.product, props.rowData, props.productFactory]);\n  if (!props.product || !props.rowData) {\n    return <LoadingWidget />;\n  }\n  return (\n    <AddToCartButton\n      btnVariant=\"primary\"\n      btnClasses=\"py-2 text-white\"\n      disabled={\n        Boolean(!(props.rowData.RefillsRemaining > 0)) ||\n        props.rowData.StatusName === \"Expired\" ||\n        new Date(props.rowData.ExpirationDate) < new Date()\n      }\n      product={productToUse}\n      masterProduct={productToUse}\n      ignorePricingAndInventory={true}\n      quantity={1}\n      excludeQuoteCart={true}\n      label={t(\"ui.storefront.prescriptions.RequestRefil\", \"Request Refill\")}\n      useErrorModal={true}\n    />\n  );\n}\n","import { ButtonGroup, Col, Row } from \"react-bootstrap\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { QuestionnaireModel } from \"src/_api/cvApi._DtoClasses\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\n\nconst Questionnaires = (): JSX.Element => {\n  const { t } = useTranslation();\n\n  return (\n    <>\n      <Row>\n        <Col>\n          <h1>\n            <i className=\"fal fa-fw fa-question me-2\" />\n            <span data-sid=\"udQuestionnairesTitleText\">\n              {t(\"ui.storefront.common.Questionnaires.Plural\", \"Questionnaires\")}\n            </span>\n          </h1>\n        </Col>\n      </Row>\n      <Row className=\"justify-content-end\">\n        <Col\n          sm={12}\n          md={3}>\n          <ButtonGroup\n            vertical\n            className=\"float-end\">\n            <AuthGuard requiresPermission=\"Questionnaire.Questionnaire.Create\">\n              <Link\n                className=\"btn btn-outline-primary\"\n                to=\"/dashboard/questionnaires/new\">\n                {t(\"ui.storefront.common.Questionnaire.New\", \"New\")}\n              </Link>\n            </AuthGuard>\n          </ButtonGroup>\n        </Col>\n      </Row>\n      <CVGrid\n        name=\"questionnaires\"\n        data={p => cvApi.questionnaire.GetQuestionnaires(p)}\n        pageSizes={[ 8, 16, 24 ]}\n        // @ts-ignore, valid in skin override\n        tableClasses=\"shadow-none border border-medium\"\n        initialFilters={{\n          Sorts: [\n            {\n              field: \"CreatedDate\",\n              dir: \"desc\"\n            }\n          ]\n        }}>\n        {/* ViewDetails */}\n        <CVGrid.Column\n          title={t(\"ui.storefront.common.ID\", \"ID\")}\n          binding=\"ID\"\n        />\n        <CVGrid.Column\n          title={t(\"ui.storefront.common.CustomKey\", \"Custom Key\")}\n          binding=\"CustomKey\"\n          fallback=\"N/A\"\n        />\n        <CVGrid.Column\n          title={t(\"ui.storefront.common.Name\", \"Name\")}\n          binding=\"Name\"\n          fallback=\"N/A\"\n        />\n        <CVGrid.Column\n          title={t(\"ui.storefront.common.Detail.Plural\", \"Details\")}\n          tdClass=\"w-1\"\n          hideHeader>\n          {(q: QuestionnaireModel) => <ViewDetailsButton questionnaire={q} />}\n        </CVGrid.Column>\n      </CVGrid>\n    </>\n  );\n};\n\ninterface ICustomColumnProps {\n  questionnaire: QuestionnaireModel;\n}\n\nfunction ViewDetailsButton(props: ICustomColumnProps): JSX.Element {\n  const { t } = useTranslation();\n\n  return (\n    <Link\n      className=\"btn btn-primary\"\n      to={`/dashboard/questionnaires/${props.questionnaire.ID}`}>\n      {t(\"ui.storefront.common.View\")}\n    </Link>\n  );\n}\n\nexport default Questionnaires;\n","import { useEffect, useState } from \"react\";\nimport { Button, ButtonGroup, Dropdown } from \"react-bootstrap\";\nimport { useFormContext } from \"react-hook-form\";\nimport { BaseModel } from \"src/_api/cvApi.shared\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRecordContext } from \"./DetailBase\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\n\ninterface IStandardDetailFooterButtonsWidgetProps {\n  permissionsBase: string;\n}\n\n// TODO: Hook in additional actions to list with functions to call back in their originating controls\n\n// eslint-disable-next-line max-len\nconst StandardDetailFooterButtonsWidget = <TRecordModel extends BaseModel>(\n  props: IStandardDetailFooterButtonsWidgetProps\n): JSX.Element => {\n  const { permissionsBase } = props;\n\n  const [ hasAnActionPermission, setHasAnActionPermission ] = useState<boolean>(false);\n\n  const context = useRecordContext<TRecordModel>();\n  const { t } = useTranslation();\n  const authFactory = useAuthFactory();\n  const currentUser = useCurrentUser();\n  const { formState } = useFormContext();\n  const { record, deactivateRecord, reactivateRecord, saveRecord, deleteRecord, viewState } = context;\n\n  useEffect(() => {\n    if (currentUser.Loading\n      || !currentUser.ID\n      || !authFactory\n      || !permissionsBase) {\n      return;\n    }\n    const permissionPromises = [\n      `${permissionsBase}.Deactivate`,\n      `${permissionsBase}.Reactivate`,\n      `${permissionsBase}.Delete`\n    ].map(x => authFactory.hasPermission(x));\n    Promise.all(permissionPromises)\n      .then(resArr => {\n        setHasAnActionPermission(resArr.some(Boolean));\n      })\n      .catch(() => {\n        // Do nothing\n      });\n  }, [ authFactory, currentUser, permissionsBase ]);\n\n  const includeSavePermission: string = record.ID > 0 ? `${permissionsBase}.Update` : `${permissionsBase}.Create`;\n\n  return (\n    <ButtonGroup className=\"mb-3\">\n      {hasAnActionPermission && (\n        <ButtonGroup>\n          {/*\n            The below button and ul is intentional.\n            The react-bootstrap Dropdown looks wrong inside of the ButtonGroup\n          */}\n          <Button\n            variant=\"primary\"\n            className=\"text-capitalize\"\n            id=\"dropdownActions\"\n            aria-expanded=\"false\"\n            data-bs-toggle=\"dropdown\">\n            <span>\n              {t(\"ui.storefront.common.Action.Plural\", \"Actions\")}\n            </span>\n            <i className=\"far fa-fw fa-chevron-down ms-2 me-n1\" />\n          </Button>\n          <ul\n            aria-labelledby=\"dropdownActions\"\n            className=\"dropdown-menu\">\n            {record.Active && (\n              <AuthGuard requiresPermission={`${permissionsBase}.Deactivate`}>\n                <Dropdown.Item\n                  disabled={viewState.running || record.ID < 1 || formState.isDirty || formState.isValidating}\n                  onClick={deactivateRecord}>\n                  {t(\"ui.storefront.common.Deactivate\", \"Deactivate\")}\n                </Dropdown.Item>\n              </AuthGuard>\n            )}\n            {!record.Active && (\n              <AuthGuard requiresPermission={`${permissionsBase}.Reactivate`}>\n                <Dropdown.Item\n                  disabled={viewState.running || record.ID === 0 || formState.isDirty || formState.isValidating}\n                  onClick={reactivateRecord}>\n                  {t(\"ui.storefront.common.Reactivate\", \"Reactivate\")}\n                </Dropdown.Item>\n              </AuthGuard>\n            )}\n            <AuthGuard requiresPermission={`${permissionsBase}.Delete`}>\n              <Dropdown.Item\n                disabled={viewState.running || record.ID < 1 || formState.isDirty || formState.isValidating}\n                onClick={deleteRecord}>\n                {t(\"ui.storefront.common.Delete\", \"Delete\")}\n              </Dropdown.Item>\n            </AuthGuard>\n          </ul>\n        </ButtonGroup>\n      )}\n      <AuthGuard requiresPermission={includeSavePermission}>\n        <Button\n          variant=\"success\"\n          disabled={viewState.running || !formState.isDirty || formState.isValidating || !formState.isValid}\n          onClick={saveRecord}>\n          {t(\"ui.storefront.common.Save\", \"Save\")}\n        </Button>\n      </AuthGuard>\n    </ButtonGroup>\n  );\n};\n\nexport default StandardDetailFooterButtonsWidget;\n","import React from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useRecordContext } from \"./DetailBase\";\nimport { useTranslation } from \"react-i18next\";\nimport { NameableBaseModel } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IStandardDetailHeaderWidgetProps {\n  newKindKey: string;\n  existingKindKey: string;\n  existingKindText?: string;\n}\n\n// eslint-disable-next-line max-len\nconst StandardDetailHeaderWidget = <TRecordModel extends NameableBaseModel>(\n  props: IStandardDetailHeaderWidgetProps\n): JSX.Element => {\n  const context = useRecordContext<TRecordModel>();\n  const { t } = useTranslation();\n\n  const { record } = context;\n\n  return (\n    <Row className=\"details-header\">\n      <Col\n        md={12}\n        className=\"details-title\">\n        <h2>\n          {!Boolean(record.ID) && <span>{t(props.newKindKey || \"ui.storefront.common.New\", \"New\")}</span>}\n          {Boolean(record.ID) && <span>{t(props.existingKindKey || \"\", props.existingKindText)}</span>}\n          {Boolean(record.ID) && (\n            <>\n              &nbsp;<span>{t(\"ui.storefront.common.Number.Symbol\", \"#\")}</span>\n              <span>{record.ID}</span>\n            </>\n          )}\n          {record.Name && (\n            <>\n              &nbsp;<span>{record.Name}</span>\n            </>\n          )}\n          {record.CustomKey && (\n            <>\n              &nbsp;[<span>{record.CustomKey}</span>]\n            </>\n          )}\n        </h2>\n      </Col>\n    </Row>\n  );\n};\n\nexport default StandardDetailHeaderWidget;\n","/* eslint-disable line-comment-position */\n/* eslint-disable no-inline-comments */\n/* eslint-disable max-len */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport React, { useEffect, useState } from \"react\";\nimport { Link, useParams } from \"react-router-dom\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { Button, Col, Container, Form, Row } from \"react-bootstrap\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faAngleDoubleLeft } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { BaseModel, CEFActionResponse, CEFActionResponseT, IHttpPromise } from \"src/_api/cvApi.shared\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useTranslation } from \"react-i18next\";\nimport { IErrorMessageArg, IViewState, IWaitMessageArg } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { confirm } from \"src/_shared/modals\";\nimport StandardDetailFooterButtonsWidget from \"./StandardDetailFooterButtonsWidget\";\nimport StandardDetailHeaderWidget from \"./StandardDetailHeaderWidget\";\nimport { faTriangleExclamation } from \"@fortawesome/pro-solid-svg-icons\";\nimport Interweave from \"interweave\";\n\ninterface DetailBaseProps<TRecordModel> extends React.PropsWithChildren<{}> {\n  id?: string; // Optional, if not provided, will use the URL parameter\n  title: string;\n  permissionsBase: string;\n  listRoute: string;\n  listReturnLabelKey: string;\n  newKindKey: string;\n  existingKindKey: string;\n  existingKindText?: string;\n  hideFooterButtons: boolean;\n  hideHeaderWidgets: boolean;\n  hideErrorModalBtn?: boolean;\n  // Do Nothing by default, override to take additional actions\n  loadCollections: (result: TRecordModel) => Promise<unknown[]>;\n  loadRecordPreAction: () => Promise<void>;\n  constructorPreAction: () => Promise<void>;\n  loadRecordActionBeforeAssign: (result: TRecordModel) => Promise<TRecordModel>;\n  loadRecordActionAfterSuccess: (result: TRecordModel) => Promise<TRecordModel>;\n  createRecordPreAction: (toSend: TRecordModel) => Promise<TRecordModel>;\n  createRecordActionAfterSuccess: (\n    result: CEFActionResponseT<number>,\n    collections: unknown[]\n  ) => Promise<CEFActionResponseT<number>>;\n  updateRecordPreAction: (toSend: TRecordModel) => Promise<TRecordModel>;\n  updateRecordActionAfterSuccess: (\n    result: CEFActionResponseT<number>,\n    collections: unknown[]\n  ) => Promise<CEFActionResponseT<number>>;\n  deactivateRecordPreAction: (toSend: TRecordModel) => Promise<TRecordModel>;\n  deactivateRecordActionAfterSuccess: (result: CEFActionResponse) => Promise<CEFActionResponse>;\n  reactivateRecordPreAction: (toSend: TRecordModel) => Promise<TRecordModel>;\n  reactivateRecordActionAfterSuccess: (result: CEFActionResponse) => Promise<CEFActionResponse>;\n  deleteRecordPreAction: (toSend: TRecordModel) => Promise<TRecordModel>;\n  deleteRecordActionAfterSuccess: (result: CEFActionResponse) => Promise<CEFActionResponse>;\n  loadNewRecord?: () => Promise<TRecordModel>;\n  // Must override\n  loadRecordCall: (id: number) => IHttpPromise<TRecordModel>;\n  createRecordCall: (routeParams?: TRecordModel) => IHttpPromise<CEFActionResponseT<number>>;\n  updateRecordCall: (routeParams?: TRecordModel) => IHttpPromise<CEFActionResponseT<number>>;\n  deactivateRecordCall: (id: number) => IHttpPromise<CEFActionResponse>;\n  reactivateRecordCall: (id: number) => IHttpPromise<CEFActionResponse>;\n  deleteRecordCall: (id: number) => IHttpPromise<CEFActionResponse>;\n}\n\nfunction DetailBase<TRecordModel>(props: DetailBaseProps<TRecordModel>): JSX.Element {\n  const { id } = useParams<{ id: string }>();\n  const { t } = useTranslation();\n  const { viewState, setRunning, finishRunning } = useViewState();\n  const [ record, setRecord ] = useState<TRecordModel | null>();\n  const [ collections, setCollections ] = useState<unknown[] | null>();\n  const formMethods = useForm<TRecordModel>({ mode: \"onChange\" });\n\n  const loadRecord = async (id: number) => {\n    try {\n      await props.loadRecordPreAction();\n      const r1 = await props.loadRecordCall(id);\n      const r2 = await props.loadRecordActionBeforeAssign(r1.data);\n      const r3 = await props.loadRecordActionAfterSuccess(r2);\n      setRecord(r3);\n      const collections = await props.loadCollections(r3);\n      setCollections(collections ?? []);\n      finishRunning();\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  };\n\n  const deactivateRecord = async () => {\n    try {\n      await confirm({\n        children: (\n          <p>\n            {t(\n              \"ui.storefront.grid.ConfirmDeactivate.Message\",\n              \"Are you sure you want to deactivate this record? This is a soft-delete that hides it from all normal data calls and it can be recovered.\"\n            )}\n          </p>\n        )\n      });\n      setRunning();\n      const r1 = await props.deactivateRecordPreAction(record);\n      const r2 = await props.deactivateRecordCall((r1 as BaseModel).ID);\n      if (!r2.data.ActionSucceeded) {\n        finishRunning(true, null, r2.data.Messages);\n        return;\n      }\n      const r3 = await props.deactivateRecordActionAfterSuccess(r2.data);\n      if (!r3.ActionSucceeded) {\n        finishRunning(true, null, r3.Messages);\n      }\n      await loadRecord((record as BaseModel).ID);\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  };\n\n  const reactivateRecord = async () => {\n    try {\n      setRunning();\n      const r1 = await props.reactivateRecordPreAction(record);\n      const r2 = await props.reactivateRecordCall((r1 as BaseModel).ID);\n      if (!r2.data.ActionSucceeded) {\n        finishRunning(true, null, r2.data.Messages);\n        return;\n      }\n      const r3 = await props.reactivateRecordActionAfterSuccess(r2.data);\n      if (!r3.ActionSucceeded) {\n        finishRunning(true, null, r3.Messages);\n      }\n      await loadRecord((record as BaseModel).ID);\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  };\n\n  const deleteRecord = async () => {\n    try {\n      await confirm({\n        children: (\n          <p>\n            {t(\n              \"ui.storefront.grid.ConfirmDelete.Message\",\n              \"Are you sure you want to delete this record? This is a hard delete and the data cannot be recovered except via database backups.\"\n            )}\n          </p>\n        )\n      });\n      setRunning();\n      const r1 = await props.deleteRecordPreAction(record);\n      const r2 = await props.deleteRecordCall((r1 as BaseModel).ID);\n      if (!r2.data.ActionSucceeded) {\n        finishRunning(true, null, r2.data.Messages);\n        return;\n      }\n      const r3 = await props.deleteRecordActionAfterSuccess(r2.data);\n      if (!r3.ActionSucceeded) {\n        finishRunning(true, null, r3.Messages);\n      }\n      await loadRecord((record as BaseModel).ID);\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  };\n\n  const saveRecord = async () => {\n    const isFormValid = await formMethods.trigger();\n    if (!isFormValid) {\n      window.scrollTo({\n        top: 0,\n        behavior: \"smooth\"\n      });\n      return;\n    }\n\n    setRunning();\n    if (record && (record as BaseModel).ID > 0) {\n      await doUpdate();\n    } else {\n      await doCreate();\n    }\n    formMethods.reset({ ...formMethods.getValues() });\n  };\n\n  const doUpdate = async () => {\n    try {\n      const r1 = await props.updateRecordPreAction(record);\n      const r2 = await props.updateRecordCall(r1);\n      const newID = await props.updateRecordActionAfterSuccess(r2.data, collections);\n      await loadRecord(newID.Result);\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  };\n\n  const doCreate = async () => {\n    try {\n      const r1 = await props.createRecordPreAction(record);\n      const r2 = await props.createRecordCall(r1);\n      const newID = await props.createRecordActionAfterSuccess(r2.data, collections);\n      await loadRecord(newID.Result);\n    } catch (error) {\n      finishRunning(true, error);\n    }\n  };\n\n  const showErrorsModal = async () => {\n    try {\n      await confirm({\n        children: (\n          <>\n            <div className=\"p-3\">\n              {formMethods.formState.isValid\n                ? null\n                : Object.keys(formMethods.formState.errors).map(errorKey => (\n                  <div\n                    key={`error_${errorKey}`}\n                    className=\"d-block my-1\">\n                    {/* TODO: Link to location on page where issue is */}\n                    <Interweave content={feedbackConverter(errorKey)} />\n                  </div>\n                ))}\n            </div>\n          </>\n        )\n      });\n    } catch (err) {\n      // Do nothing\n    }\n  };\n\n  useEffect(() => {\n    (async () => {\n      try {\n        setRunning();\n        await props.constructorPreAction();\n        const idToUse = props.id ?? id;\n        if (idToUse && parseInt(idToUse, 10) > 0) {\n          await loadRecord(parseInt(idToUse, 10));\n        } else {\n          const newRecord = await props.loadNewRecord();\n          (newRecord as BaseModel).ID = 0;\n          setRecord(newRecord);\n          const collections = await props.loadCollections(newRecord);\n          setCollections(collections ?? []);\n          finishRunning();\n        }\n      } catch (error) {\n        finishRunning(true, error);\n      }\n    })();\n  }, []);\n\n  // TODO: Move to the modal that will display the detailed error contents from the entire page's form\n  // eslint-disable-next-line no-unused-vars\n  function feedbackConverter(formIdentifier: string): string {\n    if (!(formMethods.formState.errors as any)[formIdentifier]) {\n      return null;\n    }\n    if ((formMethods.formState.errors as any)[formIdentifier].message) {\n      return String((formMethods.formState.errors as any).message);\n    }\n    if (!(formMethods.formState.errors as any)[formIdentifier].type) {\n      return \"An unknown error has occurred\";\n    }\n    // TODO: Use translation keys\n    switch ((formMethods.formState.errors as any)[formIdentifier].type) {\n      case \"required\": {\n        return `${t(\"ui.storefront.common.validation.ThisFieldIsRequired\", \"This field is required\")}: ${formIdentifier}`;\n      }\n      case \"min\": {\n        // return `Minimum value ${rules.minLength}`;\n        return \"Minimum value X\";\n      }\n      case \"max\": {\n        // return `Maximum value ${rules.maxLength}`;\n        return \"Maximum value X\";\n      }\n      case \"minLength\": {\n        // return `Must reach minimum length of ${rules.minLength}`;\n        return \"Must reach minimum length of X\";\n      }\n      case \"maxLength\": {\n        // return `Must not exceed maximum length of ${rules.maxLength}`;\n        return \"Must not exceed maximum length of X\";\n      }\n      case \"pattern\": {\n        return \"Value does not match required pattern\";\n      }\n      default: {\n        return String((formMethods.formState.errors as any)[formIdentifier].type);\n      }\n    }\n  }\n\n  return (\n    <RecordContext.Provider\n      value={{\n        record,\n        setRecord,\n        loadRecord,\n        collections,\n        setCollections,\n        deactivateRecord,\n        reactivateRecord,\n        saveRecord,\n        deleteRecord,\n        viewState,\n        setRunning,\n        finishRunning,\n        permissionsBase: props.permissionsBase\n      }}>\n      <FormProvider {...formMethods}>\n        <Row className=\"g-1 g-sm-2 g-md-2 g-lg-3\">\n          {!props.hideHeaderWidgets && (\n            <>\n              <Col xs className=\"order-0\">\n                <Link\n                  to={props.listRoute}\n                  className=\"btn btn-secondary mb-3\">\n                  <FontAwesomeIcon\n                    icon={faAngleDoubleLeft as IconDefinition}\n                    className=\"me-1\"\n                  />\n                  Back to All {t(props.listReturnLabelKey)}\n                </Link>\n              </Col>\n              {/*\n                TODO: This form control is not wired up\n                <Col\n                  xs={12}\n                  sm={12}\n                  md\n                  className=\"order-4 order-sm-4 order-md-1\">\n                  {record && collections && (\n                    <Form.Control\n                      type=\"text\"\n                      placeholder={t(\"ui.storefront.common.SearchWithinThisRecord.Ellipses\", \"Search within this record...\")}\n                      className=\"mb-3 w-100\"\n                    />\n                  )}\n                </Col>\n              */}\n            </>\n          )}\n          {!props.hideErrorModalBtn\n            && (!record || !collections || formMethods.formState.isValid ? null : (\n              <Col\n                xs={\"auto\"}\n                className=\"order-2 order-sm-2 order-md-3\">\n                <div className=\"d-flex flex-wrap\">\n                  {/* <span className=\"me-1\">{formMethods.formState.isLoading ? \"loading\" : \"loaded\"}</span> */}\n                  {/* <span className=\"me-1\">{formMethods.formState.isSubmitted ? \"submitted\" : \"unsubmitted\"}</span> */}\n                  {/* <span className=\"me-1\">{formMethods.formState.isSubmitting ? \"submitting\" : \"not submitting\"}</span> */}\n                  {/* <span className=\"me-1\">{formMethods.formState.isDirty ? \"dirty\" : \"clean\"}</span> */}\n                  {/* <span className=\"me-1\">{formMethods.formState.isValidating ? \"validating\" : \"validated\"}</span> */}\n                  {/* <span className=\"me-1\">{formMethods.formState.isValid ? \"valid\" : \"invalid\"}</span> */}\n                  {/* !formMethods.formState.isValid ? JSON.stringify(formMethods.formState.errors) : null */}\n                  <Button\n                    type=\"button\"\n                    role=\"alert\"\n                    variant=\"danger\"\n                    className=\"text-white\"\n                    onClick={showErrorsModal}>\n                    {/* TODO: Click the button to get a modal that has the detailed error messages */}\n                    <table>\n                      <tbody>\n                        <tr>\n                          <td style={{ width: \"auto\" }}>\n                            <FontAwesomeIcon icon={faTriangleExclamation as IconDefinition} />\n                          </td>\n                          <td>{Object.keys(formMethods.formState.errors).length} Error(s)</td>\n                        </tr>\n                      </tbody>\n                    </table>\n                  </Button>\n                </div>\n              </Col>\n            ))}\n          <Col\n            xs={\"auto\"}\n            className=\"order-2 order-sm-2 order-md-4\">\n            {!props.hideFooterButtons && record && collections && (\n              <StandardDetailFooterButtonsWidget permissionsBase={props.permissionsBase} />\n            )}\n          </Col>\n        </Row>\n        <Row>\n          <Col>\n            {record && collections && (\n              <StandardDetailHeaderWidget\n                newKindKey={props.newKindKey}\n                existingKindKey={props.existingKindKey}\n                existingKindText={props.existingKindText}\n              />\n            )}\n          </Col>\n        </Row>\n        {viewState.hasError && (\n          <Row>\n            <Col className=\"mb-3\">\n              <ErrorView viewState={viewState} />\n            </Col>\n          </Row>\n        )}\n        <Row>\n          <Col>\n            {viewState.running && <LoadingWidget overlay={true} />}\n            {record && collections && props.children}\n          </Col>\n        </Row>\n      </FormProvider>\n    </RecordContext.Provider>\n  );\n}\n\ntype RecordContextType<TRecordModel> = {\n  record: TRecordModel | null;\n  setRecord: React.Dispatch<React.SetStateAction<TRecordModel | null>>;\n  loadRecord: (id: number) => Promise<void>;\n  collections: unknown[];\n  setCollections: React.Dispatch<React.SetStateAction<unknown[]>>;\n  deactivateRecord: () => Promise<void>;\n  reactivateRecord: () => Promise<void>;\n  saveRecord: () => Promise<void>;\n  deleteRecord: () => Promise<void>;\n  viewState: IViewState;\n  setRunning: (waitMessage?: IWaitMessageArg) => void;\n  finishRunning: (hasError?: boolean, errorMessage?: IErrorMessageArg, errorMessages?: string[]) => void;\n  permissionsBase: string;\n};\n\nconst RecordContext = React.createContext<RecordContextType<any> | null>(null);\n\nexport const useRecordContext = <TRecordModel, >(): RecordContextType<TRecordModel> | null => {\n  const context = React.useContext<RecordContextType<TRecordModel>>(RecordContext);\n  return context;\n};\n\nDetailBase.defaultProps = {\n  loadCollections: (record: any) => Promise.resolve(),\n  loadRecordPreAction: () => Promise.resolve(),\n  constructorPreAction: () => Promise.resolve(),\n  loadRecordActionBeforeAssign: (result: any) => Promise.resolve(result),\n  loadRecordActionAfterSuccess: (result: any) => Promise.resolve(result),\n  createRecordPreAction: (toSend: any) => Promise.resolve(toSend),\n  createRecordActionAfterSuccess: (result: any) => Promise.resolve(result),\n  updateRecordPreAction: (toSend: any) => Promise.resolve(toSend),\n  updateRecordActionAfterSuccess: (result: any) => Promise.resolve(result),\n  deactivateRecordPreAction: (toSend: any) => Promise.resolve(toSend),\n  deactivateRecordActionAfterSuccess: (result: any) => Promise.resolve(result),\n  reactivateRecordPreAction: (toSend: any) => Promise.resolve(toSend),\n  reactivateRecordActionAfterSuccess: (result: any) => Promise.resolve(result),\n  deleteRecordPreAction: (toSend: any) => Promise.resolve(toSend),\n  deleteRecordActionAfterSuccess: (result: any) => Promise.resolve(result),\n  hideFooterButtons: false,\n  hideHeaderWidgets: false,\n  hideErrorModalBtn: false\n};\n\nexport default DetailBase;\n","/**\n * eslint-disable max-len\n *\n * @format\n */\n\nimport { Col, Form, InputGroup, Row } from \"react-bootstrap\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRecordContext } from \"../_base/DetailBase\";\nimport { BS5TextInputFormGroup } from \"../_base/components/BS5TextInputFormGroup\";\nimport { QuestionnaireModel } from \"src/_api/cvApi._DtoClasses\";\n\nexport const QuestionnaireDetailBasicInformationCard = (): JSX.Element => {\n  const { t } = useTranslation();\n  const { control, formState } = useFormContext();\n  const context = useRecordContext<QuestionnaireModel>();\n  const { record, setRecord, collections } = context;\n  const controlNames = {\n    CustomKey: { name: \"CustomKey\", property: \"CustomKey\" },\n    Name: { name: \"Name\", property: \"Name\" }\n  };\n\n  return (\n    <Form>\n      <Row>\n        <Col\n          xs={12}\n          sm={6}\n          md={4}\n          lg={3}>\n          <Controller\n            name={controlNames.Name.name}\n            control={control}\n            defaultValue={(record as any)[controlNames.Name.property] ?? \"\"}\n            rules={{ required: true, maxLength: { value: 256, message: \"Max length 256\" } }}\n            render={({ field }) => (\n              <Form.Group className=\"form-group mb-3\">\n                <Form.Label htmlFor={controlNames.Name.name}>{controlNames.Name.name}</Form.Label>\n                <InputGroup hasValidation>\n                  <Form.Control\n                    type=\"text\"\n                    id={controlNames.Name.name}\n                    {...field}\n                    placeholder={controlNames.Name.name}\n                    className=\"form-control\"\n                    isInvalid={Boolean(formState.errors[controlNames.Name.name])}\n                    maxLength={256}\n                    onChange={e => {\n                      field.onChange(e);\n                      setRecord({ ...record, [controlNames.Name.property]: e.target.value });\n                    }}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors[controlNames.Name.name]?.message}\n                  </Form.Control.Feedback>\n                </InputGroup>\n              </Form.Group>\n            )}\n          />\n        </Col>\n        <Col\n          xs={12}\n          sm={6}\n          md={4}\n          lg={3}>\n          <Controller\n            name={controlNames.CustomKey.name}\n            control={control}\n            defaultValue={(record as any)[controlNames.CustomKey.property] ?? \"\"}\n            rules={{ required: true, maxLength: { value: 128, message: \"Max length 128\" } }}\n            render={({ field }) => (\n              <Form.Group className=\"form-group mb-3\">\n                <Form.Label htmlFor={controlNames.CustomKey.name}>{controlNames.CustomKey.name}</Form.Label>\n                <InputGroup hasValidation>\n                  <Form.Control\n                    type=\"text\"\n                    id={controlNames.CustomKey.name}\n                    {...field}\n                    placeholder={controlNames.CustomKey.name}\n                    className=\"form-control\"\n                    isInvalid={Boolean(formState.errors[controlNames.CustomKey.name])}\n                    maxLength={128}\n                    onChange={e => {\n                      field.onChange(e);\n                      setRecord({ ...record, [controlNames.CustomKey.property]: e.target.value });\n                    }}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors[controlNames.CustomKey.name]?.message}\n                  </Form.Control.Feedback>\n                </InputGroup>\n              </Form.Group>\n            )}\n          />\n        </Col>\n      </Row>\n    </Form>\n  );\n};\n","import React, {\n  ChangeEventHandler,\n  ClipboardEventHandler,\n  FocusEventHandler,\n  KeyboardEventHandler,\n  MouseEventHandler,\n  useState\n} from \"react\";\nimport {\n  Control,\n  Controller,\n  DeepMap,\n  FieldError,\n  FieldValues,\n  FormState,\n  RegisterOptions,\n  UseFormRegister\n} from \"react-hook-form\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faQuestionCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface IFormGroupProps<T> {\n  // Storefront uses register with a form control\n  register?: UseFormRegister<any>;\n  // Admin uses a control with formState\n  control?: Control<FieldValues, any>;\n  formState?: FormState<FieldValues>;\n  defaultValue?: any;\n  rules?: Omit<RegisterOptions<FieldValues, string>, \"setValueAs\" | \"disabled\" | \"valueAsNumber\" | \"valueAsDate\">;\n  // Shared\n  errors: DeepMap<FieldValues, FieldError>;\n  formIdentifier: string;\n  formClasses?: string;\n  hideLabel?: boolean;\n  labelKey?: string;\n  labelText?: string;\n  labelKeyFallback?: string;\n  tooltipKey?: string;\n  tooltipText?: string;\n  tooltipKeyFallback?: string;\n  disabled?: boolean;\n  showValidTooltip?: boolean;\n  hideInvalidTooltip?: boolean;\n  failsOn?: boolean;\n  forceTooltipWithFocus?: boolean;\n  required?: boolean;\n  requiredMessage?: string;\n  onBlur?: FocusEventHandler<T>;\n  onFocus?: FocusEventHandler<T>;\n  onKeyDown?: KeyboardEventHandler<T>;\n  onKeyUp?: KeyboardEventHandler<T>;\n  onKeyPress?: KeyboardEventHandler<T>;\n  onMouseDown?: MouseEventHandler<T>;\n  onMouseEnter?: MouseEventHandler<T>;\n  onMouseLeave?: MouseEventHandler<T>;\n  onMouseMove?: MouseEventHandler<T>;\n  onMouseOver?: MouseEventHandler<T>;\n  onMouseUp?: MouseEventHandler<T>;\n  onPaste?: ClipboardEventHandler<T>;\n  extraOnChange?: ChangeEventHandler<T>;\n}\n\ninterface IToggleFormGroupFormGroupProps extends IFormGroupProps<HTMLInputElement> {\n  dataSid?: string;\n  inputClass?: string;\n  labelKey?: string;\n  labelText?: string;\n  required?: boolean;\n  requiredMessage?: string;\n  /** NOTE: The current implementation has no way to apply this value */\n  trueStyle?: string;\n  /** NOTE: The current implementation has no way to apply this value */\n  falseStyle?: string;\n  /** NOTE: The current implementation has no way to apply this value */\n  trueText?: string;\n  /** NOTE: The current implementation has no way to apply this value */\n  falseText?: string;\n}\n\nexport const BS5SwitchFormGroup = (props: IToggleFormGroupFormGroupProps): JSX.Element => {\n  const {\n    control,\n    formState,\n    defaultValue,\n    rules,\n    errors,\n    formIdentifier,\n    dataSid,\n    requiredMessage,\n    disabled,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    inputClass,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onKeyPress,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    onPaste,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    // TODO: startTouched,\n    // eslint-disable-next-line no-unused-vars\n    trueStyle,\n    // eslint-disable-next-line no-unused-vars\n    falseStyle,\n    // eslint-disable-next-line no-unused-vars\n    trueText,\n    // eslint-disable-next-line no-unused-vars\n    falseText\n  } = props;\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const { t } = useTranslation();\n\n  function feedbackConverter(): string {\n    if (!formState.errors[formIdentifier]) {\n      return null;\n    }\n    if (formState.errors[formIdentifier].message) {\n      return String(formState.errors[formIdentifier].message);\n    }\n    if (!formState.errors[formIdentifier].type) {\n      return \"An unknown error has occurred\";\n    }\n    // TODO: Use translation keys\n    switch (formState.errors[formIdentifier].type) {\n      case \"required\": {\n        return requiredMessage ?? t(\"ui.storefront.common.validation.ThisFieldIsRequired\", \"This field is required\");\n      }\n      default: {\n        return String(formState.errors[formIdentifier].type);\n      }\n    }\n  }\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  const renderTooltipIcon = () => {\n    if (!tooltipKey && !tooltipText) {\n      return null;\n    }\n    return (\n      <span className=\"text-info\">\n        {\" \"}\n        <FontAwesomeIcon icon={faQuestionCircle as IconDefinition} />\n      </span>\n    );\n  };\n\n  const renderRequiredAsterisk = () => {\n    if (!rules.required) {\n      return null;\n    }\n    return <span style={{ color: \"red\" }}>{\" *\"}</span>;\n  };\n\n  const renderInvalidIconToControl = () => {\n    if (!isInvalid || hideInvalidTooltip) {\n      return null;\n    }\n    return (\n      <div\n        className=\"input-group-append w-100 pt-1 ps-1\"\n        role=\"alert\">\n        <span className=\"text-danger\">{errors[formIdentifier].message}</span>\n      </div>\n    );\n  };\n\n  const isInvalid = Boolean(errors[formIdentifier]);\n\n  let fullFormGroupClasses = `mt-3 position-relative ${formClasses ?? \"\"}`;\n  if (isInvalid) {\n    fullFormGroupClasses += \" has-error\";\n  }\n\n  let fullInputClasses = `${applyValidClass()} ${inputClass ?? \"\"}`;\n  if (Boolean(formState.dirtyFields[formIdentifier])) {\n    fullInputClasses += \" is-dirty\";\n  }\n\n  return (\n    <Controller\n      name={formIdentifier}\n      control={control}\n      defaultValue={defaultValue}\n      rules={rules}\n      render={({ field }) => (\n        <Form.Group className={fullFormGroupClasses}>\n          <Form.Label\n            htmlFor={formIdentifier}\n            title={t(tooltipKey, tooltipText)}>\n            {t(labelKey, labelText)}\n            {renderTooltipIcon()}\n            {renderRequiredAsterisk()}\n          </Form.Label>\n          <InputGroup hasValidation>\n            <Form.Switch\n              id={formIdentifier}\n              {...field}\n              data-sid={dataSid ?? null}\n              className={fullInputClasses}\n              isInvalid={isInvalid}\n              disabled={disabled}\n              checked={defaultValue ?? false}\n              onBlur={onBlur}\n              onFocus={onFocus}\n              onKeyDown={onKeyDown}\n              onKeyUp={onKeyUp}\n              onKeyPress={onKeyPress}\n              onPaste={onPaste}\n              onMouseDown={onMouseDown}\n              onMouseEnter={onMouseEnter}\n              onMouseLeave={onMouseLeave}\n              onMouseMove={onMouseMove}\n              onMouseOver={onMouseOver}\n              onMouseUp={onMouseUp}\n              onChange={e => {\n                field.onChange(e);\n                if (extraOnChange) {\n                  extraOnChange(e as any);\n                }\n                setTouched(true);\n              }}\n            />\n            {renderInvalidIconToControl()}\n            <Form.Control.Feedback type=\"invalid\">{feedbackConverter()}</Form.Control.Feedback>\n            {/* TODO: add success messages when enabled */}\n          </InputGroup>\n        </Form.Group>\n      )}\n    />\n  );\n};\n","/* eslint-disable max-len */\nimport { Col, Form, InputGroup, Row } from \"react-bootstrap\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRecordContext } from \"../_base/DetailBase\";\nimport { QuestionModel, TypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { IHttpPromiseCallbackArg, PagedResultsBase } from \"src/_api/cvApi.shared\";\nimport { BS5SwitchFormGroup } from \"../_base/components/BS5SwitchFormGroup\";\n\nexport const QuestionDetailBasicInformationCard = (): JSX.Element => {\n  const { t } = useTranslation();\n  const { control, formState } = useFormContext();\n  const context = useRecordContext<QuestionModel>();\n  const { record, setRecord, collections } = context;\n  const controlNames = {\n    QuestionTranslationKey: { name: \"QuestionTranslationKey\", property: \"QuestionTranslationKey\" },\n    Type: { name: \"Type\", property: \"TypeID\" },\n    Active: { name: \"Active\", property: \"Active\" }\n  };\n\n  const questionTypes: PagedResultsBase<TypeModel> = (\n    collections[0] as IHttpPromiseCallbackArg<PagedResultsBase<TypeModel>>\n  ).data;\n\n  const followUpToQuestions = record.Questionnaire.Questions.filter(q => q.Options?.some(option => option.FollowUpQuestionID === record.ID));\n\n  return (\n    <Form>\n      <Row>\n        <Col xs={12}>\n          {followUpToQuestions.length > 0 && (\n            <div className=\"mb-3\">\n              <strong>{t(\"questionnaire.FollowUpTo\", \"FollowUp To\")}: </strong>\n              {followUpToQuestions.map(q => q.QuestionTranslationKey).join(\", \")}\n            </div>\n          )}\n        </Col>\n        <Col xs={12}>\n          <Controller\n            name={controlNames.QuestionTranslationKey.name}\n            control={control}\n            defaultValue={record[controlNames.QuestionTranslationKey.property as keyof QuestionModel] ?? \"\"}\n            rules={{ required: true }}\n            render={({ field }) => (\n              <Form.Group className=\"form-group mb-3\">\n                <Form.Label htmlFor={controlNames.QuestionTranslationKey.name}>\n                  Question Translation Key\n                </Form.Label>\n                <InputGroup hasValidation>\n                  <Form.Control\n                    type=\"text\"\n                    id={controlNames.QuestionTranslationKey.name}\n                    {...field}\n                    placeholder=\"Enter Question Translation Key\"\n                    className=\"form-control\"\n                    isInvalid={Boolean(formState.errors[controlNames.QuestionTranslationKey.name])}\n                    onChange={e => {\n                      field.onChange(e);\n                      setRecord({ ...record, [controlNames.QuestionTranslationKey.property]: e.target.value });\n                    }}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors[controlNames.QuestionTranslationKey.name]?.message}\n                  </Form.Control.Feedback>\n                </InputGroup>\n              </Form.Group>\n            )}\n          />\n        </Col>\n        <Col\n          xs={12}\n          sm={6}>\n          <Controller\n            name={controlNames.Type.name}\n            control={control}\n            defaultValue={(record)[controlNames.Type.property as keyof QuestionModel] ?? \"\"}\n            rules={{ required: true }}\n            render={({ field }) => (\n              <Form.Group className=\"mb-3\">\n                <Form.Label htmlFor={controlNames.Type.name}>\n                  {t(\"ui.storefront.common.Type\", \"Type\")}\n                </Form.Label>\n                <InputGroup hasValidation>\n                  <Form.Select\n                    id={controlNames.Type.name}\n                    aria-label={t(\"ui.storefront.common.Type\", \"Type\")}\n                    {...field}\n                    isInvalid={Boolean(formState.errors[controlNames.Type.name])}\n                    className={Boolean(formState.dirtyFields[controlNames.Type.name]) && \"is-dirty\"}\n                    onChange={e => {\n                      const type = questionTypes.Results.find(x => x.ID === parseInt(e.target.value));\n                      field.onChange(e);\n                      setRecord({\n                        ...record,\n                        [controlNames.Type.property]: parseInt(e.target.value),\n                        TypeDisplayName: type?.DisplayName,\n                        TypeName: type?.Name,\n                        TypeKey: type?.CustomKey\n                      });\n                    }}>\n                    <option\n                      value=\"\"\n                      disabled>\n                      {t(\"ui.storefront.common.PleaseSelect\", \"Please Select\")}\n                    </option>\n                    {questionTypes.Results.map(x => {\n                      return (\n                        <option\n                          value={x.ID}\n                          key={x.ID}>\n                          {x.DisplayName ?? x.Name ?? x.CustomKey}\n                        </option>\n                      );\n                    })}\n                  </Form.Select>\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formState.errors[controlNames.Type.name]?.message}\n                  </Form.Control.Feedback>\n                </InputGroup>\n              </Form.Group>\n            )}\n          />\n        </Col>\n        <Col xs={12} sm={6}>\n          <BS5SwitchFormGroup\n            control={control}\n            formState={formState}\n            errors={formState.errors}\n            rules={{}}\n            formIdentifier={controlNames.Active.name}\n            defaultValue={record[controlNames.Active.property as keyof QuestionModel] ?? true}\n            formClasses=\"form-group mb-3\"\n            labelKey=\"common.Active\"\n            labelText=\"Active\"\n            extraOnChange={e => {\n              setRecord({ ...record, [controlNames.Active.property]: e.target.checked });\n            }}\n          />\n        </Col>\n      </Row>\n    </Form>\n  );\n};\n","import React, {\n  ChangeEventHandler,\n  ClipboardEventHandler,\n  FocusEventHandler,\n  KeyboardEventHandler,\n  MouseEventHandler,\n  useState\n} from \"react\";\nimport {\n  Control,\n  Controller,\n  DeepMap,\n  FieldError,\n  FieldValues,\n  FormState,\n  RegisterOptions,\n  UseFormRegister\n} from \"react-hook-form\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faQuestionCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { useTranslation } from \"react-i18next\";\nimport { PatternFormat } from \"react-number-format\";\n\ninterface IFormGroupProps<T> {\n  // Storefront uses register with a form control\n  register?: UseFormRegister<any>;\n  // Admin uses a control with formState\n  control?: Control<FieldValues, any>;\n  formState?: FormState<FieldValues>;\n  defaultValue?: any;\n  rules?: Omit<RegisterOptions<FieldValues, string>, \"setValueAs\" | \"disabled\" | \"valueAsNumber\" | \"valueAsDate\">;\n  // Shared\n  errors: DeepMap<FieldValues, FieldError>;\n  formIdentifier: string;\n  formClasses?: string;\n  hideLabel?: boolean;\n  labelKey?: string;\n  labelText?: string;\n  labelKeyFallback?: string;\n  tooltipKey?: string;\n  tooltipText?: string;\n  tooltipKeyFallback?: string;\n  disabled?: boolean;\n  showValidTooltip?: boolean;\n  hideInvalidTooltip?: boolean;\n  failsOn?: boolean;\n  forceTooltipWithFocus?: boolean;\n  required?: boolean;\n  requiredMessage?: string;\n  onBlur?: FocusEventHandler<T>;\n  onFocus?: FocusEventHandler<T>;\n  onKeyDown?: KeyboardEventHandler<T>;\n  onKeyUp?: KeyboardEventHandler<T>;\n  onKeyPress?: KeyboardEventHandler<T>;\n  onMouseDown?: MouseEventHandler<T>;\n  onMouseEnter?: MouseEventHandler<T>;\n  onMouseLeave?: MouseEventHandler<T>;\n  onMouseMove?: MouseEventHandler<T>;\n  onMouseOver?: MouseEventHandler<T>;\n  onMouseUp?: MouseEventHandler<T>;\n  onPaste?: ClipboardEventHandler<T>;\n  extraOnChange?: ChangeEventHandler<T>;\n}\n\ninterface ITextInputFormGroupProps extends IFormGroupProps<HTMLInputElement> {\n  validateObject?: {\n    [key: string]: (value: string) => boolean | string | Promise<boolean> | Promise<string> | Promise<boolean | string>;\n  };\n  autoComplete?: string;\n  dataSid?: string;\n  leftIcon?: IconDefinition;\n  rightIcon?: IconDefinition;\n  inputClasses?: string;\n  startTouched?: boolean;\n  placeholderKey?: string;\n  placeholderText?: string;\n  placeholderFallback?: string;\n  minLength?: number;\n  minLengthMessage?: string;\n  maxLength?: number;\n  maxLengthMessage?: string;\n  pattern?: RegExp;\n  patternMessage?: string;\n  isEmail?: boolean;\n  isPhone?: boolean;\n  isFax?: boolean;\n  isBriefcase?: boolean;\n  isUsername?: boolean;\n  hideLabel?: boolean;\n}\n\nexport const BS5TextInputFormGroup = (props: ITextInputFormGroupProps): JSX.Element => {\n  const {\n    control,\n    formState,\n    defaultValue,\n    rules,\n    errors,\n    patternMessage,\n    formIdentifier,\n    dataSid,\n    requiredMessage,\n    autoComplete,\n    disabled,\n    labelKey,\n    labelText,\n    tooltipKey,\n    tooltipText,\n    // OnBlur seems to be ignored on input\n    // TODO: forceTooltipWithFocus,\n    leftIcon,\n    rightIcon,\n    inputClasses,\n    formClasses,\n    onBlur,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    onKeyPress,\n    onMouseDown,\n    onMouseEnter,\n    onMouseLeave,\n    onMouseMove,\n    onMouseOver,\n    onMouseUp,\n    onPaste,\n    extraOnChange,\n    // TODO: showValidTooltip,\n    hideInvalidTooltip,\n    // TODO: failsOn,\n    // TODO: startTouched,\n    placeholderKey,\n    placeholderText,\n    minLengthMessage,\n    maxLengthMessage,\n    isEmail,\n    isPhone,\n    isFax,\n    isUsername\n  } = props;\n  const [ touched, setTouched ] = useState<boolean>(false);\n  const { t } = useTranslation();\n\n  // const emailPattern\n  // // eslint-disable-next-line no-useless-escape, prefer-named-capture-group, require-unicode-regexp, max-len\n  // = /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|\n  // (\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\n\n  function feedbackConverter(): string {\n    if (!formState.errors[formIdentifier]) {\n      return null;\n    }\n    if (formState.errors[formIdentifier].message) {\n      return String(formState.errors[formIdentifier].message);\n    }\n    if (!formState.errors[formIdentifier].type) {\n      return \"An unknown error has occurred\";\n    }\n    // TODO: Use translation keys\n    switch (formState.errors[formIdentifier].type) {\n      case \"required\": {\n        return requiredMessage ?? t(\"common.validation.ThisFieldIsRequired\", \"This field is required\");\n      }\n      case \"minLength\": {\n        return minLengthMessage ?? `Must reach minimum length of ${rules.minLength}`;\n      }\n      case \"maxLength\": {\n        return maxLengthMessage ?? `Must not exceed maximum length of ${rules.maxLength}`;\n      }\n      case \"pattern\": {\n        return patternMessage ?? \"Value does not match required pattern\";\n      }\n      default: {\n        return String(formState.errors[formIdentifier].type);\n      }\n    }\n  }\n\n  const applyValidClass = (): string => {\n    if (!touched) {\n      return \"\";\n    }\n    return errors[formIdentifier] ? \"is-invalid\" : \"is-valid\";\n  };\n\n  const renderLeftIcon = () => {\n    if (!isEmail && !isFax && !isPhone && !leftIcon) {\n      return null;\n    }\n    return (\n      <InputGroup.Text>\n        {isEmail ? <i className=\"fal fa-at\" /> : null}\n        {isPhone ? <i className=\"fal fa-phone\" /> : null}\n        {isFax ? <i className=\"fal fa-fax\" /> : null}\n        {!isEmail && !isPhone && !isFax && leftIcon ? <FontAwesomeIcon icon={leftIcon} /> : null}\n      </InputGroup.Text>\n    );\n  };\n\n  const renderRightIcon = () => {\n    if (!rightIcon) {\n      return null;\n    }\n    return (\n      <InputGroup.Text className=\"rounded-end\">\n        <FontAwesomeIcon icon={rightIcon as IconDefinition} />\n      </InputGroup.Text>\n    );\n  };\n\n  const renderTooltipIcon = () => {\n    if (!tooltipKey && !tooltipText) {\n      return null;\n    }\n    return (\n      <span className=\"text-info\">\n        {\" \"}\n        <FontAwesomeIcon icon={faQuestionCircle as IconDefinition} />\n      </span>\n    );\n  };\n\n  const renderRequiredAsterisk = () => {\n    if (!rules.required) {\n      return null;\n    }\n    return <span style={{ color: \"red\" }}>{\" *\"}</span>;\n  };\n\n  const renderInvalidIconToControl = () => {\n    if (!isInvalid || hideInvalidTooltip) {\n      return null;\n    }\n    return (\n      <div\n        className=\"input-group-append w-100 pt-1 ps-1\"\n        role=\"alert\">\n        <span className=\"text-danger\">{errors[formIdentifier].message}</span>\n      </div>\n    );\n  };\n\n  function ruleToNumberValueConverter(ruleObj: any | null, alt: any | null = null): number | null {\n    const noRuleObj = ruleObj === undefined || ruleObj === null || ruleObj === \"\";\n    const noAlt = alt === undefined || alt === null || alt === \"\";\n    if (noRuleObj && noAlt) {\n      return null;\n    }\n    if (noRuleObj) {\n      if (typeof alt === \"string\") {\n        return parseFloat(alt);\n      }\n      return Number(alt);\n    }\n    if (typeof ruleObj === \"string\") {\n      return parseFloat(ruleObj);\n    }\n    if (typeof ruleObj === \"number\") {\n      return Number(ruleObj);\n    }\n    // It must be a full rule object: { value: x, message: \"y\" }\n    return Number(ruleObj.value);\n  }\n\n  let inputAutoComplete: string = null;\n  if (isUsername) {\n    inputAutoComplete = \"username\";\n  } else if (isEmail) {\n    inputAutoComplete = \"email\";\n  } else if (isPhone) {\n    inputAutoComplete = \"tel\";\n  } else if (isFax) {\n    inputAutoComplete = \"fax\";\n  } else if (autoComplete) {\n    inputAutoComplete = autoComplete;\n  }\n\n  const isInvalid = Boolean(errors[formIdentifier]);\n\n  let fullFormGroupClasses = `mt-3 position-relative ${formClasses ?? \"\"}`;\n  if (isInvalid) {\n    fullFormGroupClasses += \" has-error\";\n  }\n\n  let fullInputClasses = `${applyValidClass()} ${inputClasses ?? \"\"}`;\n  if (rightIcon) {\n    fullInputClasses += \" rounded-end\";\n  }\n  if (Boolean(formState.dirtyFields[formIdentifier])) {\n    fullInputClasses += \" is-dirty\";\n  }\n\n  return (\n    <Controller\n      name={formIdentifier}\n      control={control}\n      defaultValue={defaultValue}\n      rules={rules}\n      render={({ field }) => (\n        <Form.Group className={fullFormGroupClasses}>\n          <Form.Label\n            htmlFor={formIdentifier}\n            title={t(tooltipKey, tooltipText)}>\n            {t(labelKey, labelText)}\n            {renderTooltipIcon()}\n            {renderRequiredAsterisk()}\n          </Form.Label>\n          <InputGroup hasValidation>\n            {renderLeftIcon()}\n            <Form.Control\n              type={isEmail ? \"email\" : isPhone || isFax ? \"tel\" : \"text\"}\n              id={formIdentifier}\n              as={isPhone ? PatternFormat : Form.Control}\n              format=\"###-###-####\"\n              {...field}\n              placeholder={t(placeholderKey, placeholderText)}\n              data-sid={dataSid ?? null}\n              className={fullInputClasses}\n              isInvalid={isInvalid}\n              disabled={disabled}\n              minLength={ruleToNumberValueConverter(rules.minLength)}\n              maxLength={ruleToNumberValueConverter(rules.maxLength)}\n              autoComplete={inputAutoComplete ?? \"off\"}\n              onBlur={onBlur}\n              onFocus={onFocus}\n              onKeyDown={onKeyDown}\n              onKeyUp={onKeyUp}\n              onKeyPress={onKeyPress}\n              onPaste={onPaste}\n              onMouseDown={onMouseDown}\n              onMouseEnter={onMouseEnter}\n              onMouseLeave={onMouseLeave}\n              onMouseMove={onMouseMove}\n              onMouseOver={onMouseOver}\n              onMouseUp={onMouseUp}\n              onChange={e => {\n                field.onChange(e);\n                if (extraOnChange) {\n                  extraOnChange(e as any);\n                }\n                setTouched(true);\n              }}\n            />\n            {renderRightIcon()}\n            {renderInvalidIconToControl()}\n            <Form.Control.Feedback type=\"invalid\">{feedbackConverter()}</Form.Control.Feedback>\n            {/* TODO: add success messages when enabled */}\n          </InputGroup>\n        </Form.Group>\n      )}\n    />\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"tr\":\"QuestionDetailQuestionTypeCardChoiceTable_tr__e6ssG\"};","/* eslint-disable max-len */\nimport { Button, Form, InputGroup, Table } from \"react-bootstrap\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRecordContext } from \"../_base/DetailBase\";\nimport { BS5TextInputFormGroup } from \"../_base/components/BS5TextInputFormGroup\";\nimport { QuestionModel, QuestionOptionModel } from \"src/_api/cvApi._DtoClasses\";\nimport { BS5SwitchFormGroup } from \"../_base/components/BS5SwitchFormGroup\";\nimport { arrayMove, SortableContainer, SortableElement, SortableHandle } from \"react-sortable-hoc\";\nimport classes from \"./QuestionDetailQuestionTypeCardChoiceTable.module.scss\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faQuestionCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport const QuestionDetailQuestionTypeCardChoiceTable = (): JSX.Element => {\n  const { t } = useTranslation();\n  const { control, formState, setValue, getValues } = useFormContext();\n  const context = useRecordContext<QuestionModel>();\n  const { record, setRecord } = context;\n\n  return (\n    <Form>\n      <Table\n        striped\n        bordered\n        hover>\n        <thead>\n          <tr>\n            <th>{t(\"questionnaire.QuestionOptionMultipleChoice.OptionName\", \"Option Name\")}</th>\n            <th>\n              {t(\n                \"questionnaire.QuestionOptionMultipleChoice.RequiresAdditionalInformation\",\n                \"Requires Additional Information?\"\n              )}\n            </th>\n            <th>{t(\"questionnaire.QuestionOptionMultipleChoice.PreventsContinuing\", \"Prevents Continuing\")}</th>\n            <th>{t(\"questionnaire.QuestionOptionMultipleChoice.MessageIfSelected\", \"Message If Selected\")}</th>\n            <th>{t(\"ui.storefront.common.Active\", \"Active\")}</th>\n            <th>{t(\"questionnaire.FollowupQuestion\", \"Followup Question\")}</th>\n            <th></th>\n            <th></th>\n          </tr>\n        </thead>\n        <SortableList\n          items={record.Options.sort((a, b) => a.SortOrder - b.SortOrder)}\n          onSortEnd={({ oldIndex, newIndex }) => {\n            let newOptions = arrayMove(record.Options, oldIndex, newIndex);\n            newOptions = newOptions.map((option, index) => ({\n              ...option,\n              SortOrder: index + 1\n            }));\n            setRecord({\n              ...record,\n              Options: newOptions\n            });\n            const movedOption = newOptions[newIndex];\n            setValue(\n              `Options[${movedOption.ID}].OptionTranslationKey`,\n              getValues(`Options[${movedOption.ID}].OptionTranslationKey`),\n              { shouldDirty: true }\n            );\n          }}\n          useDragHandle\n          record={record}\n          setRecord={setRecord}\n          control={control}\n          formState={formState}\n          t={t}\n        />\n      </Table>\n      <Button\n        className=\"float-end\"\n        onClick={() => {\n          const minId = Math.min(...record.Options.map(option => option.ID), 0);\n          const newOption: QuestionOptionModel = {\n            OptionTranslationKey: null,\n            Active: true,\n            CreatedDate: new Date(),\n            ID: minId - 1,\n            QuestionID: record.ID,\n            RequiresAdditionalInformation: false\n          };\n          setRecord({\n            ...record,\n            Options: [ ...record.Options, newOption ]\n          });\n        }}>\n        {t(\"ui.storefront.common.AddOption\", \"Add Option\")}\n      </Button>\n    </Form>\n  );\n};\n\ninterface SortableItemProps {\n  value: QuestionOptionModel;\n  record: QuestionModel;\n  setRecord: (record: QuestionModel) => void;\n  control: any;\n  formState: any;\n  index: number;\n  t: (key: string, defaultValue?: string) => string;\n}\n\ninterface SortableListProps {\n  items: QuestionOptionModel[];\n  record: QuestionModel;\n  setRecord: (record: QuestionModel) => void;\n  control: any;\n  formState: any;\n  t: (key: string, defaultValue?: string) => string;\n}\n\nconst DragHandle = SortableHandle(() => <td>::</td>);\n\nconst SortableList = SortableContainer(({ items, record, setRecord, control, formState, t }: SortableListProps) => {\n  return (\n    <tbody>\n      {items.map((option: QuestionOptionModel, index: number) => (\n        <SortableItem\n          key={`item-${option.ID}`}\n          index={index}\n          value={option}\n          record={record}\n          setRecord={setRecord}\n          control={control}\n          formState={formState}\n          t={t}\n        />\n      ))}\n    </tbody>\n  );\n});\n\nconst SortableItem = SortableElement(\n  ({ value: option, record, setRecord, control, formState, t }: SortableItemProps) => (\n    <tr\n      key={`${record.ID}_${option.ID}`}\n      className={classes.tr}>\n      <td>\n        <BS5TextInputFormGroup\n          control={control}\n          formState={formState}\n          errors={formState.errors}\n          rules={{ required: true }}\n          formIdentifier={`Options[${option.ID}].OptionTranslationKey`}\n          defaultValue={option.OptionTranslationKey ?? \"\"}\n          formClasses=\"form-group mb-3\"\n          // labelKey=\"questionnaire.OptionTranslationKey\"\n          // labelText=\"Option Translation Key\"\n          placeholderKey=\"questionnaire.OptionTranslationKey\"\n          placeholderText=\"Enter Option Translation Key\"\n          tooltipKey=\"questionnaire.OptionTranslationKey\"\n          tooltipText=\"The option name. Can be a translation key.\"\n          extraOnChange={e => {\n            const newOptions = [ ...record.Options ];\n            const optionToUpdate = newOptions.find(opt => opt.ID === option.ID);\n            if (optionToUpdate) {\n              optionToUpdate.OptionTranslationKey = e.target.value;\n            }\n            setRecord({ ...record, Options: newOptions });\n          }}\n        />\n      </td>\n      <td>\n        <BS5SwitchFormGroup\n          control={control}\n          formState={formState}\n          errors={formState.errors}\n          rules={{}}\n          formIdentifier={`Options[${option.ID}].RequiresAdditionalInformation`}\n          defaultValue={option.RequiresAdditionalInformation}\n          formClasses=\"form-group mb-3\"\n          // labelKey=\"questionnaire.RequiresAdditionalInformation\"\n          // labelText=\"Requires Additional Information\"\n          extraOnChange={e => {\n            const newOptions = [ ...record.Options ];\n            const optionToUpdate = newOptions.find(opt => opt.ID === option.ID);\n            if (optionToUpdate) {\n              optionToUpdate.RequiresAdditionalInformation = e.target.checked;\n            }\n            setRecord({ ...record, Options: newOptions });\n          }}\n        />\n      </td>\n      <td>\n        <BS5SwitchFormGroup\n          control={control}\n          formState={formState}\n          errors={formState.errors}\n          rules={{}}\n          formIdentifier={`Options[${option.ID}].PreventsContinuing`}\n          defaultValue={option.PreventsContinuing}\n          formClasses=\"form-group mb-3\"\n          // labelKey=\"questionnaire.PreventsContinuing\"\n          // labelText=\"Prevents Continuing\"\n          extraOnChange={e => {\n            const newOptions = [ ...record.Options ];\n            const optionToUpdate = newOptions.find(opt => opt.ID === option.ID);\n            if (optionToUpdate) {\n              optionToUpdate.PreventsContinuing = e.target.checked;\n            }\n            setRecord({ ...record, Options: newOptions });\n          }}\n        />\n      </td>\n      <td>\n        <BS5TextInputFormGroup\n          control={control}\n          formState={formState}\n          errors={formState.errors}\n          rules={{ required: false }}\n          formIdentifier={`Options[${option.ID}].MessageIfSelected`}\n          defaultValue={option.MessageIfSelected ?? \"\"}\n          formClasses=\"form-group mb-3\"\n          // labelKey=\"questionnaire.MessageIfSelected\"\n          // labelText=\"Message If Selected\"\n          placeholderKey=\"questionnaire.MessageIfSelected\"\n          placeholderText=\"Enter Message If Selected\"\n          tooltipKey=\"questionnaire.MessageIfSelected\"\n          tooltipText=\"The message if selected. Can be a translation key.\"\n          extraOnChange={e => {\n            const newOptions = [ ...record.Options ];\n            const optionToUpdate = newOptions.find(opt => opt.ID === option.ID);\n            if (optionToUpdate) {\n              optionToUpdate.MessageIfSelected = e.target.value;\n            }\n            setRecord({ ...record, Options: newOptions });\n          }}\n        />\n      </td>\n      <td>\n        <BS5SwitchFormGroup\n          control={control}\n          formState={formState}\n          errors={formState.errors}\n          rules={{}}\n          formIdentifier={`Options[${option.ID}].Active`}\n          defaultValue={option.Active}\n          formClasses=\"form-group mb-3\"\n          // labelKey=\"common.Active\"\n          // labelText=\"Active\"\n          extraOnChange={e => {\n            const newOptions = [ ...record.Options ];\n            const optionToUpdate = newOptions.find(opt => opt.ID === option.ID);\n            if (optionToUpdate) {\n              optionToUpdate.Active = e.target.checked;\n            }\n            setRecord({ ...record, Options: newOptions });\n          }}\n        />\n      </td>\n      <td>\n        <Controller\n          name={`Options[${option.ID}].FollowUpQuestionID`}\n          control={control}\n          defaultValue={option.FollowUpQuestionID ?? \"\"}\n          rules={{ required: false }}\n          render={({ field }) => (\n            <Form.Group className=\"mb-3\">\n              <Form.Label\n                htmlFor={`Options[${option.ID}].FollowUpQuestionID`}\n                title={t(\n                  \"questionnaire.FollowupQuestionTooltip\",\n                  \"This is the question that will appear below the current question if this option is selected.\"\n                )}>\n                <span className=\"text-info\">\n                  {\" \"}\n                  <FontAwesomeIcon icon={faQuestionCircle as IconDefinition} />\n                </span>\n              </Form.Label>\n              <InputGroup hasValidation>\n                <Form.Select\n                  id={`Options[${option.ID}].FollowUpQuestionID`}\n                  aria-label=\"Followup Question ID\"\n                  {...field}\n                  isInvalid={Boolean(formState.errors[`Options[${option.ID}].FollowUpQuestionID`])}\n                  className={Boolean(formState.dirtyFields[`Options[${option.ID}].FollowUpQuestionID`]) && \"is-dirty\"}\n                  onChange={e => {\n                    const newOptions = [ ...record.Options ];\n                    const optionToUpdate = newOptions.find(opt => opt.ID === option.ID);\n                    if (optionToUpdate) {\n                      optionToUpdate.FollowUpQuestionID = e.target.value === \"\" ? null : Number(e.target.value);\n                    }\n                    setRecord({ ...record, Options: newOptions });\n                    field.onChange(e);\n                  }}>\n                  <option value=\"\">{t(\"questionnaire.None\", \"None\")}</option>\n                  {record.Questionnaire.Questions.filter(question => question.ID !== record.ID).map(question => (\n                    <option\n                      value={question.ID}\n                      key={question.ID}>\n                      {question.QuestionTranslationKey ?? question.CustomKey}\n                    </option>\n                  ))}\n                </Form.Select>\n                <Form.Control.Feedback type=\"invalid\">\n                  {formState.errors[`Options[${option.ID}].FollowUpQuestionID`]?.message}\n                </Form.Control.Feedback>\n              </InputGroup>\n            </Form.Group>\n          )}\n        />\n      </td>\n      <td>\n        {option.ID < 1 && (\n          <Button\n            className=\"float-end\"\n            onClick={e => {\n              e.stopPropagation();\n              const newOptions = record.Options.filter(o => o.ID !== option.ID);\n              setRecord({\n                ...record,\n                Options: newOptions\n              });\n            }}>\n            <i className=\"fas fa-trash\"></i>\n          </Button>\n        )}\n      </td>\n      <DragHandle />\n    </tr>\n  )\n);\n","import { useRecordContext } from \"../_base/DetailBase\";\nimport { QuestionModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useEffect } from \"react\";\nimport { QuestionDetailQuestionTypeCardChoiceTable } from \"./QuestionDetailQuestionTypeCardChoiceTable\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\n\nexport const QuestionDetailQuestionTypeCard = (): JSX.Element => {\n  const context = useRecordContext<QuestionModel>();\n  const { record, setRecord } = context;\n\n  useEffect(() => {\n    const newRecord = { ...record };\n    switch (newRecord.TypeKey) {\n      case ServiceStrings.questionnaire.types.NUMBER:\n      case ServiceStrings.questionnaire.types.TEXT_AREA:\n      case ServiceStrings.questionnaire.types.STRING: {\n        // If there is not one option, reset it\n        if (newRecord.Options.length !== 1) {\n          newRecord.Options = [\n            {\n              OptionTranslationKey: null,\n              Active: true,\n              CreatedDate: new Date(),\n              ID: 0,\n              QuestionID: newRecord.ID,\n              RequiresAdditionalInformation: true,\n            },\n          ];\n        } else {\n          newRecord.Options[0].RequiresAdditionalInformation = true;\n        }\n        break;\n      }\n      case ServiceStrings.questionnaire.types.BOOLEAN: {\n        // If there are not two options, reset them\n        if (newRecord.Options.length !== 2) {\n          newRecord.Options = [\n            {\n              OptionTranslationKey: \"Yes\",\n              Active: true,\n              CreatedDate: new Date(),\n              ID: 0,\n              QuestionID: newRecord.ID,\n              RequiresAdditionalInformation: false,\n            },\n            {\n              OptionTranslationKey: \"No\",\n              Active: true,\n              CreatedDate: new Date(),\n              ID: -1,\n              QuestionID: newRecord.ID,\n              RequiresAdditionalInformation: false,\n            },\n          ];\n        } else {\n          newRecord.Options[0].OptionTranslationKey = \"Yes\";\n          newRecord.Options[0].RequiresAdditionalInformation = false;\n          newRecord.Options[1].OptionTranslationKey = \"No\";\n          newRecord.Options[1].RequiresAdditionalInformation = false;\n        }\n        break;\n      }\n      default: {\n        // Do nothing\n        break;\n      }\n    }\n    setRecord(newRecord);\n  }, [ record.TypeKey ]);\n\n  switch (record.TypeKey) {\n    case ServiceStrings.questionnaire.types.NUMBER:\n    case ServiceStrings.questionnaire.types.STRING:\n    case ServiceStrings.questionnaire.types.TEXT_AREA: {\n      // No need to render any content, the useEffect handles the logic\n      return null;\n    }\n    case ServiceStrings.questionnaire.types.BOOLEAN:\n    case ServiceStrings.questionnaire.types.SELECT:\n    case ServiceStrings.questionnaire.types.MULTIPLE_CHOICE: {\n      return <QuestionDetailQuestionTypeCardChoiceTable />;\n    }\n    default: {\n      return null;\n    }\n  }\n};\n","import { useRecordContext } from \"../_base/DetailBase\";\nimport { QuestionModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useEffect } from \"react\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faQuestionCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { t } from \"i18next\";\nimport { Form, InputGroup } from \"react-bootstrap\";\nimport { Controller, useFormContext } from \"react-hook-form\";\n\nexport const QuestionDetailQuestionOptionFollowupCard = (): JSX.Element => {\n  const context = useRecordContext<QuestionModel>();\n  const { record, setRecord } = context;\n  const { control, formState } = useFormContext();\n\n  switch (record.TypeKey) {\n    case ServiceStrings.questionnaire.types.NUMBER:\n    case ServiceStrings.questionnaire.types.STRING:\n    case ServiceStrings.questionnaire.types.TEXT_AREA: {\n      const option = record.Options[0];\n      return (\n        <Controller\n          name={`Options[${option.ID}].FollowUpQuestionID`}\n          control={control}\n          defaultValue={option.FollowUpQuestionID ?? \"\"}\n          rules={{ required: false }}\n          render={({ field }) => (\n            <Form.Group className=\"mb-3\">\n              <Form.Label htmlFor={`Options[${option.ID}].FollowUpQuestionID`}\n                // eslint-disable-next-line max-len\n                title={t(\"questionnaire.FollowupQuestionTooltip\", \"This is the question that will appear below the current question if this option is selected.\")}>\n                <span className=\"text-info\">\n                  {\" \"}\n                  <FontAwesomeIcon icon={faQuestionCircle as IconDefinition} />\n                </span>\n                {t(\"questionnaire.FollowupQuestion\", \"Followup Question\")}\n              </Form.Label>\n              <InputGroup hasValidation>\n                <Form.Select\n                  id={`Options[${option.ID}].FollowUpQuestionID`}\n                  aria-label=\"Followup Question ID\"\n                  {...field}\n                  isInvalid={Boolean(formState.errors[`Options[${option.ID}].FollowUpQuestionID`])}\n                  className={Boolean(formState.dirtyFields[`Options[${option.ID}].FollowUpQuestionID`]) && \"is-dirty\"}\n                  onChange={e => {\n                    const newOptions = [ ...record.Options ];\n                    const optionToUpdate = newOptions.find(opt => opt.ID === option.ID);\n                    if (optionToUpdate) {\n                      optionToUpdate.FollowUpQuestionID = e.target.value === \"\" ? null : Number(e.target.value);\n                    }\n                    setRecord({ ...record, Options: newOptions });\n                    field.onChange(e);\n                  }}>\n                  <option value=\"\">{t(\"questionnaire.None\", \"None\")}</option>\n                  {record.Questionnaire.Questions.filter(question => question.ID !== record.ID).map(question => (\n                    <option value={question.ID} key={question.ID}>\n                      {question.QuestionTranslationKey ?? question.CustomKey}\n                    </option>\n                  ))}\n                </Form.Select>\n                <Form.Control.Feedback type=\"invalid\">\n                  {formState.errors[`Options[${option.ID}].FollowUpQuestionID`]?.message}\n                </Form.Control.Feedback>\n              </InputGroup>\n            </Form.Group>\n          )}\n        />\n      );\n    }\n    case ServiceStrings.questionnaire.types.BOOLEAN:\n    case ServiceStrings.questionnaire.types.SELECT:\n    case ServiceStrings.questionnaire.types.MULTIPLE_CHOICE:\n    default: {\n      // These will use the QuestionDetailQuestionTypeCardChoiceTable\n      return null;\n    }\n  }\n};\n","import DetailBase, { useRecordContext } from \"../_base/DetailBase\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, ButtonGroup, Card, Col, Modal, Row } from \"react-bootstrap\";\nimport {\n  Paging,\n  QuestionModel,\n  QuestionnaireModel,\n  SerializableAttributesDictionary\n} from \"src/_api/cvApi._DtoClasses\";\nimport { QuestionDetailBasicInformationCard } from \"./QuestionDetailBasicInformationCard\";\nimport { CEFActionResponseT } from \"src/_api/cvApi.shared\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { useFormContext } from \"react-hook-form\";\nimport promiser from \"src/_shared/Promiser\";\nimport { QuestionDetailQuestionTypeCard } from \"./QuestionDetailQuestionTypeCard\";\nimport { useEffect, useState } from \"react\";\nimport { QuestionnaireComponent } from \"src/Questionnaire/QuestionnaireComponent\";\nimport { QuestionDetailQuestionOptionFollowupCard } from \"./QuestionDetailQuestionOptionFollowupCard\";\n\nconst QuestionDetailContent = (): JSX.Element => {\n  const [ previewQuestionnaire, setPreviewQuestionnaire ] = useState<QuestionnaireModel | null>(null);\n  const [ showPreviewModal, setShowPreviewModal ] = useState(false);\n  const context = useRecordContext<QuestionModel>();\n  const { formState } = useFormContext();\n  const { record, permissionsBase, viewState, saveRecord, loadRecord } = context;\n  const { t } = useTranslation();\n\n  const includeSavePermission: string = record.ID > 0 ? `${permissionsBase}.Update` : `${permissionsBase}.Create`;\n\n  const openPreviewModal = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n    const newQuestionnaire = {\n      // QuestionnaireModel properties\n      Questions: [ record ],\n      // NameableBaseModel properties\n      Name: null,\n      Description: null,\n      // BaseModel properties\n      ID: null,\n      CustomKey: `Question #${record.ID}`,\n      Active: true,\n      CreatedDate: new Date(),\n      UpdatedDate: null,\n      Hash: null,\n      // HaveJsonAttributesBaseModel properties\n      SerializableAttributes: new SerializableAttributesDictionary()\n    } as QuestionnaireModel;\n    setPreviewQuestionnaire(newQuestionnaire);\n  };\n\n  useEffect(() => {\n    if (previewQuestionnaire) {\n      setShowPreviewModal(true);\n    }\n  }, [ previewQuestionnaire ]);\n\n  return (\n    <>\n      <Row>\n        <Col sm={12}>\n          <Card>\n            <Card.Header id=\"BasicInfo\">{t(\"ui.storefront.common.BasicInformation\", \"Basic Information\")}</Card.Header>\n            <Card.Body>\n              <QuestionDetailBasicInformationCard />\n            </Card.Body>\n          </Card>\n          <Card>\n            <Card.Body>\n              <QuestionDetailQuestionTypeCard />\n              <QuestionDetailQuestionOptionFollowupCard />\n            </Card.Body>\n          </Card>\n        </Col>\n      </Row>\n      <Row className=\"float-end mt-3\">\n        <Col sm={12}>\n          <ButtonGroup className=\"mb-3\">\n            <Button\n              className=\"me-2\"\n              variant=\"info\"\n              disabled={viewState.running || formState.isValidating || !formState.isValid}\n              onClick={openPreviewModal}>\n              {t(\"questionnaire.PreviewQuestion\", \"Preview Question\")}\n            </Button>\n            <Button\n              variant=\"info\"\n              className=\"me-2\"\n              onClick={() => loadRecord(record.ID)}>\n              {t(\"questionnaire.ResetQuestion\", \"Reset Question\")}\n            </Button>\n            <AuthGuard requiresPermission={includeSavePermission}>\n              <Button\n                variant=\"success\"\n                disabled={viewState.running || !formState.isDirty || formState.isValidating || !formState.isValid}\n                onClick={saveRecord}>\n                {t(\"questionnaire.SaveQuestion\", \"Save Question\")}\n              </Button>\n            </AuthGuard>\n          </ButtonGroup>\n        </Col>\n      </Row>\n      <Modal\n        show={showPreviewModal}\n        onHide={() => {\n          setShowPreviewModal(false);\n          setPreviewQuestionnaire(null);\n        }}>\n        <Modal.Header closeButton>\n          <Modal.Title>{t(\"questionnaire.PreviewQuestion\", \"Preview Question\")}</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          {previewQuestionnaire && (\n            <QuestionnaireComponent\n              showTitle={true}\n              questionnaireCustomKey={previewQuestionnaire.CustomKey}\n              questionnaireData={previewQuestionnaire}\n              questionsData={previewQuestionnaire.Questions}\n              showSubmitButton={false}\n            />\n          )}\n        </Modal.Body>\n        <Modal.Footer>\n          <Button\n            variant=\"secondary\"\n            onClick={() => {\n              setShowPreviewModal(false);\n              setPreviewQuestionnaire(null);\n            }}>\n            {t(\"ui.storefront.common.Close\", \"Close\")}\n          </Button>\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n};\n\ninterface IQuestionDetailProps {\n  // This is intentionally a string, not a number\n  id: string;\n  questionnaire: QuestionnaireModel;\n  saveCallback?: (result: CEFActionResponseT<number>) => void;\n}\n\nconst QuestionDetail = (props: IQuestionDetailProps): JSX.Element => {\n  const loadCollections = (_record: QuestionModel) => {\n    const paging = { Size: 500, StartIndex: 1 } as Paging;\n    const standardDto = { Active: true, AsListing: true, Paging: paging };\n    return new Promise<unknown[]>((resolve, reject) => {\n      const promises: unknown[] = [\n        // 0\n        promiser.resolve(`QuestionTypes:${standardDto}`, () => cvApi.questionnaire.GetQuestionTypes(standardDto))\n      ];\n      Promise.all(promises)\n        .then(results => {\n          resolve(results);\n        })\n        .catch(reject);\n    });\n  };\n  const loadNewRecord = (): Promise<QuestionModel> => {\n    const record = {\n      // QuestionModel properties\n      Options: [\n        {\n          OptionTranslationKey: null,\n          Active: true,\n          CreatedDate: new Date(),\n          ID: 0,\n          QuestionID: 0,\n          RequiresAdditionalInformation: false\n        }\n      ],\n      NextQuestionID: null,\n      NextQuestionKey: null,\n      NextQuestion: null,\n      QuestionnaireID: props.questionnaire.ID,\n      QuestionnaireKey: props.questionnaire.CustomKey,\n      QuestionnaireName: props.questionnaire.Name,\n      Questionnaire: props.questionnaire,\n      SortOrder: null,\n      QuestionTranslationKey: null,\n      TypeID: null,\n      // NameableBaseModel properties\n      Name: null,\n      Description: null,\n      // BaseModel properties\n      ID: null,\n      CustomKey: null,\n      Active: true,\n      CreatedDate: new Date(),\n      UpdatedDate: null,\n      Hash: null,\n      // HaveJsonAttributesBaseModel propeties\n      SerializableAttributes: new SerializableAttributesDictionary()\n    } as QuestionModel;\n    return Promise.resolve(record);\n  };\n  return (\n    <DetailBase<QuestionModel>\n      id={props.id}\n      hideFooterButtons={true}\n      hideHeaderWidgets={true}\n      hideErrorModalBtn={true}\n      title=\"Question\"\n      newKindKey={\"common.Question.New\"}\n      existingKindKey={\"common.Question\"}\n      existingKindText=\"Question\"\n      permissionsBase=\"Questionnaire.Question\"\n      listRoute=\"/Questionnaires\"\n      listReturnLabelKey=\"common.Question.Plural\"\n      loadRecordCall={(id: number) => cvApi.questionnaire.GetQuestionByID(id)}\n      loadRecordActionAfterSuccess={(result: QuestionModel) => {\n        if (!result.QuestionnaireID) {\n          result.QuestionnaireID = props.questionnaire.ID;\n          result.QuestionnaireKey = props.questionnaire.CustomKey;\n          result.QuestionnaireName = props.questionnaire.Name;\n          result.Questionnaire = props.questionnaire;\n        }\n        if (!result.Options) {\n          result.Options = [\n            {\n              OptionTranslationKey: null,\n              Active: true,\n              CreatedDate: new Date(),\n              ID: 0,\n              QuestionID: result.ID,\n              RequiresAdditionalInformation: false\n            }\n          ];\n        }\n        return Promise.resolve(result);\n      }}\n      createRecordCall={(routeParams: QuestionModel) => cvApi.questionnaire.CreateQuestion(routeParams)}\n      createRecordActionAfterSuccess={(result: CEFActionResponseT<number>, collections: unknown[]) => {\n        props.saveCallback(result);\n        return Promise.resolve(result);\n      }}\n      loadRecordActionBeforeAssign={(result: QuestionModel) => {\n        if (!result.SerializableAttributes) {\n          result.SerializableAttributes = new SerializableAttributesDictionary();\n        }\n        return Promise.resolve(result);\n      }}\n      updateRecordPreAction={async (routeParams: QuestionModel) => {\n        await Promise.all(\n          routeParams.Options.filter(x => x.ID > 0).map((option, index) => {\n            return cvApi.questionnaire.UpdateQuestionOption(option);\n          })\n        );\n        return Promise.resolve(routeParams);\n      }}\n      updateRecordCall={(routeParams: QuestionModel) => cvApi.questionnaire.UpdateQuestion(routeParams)}\n      updateRecordActionAfterSuccess={(result: CEFActionResponseT<number>, collections: unknown[]) => {\n        props.saveCallback(result);\n        return Promise.resolve(result);\n      }}\n      deactivateRecordCall={(id: number) => cvApi.questionnaire.DeactivateQuestionByID(id)}\n      reactivateRecordCall={(id: number) => cvApi.questionnaire.ReactivateQuestionByID(id)}\n      deleteRecordCall={(id: number) => cvApi.questionnaire.DeleteQuestionByID(id)}\n      loadCollections={loadCollections}\n      loadNewRecord={loadNewRecord}>\n      <QuestionDetailContent />\n    </DetailBase>\n  );\n};\n\nexport default QuestionDetail;\n","// extracted by mini-css-extract-plugin\nexport default {\"primary\":\"#4b4b4b\",\"secondary\":\"#6c757d\",\"success\":\"#31a746\",\"info\":\"#17a2b8\",\"warning\":\"#ffc107\",\"danger\":\"#dc3545\",\"primaryDark\":\"#3e3e3e\",\"secondaryDark\":\"#60686f\",\"successDark\":\"#2b933e\",\"infoDark\":\"#148ea1\",\"warningDark\":\"#edb100\",\"dangerDark\":\"#d32535\",\"light\":\"#f4f5f5\",\"medium\":\"#ced4da\",\"dark\":\"#1e242b\",\"white\":\"#fff\",\"blue\":\"#357bff\",\"indigo\":\"#6610f2\",\"purple\":\"#6f42c1\",\"pink\":\"#e6717c\",\"red\":\"#dc3545\",\"orange\":\"#fd7e14\",\"yellow\":\"#ffc107\",\"green\":\"#31a746\",\"teal\":\"#20c997\",\"cyan\":\"#17a2b8\",\"greenFade\":\"#e1f6e5\",\"darkBlue\":\"#153166\",\"tableBorderColor\":\"#ddd\",\"brand-orange\":\"#f28522\",\"gridBreakpointxs\":\"0\",\"gridBreakpointsm\":\"576px\",\"gridBreakpointmd\":\"768px\",\"gridBreakpointlg\":\"992px\",\"gridBreakpointxl\":\"1200px\",\"gridBreakpointtk\":\"2000px\",\"gridBreakpointfk\":\"3000px\",\"boxShadowSm\":\"0 .125rem .25rem rgba(26,27,27,.075)\",\"tr\":\"QuestionnaireDetailMainBodyCard_tr__hVgeH\",\"followUp\":\"QuestionnaireDetailMainBodyCard_followUp__ao94s\"};","import React, { useEffect, useState } from \"react\";\nimport cvApi from \"src/_api/cvApi\";\nimport { QuestionnaireModel } from \"src/_api/cvApi._DtoClasses\";\nimport { QuestionnaireComponent } from \"src/Questionnaire/QuestionnaireComponent\";\n\ninterface QuestionnairePreviewModalProps {\n  questionnaireId: number;\n}\n\nconst QuestionnairePreviewModal: React.FC<QuestionnairePreviewModalProps> = ({ questionnaireId }) => {\n  const [ questionnaire, setQuestionnaire ] = useState<QuestionnaireModel | null>(null);\n\n  useEffect(() => {\n    const fetchQuestionnaire = async () => {\n      const response = await cvApi.questionnaire.GetQuestionnaireByID(questionnaireId);\n      setQuestionnaire(response.data);\n    };\n\n    fetchQuestionnaire();\n  }, [ questionnaireId ]);\n\n  return (\n    <div>\n      {questionnaire && (\n        <QuestionnaireComponent\n          showTitle={true}\n          questionnaireCustomKey={questionnaire.CustomKey}\n          showSubmitButton={false}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default QuestionnairePreviewModal;\n","import { useState } from \"react\";\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\nimport { useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { arrayMove, SortableContainer, SortableElement, SortableHandle } from \"react-sortable-hoc\";\nimport _ from \"lodash\";\nimport { useRecordContext } from \"../_base/DetailBase\";\nimport { QuestionModel, QuestionnaireModel } from \"src/_api/cvApi._DtoClasses\";\nimport QuestionDetail from \"../questionDetail/QuestionDetail\";\nimport classes from \"./QuestionnaireDetailMainBodyCard.module.scss\";\nimport QuestionnairePreviewModal from \"./QuestionnairePreviewModal\";\n\nconst DragHandle = SortableHandle(() => (\n  <div>\n    <span className=\"float-end\">::</span>\n  </div>\n));\n\ntype QuestionGroup = {\n  question: QuestionModel;\n  followupQuestions?: QuestionGroup[];\n};\n\nexport const QuestionnaireDetailMainBodyCard = (): JSX.Element => {\n  const { t } = useTranslation();\n  const { getValues, setValue } = useFormContext();\n  const context = useRecordContext<QuestionnaireModel>();\n  const { record, setRecord, loadRecord } = context;\n  const controlNames = {\n    Name: { name: \"Name\", property: \"Name\" }\n  };\n  const [ activeQuestion, setActiveQuestion ] = useState<QuestionModel>(null);\n  const [ showPreviewModal, setShowPreviewModal ] = useState(false);\n\n  const deleteQuestion = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, questionId: number) => {\n    e.stopPropagation();\n    const newQuestions = record.Questions.filter(q => q.ID !== questionId);\n    setRecord({\n      ...record,\n      Questions: newQuestions\n    });\n    if (activeQuestion?.ID === questionId) {\n      setActiveQuestion(_.first(newQuestions));\n    }\n  };\n\n  const RenderQuestionGroup = ({\n    questionGroup,\n    isFollowup\n  }: {\n    questionGroup: QuestionGroup;\n    isFollowup?: boolean;\n  }) => {\n    return (\n      <div className={isFollowup ? classes.followUp : \"\"}>\n        <Col\n          className={classes.tr}\n          sm={12}>\n          <Row onClick={() => {\n            if (activeQuestion?.ID === questionGroup.question.ID) {\n              setActiveQuestion(null);\n              return;\n            }\n            setActiveQuestion(questionGroup.question);\n          }}>\n            <Col sm={7} className=\"text-break\">\n              {questionGroup.question.QuestionTranslationKey}\n            </Col>\n            <Col sm={3}>\n              {questionGroup.question.TypeDisplayName\n                ?? questionGroup.question.TypeName\n                ?? questionGroup.question.TypeKey}\n              {(questionGroup.question?.ID as unknown as string) === \"new\" && (\n                <Button\n                  className=\"float-end\"\n                  onClick={e => deleteQuestion(e, questionGroup.question.ID)}>\n                  <i className=\"fas fa-trash\"></i>\n                </Button>\n              )}\n            </Col>\n            <Col sm={2}>\n              <DragHandle />\n            </Col>\n          </Row>\n          {activeQuestion?.ID === questionGroup.question?.ID && (\n            <Row className=\"mt-4\">\n              <Col xs={12}>\n                <QuestionDetail\n                  key={activeQuestion.ID}\n                  id={activeQuestion.ID.toString()}\n                  questionnaire={record}\n                  saveCallback={result => {\n                    if (result.ActionSucceeded) {\n                      loadRecord(record.ID);\n                    }\n                  }}\n                />\n              </Col>\n            </Row>\n          )}\n        </Col>\n        {questionGroup.followupQuestions?.length > 0\n          && questionGroup.followupQuestions.map(followupQuestion => (\n            <RenderQuestionGroup\n              key={followupQuestion.question.ID}\n              questionGroup={followupQuestion}\n              isFollowup={true}\n            />\n          ))}\n      </div>\n    );\n  };\n\n  const SortableItem = SortableElement(({ questionGroup }: { questionGroup: QuestionGroup }) => (\n    <Row>\n      <RenderQuestionGroup questionGroup={questionGroup} />\n    </Row>\n  ));\n\n  const findAndMoveFollowupQuestion = (question: QuestionModel, questionGroups: QuestionGroup[]): boolean => {\n    for (const group of questionGroups) {\n      if (group.question.Options?.some(option => option.FollowUpQuestionID === question.ID)) {\n        if (!group.followupQuestions) {\n          group.followupQuestions = [];\n        }\n        const followupQuestionIndex = questionGroups.findIndex(q => q.question.ID === question.ID);\n        if (followupQuestionIndex !== -1) {\n          const followupQuestion = questionGroups.splice(followupQuestionIndex, 1)[0];\n          group.followupQuestions.push(followupQuestion);\n          return true;\n        }\n      }\n      if (group.followupQuestions?.length > 0) {\n        const found = findAndMoveFollowupQuestion(question, group.followupQuestions);\n        if (found) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  const SortableList = SortableContainer(({ questions }: { questions: QuestionModel[] }) => {\n    const questionGroups: QuestionGroup[] = questions.map(question => ({ question, followupQuestions: [] }));\n\n    let moved = false;\n    do {\n      moved = false;\n      for (const question of questions) {\n        if (findAndMoveFollowupQuestion(question, questionGroups)) {\n          moved = true;\n        }\n      }\n    } while (moved);\n    if (questionGroups.length === 0) {\n      // this if check is to always show the first Sortable Item even if there are no questions yet\n      const newQuestion = {\n        Active: true,\n        CustomKey: \"New Question\",\n        CreatedDate: new Date(),\n        ID: \"new\" as unknown as number\n      } as QuestionModel;\n      const newRecord = { ...record };\n      newRecord.Questions.push(newQuestion);\n      setRecord(newRecord);\n      setActiveQuestion(newQuestion);\n    }\n    return (\n      <div>\n        {questionGroups.map((group, index) => (\n          <SortableItem\n            key={`item-${group.question.ID}`}\n            index={index}\n            questionGroup={group}\n          />\n        ))}\n      </div>\n    );\n  });\n\n  return (\n    <Row>\n      <Col\n        sm={12}\n        md={12}>\n        <Row className={classes.header}>\n          <Col\n            className=\"align-self-end\"\n            sm={7}>\n            <strong>{t(\"ui.storefront.questionnaire.QuestionTitle\", \"Question Title\")}</strong>\n          </Col>\n          <Col\n            className=\"align-self-end\"\n            sm={3}>\n            <strong>{t(\"ui.storefront.questionnaire.QuestionType\", \"Question Type\")}</strong>\n          </Col>\n          <Col sm={2} />\n        </Row>\n        <SortableList\n          useDragHandle={true}\n          questions={record.Questions.sort((a, b) => a.SortOrder - b.SortOrder)}\n          onSortEnd={({ oldIndex, newIndex }) => {\n            let newQuestions = arrayMove(record.Questions, oldIndex, newIndex);\n            newQuestions = newQuestions.map((question, index) => ({\n              ...question,\n              SortOrder: index + 1\n            }));\n            setRecord({\n              ...record,\n              Questions: newQuestions\n            });\n            setValue(controlNames.Name.name, getValues(controlNames.Name.name), { shouldDirty: true });\n          }}\n        />\n        <div className=\"d-flex justify-content-between align-items-baseline\">\n          <div className=\"d-flex justify-content-between align-items-center mb-3\">\n            <Button\n              onClick={e => {\n                const newQuestion = {\n                  Active: true,\n                  CustomKey: \"New Question\",\n                  CreatedDate: new Date(),\n                  ID: \"new\" as unknown as number\n                  // TypeID: 1,\n                  // TypeName: \"Text\",\n                } as QuestionModel;\n                const newRecord = { ...record };\n                newRecord.Questions.push(newQuestion);\n                setRecord(newRecord);\n                setActiveQuestion(newQuestion);\n              }}>\n              {t(\"ui.storefront.common.New\", \"New\")}\n            </Button>\n          </div>\n          <Button\n            className=\"mt-3 float-end\"\n            onClick={() => setShowPreviewModal(true)}>\n            {t(\"ui.storefront.questionnaire.PreviewQuestionnaire\", \"Preview Questionnaire\")}\n          </Button>\n        </div>\n      </Col>\n      <Modal\n        show={showPreviewModal}\n        onHide={() => setShowPreviewModal(false)}\n        size=\"lg\">\n        <Modal.Header closeButton>\n          <Modal.Title>Preview Questionnaire</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          <QuestionnairePreviewModal questionnaireId={record.ID} />\n        </Modal.Body>\n      </Modal>\n    </Row>\n  );\n};\n","/* eslint-disable no-await-in-loop */\nimport { useTranslation } from \"react-i18next\";\nimport { Accordion, AccordionHeader, Col, Row } from \"react-bootstrap\";\nimport AccordionBody from \"react-bootstrap/esm/AccordionBody\";\n// eslint-disable-next-line no-inline-comments\nimport { useHistory, /* useNavigate */ } from \"react-router-dom\";\nimport DetailBase, { useRecordContext } from \"../_base/DetailBase\";\nimport cvApi from \"src/_api/cvApi\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { QuestionnaireDetailBasicInformationCard } from \"./QuestionnaireDetailBasicInformationCard\";\nimport { QuestionnaireDetailMainBodyCard } from \"./QuestionnaireDetailMainBodyCard\";\nimport { CEFActionResponse, CEFActionResponseT, IHttpPromiseCallbackArg } from \"src/_api/cvApi.shared\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\n\nimport {\n  Paging,\n  QuestionnaireModel,\n  QuestionTypePagedResults,\n  SerializableAttributesDictionary\n} from \"src/_api/cvApi._DtoClasses\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nconst QuestionnaireDetailContent = (): JSX.Element => {\n  const context = useRecordContext<QuestionnaireModel>();\n  const { record } = context;\n  const { t } = useTranslation();\n  if (!context) {\n    return <LoadingWidget />;\n  }\n  const sections = [];\n  sections.push({\n    anchor: \"BasicInfo\",\n    title: t(\"ui.storefront.common.BasicInformation\", \"Basic Information\"),\n    render: <QuestionnaireDetailBasicInformationCard />\n  });\n  if (record.ID > 0) {\n    sections.push({\n      anchor: \"MainBody\",\n      title: \"Questions\",\n      render: <QuestionnaireDetailMainBodyCard />\n    });\n  }\n\n  return (\n    <Row>\n      <Col sm={12}>\n        <Accordion alwaysOpen defaultActiveKey={sections.map(section => section.anchor)}>\n          {sections.map(section => {\n            return (\n              <Accordion.Item\n                eventKey={section.anchor}\n                key={`accordionItem_${section.anchor}`}>\n                <AccordionHeader\n                  id={section.anchor}\n                  className=\"questionnaire-detail-accordion-header\">\n                  {section.title}\n                </AccordionHeader>\n                <AccordionBody>{section.render}</AccordionBody>\n              </Accordion.Item>\n            );\n          })}\n        </Accordion>\n      </Col>\n    </Row>\n  );\n};\n\nconst QuestionnaireDetail = (): JSX.Element => {\n  // const navigate = useNavigate();\n  const history = useHistory();\n  const cefConfig = useCefConfig();\n  const loadCollections = (record: QuestionnaireModel) => {\n    const paging = { Size: 500, StartIndex: 1 } as Paging;\n    const standardDto = { Active: true, AsListing: true, Paging: paging };\n    return new Promise<unknown[]>((resolve, reject) => {\n      const promises: unknown[] = [\n        // 0\n        cvApi.questionnaire.GetQuestionTypes(standardDto)\n      ];\n      Promise.all(promises)\n        .then(async results => {\n          const questionTypes = results[0] as IHttpPromiseCallbackArg<QuestionTypePagedResults>;\n          const requiredTypes = [\n            ServiceStrings.questionnaire.types.BOOLEAN,\n            ServiceStrings.questionnaire.types.MULTIPLE_CHOICE,\n            ServiceStrings.questionnaire.types.NUMBER,\n            ServiceStrings.questionnaire.types.SELECT,\n            ServiceStrings.questionnaire.types.STRING,\n            ServiceStrings.questionnaire.types.TEXT_AREA\n          ];\n          const existingTypes = questionTypes.data.Results.map(qt => qt.CustomKey);\n\n          for (const type of requiredTypes) {\n            if (!existingTypes.includes(type)) {\n              const result = await cvApi.questionnaire.CreateQuestionType({\n                Name: type,\n                DisplayName: type,\n                Active: true,\n                CreatedDate: new Date(),\n                UpdatedDate: null,\n                ID: 0,\n                CustomKey: type,\n                Hash: null,\n                SerializableAttributes: new SerializableAttributesDictionary()\n              });\n              const newType = await cvApi.questionnaire.GetQuestionTypeByID(result.data.Result);\n              questionTypes.data.Results.push(newType.data);\n            }\n          }\n          resolve(results);\n        })\n        .catch(reject);\n    });\n  };\n  const loadNewRecord = (): Promise<QuestionnaireModel> => {\n    const record = {\n      // QuestionnaireModel properties\n      Questions: [],\n      // NameableBaseModel properties\n      Name: null,\n      Description: null,\n      // BaseModel properties\n      ID: null,\n      CustomKey: null,\n      Active: true,\n      CreatedDate: new Date(),\n      UpdatedDate: null,\n      Hash: null,\n      // HaveJsonAttributesBaseModel propeties\n      SerializableAttributes: new SerializableAttributesDictionary()\n    } as QuestionnaireModel;\n    return Promise.resolve(record);\n  };\n  return (\n    <DetailBase<QuestionnaireModel>\n      title=\"Questionnaire\"\n      newKindKey={\"ui.storefront.common.Questionnaire.New\"}\n      existingKindKey={\"ui.storefront.common.Questionnaire\"}\n      existingKindText=\"Questionnaire\"\n      permissionsBase=\"Questionnaire.Questionnaire\"\n      listRoute={`${cefConfig.routes.dashboard.root}/questionnaires`}\n      listReturnLabelKey=\"ui.storefront.common.Questionnaire.Plural\"\n      loadRecordCall={(id: number) => cvApi.questionnaire.GetQuestionnaireByID(id)}\n      createRecordCall={(routeParams: QuestionnaireModel) => cvApi.questionnaire.CreateQuestionnaire(routeParams)}\n      createRecordActionAfterSuccess={(result: CEFActionResponseT<number>, _collections: unknown[]) => {\n        history.push(`${cefConfig.routes.dashboard.root}/questionnaires/${result.Result}`);\n        history.go(0);\n        return Promise.resolve(result);\n      }}\n      loadRecordActionBeforeAssign={(result: QuestionnaireModel) => {\n        if (!result.SerializableAttributes) {\n          result.SerializableAttributes = new SerializableAttributesDictionary();\n        }\n        if (!result.Questions) {\n          result.Questions = [];\n        }\n        return Promise.resolve(result);\n      }}\n      updateRecordPreAction={async (routeParams: QuestionnaireModel) => {\n        await Promise.all(\n          routeParams.Questions.map((question, index) => {\n            const newQuestion = { ...question };\n            if (!newQuestion.QuestionnaireID) {\n              newQuestion.QuestionnaireID = routeParams.ID;\n              newQuestion.Questionnaire = routeParams;\n            }\n            return cvApi.questionnaire.UpdateQuestion(newQuestion);\n          })\n        );\n        return Promise.resolve(routeParams);\n      }}\n      updateRecordCall={(routeParams: QuestionnaireModel) => cvApi.questionnaire.UpdateQuestionnaire(routeParams)}\n      deactivateRecordCall={(id: number) => cvApi.questionnaire.DeactivateQuestionnaireByID(id)}\n      reactivateRecordCall={(id: number) => cvApi.questionnaire.ReactivateQuestionnaireByID(id)}\n      deleteRecordCall={(id: number) => cvApi.questionnaire.DeleteQuestionnaireByID(id)}\n      deleteRecordActionAfterSuccess={(result: CEFActionResponse) => {\n        history.push(`${cefConfig.routes.dashboard.root}/questionnaires`);\n        history.go(0);\n        return Promise.resolve(result);\n      }}\n      loadCollections={loadCollections}\n      loadNewRecord={loadNewRecord}>\n      <QuestionnaireDetailContent />\n    </DetailBase>\n  );\n};\n\nexport default QuestionnaireDetail;\n","import { Col, Row } from \"react-bootstrap\";\nimport { DoctorRegionModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useCurrentAccount } from \"src/_redux/slices/authSlice\";\nimport { DashboardTabHeading } from \"src/Dashboard/_shared/DashboardTabHeading\";\n\nexport const PhysicianLicenses = (): JSX.Element => {\n  const currentAccount = useCurrentAccount();\n\n  return (\n    <Col xs={12} className=\"mb-4\">\n      <DashboardTabHeading title=\"Physician Licenses\" iconString=\"far fa-fw fa-file-certificate\"/>\n      <Row className=\"my-2 border-bottom border-1 border-primary-subtle\">\n        <Col xs={3} style={{ fontWeight: \"600\" }}>Practice Name: </Col>\n        <Col xs={9}>{currentAccount.Name}</Col>\n      </Row>\n      <Row className=\"my-2 border-bottom border-1 border-primary-subtle\">\n        <Col xs={3} style={{ fontWeight: \"600\" }}>NPI Number: </Col>\n        <Col xs={9}>{currentAccount.NPINumber}</Col>\n      </Row>\n      <Row className=\"my-2 border-bottom border-1 border-primary-subtle\">\n        <Col xs={3} style={{ fontWeight: \"600\" }}>DEA Number: </Col>\n        <Col xs={9}>{currentAccount.DEANumber}</Col>\n      </Row>\n      <Row>\n        <Col xs={12}>\n          <span className=\"d-block my-2 text-center\"\n            style={{ fontWeight: \"600\", fontSize: \"larger\" }}>State Licenses:</span>\n          <Row className=\"my-2 border-bottom border-2 border-primary-subtle\">\n            <Col xs={3} style={{ fontWeight: \"600\" }}>\n              State\n            </Col>\n            <Col xs={3} style={{ fontWeight: \"600\" }}>\n              License Number\n            </Col>\n            <Col xs={3} style={{ fontWeight: \"600\" }}>\n              Approve Date\n            </Col>\n            <Col xs={3} style={{ fontWeight: \"600\" }}>\n              Expiration Date\n            </Col>\n          </Row>\n          {currentAccount.StatesOfLicensure?.map((state: DoctorRegionModel) => (\n            <Row key={state.ID} className=\"my-2 border-bottom border-1 border-primary-subtle\"><Col xs={ 3 }\n              className=\"d-flex justify-content-between\">\n              { state.SlaveName }\n            </Col><Col xs={ 3 }\n              className=\"d-flex justify-content-between\">\n              TBD\n            </Col><Col xs={ 3 }\n              className=\"d-flex justify-content-between\">\n              TBD\n            </Col><Col xs={ 3 }\n              className=\"d-flex justify-content-between\">\n              TBD\n            </Col></Row>\n          ))}\n          <Row />\n        </Col>\n      </Row>\n\n    </Col>\n  );\n};\n","/** @format */\n\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\nimport { FieldValues, SubmitHandler, useForm } from \"react-hook-form\";\nimport { DateTime } from \"luxon\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport cvApi from \"src/_api/cvApi\";\nimport { RescheduleAppointmentDto, ScheduleAppointmentWithGoogleDto } from \"src/_api/cvApi.Appointments\";\nimport { Modal } from \"../../_shared/modals/Modal\";\n\ninterface ISchedulingModalProps {\n  onCancel: () => void;\n  onConfirm?: () => void;\n  show: boolean;\n  showCancel?: boolean;\n  appointmentID?: number;\n  salesOrderID?: number;\n  patientAccountID?: number;\n  reloadConsultations?: () => Promise<void>;\n  titleText?: string;\n  typeText?: string;\n}\n\nexport const SchedulingModal = (props: ISchedulingModalProps): JSX.Element => {\n  const {\n    show,\n    onCancel,\n    showCancel,\n    appointmentID,\n    salesOrderID,\n    patientAccountID,\n    reloadConsultations,\n    titleText,\n    typeText\n  } = props;\n\n  const [ selectedStartTime, setSelectedStartTime ] = useState<Date | null>(null);\n  const [ showErrorMessage, setShowErrorMessage ] = useState<boolean>(false);\n  const [ showSuccessMessage, setShowSuccessMessage ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { viewState } = useViewState();\n\n  const { reset, handleSubmit } = useForm({\n    mode: \"all\",\n    criteriaMode: \"all\"\n  });\n\n  const currentTime = new Date();\n  const currentHour = currentTime.getHours();\n  const currentMinute = currentTime.getMinutes();\n  const nextMinute = currentMinute === 59 ? 0 : currentMinute + 1;\n\n  const minTimeStart\n    = selectedStartTime && selectedStartTime.toDateString() === currentTime.toDateString()\n      ? new Date().setHours(currentHour, nextMinute)\n      : new Date().setHours(0, 0);\n  const maxTimeStart = new Date().setHours(23, 59);\n\n  const minSelectableDate = new Date();\n  minSelectableDate.setHours(0, 0, 0, 0);\n\n  const handleCancel = (): void => {\n    reset();\n    setShowErrorMessage(false);\n    if (onCancel) {\n      onCancel();\n    }\n  };\n\n  const scheduleInitialAppointment: SubmitHandler<unknown> = async data => {\n    const selectedEndTime = DateTime.fromJSDate(selectedStartTime).plus({ minutes: 30 })\n      .toJSDate();\n    const dto: ScheduleAppointmentWithGoogleDto = {\n      SalesOrderID: salesOrderID,\n      PatientAccountID: patientAccountID,\n      StartTime: selectedStartTime,\n      EndTime: selectedEndTime\n    };\n    const res = await cvApi.appointments.ScheduleAppointmentWithGoogle(dto);\n    if (!res.data.ActionSucceeded) {\n      setShowErrorMessage(true);\n    } else {\n      setShowSuccessMessage(true);\n      setTimeout(() => {\n        setShowSuccessMessage(false);\n        onCancel();\n      }, 3000);\n    }\n  };\n\n  const rescheduleAppointment: SubmitHandler<unknown> = async data => {\n    const selectedEndTime = DateTime.fromJSDate(selectedStartTime).plus({ minutes: 30 })\n      .toJSDate();\n    const dto: RescheduleAppointmentDto = {\n      AppointmentID: appointmentID,\n      StartTime: selectedStartTime,\n      EndTime: selectedEndTime\n    };\n    const res = await cvApi.appointments.RescheduleAppointment(dto);\n    if (!res.data.ActionSucceeded) {\n      setShowErrorMessage(true);\n    } else {\n      setShowSuccessMessage(true);\n      setTimeout(() => {\n        setShowSuccessMessage(false);\n        onCancel();\n        reloadConsultations();\n      }, 3000);\n    }\n  };\n  const handleScheduling = (formData: FieldValues) => {\n    if (typeText === \"schedule\") {\n      scheduleInitialAppointment(formData);\n    }\n    if (typeText === \"reschedule\") {\n      rescheduleAppointment(formData);\n    }\n  };\n\n  return (\n    <Modal\n      title={titleText ?? \"Scheduling Modal\"}\n      titleID=\"txtScheduleModalTitle\"\n      size=\"md\"\n      onCancel={handleCancel}\n      show={show}\n      headerClasses=\"bg-light rounded-0 py-2 mt-0\">\n      {viewState.running ? (\n        <LoadingWidget />\n      ) : (\n        <Form onSubmit={handleSubmit(data => handleScheduling(data))}>\n          <Row>\n            <p className=\"text-center\">\n              {t(\"ui.storefront.consultations.PleaseSelectDateTime\", \"Please select a date and time to\")}\n              &nbsp;\n              {`${typeText}`}\n              &nbsp;\n              {t(\"ui.storefront.consultations.Consultation\", \"consultation\")}\n              {\".\"}\n            </p>\n            <Col\n              xs={12}\n              className=\"d-flex justify-content-center\">\n              <DatePicker\n                className=\"d-flex justify-content-center mb-4 mt-2\"\n                selected={selectedStartTime}\n                onChange={date => setSelectedStartTime(date)}\n                showTimeSelect\n                timeFormat=\"h:mm aa\"\n                timeIntervals={30}\n                dateFormat=\"MMMM d, yyyy h:mm aa\"\n                placeholderText=\"Select a date and time\"\n                inline\n                required={true}\n                minDate={new Date(minSelectableDate)}\n                minTime={new Date(minTimeStart)}\n                maxTime={new Date(maxTimeStart)}\n              />\n            </Col>\n            <hr className=\"border border-medium\" />\n            <Col\n              xs={12}\n              className=\"d-flex justify-content-between\">\n              {showCancel && (\n                <Button\n                  variant=\"outline-secondary\"\n                  onClick={handleCancel}>\n                  {t(\"ui.storefront.common.Cancel\")}\n                </Button>\n              )}\n              <Button\n                id=\"btnScheduleModalSubmit\"\n                data-sid=\"btnScheduleModalSubmit\"\n                variant=\"primary\"\n                disabled={!selectedStartTime}\n                type=\"submit\">\n                {t(\"ui.storefront.common.Submit\")}\n              </Button>\n            </Col>\n          </Row>\n          {showSuccessMessage && (\n            <Row className=\"mt-3\">\n              <Col xs={12}>\n                <Alert variant=\"success\">\n                  {t(\n                    \"ui.storefront.consultations.ConsultationScheduledSuccessfully\",\n                    \"Consultation scheduled successfully.\"\n                  )}\n                </Alert>\n              </Col>\n            </Row>\n          )}\n          {showErrorMessage && (\n            <Row className=\"mt-3\">\n              <Col xs={12}>\n                <Alert variant=\"danger\">\n                  {t(\"ui.storefront.consultations.ErrorScheduling\", \"There was an error scheduling this appointment.\")}\n                </Alert>\n              </Col>\n            </Row>\n          )}\n        </Form>\n      )}\n    </Modal>\n  );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { DateTime } from \"luxon\";\nimport { AccountModel, AppointmentModel, AppointmentPagedResults, SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useCurrentAccount } from \"src/_redux/slices/authSlice\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { SchedulingModal } from \"src/Dashboard/Consultations/SchedulingModal\";\nimport { useConsultationFactory } from \"src/_shared/customHooks/useConsultationFactory\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { ListAppointmentsByAccountIDAndTypeDto } from \"src/_api/cvApi.Appointments\";\nimport { useRegions } from \"src/_redux/slices/geographySlice\";\nimport { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\nimport { DashboardTabHeading } from \"src/Dashboard/_shared/DashboardTabHeading\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { convertTimeFromUTCToUserLocal } from \"src/_shared/common/Formatters\";\n\nexport const ScheduledAppointments = (): JSX.Element => {\n  const [ pagedConsultations, setPagedConsultations ] = useState<AppointmentPagedResults>({\n    CurrentCount: 0,\n    CurrentPage: 1,\n    Results: [],\n    TotalCount: 0,\n    TotalPages: 0\n  });\n  const [ showSchedulingModal, setShowSchedulingModal ] = useState<boolean>(false);\n  const [ appointmentID, setappointmentID ] = useState<number>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const consultationFactory = useConsultationFactory();\n  const currentAccount = useCurrentAccount();\n\n  async function fetchConsultations() {\n    console.log(\"RUNNING\");\n    setRunning();\n    try {\n      const data = await consultationFactory.getConsultations({}, true);\n      if (!data?.Results) {\n        finishRunning();\n        return;\n      }\n      console.log(\"DATA\", data);\n      data.Results.sort((a, b) => new Date(a.AppointmentStart).getTime() - new Date(b.AppointmentStart).getTime());\n      setPagedConsultations(data);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err as any as Error);\n    }\n  }\n\n  useEffect(() => {\n    if (!currentAccount || !consultationFactory) {\n      return;\n    }\n    fetchConsultations();\n  }, [ consultationFactory, currentAccount ]);\n\n  const isDoctor = currentAccount?.Type?.CustomKey === \"DOCTOR\";\n\n  if (!currentAccount?.ID || currentAccount.Loading) {\n    return null;\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-consultations mt-3\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            <DashboardTabHeading\n              title=\"Scheduled Appointments\"\n              iconString=\"far fa-calendar\"\n            />\n          </div>\n          {viewState.running && <LoadingWidget />}\n          <CVGrid<AppointmentModel, ListAppointmentsByAccountIDAndTypeDto>\n            data={pagedConsultations}\n            hidePaging\n            showPagingLabel\n            // @ts-ignore works with overrides\n            tableClasses=\"border border-medium\">\n            <CVGrid.Column\n              title={\n                isDoctor\n                  ? t(\"ui.storefront.consultations.PatientName\", \"Patient Name\")\n                  : t(\"ui.storefront.consultations.PhysicianName\", \"Physician Name\")\n              }\n              thClass=\"text-nowrap fw-normal\">\n              {(appt: AppointmentModel) => <Name consultation={appt} />}\n            </CVGrid.Column>\n            {isDoctor && (\n              <CVGrid.Column\n                title={t(\"ui.storefront.consultations.PatientState\", \"Patient State\")}\n                thClass=\"text-nowrap fw-normal\">\n                {(appt: AppointmentModel) => <PatientState consultation={appt} />}\n              </CVGrid.Column>\n            )}\n            <CVGrid.Column\n              title={t(\"ui.storefront.consultations.ConsultationDateTime\", \"Consultation Date & Time\")}\n              thClass=\"text-nowrap fw-normal\">\n              {(appt: AppointmentModel) => {\n                const convertedDate = convertTimeFromUTCToUserLocal(appt.AppointmentStart);\n                const appointmentStart = DateTime.fromISO(new Date(convertedDate).toISOString());\n                const isToday = appointmentStart.hasSame(DateTime.local(), \"day\");\n                return (\n                  <span className={`text-nowrap ${isToday ? \"text-danger\" : \"\"}`}>\n                    {DateTime.fromISO(new Date(convertedDate).toISOString()).toFormat(\"MM/dd/yyyy | hh:mm a\")}\n                  </span>\n                );\n              }}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title={t(\"ui.storefront.common.Product\", \"Product\")}\n              thClass=\"text-nowrap fw-normal\">\n              {(appt: AppointmentModel) => <ProductName consultation={appt} />}\n            </CVGrid.Column>\n            {isDoctor && (\n              <CVGrid.Column\n                title=\"Reschedule\"\n                hideHeader\n                thClass=\"w-10\"\n                tdClass=\"w-10\">\n                {(appt: AppointmentModel) => (\n                  <RescheduleButton\n                    consultation={appt}\n                    onRescheduleClicked={() => {\n                      setShowSchedulingModal(true);\n                      setappointmentID(appt.ID);\n                    }}\n                  />\n                )}\n              </CVGrid.Column>\n            )}\n            <CVGrid.Column\n              title=\"Join Consultation\"\n              hideHeader={true}\n              thClass=\"w-10\"\n              tdClass=\"w-10\">\n              {(appt: AppointmentModel) => <JoinConsultationButton consultation={appt} />}\n            </CVGrid.Column>\n          </CVGrid>\n        </section>\n      </Col>\n      <SchedulingModal\n        onCancel={() => setShowSchedulingModal(false)}\n        show={showSchedulingModal}\n        showCancel={true}\n        appointmentID={appointmentID}\n        reloadConsultations={() => fetchConsultations()}\n        titleText=\"Reschedule Consultation\"\n        typeText=\"reschedule\"\n      />\n    </Row>\n  );\n};\n\ninterface ICustomColumnProps {\n  consultation: AppointmentModel;\n}\n\ninterface IRescheduleButtonProps extends ICustomColumnProps {\n  onRescheduleClicked: () => void;\n}\n\nfunction Name(props: ICustomColumnProps): JSX.Element {\n  const { consultation } = props;\n\n  const currentAccount = useCurrentAccount();\n\n  const isDoctor = useMemo(() => {\n    return getCurrentAccountType(currentAccount) === \"DOCTOR\";\n  }, [ currentAccount ]);\n\n  const isPatient = useMemo(() => {\n    return getCurrentAccountType(currentAccount) === \"PATIENT\";\n  }, [ currentAccount ]);\n\n  if (isDoctor) {\n    const patientFirstName = consultation?.PatientAccount?.Users[0]?.Contact.FirstName ?? \"N/A\";\n    const patientLastName = consultation?.PatientAccount?.Users[0]?.Contact.LastName ?? \"N/A\";\n    const patientName = `${patientFirstName} ${patientLastName}`;\n    return <span>{patientName}</span>;\n  }\n\n  if (isPatient) {\n    const doctorFirstName = consultation?.DoctorAccount?.Users[0]?.Contact.FirstName ?? \"N/A\";\n    const doctorLastName = consultation?.DoctorAccount?.Users[0]?.Contact.LastName ?? \"N/A\";\n    const doctorName = `${doctorFirstName} ${doctorLastName}`;\n    return <span>{doctorName}</span>;\n  }\n\n  return <></>;\n}\n\nfunction PatientState(props: ICustomColumnProps): JSX.Element {\n  const { consultation } = props;\n  const regions = useRegions();\n\n  const regionInfo = regions?.find(region => region.ID === consultation?.PatientAccount?.Users[0].StateOfResidenceID);\n  const patientState = regionInfo?.Name ?? \" N/A\";\n\n  return <span>{patientState}</span>;\n}\n\nfunction ProductName(props: ICustomColumnProps): JSX.Element {\n  const { consultation } = props;\n\n  const [ salesOrder, setSalesOrder ] = useState<SalesOrderModel>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const salesOrderFactory = useSalesOrderFactory();\n\n  useEffect(() => {\n    if (!salesOrderFactory || !consultation?.SalesOrderID) {\n      return;\n    }\n    const fetchOrder = async () => {\n      setRunning();\n      try {\n        const order = await salesOrderFactory.getSalesOrder(consultation.SalesOrderID, false);\n        setSalesOrder(order);\n        finishRunning();\n      } catch (err) {\n        finishRunning(true, err);\n      }\n    };\n    fetchOrder();\n  }, [ consultation, salesOrderFactory ]);\n\n  if (!salesOrder) {\n    return <span>N/A</span>;\n  }\n\n  if (viewState.hasError) {\n    return <ErrorView viewState={viewState} />;\n  }\n\n  const productNamesToDisplay = salesOrder.SalesItems?.map(item => item.Name);\n\n  return (\n    <>\n      {productNamesToDisplay?.map(pName => (\n        <span key={pName}>{pName}</span>\n      ))}\n    </>\n  );\n}\n\n/* function Email(props: ICustomColumnProps): JSX.Element {\n  const { consultation } = props;\n\n  const currentAccount = useCurrentAccount();\n\n  const isDoctor = useMemo(() => {\n    return getCurrentAccountType(currentAccount) === \"DOCTOR\";\n  }, [ currentAccount ]);\n\n  if (isDoctor) {\n    const patientEmail = consultation?.PatientAccount?.Users[0]?.Contact.Email1 ?? \"N/A\";\n    return <span className=\"text-break\">{patientEmail}</span>;\n  }\n\n  return <></>;\n} */\n\nfunction RescheduleButton(props: IRescheduleButtonProps): JSX.Element {\n  const { t } = useTranslation();\n\n  return (\n    <Button\n      id=\"btnRescheduleAppointment\"\n      variant=\"outline-secondary\"\n      className=\"rounded\"\n      onClick={() => {\n        props.onRescheduleClicked();\n      }}>\n      {t(\"ui.storefront.consultations.Reschedule\", \"Reschedule\")}\n    </Button>\n  );\n}\n\nfunction JoinConsultationButton(props: ICustomColumnProps): JSX.Element {\n  const { ID, GoogleMeetURL } = props.consultation;\n\n  const { t } = useTranslation();\n\n  return (\n    <a\n      id={`btnJoinConsultation_${ID}`}\n      className=\"btn btn-primary text-nowrap\"\n      target=\"_blank\"\n      rel=\"noreferrer\"\n      href={GoogleMeetURL}>\n      {t(\"ui.storefront.consultations.joinConsultation\", \"Join Consultation\")}\n    </a>\n  );\n}\n\nfunction getCurrentAccountType(currentAccount: AccountModel): \"DOCTOR\" | \"PATIENT\" {\n  return currentAccount?.Type?.CustomKey as \"DOCTOR\";\n}\n","import { useState } from \"react\";\nimport { ListAppointmentsByAccountIDAndTypeDto } from \"src/_api/cvApi.Appointments\";\nimport { AppointmentPagedResults } from \"src/_api/cvApi._DtoClasses\";\nimport { getDtoAsPromiserKeyFragment } from \"src/_shared/common/Formatters\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IConsultationFactory {\n  getConsultations: (dto?: ListAppointmentsByAccountIDAndTypeDto, force?: boolean) => Promise<AppointmentPagedResults>;\n}\n\nexport const useConsultationFactory = (): IConsultationFactory => {\n  const [ consultationFactory ] = useState<IConsultationFactory>({\n    getConsultations: async (\n      dto: ListAppointmentsByAccountIDAndTypeDto = { Active: true },\n      force: boolean = false\n    ): Promise<AppointmentPagedResults> => {\n      const promiserKey = `consultationFactory:getConsultations:${getDtoAsPromiserKeyFragment(dto)}`;\n      if (force) {\n        promiser.flush(promiserKey);\n      }\n      const res = await promiser.resolve(\n        promiserKey,\n        () => cvApi.appointments.ListAppointmentsByAccountIDAndType(dto)\n      );\n      if (!res?.data) {\n        throw new Error(\"Failed to fetch appointments\");\n      }\n      return res.data;\n    }\n  });\n\n  return consultationFactory;\n};\n","/* eslint-disable max-len */\nimport { useState } from \"react\";\nimport { Button, Col, Modal, Row } from \"react-bootstrap\";\nimport { useCurrentAccount } from \"src/_redux/slices/authSlice\";\nimport { DashboardTabHeading } from \"src/Dashboard/_shared/DashboardTabHeading\";\n\nexport const PhysicianLibrary = (): JSX.Element => {\n  const currentAccount = useCurrentAccount();\n\n  const [ showDocument, setShowDocument ] = useState(false);\n  // downloadDocument function to be updated when document data is available\n  const [ downloadDocument, setDownloadDocument ] = useState(false);\n\n  const availableDocuments = [ { ID: 1, Title: \"Example Document Title\", DateLastViewed: new Date().toLocaleDateString() } ];\n\n  return (\n    <Col xs={12} className=\"mb-4\">\n      <DashboardTabHeading title=\"Physician Library\" iconString=\"far fa-fw fa-book-medical\"/>\n      <Row>\n        <Col xs={12}>\n          <Row className=\"my-2 border-bottom border-2 border-primary-subtle\">\n            <Col xs={6} style={{ fontWeight: \"600\" }}>\n            Document Title\n            </Col>\n            <Col xs={3} style={{ fontWeight: \"600\" }}>\n            Date Last Viewed\n            </Col>\n            <Col xs={1} style={{ fontWeight: \"600\" }} />\n            <Col xs={2} style={{ fontWeight: \"600\" }} />\n          </Row>\n          {availableDocuments.map((document) => (\n            <><Row key={ document.ID } className=\"my-2 border-bottom border-1 border-primary-subtle d-flex align-items-center\">\n              <Col xs={ 6 }\n                className=\"d-flex justify-content-between\">\n                { document.Title }\n              </Col><Col xs={ 3 }\n                className=\"d-flex justify-content-between\">\n                { document.DateLastViewed }\n              </Col><Col xs={ 1 }\n                className=\"d-flex justify-content-between\">\n                <Button variant=\"link\" onClick={ () => setShowDocument(true) }>Open</Button>\n              </Col><Col xs={ 2 }\n                className=\"d-flex justify-content-between\">\n                <Button variant=\"link\" onClick={ () => setDownloadDocument(true) }>Download</Button>\n              </Col>\n            </Row><Modal size=\"lg\"\n              show={ showDocument }\n              onHide={ () => setShowDocument(false) }>\n              <Modal.Header closeButton>\n                <Modal.Title>{document.Title}\n                  <h5 className=\"display-block text-muted\">Last viewed: {document.DateLastViewed}</h5>\n                </Modal.Title>\n\n\n              </Modal.Header>\n              <Modal.Body>\n                <p>Document will be visible here when documents are available</p>\n              </Modal.Body>\n              <Modal.Footer>\n                <Button variant=\"secondary\" onClick={ () => setShowDocument(false) }>Close</Button>\n              </Modal.Footer>\n            </Modal>\n            <Modal size=\"lg\"\n              show={downloadDocument}\n              onHide={() => setDownloadDocument(false)}>\n              <Modal.Header closeButton>\n                <Modal.Title>No document available</Modal.Title>\n              </Modal.Header>\n              <Modal.Body>\n                <p>Downloading will be enabled when documents are available</p>\n              </Modal.Body>\n              <Modal.Footer>\n                <Button variant=\"secondary\" onClick={() => setDownloadDocument(false)}>Close</Button>\n              </Modal.Footer>\n            </Modal>\n            </>\n          ))}\n          <Row />\n        </Col>\n      </Row>\n    </Col>\n  );\n};\n","import { ConnectedComponent } from \"react-redux\";\nimport { Row } from \"react-bootstrap\";\nimport { faCoffee, IconDefinition } from \"@fortawesome/free-solid-svg-icons\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\n\n// Dashboard components\nimport { AddressBook } from \"src/Dashboard/AddressBook/AddressBook\";\nimport { AvailableOrders } from \"./AvailableOrders/AvailableOrders\";\nimport { AuctionsEnded } from \"src/Dashboard/AuctionsEnded/AuctionsEnded\";\nimport { AuctionsLive } from \"src/Dashboard/AuctionsLive/AuctionsLive\";\nimport { AuctionsLost } from \"src/Dashboard/AuctionsLost/AuctionsLost\";\nimport { AuctionsSold } from \"src/Dashboard/AuctionsSold/AuctionsSold\";\nimport { AuctionsWon } from \"src/Dashboard/AuctionsWon/AuctionsWon\";\nimport { CurrentBids } from \"src/Dashboard/CurrentBids/CurrentBids\";\nimport { EditLot } from \"src/Dashboard/EditLot/EditLot\";\nimport { MyProfile } from \"src/Dashboard/MyProfile/MyProfile\";\nimport { Invoices } from \"src/Dashboard/Invoices/Invoices\";\nimport { Orders } from \"src/Dashboard/Orders/Orders\";\nimport { WishList } from \"src/Dashboard/WishList/WishList\";\nimport { ShoppingLists } from \"src/Dashboard/ShoppingList/ShoppingLists\";\nimport { Wallet } from \"src/Dashboard/Wallet/Wallet\";\nimport { AccountProfile } from \"src/Dashboard/AccountProfile/AccountProfile\";\nimport { Privacy } from \"src/Dashboard/Privacy/Privacy\";\nimport { InStockAlerts } from \"src/Dashboard/InStockAlerts/InStockAlerts\";\nimport { Favorites } from \"src/Dashboard/Favorites/Favorites\";\nimport { Quotes } from \"src/Dashboard/Quotes/Quotes\";\nimport { SalesGroup } from \"src/Dashboard/SalesGroup/SalesGroup\";\nimport { WatchList } from \"src/Dashboard/WatchList/WatchList\";\nimport { Subscriptions } from \"../Dashboard/Subscriptions/Subscriptions\";\nimport { ClaimedOrders } from \"./ClaimedOrders/ClaimedOrders\";\nimport { ClaimedOrderDetail } from \"./ClaimedOrders/ClaimedOrderDetail\";\nimport { Prescriptions } from \"./Prescriptions/Prescriptions\";\nimport Questionnaires from \"src/Questionnaire/Editor/Questionnaires\";\nimport QuestionnaireDetail from \"src/Questionnaire/Editor/questionnaireDetail/QuestionnaireDetail\";\nimport { PhysicianLicenses } from \"../Dashboard/PhysicianLicenses/PhysicianLicenses\";\nimport { ScheduledAppointments } from \"../Dashboard/ScheduledAppointments/ScheduledAppointments\";\nimport { PhysicianLibrary } from \"../Dashboard/PhysicianLibrary/PhysicianLibrary\";\n\nexport const dashboardTabComponents: {\n  [name: string]: {\n    component:\n      | ((props?: unknown) => React.ReactNode)\n      | ((props?: unknown) => JSX.Element)\n      | ConnectedComponent<(props: any) => JSX.Element, [string]>;\n    icon?: IconDefinition;\n    iconString?: string;\n  };\n} = {\n  AccountProfile: { component: AccountProfile },\n  AccountSettings: { component: (): React.ReactNode => null, iconString: \"fal fa-fw fa-user\" },\n  AddressBook: { component: AddressBook },\n  AvailableOrders: { component: AvailableOrders },\n  AuctionsEnded: { component: AuctionsEnded },\n  AuctionsLive: { component: AuctionsLive },\n  AuctionsLost: { component: AuctionsLost },\n  AuctionsSold: { component: AuctionsSold },\n  AuctionsWon: { component: AuctionsWon },\n  CurrentBids: { component: CurrentBids },\n  EditLot: { component: EditLot },\n  Favorites: { component: Favorites, iconString: \"fal fa-fw fa-star\" },\n  InStockAlerts: { component: InStockAlerts, iconString: \"fal fa-fw fa-bell\" },\n  Invoices: {\n    component: () => <Invoices isDashboardMain={false} />,\n    iconString: \"fal fa-fw fa-file-invoice-dollar\"\n  },\n  MyDashboard: {\n    component: () => (\n      <Row>\n        <AuthGuard requiresRole=\"Doctor\">\n          <div className=\"pb-4\">\n            <ClaimedOrders isDashboardMain={true} />\n          </div>\n        </AuthGuard>\n        <AuthGuard requiresRole=\"Patient\">\n          <div className=\"pb-4\">\n            <Orders isDashboardMain={true} />\n          </div>\n        </AuthGuard>\n      </Row>\n    ),\n    iconString: \"fal fa-fw fa-tachometer-alt-average\"\n  },\n  ClaimedOrderDetail: { component: ClaimedOrderDetail },\n  ClaimedOrders: {\n    component: () => (\n      <AuthGuard requiresRole=\"Doctor\">\n        <ClaimedOrders isDashboardMain={false} />\n      </AuthGuard>\n    ),\n    iconString: \"fal fa-fw fa-receipt\"\n  },\n  MyProfile: { component: MyProfile },\n  Orders: {\n    component: () => (\n      <AuthGuard requiresRole=\"Patient\">\n        <Orders isDashboardMain={false} />\n      </AuthGuard>\n    ),\n    iconString: \"fal fa-fw fa-receipt\"\n  },\n  PhysicianLibrary: {\n    component: () => (\n      <AuthGuard requiresRole=\"Doctor\">\n        <PhysicianLibrary />\n      </AuthGuard>\n    ),\n  },\n  PhysicianLicenses: { component: () => (\n    <AuthGuard requiresRole=\"Doctor\">\n      <PhysicianLicenses />\n    </AuthGuard>\n  ), },\n  Prescriptions: {\n    component: () => (\n      <AuthGuard requiresRole=\"Patient\">\n        <Prescriptions />\n      </AuthGuard>\n    )\n  },\n  Privacy: { component: Privacy },\n  Quotes: {\n    component: () => <Quotes isDashboardMain={false} />,\n    iconString: \"fal fa-fw fa-quote-right\"\n  },\n  SalesGroup: { component: SalesGroup, icon: faCoffee },\n  ScheduledAppointments: {\n    component: () => <ScheduledAppointments />\n  },\n  ShoppingLists: {\n    component: ShoppingLists,\n    iconString: \"fal fa-fw fa-clipboard-list\"\n  },\n  Subscriptions: {\n    component: () => (\n      <AuthGuard requiresRole=\"Patient\">\n        <Subscriptions />\n      </AuthGuard>\n    )\n  },\n  Wallet: {\n    component: () => (\n      <AuthGuard requiresRole=\"Patient\">\n        <Wallet />\n      </AuthGuard>\n    )\n  },\n  WishList: { component: WishList, iconString: \"fal fa-fw fa-heart\" },\n  WatchList: { component: WatchList, iconString: \"fal fa-fw fa-eye\" },\n  QuestionnaireDetail: { component: QuestionnaireDetail },\n  Questionnaires: { component: Questionnaires },\n};\n","/** @format */\n\nimport { useEffect, useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { UpdateCurrentAccountDto } from \"src/_api/cvApi.Accounts\";\nimport { useCurrentAccount } from \"src/_redux/slices/authSlice\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\n\ninterface IAccountProfileEntryData {\n  txtAccountName: string;\n  taAccountDescription: string;\n  txtAccountCustomKey: string;\n  txtTaxExemptionNo: string;\n  txtTaxEntityUseCode: string;\n}\n\nexport const AccountProfile = (): JSX.Element => {\n  const [ showSavedMessage, setShowSavedMessage ] = useState(false);\n  const currentAccount = useCurrentAccount();\n  const authFactory = useAuthFactory();\n\n  const { register, handleSubmit, setValue, formState } = useForm<IAccountProfileEntryData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  useEffect(() => {\n    if (currentAccount.ID > 0) {\n      setValue(\"txtAccountName\", currentAccount.Name);\n      setValue(\"taAccountDescription\", currentAccount.Description);\n      setValue(\"txtAccountCustomKey\", currentAccount.CustomKey);\n      setValue(\"txtTaxExemptionNo\", currentAccount.TaxExemptionNo);\n      setValue(\"txtTaxEntityUseCode\", currentAccount.TaxEntityUseCode);\n    }\n  }, [ currentAccount ]);\n\n  const updateCurAccount: SubmitHandler<IAccountProfileEntryData> = (data): void => {\n    const { txtAccountName, taAccountDescription, txtAccountCustomKey, txtTaxExemptionNo, txtTaxEntityUseCode } = data;\n    const toSend = {\n      ...currentAccount,\n      CustomKey: txtAccountCustomKey,\n      Description: taAccountDescription,\n      Name: txtAccountName,\n      TaxEntityUseCode: txtTaxEntityUseCode,\n      TaxExemptionNo: txtTaxExemptionNo,\n      UpdatedDate: new Date()\n    } as UpdateCurrentAccountDto;\n    setRunning();\n    authFactory\n      .updateCurrentAccount(toSend)\n      .then(() => {\n        setShowSavedMessage(true);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err || \"Failed to update current account\");\n      });\n  };\n\n  return (\n    <Row\n      as={Form}\n      className=\"position-relative mt-3\"\n      onSubmit={handleSubmit(updateCurAccount)}>\n      <Col xs=\"12\">\n        <h1 className=\"title\">\n          <i className=\"far fa-receipt me-2\" />\n          <span>{t(\"ui.storefront.userDashboard2.userDashboard.AccountProfile\")}s</span>\n        </h1>\n      </Col>\n      {viewState.running || currentAccount.Loading ? <LoadingWidget overlay={true} /> : null}\n      <Col sm=\"6\">\n        <Row>\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtAccountName\"\n            formClasses=\"col-12 mb-2\"\n            labelKey=\"ui.storefront.common.CompanyName\"\n            required={true}\n            requiredMessage={t(\"ui.storefront.common.validation.ThisFieldIsRequired\")}\n            maxLength={128}\n            maxLengthMessage=\"Account name may not exceed 128 characters\"\n            placeholderKey=\"ui.storefront.userDashboard2.controls.accountProfile.EnterYourCompanyName\"\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtAccountCustomKey\"\n            formClasses=\"col-12 mb-2\"\n            labelKey=\"ui.storefront.common.Key\"\n            labelText=\"Key\"\n            required={true}\n            disabled={true}\n            requiredMessage={t(\"ui.storefront.common.validation.ThisFieldIsRequired\")}\n            maxLength={128}\n            maxLengthMessage=\"Account custom key may not exceed 128 characters\"\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"taAccountDescription\"\n            formClasses=\"col-12 mb-2\"\n            labelKey=\"ui.storefront.userDashboard2.controls.accountProfile.AccountDescription\"\n            placeholderKey=\"ui.storefront.userDashboard2.controls.accountProfile.DescribeYourAccount\"\n            required={false}\n            maxLength={600}\n            maxLengthMessage=\"Company description may not exceed 600 characters\"\n          />\n        </Row>\n      </Col>\n      <Col sm=\"6\">\n        <Row>\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtTaxExemptionNo\"\n            formClasses=\"col-12 mb-2\"\n            maxLength={12}\n            maxLengthMessage=\"Tax Exemption Number may not exceed 12 characters\"\n            labelKey=\"ui.storefront.userDashboard2.controls.accountProfile.TaxExemptionNo\"\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={formState.errors}\n            formIdentifier=\"txtTaxEntityUseCode\"\n            formClasses=\"col-12 mb-2\"\n            labelKey=\"ui.storefront.userDashboard2.controls.accountProfile.TaxEntityUseCode\"\n            maxLength={128}\n            maxLengthMessage=\"Tax Entity Code may not exceed 128 characters\"\n          />\n        </Row>\n      </Col>\n      <hr />\n      <Col xs=\"12\">\n        <Row>\n          <Col xs=\"auto\">\n            <Button\n              variant=\"primary\"\n              size=\"lg\"\n              type=\"submit\"\n              disabled={viewState.running || !formState.isValid}>\n              {t(\"ui.storefront.common.Save\")}\n            </Button>\n          </Col>\n          {showSavedMessage && (\n            <Col>\n              <Alert\n                variant=\"success\"\n                className=\"p-2 ms-3 mb-3\">\n                <i className=\"fal fa-check-circle\" />\n                &nbsp;\n                <span>{t(\"ui.storefront.userDashboard2.controls.userProfile.SaveSuccessful\")}</span>\n              </Alert>\n            </Col>\n          )}\n          {viewState.hasError && (\n            <Col>\n              <Alert\n                variant=\"danger\"\n                className=\"p-2 ms-3 mb-3\">\n                <i className=\"fal fa-check-circle\" />\n                &nbsp;\n                <span>\n                  {t(\"ui.storefront.common.Error\")}: {viewState.errorMessage}\n                </span>\n              </Alert>\n            </Col>\n          )}\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Card, Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { NewAddressModal } from \"src/Dashboard/AddressBook/NewAddressModal\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { DashboardTabHeading } from \"src/Dashboard/_shared/DashboardTabHeading\";\nimport { AddressBookCard } from \"./AddressBookCard\";\nimport { Modal } from \"../../_shared/modals/Modal\";\n\nexport const AddressBook = (): JSX.Element => {\n  const [ hasDefaultBilling, setHasDefaultBilling ] = useState<boolean>(false);\n  const [ hasDefaultShipping, setHasDefaultShipping ] = useState<boolean>(false);\n  const [ showAddAddressModal, setShowAddAddressModal ] = useState(false);\n  const [ accountContactToEdit, setAccountContactToEdit ] = useState<AccountContactModel>(null);\n  const [ showDeleteAddressConfirmationModalID, setShowDeleteAddressConfirmationModalID ] = useState(null);\n  const [ showCannotDeleteDefaultBillingModal, setShowCannotDeleteDefaultBillingModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const addressBook = useAddressBook();\n  const addressBookFactory = useAddressBookFactory();\n\n  useEffect(() => {\n    if (!addressBook?.length && hasDefaultBilling && hasDefaultShipping) {\n      return;\n    }\n    const defaultBilling = addressBook?.find(\n      (contact: AccountContactModel) => contact.IsBilling\n    );\n    const defaultShipping = addressBook?.find(\n      (contact: AccountContactModel) => contact.IsPrimary\n    );\n    setHasDefaultBilling(Boolean(defaultBilling));\n    setHasDefaultShipping(Boolean(defaultShipping));\n  }, [ addressBook ]);\n\n  function markAccountContactAsPrimaryShipping(contactID: number): void {\n    setRunning();\n    addressBookFactory.markAsDefaultShipping(contactID)\n      .then(() => {\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  function markAccountContactAsDefaultBilling(contactID: number): void {\n    setRunning();\n    addressBookFactory.markAsDefaultBilling(contactID)\n      .then(() => {\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  function editExistingAddress(userAddressData: AccountContactModel): void {\n    const fieldsToUpdate = [\n      \"CustomKey\",\n      \"Name\",\n      \"Slave.Fax1\",\n      \"Slave.Email1\",\n      \"Slave.FirstName\",\n      \"Slave.LastName\",\n      \"Slave.FullName\",\n      \"Slave.Phone1\",\n      \"Slave.Phone2\",\n      \"Slave.Phone3\",\n      \"Slave.Address.City\",\n      \"Slave.Address.Company\",\n      \"Slave.Address.Country\",\n      \"Slave.Address.CountryCode\",\n      \"Slave.Address.CountryKey\",\n      \"Slave.Address.CountryName\",\n      \"Slave.Address.CustomKey\",\n      \"Slave.Address.PostalCode\",\n      \"Slave.Address.Region\",\n      \"Slave.Address.RegionCode\",\n      \"Slave.Address.RegionID\",\n      \"Slave.Address.RegionKey\",\n      \"Slave.Address.RegionName\",\n      \"Slave.Address.Street1\",\n      \"Slave.Address.Street2\",\n      \"Slave.Address.Street3\"\n    ];\n    const accountContactToEditCopy = {\n      ...accountContactToEdit,\n      Slave: {\n        ...accountContactToEdit.Slave,\n        Address: {\n          ...accountContactToEdit.Slave.Address\n        }\n      }\n    };\n\n    fieldsToUpdate.forEach(field => {\n      const accessors = field.split(\".\");\n      const deepValue = accessors.reduce((accu, accessor) => accu && accu[accessor] || null, userAddressData);\n      accessors.reduce((accu, accessor, i) => {\n        const isLast = accessors.length === i + 1;\n        // @ts-ignore\n        accu[accessor] = isLast ? deepValue : accu[accessor];\n        // @ts-ignore\n        return accu[accessor];\n      }, accountContactToEditCopy);\n    });\n\n    setRunning();\n    addressBookFactory.updateExistingAddress(accountContactToEditCopy)\n      .then(() => {\n        setShowAddAddressModal(false);\n        setAccountContactToEdit(null);\n        finishRunning();\n      })\n      .catch(err => {\n        setShowAddAddressModal(false);\n        setAccountContactToEdit(null);\n        finishRunning(true, err);\n      });\n  }\n\n  function deleteAddress(ID: number): void {\n    setRunning();\n    const defaultBilling = addressBook?.find(\n      (contact: AccountContactModel) => contact.IsBilling\n    );\n    if (ID === defaultBilling.ID) {\n      setShowCannotDeleteDefaultBillingModal(true);\n      return;\n    }\n    addressBookFactory.deleteAddress(ID)\n      .then(() => {\n        setShowDeleteAddressConfirmationModalID(null);\n        finishRunning();\n      })\n      .catch(err => {\n        setShowDeleteAddressConfirmationModalID(null);\n        finishRunning(true, err);\n      });\n  }\n\n  const handleEditAddressClicked = (accountContact: AccountContactModel) => {\n    setShowAddAddressModal(true);\n    setAccountContactToEdit({ ...accountContact });\n  };\n\n  const handleDefaultAddressChanged = (accountContactID: number, isBilling: boolean) => {\n    if (isBilling) {\n      markAccountContactAsDefaultBilling(accountContactID);\n      return;\n    }\n    markAccountContactAsPrimaryShipping(accountContactID);\n  };\n\n  if (addressBook === null) {\n    return <LoadingWidget />;\n  }\n\n  return (\n    <Row>\n      <Modal\n        show={showCannotDeleteDefaultBillingModal}\n        onCancel={() => {\n          setShowCannotDeleteDefaultBillingModal(false);\n        }}\n        size=\"md\"\n        modalBodyClasses=\"p-0\">\n        <div className=\"p-3\">\n          {\"Default Billing addresses cannot be deleted. Please set a different default billing address first.\"}\n        </div>\n        <div className=\"modal-footer\">\n          <Button\n            variant=\"primary\"\n            onClick={() => {\n              setShowCannotDeleteDefaultBillingModal(false);\n            }}>\n            {t(\"ui.storefront.common.OK\")}\n          </Button>\n        </div>\n      </Modal>\n      <Col>\n        <section className=\"section-address mt-3\">\n          <div>\n            <div className=\"section-title mb-4\">\n              <DashboardTabHeading\n                title={t(\"ui.storefront.common.AddressBook\", \"Address Book\")}\n                iconString=\"far fa-address-book\"\n                id=\"udAddressBookTitleText\"\n              />\n            </div>\n            <Row>\n              <Col xs={12}>\n                <section className=\"section-addresses mb-5\">\n                  <Row>\n                    <Col\n                      xl=\"4\"\n                      className=\"mb-3\">\n                      <Card className=\"h-100\">\n                        <Card.Header id=\"AddAddressText\">\n                          {t(\"ui.storefront.checkout.splitShipping.addressModal.AddAddress\")}\n                        </Card.Header>\n                        <Card.Body className=\"p-2\">\n                          <Button\n                            variant=\"default\"\n                            className=\"p-3 h-100 w-100\"\n                            id=\"btnAddAddress\"\n                            name=\"btnAddAddress\"\n                            onClick={() => setShowAddAddressModal(true)}>\n                            <div className=\"my-5\">\n                              <i className=\"far fa-fw fa-circle-plus fa-2x text-primary\" />\n                              <br />\n                              <span className=\"text-primary\">\n                                {t(\"ui.storefront.userDashboard2.controls.addressBook2.AddAddress\")}\n                              </span>\n                            </div>\n                            <div className=\"small px-4\">\n                              <div>\n                                <span>{t(\"ui.storefront.common.Note\", \"Note\")}:</span>\n                              </div>\n                              <p>\n                                {t(\n                                  // eslint-disable-next-line max-len\n                                  \"ui.storefront.userDashboard2.controls.addressBook2.OnlyOneAddressShouldBeSetAs.Message\",\n                                  \"Only one address should be set as Is Billing and one set as Is Primary (Shipping).\"\n                                )}\n                              </p>\n                            </div>\n                          </Button>\n                          <NewAddressModal\n                            onConfirm={addressData => {\n                              if (accountContactToEdit) {\n                                editExistingAddress(addressData);\n                                return;\n                              }\n                              setRunning();\n                              addressBookFactory\n                                .createNewAddress(addressData)\n                                .then(() => {\n                                  setShowAddAddressModal(false);\n                                  finishRunning();\n                                })\n                                .catch(err => {\n                                  setShowAddAddressModal(false);\n                                  finishRunning(true, err);\n                                });\n                            }}\n                            onCancel={() => {\n                              setShowAddAddressModal(false);\n                              setAccountContactToEdit(null);\n                            }}\n                            show={showAddAddressModal}\n                            accountContact={accountContactToEdit}\n                            parentRunning={viewState.running}\n                            idSuffix={accountContactToEdit?.Slave?.ID.toString()}\n                          />\n                        </Card.Body>\n                      </Card>\n                    </Col>\n                    <AddressBookCard\n                      data-sid=\"udAddressBookDefaultShipping\"\n                      accountContacts={addressBook}\n                      type=\"Shipping\"\n                      hideFooter={true}\n                      showDropdown={true}\n                      handleDefaultAddressChanged={handleDefaultAddressChanged}\n                      markAccountContact={markAccountContactAsDefaultBilling}\n                      showDeleteAddressConfirmationModalID={showDeleteAddressConfirmationModalID}\n                      setShowDeleteAddressConfirmationModalID={setShowDeleteAddressConfirmationModalID}\n                      handleEditAddressClicked={handleEditAddressClicked}\n                      deleteAddress={deleteAddress}\n                    />\n                    <AddressBookCard\n                      data-sid=\"udAddressBookDefaultBilling\"\n                      accountContacts={addressBook}\n                      type=\"Billing\"\n                      hideFooter={true}\n                      showDropdown={true}\n                      handleDefaultAddressChanged={handleDefaultAddressChanged}\n                      markAccountContact={markAccountContactAsDefaultBilling}\n                      showDeleteAddressConfirmationModalID={showDeleteAddressConfirmationModalID}\n                      setShowDeleteAddressConfirmationModalID={setShowDeleteAddressConfirmationModalID}\n                      handleEditAddressClicked={handleEditAddressClicked}\n                      deleteAddress={deleteAddress}\n                    />\n                    {!hasDefaultBilling || !hasDefaultShipping\n                      ? (\n                        <Col xs={12}>\n                          <Alert variant=\"danger\">\n                            <i className=\"fal fa-fw fa-exclamation-triangle\" />\n                            &nbsp;\n                            {/* eslint-disable-next-line max-len */}\n                            {t(\"ui.storefront.custom.IfYouAreUsingTheSameAddressText\", \"If you are using the same address for shipping and billing, please create a separate address book entry. For example, shipping address would be titled 'Shipping Home' with address 123 Main St. and billing address would be titled 'Billing Home' with address 123 Main St.\")}\n                            &nbsp;\n                            <span className=\"d-block\">\n                              {/* eslint-disable-next-line max-len */}\n                              {t(\"ui.storefront.custom.PleaseContactCustomerSupportAt\", \"Please contact customer support at\")}\n                              &nbsp;\n                              <a href=\"mailto:support@mangorx.com\">\n                                <span>support@mangorx.com</span>\n                              </a>\n                              &nbsp;\n                              {t(\"ui.storefront.custom.IfYouHaveAnyQuestionst\", \"if you have any questions.\")}\n                            </span>\n                          </Alert>\n                        </Col>\n                      )\n                      : null}\n                    {addressBook && (\n                      <>\n                        <h2 className=\"h3 mt-2 mb-3\">\n                          {t(\"ui.storefront.userDashboard.addressBook.ManageAllAddresses\", \"Manage All Addresses\")}\n                        </h2>\n                        {addressBook.map((accountContact: AccountContactModel) => (\n                          <AddressBookCard\n                            key={accountContact.ID}\n                            accountContactID={accountContact.ID}\n                            accountContacts={addressBook}\n                            type=\"Other\"\n                            showDeleteAddressConfirmationModalID={showDeleteAddressConfirmationModalID}\n                            setShowDeleteAddressConfirmationModalID={setShowDeleteAddressConfirmationModalID}\n                            handleEditAddressClicked={handleEditAddressClicked}\n                            headerClassName=\"bg-transparent border-0 pb-0\"\n                            bodyClassName=\"pt-0 px-2\"\n                            deleteAddress={deleteAddress}\n                          />\n                        ))}\n                      </>\n                    )}\n                  </Row>\n                </section>\n              </Col>\n            </Row>\n            <ErrorView viewState={viewState} />\n          </div>\n        </section>\n      </Col>\n    </Row>\n  );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useRef } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Anchor, Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAuctionsEnded } from \"src/_shared/customHooks/useAuctionsEnded\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IAuctionsEndedProps {\n  isDashboardMain?: boolean;\n}\n\nexport const AuctionsEnded = (props: IAuctionsEndedProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSize = isDashboardMain ? 5 : 8;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const {\n    filterState,\n    useAuctionsEndedViewState\n  } = useAuctionsEnded(pageSize);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const tableRef = useRef(null);\n\n  useEffect(() => {\n    if (tableRef?.current?.onQueryChange) {\n      tableRef.current.onQueryChange();\n    }\n  }, [ filterState, tableRef ]);\n\n  function Categories(rowData: any): any {\n    return <div>\n      {rowData.Categories.map((c: any) => {\n        return <div key={c}>\n          <Anchor\n            key={c}\n            href={corsLink(cefConfig, `/${c.SeoUrl}`, \"catalog\")}\n            className=\"small text-secondary\">\n            {c.split(\"|\")[0]}\n          </Anchor>\n        </div>;\n      })}\n    </div>;\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-auctions-ended\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            {isDashboardMain ? (\n              <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"fal fa-fw fa-receipt me-2\" />\n                  <span>\n                    {t(\"ui.storefront.userDashboard.auctions.AuctionsEnded\")}\n                  </span>\n                </h4>\n                <p className=\"text-end\">\n                  <Link\n                    to={corsLink(cefConfig, \"/auctions-ended\", \"dashboard\")}\n                    className=\"btn btn-link\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">\n                      {t(\"ui.storefront.common.ViewAll\")}\n                    </span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n            ) : (\n              <h1 className=\"title\">\n                <i className=\"fal fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udAuctionsEndedTitleText\">\n                  {t(\"ui.storefront.userDashboard.auctions.AuctionsEnded\")}\n                </span>\n              </h1>\n            )}\n          </div>\n          <CVGrid\n            name=\"auctionsEnded\"\n            data={a => cvApi.auctions.GetSellerNoWinTableData(a)}\n            pageSizes={pageSizeOptions}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"AuctionName\"\n              binding=\"AuctionName\" />\n            <CVGrid.Column\n              title=\"SellerDisplayName\"\n              binding=\"SellerDisplayName\"\n              format=\"text\" />\n            <CVGrid.Column\n              title=\"Auction Description\"\n              binding=\"AuctionDescription\"\n              format=\"text\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Categories\">\n              {Categories}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Bid Price\"\n              binding=\"CurrentBidPrice\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Number Of Bids\"\n              tdClass=\"w-1\"\n              binding=\"CurrentNumberOfBids\" />\n          </CVGrid>\n        </section>\n      </Col>\n      {useAuctionsEndedViewState.hasError && (\n        <Col xs={12}>\n          <ErrorView viewState={useAuctionsEndedViewState} />\n        </Col>\n      )}\n    </Row>\n  );\n};\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\nimport { useLotFactory } from \"./useLotFactory\";\nimport { Paging } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IUseAuctionsEndedData {\n  auctionsEnded?: IDashboardTableData[];\n  totalAuctionsEndedCount: number;\n  fetchAuctionsEnded: (paging?: Paging) => Promise<void>;\n  filterState: {\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  };\n  alterFilterState: Dispatch<SetStateAction<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>>;\n  useAuctionsEndedViewState: IViewState;\n}\n\nexport const useAuctionsEnded = (initialSize?: number): IUseAuctionsEndedData => {\n  const initialState = {\n    size: initialSize ?? 8,\n    startIndex: 1\n  };\n\n  const [ auctionsEnded, setAuctionsEnded ] = useState<IDashboardTableData[] | undefined>();\n  const [ totalAuctionsEndedCount, setTotalAuctionsEndedCount ] = useState(0);\n  const [ { startIndex, size }, setFilterState ] = useState<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>(initialState);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const lotFactory = useLotFactory();\n\n  const fetchAuctionsEnded = useCallback(async (paging?: Paging) => {\n    setRunning();\n    try {\n      const res = await lotFactory.getEndedLots(paging);\n      setAuctionsEnded(res.Results);\n      if (res.TotalCount !== totalAuctionsEndedCount) {\n        setTotalAuctionsEndedCount(res.TotalCount);\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ lotFactory ]);\n\n  useEffect(() => {\n    if (lotFactory) {\n      fetchAuctionsEnded({\n        StartIndex: startIndex,\n        Size: size\n      });\n    }\n  }, [ lotFactory, startIndex, size ]);\n\n  return {\n    alterFilterState: setFilterState,\n    auctionsEnded,\n    fetchAuctionsEnded,\n    filterState: { size, startIndex },\n    totalAuctionsEndedCount,\n    useAuctionsEndedViewState: viewState\n  };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useRef } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Anchor, Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAuctionsLive } from \"src/_shared/customHooks/useAuctionsLive\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { LotModel } from \"src/_api/cvApi._DtoClasses\";\nimport { GetSellerAuctionsLiveTableDataDto } from \"src/_api\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\n\ninterface IAuctionsLiveProps {\n  isDashboardMain?: boolean;\n}\n\nexport const AuctionsLive = (props: IAuctionsLiveProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSize = isDashboardMain ? 5 : 8;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const {\n    filterState,\n    useAuctionsLiveViewState\n  } = useAuctionsLive(pageSize);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const tableRef = useRef(null);\n\n  useEffect(() => {\n    if (tableRef?.current?.onQueryChange) {\n      tableRef.current.onQueryChange();\n    }\n  }, [ filterState, tableRef ]);\n\n  function Categories(rowData: any): any {\n    return <div>\n      {rowData.Categories.map((c: any) => {\n        return <div key={c}>\n          <Anchor\n            key={c}\n            href={corsLink(cefConfig, `/${c.SeoUrl}`, \"catalog\")}\n            className=\"small text-secondary\">\n            {c.split(\"|\")[0]}\n          </Anchor>\n        </div>;\n      })}\n    </div>;\n  }\n\n  function ViewDetailsButton(item: IDashboardTableData): JSX.Element {\n    return <Link\n      className=\"btn btn-primary\"\n      to={corsLink(cefConfig, `/edit-lot/${item.AuctionID}`, \"dashboard\")}>\n      {t(\"ui.storefront.common.Edit\")}\n    </Link>;\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-auctions-won\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            {isDashboardMain ? (\n              <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"fal fa-fw fa-receipt me-2\" />\n                  <span>\n                    {t(\"ui.storefront.userDashboard.auctions.AuctionsLive\")}\n                  </span>\n                </h4>\n                <p className=\"text-end\">\n                  <Link\n                    to={corsLink(cefConfig, \"/auctions-won\", \"dashboard\")}\n                    className=\"btn btn-link\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">\n                      {t(\"ui.storefront.common.ViewAll\")}\n                    </span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n            ) : (\n              <h1 className=\"title\">\n                <i className=\"fal fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udAuctionsLiveTitleText\">\n                  {t(\"ui.storefront.userDashboard.auctions.AuctionsLive\")}\n                </span>\n              </h1>\n            )}\n          </div>\n          <CVGrid<LotModel, GetSellerAuctionsLiveTableDataDto>\n            name=\"auctionsLive\"\n            data={a => cvApi.auctions.GetSellerAuctionsLiveTableData(a)}\n            pageSizes={pageSizeOptions}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"AuctionName\"\n              binding=\"AuctionName\" />\n            <CVGrid.Column\n              title=\"SellerDisplayName\"\n              binding=\"SellerDisplayName\"\n              format=\"text\" />\n            <CVGrid.Column\n              title=\"Auction Description\"\n              binding=\"AuctionDescription\"\n              format=\"text\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Categories\">\n              {Categories}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Current Bid\"\n              binding=\"CurrentBidPrice\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Number Of Bids\"\n              tdClass=\"w-1\"\n              binding=\"CurrentNumberOfBids\" />\n            <CVGrid.Column\n              title=\"Edit\">\n              {ViewDetailsButton}\n            </CVGrid.Column>\n          </CVGrid>\n        </section>\n      </Col>\n      {useAuctionsLiveViewState.hasError && (\n        <Col xs={12}>\n          <ErrorView viewState={useAuctionsLiveViewState} />\n        </Col>\n      )}\n    </Row>\n  );\n};\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\nimport { useLotFactory } from \"src/_shared/customHooks/useLotFactory\";\nimport { Paging } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IUseAuctionsLiveData {\n  auctionsLive: IDashboardTableData[] | null;\n  totalAuctionsLiveCount: number;\n  fetchAuctionsLive: (paging?: Paging) => Promise<void>;\n  filterState: {\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  };\n  alterFilterState: Dispatch<SetStateAction<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>>;\n  useAuctionsLiveViewState: IViewState;\n}\n\nexport const useAuctionsLive = (initialSize?: number): IUseAuctionsLiveData => {\n  const initialState = {\n    size: initialSize,\n    startIndex: 1\n  };\n\n  const [ auctionsLive, setAuctionsLive ] = useState<IDashboardTableData[] | null>(null);\n  const [ totalAuctionsLiveCount, setTotalAuctionsLiveCount ] = useState(0);\n  const [ { startIndex, size }, setFilterState ] = useState<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>(initialState);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const lotFactory = useLotFactory();\n\n  const fetchAuctionsLive = useCallback(async (paging?: Paging) => {\n    setRunning();\n    try {\n      const res = await lotFactory.getSellingLotsForCurrentUser(paging);\n      setAuctionsLive(res.Results);\n      if (res.TotalCount !== totalAuctionsLiveCount) {\n        setTotalAuctionsLiveCount(res.TotalCount);\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ lotFactory ]);\n\n  useEffect(() => {\n    if (lotFactory) {\n      fetchAuctionsLive({\n        StartIndex: startIndex,\n        Size: size\n      });\n    }\n  }, [ lotFactory, startIndex, size ]);\n\n  return {\n    alterFilterState: setFilterState,\n    auctionsLive,\n    fetchAuctionsLive,\n    filterState: { size, startIndex },\n    totalAuctionsLiveCount,\n    useAuctionsLiveViewState: viewState\n  };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useRef } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Anchor, Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAuctionsLost } from \"src/_shared/customHooks/useAuctionsLost\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IAuctionsLostProps {\n  isDashboardMain?: boolean;\n}\n\nexport const AuctionsLost = (props: IAuctionsLostProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSize = isDashboardMain ? 5 : 8;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const {\n    filterState,\n    useAuctionsLostViewState\n  } = useAuctionsLost(pageSize);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const tableRef = useRef(null);\n\n  useEffect(() => {\n    if (tableRef?.current?.onQueryChange) {\n      tableRef.current.onQueryChange();\n    }\n  }, [ filterState, tableRef ]);\n\n  function Categories(rowData: any): any {\n    return <div>\n      {rowData.Categories.map((c: any) => {\n        return <div key={c}>\n          <Anchor\n            key={c}\n            href={corsLink(cefConfig, `/${c.SeoUrl}`, \"catalog\")}\n            className=\"small text-secondary\">\n            {c.split(\"|\")[0]}\n          </Anchor>\n        </div>;\n      })}\n    </div>;\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-auctions-lost\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            {isDashboardMain ? (\n              <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"fal fa-fw fa-receipt me-2\" />\n                  <span>\n                    {t(\"ui.storefront.userDashboard.auctions.AuctionsLost\")}\n                  </span>\n                </h4>\n                <p className=\"text-end\">\n                  <Link\n                    to={corsLink(cefConfig, \"/auctions-lost\", \"dashboard\")}\n                    className=\"btn btn-link\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">\n                      {t(\"ui.storefront.common.ViewAll\")}\n                    </span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n            ) : (\n              <h1 className=\"title\">\n                <i className=\"fal fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udAuctionsLostTitleText\">\n                  {t(\"ui.storefront.userDashboard.auctions.AuctionsLost\")}\n                </span>\n              </h1>\n            )}\n          </div>\n          <CVGrid\n            name=\"auctionsLost\"\n            data={a => cvApi.auctions.GetBuyerLostTableData(a)}\n            pageSizes={pageSizeOptions}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"AuctionName\"\n              binding=\"AuctionName\" />\n            <CVGrid.Column\n              title=\"SellerDisplayName\"\n              binding=\"SellerDisplayName\"\n              format=\"text\" />\n            <CVGrid.Column\n              title=\"Auction Description\"\n              binding=\"AuctionDescription\"\n              format=\"text\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Categories\">\n              {Categories}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Bid Price\"\n              binding=\"CurrentBidPrice\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Number Of Bids\"\n              tdClass=\"w-1\"\n              binding=\"CurrentNumberOfBids\" />\n          </CVGrid>\n        </section>\n      </Col>\n      {useAuctionsLostViewState.hasError && (\n        <Col xs={12}>\n          <ErrorView viewState={useAuctionsLostViewState} />\n        </Col>\n      )}\n    </Row>\n  );\n};\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { Paging } from \"src/_api/cvApi._DtoClasses\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\nimport { useLotFactory } from \"./useLotFactory\";\n\ninterface IUseAuctionsLostData {\n  auctionsLost?: IDashboardTableData[];\n  totalAuctionsLostCount: number;\n  fetchAuctionsLost: (paging?: Paging) => Promise<void>;\n  filterState: {\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  };\n  alterFilterState: Dispatch<SetStateAction<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>>;\n  useAuctionsLostViewState: IViewState;\n}\n\nexport const useAuctionsLost = (initialSize?: number): IUseAuctionsLostData => {\n  const initialState = {\n    size: initialSize,\n    startIndex: 1\n  };\n\n  const [ auctionsLost, setAuctionsLost ] = useState<IDashboardTableData[] | null>(null);\n  const [ totalAuctionsLostCount, setTotalAuctionsLostCount ] = useState(0);\n  const [ { startIndex, size }, setFilterState ] = useState<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>(initialState);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const lotFactory = useLotFactory();\n\n  const fetchAuctionsLost = useCallback(async (paging?: Paging) => {\n    setRunning();\n    try {\n      const res = await lotFactory.getLostLots(paging);\n      setAuctionsLost(res.Results);\n      if (res.TotalCount !== totalAuctionsLostCount) {\n        setTotalAuctionsLostCount(res.TotalCount);\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ lotFactory ]);\n\n  useEffect(() => {\n    if (lotFactory) {\n      fetchAuctionsLost({\n        StartIndex: startIndex,\n        Size: size\n      });\n    }\n  }, [ lotFactory, startIndex, size ]);\n\n  return {\n    alterFilterState: setFilterState,\n    auctionsLost,\n    fetchAuctionsLost,\n    filterState: { size, startIndex },\n    totalAuctionsLostCount,\n    useAuctionsLostViewState: viewState\n  };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useRef } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Anchor, Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAuctionsSold } from \"src/_shared/customHooks/useAuctionsSold\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IAuctionsSoldProps {\n  isDashboardMain?: boolean;\n}\n\nexport const AuctionsSold = (props: IAuctionsSoldProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSize = isDashboardMain ? 5 : 8;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const {\n    filterState,\n    useAuctionsSoldViewState\n  } = useAuctionsSold(pageSize);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const tableRef = useRef(null);\n\n  useEffect(() => {\n    if (tableRef?.current?.onQueryChange) {\n      tableRef.current.onQueryChange();\n    }\n  }, [ filterState, tableRef ]);\n\n  function Categories(rowData: any): any {\n    return <div>\n      {rowData.Categories.map((c: any) => {\n        return <div key={c}>\n          <Anchor\n            key={c}\n            href={corsLink(cefConfig, `/${c.SeoUrl}`, \"catalog\")}\n            className=\"small text-secondary\">\n            {c.split(\"|\")[0]}\n          </Anchor>\n        </div>;\n      })}\n    </div>;\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-auctions-sold\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            {isDashboardMain ? (\n              <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"fal fa-fw fa-receipt me-2\" />\n                  <span>\n                    {t(\"ui.storefront.userDashboard.auctions.AuctionsSold\")}\n                  </span>\n                </h4>\n                <p className=\"text-end\">\n                  <Link\n                    to={corsLink(cefConfig, \"/auctions-sold\", \"dashboard\")}\n                    className=\"btn btn-link\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">\n                      {t(\"ui.storefront.common.ViewAll\")}\n                    </span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n            ) : (\n              <h1 className=\"title\">\n                <i className=\"fal fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udAuctionsSoldTitleText\">\n                  {t(\"ui.storefront.userDashboard.auctions.AuctionsSold\")}\n                </span>\n              </h1>\n            )}\n          </div>\n          <CVGrid\n            name=\"auctionsSold\"\n            data={a => cvApi.auctions.GetSellerAuctionsSoldTableData(a)}\n            pageSizes={pageSizeOptions}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"AuctionName\"\n              binding=\"AuctionName\" />\n            <CVGrid.Column\n              title=\"SellerDisplayName\"\n              binding=\"SellerDisplayName\"\n              format=\"text\" />\n            <CVGrid.Column\n              title=\"Auction Description\"\n              binding=\"AuctionDescription\"\n              format=\"text\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Categories\">\n              {Categories}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Bid Price\"\n              binding=\"CurrentBidPrice\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Number Of Bids\"\n              tdClass=\"w-1\"\n              binding=\"CurrentNumberOfBids\" />\n          </CVGrid>\n        </section>\n      </Col>\n      {useAuctionsSoldViewState.hasError && (\n        <Col xs={12}>\n          <ErrorView viewState={useAuctionsSoldViewState} />\n        </Col>\n      )}\n    </Row>\n  );\n};\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\nimport { useLotFactory } from \"./useLotFactory\";\nimport { Paging } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IUseAuctionsSoldData {\n  auctionsSold?: IDashboardTableData[];\n  totalAuctionsSoldCount: number;\n  fetchAuctionsSold: (paging?: Paging) => Promise<void>;\n  filterState: {\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  };\n  alterFilterState: Dispatch<SetStateAction<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>>;\n  useAuctionsSoldViewState: IViewState;\n}\n\nexport const useAuctionsSold = (initialSize?: number): IUseAuctionsSoldData => {\n  const initialState = {\n    size: initialSize ?? 8,\n    startIndex: 1\n  };\n\n  const [ auctionsSold, setAuctionsSold ] = useState<IDashboardTableData[] | undefined>();\n  const [ totalAuctionsSoldCount, setTotalAuctionsSoldCount ] = useState(0);\n  const [ { startIndex, size }, setFilterState ] = useState<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>(initialState);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const lotFactory = useLotFactory();\n\n  const fetchAuctionsSold = useCallback(async (paging?: Paging) => {\n    setRunning();\n    try {\n      const res = await lotFactory.getSoldLots(paging);\n      setAuctionsSold(res.Results);\n      if (res.TotalCount !== totalAuctionsSoldCount) {\n        setTotalAuctionsSoldCount(res.TotalCount);\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ lotFactory ]);\n\n  useEffect(() => {\n    if (lotFactory) {\n      fetchAuctionsSold({\n        StartIndex: startIndex,\n        Size: size\n      });\n    }\n  }, [ lotFactory, startIndex, size ]);\n\n  return {\n    alterFilterState: setFilterState,\n    auctionsSold,\n    fetchAuctionsSold,\n    filterState: { size, startIndex },\n    totalAuctionsSoldCount,\n    useAuctionsSoldViewState: viewState\n  };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useRef } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Anchor, Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAuctionsWon } from \"src/_shared/customHooks/useAuctionsWon\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface IAuctionsWonProps {\n  isDashboardMain?: boolean;\n}\n\nexport const AuctionsWon = (props: IAuctionsWonProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSize = isDashboardMain ? 5 : 8;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const {\n    filterState,\n    useAuctionsWonViewState\n  } = useAuctionsWon(pageSize);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const tableRef = useRef(null);\n\n  useEffect(() => {\n    if (tableRef?.current?.onQueryChange) {\n      tableRef.current.onQueryChange();\n    }\n  }, [ filterState, tableRef ]);\n\n  function Categories(rowData: any): any {\n    return <div>\n      {rowData.Categories.map((c: any) => {\n        return <div key={c}>\n          <Anchor\n            key={c}\n            href={corsLink(cefConfig, `/${c.SeoUrl}`, \"catalog\")}\n            className=\"small text-secondary\">\n            {c.split(\"|\")[0]}\n          </Anchor>\n        </div>;\n      })}\n    </div>;\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-auctions-won\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            {isDashboardMain ? (\n              <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"fal fa-fw fa-receipt me-2\" />\n                  <span>\n                    {t(\"ui.storefront.userDashboard.auctions.AuctionsWon\")}\n                  </span>\n                </h4>\n                <p className=\"text-end\">\n                  <Link\n                    to={corsLink(cefConfig, \"/auctions-won\", \"dashboard\")}\n                    className=\"btn btn-link\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">\n                      {t(\"ui.storefront.common.ViewAll\")}\n                    </span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n            ) : (\n              <h1 className=\"title\">\n                <i className=\"fal fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udAuctionsWonTitleText\">\n                  {t(\"ui.storefront.userDashboard.auctions.AuctionsWon\")}\n                </span>\n              </h1>\n            )}\n          </div>\n          <CVGrid\n            name=\"auctionsWon\"\n            data={a => cvApi.auctions.GetBuyerWonTableData(a)}\n            pageSizes={pageSizeOptions}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"AuctionName\"\n              binding=\"AuctionName\" />\n            <CVGrid.Column\n              title=\"SellerDisplayName\"\n              binding=\"SellerDisplayName\"\n              format=\"text\" />\n            <CVGrid.Column\n              title=\"Auction Description\"\n              binding=\"AuctionDescription\"\n              format=\"text\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Categories\">\n              {Categories}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Bid Price\"\n              binding=\"CurrentBidPrice\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Number Of Bids\"\n              tdClass=\"w-1\"\n              binding=\"CurrentNumberOfBids\" />\n          </CVGrid>\n        </section>\n      </Col>\n      {useAuctionsWonViewState.hasError && (\n        <Col xs={12}>\n          <ErrorView viewState={useAuctionsWonViewState} />\n        </Col>\n      )}\n    </Row>\n  );\n};\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\nimport { useLotFactory } from \"./useLotFactory\";\nimport { Paging } from \"src/_api/cvApi._DtoClasses\";\n\ninterface IUseAuctionsWonData {\n  auctionsWon?: IDashboardTableData[];\n  totalAuctionsWonCount: number;\n  fetchAuctionsWon: (paging?: Paging) => Promise<void>;\n  filterState: {\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  };\n  alterFilterState: Dispatch<SetStateAction<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>>;\n  useAuctionsWonViewState: IViewState;\n}\n\nexport const useAuctionsWon = (initialSize?: number): IUseAuctionsWonData => {\n  const initialState = {\n    size: initialSize,\n    startIndex: 1\n  };\n\n  const [ auctionsWon, setAuctionsWon ] = useState<IDashboardTableData[] | null>(null);\n  const [ totalAuctionsWonCount, setTotalAuctionsWonCount ] = useState(0);\n  const [ { startIndex, size }, setFilterState ] = useState<{\n    [filterProperty: string]: unknown;\n    size: number;\n    startIndex: number;\n  }>(initialState);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const lotFactory = useLotFactory();\n\n  const fetchAuctionsWon = useCallback(async (paging?: Paging) => {\n    setRunning();\n    try {\n      const res = await lotFactory.getWonLots(paging);\n      setAuctionsWon(res.Results);\n      if (res.TotalCount !== totalAuctionsWonCount) {\n        setTotalAuctionsWonCount(res.TotalCount);\n      }\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ lotFactory ]);\n\n  useEffect(() => {\n    if (lotFactory) {\n      fetchAuctionsWon({\n        StartIndex: startIndex,\n        Size: size\n      });\n    }\n  }, [ lotFactory, startIndex, size ]);\n\n  return {\n    alterFilterState: setFilterState,\n    auctionsWon,\n    fetchAuctionsWon,\n    filterState: { size, startIndex },\n    totalAuctionsWonCount,\n    useAuctionsWonViewState: viewState\n  };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useRef } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Anchor, Col, Row } from \"react-bootstrap\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { useTranslation } from \"react-i18next\";\nimport { useCurrentBids } from \"src/_shared/customHooks/useCurrentBids\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface ICurrentBidsProps {\n  isDashboardMain?: boolean;\n}\n\nexport const CurrentBids = (props: ICurrentBidsProps): JSX.Element => {\n  const { isDashboardMain } = props;\n  const pageSize = isDashboardMain ? 5 : 8;\n  const pageSizeOptions = isDashboardMain ? [ 5, 10, 15 ] : [ 8, 16, 24 ];\n\n  const {\n    filterState,\n    useCurrentBidsViewState\n  } = useCurrentBids(pageSize);\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const tableRef = useRef(null);\n\n  useEffect(() => {\n    if (tableRef?.current?.onQueryChange) {\n      tableRef.current.onQueryChange();\n    }\n  }, [ filterState, tableRef ]);\n\n  function Categories(rowData: any): any {\n    return <div>\n      {rowData.Categories.map((c: any) => {\n        return <div key={c}>\n          <Anchor\n            key={c}\n            href={corsLink(cefConfig, `/${c.SeoUrl}`, \"catalog\")}\n            className=\"small text-secondary\">\n            {c.split(\"|\")[0]}\n          </Anchor>\n        </div>;\n      })}\n    </div>;\n  }\n\n  return (\n    <Row>\n      <Col>\n        <section className=\"section-current-bids\">\n          <div className=\"section-title d-flex align-items-center justify-content-between\">\n            {isDashboardMain ? (\n              <Fragment>\n                <h4 className=\"title\">\n                  <i className=\"fal fa-fw fa-receipt me-2\" />\n                  <span>\n                    {t(\"ui.storefront.common.CurrentBids\")}\n                  </span>\n                </h4>\n                <p className=\"text-end\">\n                  <Link\n                    to={corsLink(cefConfig, \"/current-bids\", \"dashboard\")}\n                    className=\"btn btn-link\"\n                    id=\"userDashboard_salesOrder_viewAll\">\n                    <span className=\"me-1\">\n                      {t(\"ui.storefront.common.ViewAll\")}\n                    </span>\n                    <i className=\"fal fa-fw fa-angle-double-right\" />\n                  </Link>\n                </p>\n              </Fragment>\n            ) : (\n              <h1 className=\"title\">\n                <i className=\"fal fa-fw fa-receipt me-2\" />\n                <span data-sid=\"udCurrentBidsTitleText\">\n                  {t(\"ui.storefront.common.CurrentBids\")}\n                </span>\n              </h1>\n            )}\n          </div>\n          <CVGrid\n            name=\"currentBids\"\n            data={b => cvApi.auctions.GetCurrentBuyerBidsAndLotInfo(b)}\n            pageSizes={pageSizeOptions}\n            initialFilters={{\n              Sorts: [\n                {\n                  field: \"CreatedDate\",\n                  dir: \"desc\"\n                }\n              ]\n            }}>\n            <CVGrid.Column\n              title=\"AuctionName\"\n              binding=\"AuctionName\"\n            />\n            <CVGrid.Column\n              title=\"SellerDisplayName\"\n              binding=\"SellerDisplayName\"\n              format=\"text\" />\n            <CVGrid.Column\n              title=\"Auction Description\"\n              binding=\"AuctionDescription\"\n              format=\"text\"\n              fallback=\"N/A\" />\n            <CVGrid.Column\n              title=\"Categories\">\n              {Categories}\n            </CVGrid.Column>\n            <CVGrid.Column\n              title=\"Bid Price\"\n              binding=\"CurrentBidPrice\"\n              format=\"currency\"\n              thClass=\"text-end\"\n              tdClass=\"text-end\" />\n            <CVGrid.Column\n              title=\"Number Of Bids\"\n              tdClass=\"w-1\"\n              binding=\"CurrentNumberOfBids\" />\n          </CVGrid>\n        </section>\n      </Col>\n      {useCurrentBidsViewState.hasError && (\n        <Col xs={12}>\n          <ErrorView viewState={useCurrentBidsViewState} />\n        </Col>\n      )}\n    </Row>\n  );\n};\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from \"react\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useBiddingFactory } from \"src/_shared/customHooks/useBiddingFactory\";\nimport { GetBidsDto } from \"src/_api\";\nimport { IDashboardTableData } from \"src/_shared/interfaces/IDashboardTableData\";\n\ninterface IUseCurrentBidsData {\n  currentBids?: IDashboardTableData[];\n  totalCurrentBidsCount: number;\n  fetchCurrentBids: (dto?: GetBidsDto) => Promise<void>;\n  filterState: {\n    [filterProperty: string]: unknown;\n    order: number;\n    size: number;\n    sortDirection: string;\n    sortField: string;\n    startIndex: number;\n  };\n  alterFilterState: Dispatch<SetStateAction<{\n    [filterProperty: string]: unknown;\n    order: number;\n    size: number;\n    sortDirection: string;\n    sortField: string;\n    startIndex: number;\n  }>>;\n  useCurrentBidsViewState: IViewState;\n}\n\nexport const useCurrentBids = (initialSize?: number): IUseCurrentBidsData => {\n  const initialState = {\n    order: 1,\n    size: initialSize,\n    sortDirection: \"desc\",\n    sortField: \"CreatedDate\",\n    startIndex: 1\n  };\n\n  const [ currentBids, setCurrentBids ] = useState<IDashboardTableData[] | null>(null);\n  const [ totalCurrentBidsCount, setTotalCurrentBidsCount ] = useState(0);\n  const [ { startIndex, size, sortDirection, sortField, order }, setFilterState ] = useState<{\n    [filterProperty: string]: unknown;\n    order: number;\n    size: number;\n    sortDirection: string;\n    sortField: string;\n    startIndex: number;\n  }>(initialState);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const biddingFactory = useBiddingFactory();\n\n  const fetchCurrentBids = useCallback(async (dto: GetBidsDto) => {\n    setRunning();\n    try {\n      const res = await biddingFactory.getBidsForCurrentUser(dto);\n      setCurrentBids(res.Results);\n      setTotalCurrentBidsCount(res.TotalCount);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ biddingFactory ]);\n\n  useEffect(() => {\n    if (biddingFactory) {\n      fetchCurrentBids({\n        Paging: {\n          StartIndex: startIndex,\n          Size: size\n        },\n        Sorts: [\n          {\n            dir: sortDirection,\n            field: sortField,\n            order\n          }\n        ],\n      });\n    }\n  }, [ biddingFactory, startIndex, size, sortDirection, sortField, order ]);\n\n  return {\n    alterFilterState: setFilterState,\n    currentBids,\n    fetchCurrentBids,\n    filterState: { order, size, sortDirection, sortField, startIndex },\n    totalCurrentBidsCount,\n    useCurrentBidsViewState: viewState\n  };\n};\n","import { useEffect, useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport _ from \"lodash\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RemoveFromCartModal } from \"src/Cart/modals\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\n\nexport const Favorites = (): JSX.Element => {\n  const [\n    favoritesListSalesItems,\n    setFavoritesListSalesItems\n  ] = useState<SalesItemBaseModel<AppliedCartItemDiscountModel>[]>([]);\n  const favoritesListCart = useCart(ServiceStrings.carts.types.favorites);\n\n  const [ favoritesListProducts, setFavoritesListProducts ] = useState<{ [id: string]: ProductModel }>(null);\n  const [ removeFromFLConfirmationModalInfo, setRemoveFromFLConfirmationModalInfo ] = useState<{\n    show: boolean;\n    product: ProductModel;\n  }>({\n    show: false,\n    product: null\n  });\n\n  const { t } = useTranslation();\n  const productFactory = useProductFactory();\n  const cartFactory = useCartFactory();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  useEffect(() => {\n    if (!favoritesListCart || !productFactory) {\n      return;\n    }\n    getFavoritesList();\n  }, [ favoritesListCart, productFactory ]);\n\n  async function getFavoritesList() {\n    if (!productFactory) {\n      return;\n    }\n    setRunning(\"Fetching favorites list...\");\n    try {\n      if (!favoritesListCart?.SalesItems?.length) {\n        setFavoritesListSalesItems([]);\n        setFavoritesListProducts(null);\n        finishRunning();\n        return;\n      }\n      const flSalesItems = favoritesListCart.SalesItems;\n      setFavoritesListSalesItems(flSalesItems);\n\n      const products = await productFactory.getProductsByIDs(flSalesItems.map(item => item.ProductID));\n\n      const productsMap: { [id: string]: ProductModel } = {};\n      products.forEach(product => {\n        productsMap[product.ID.toString()] = product;\n      });\n      setFavoritesListProducts(productsMap);\n      finishRunning();\n    } catch (err: any) {\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch favorites list\" ]);\n    }\n  }\n\n  function clearFavoritesList(): void {\n    setRunning();\n    cvApi.shopping\n      .ClearCurrentStaticCart({ TypeName: ServiceStrings.carts.types.favorites })\n      .then(_res => {\n        setFavoritesListSalesItems([]);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to clear favorites list\");\n      });\n  }\n\n  function deleteFavoritesListItem(cartItemID: number, callback?: () => void): void {\n    setRunning();\n    cartFactory\n      .removeItemFromCart(ServiceStrings.carts.types.favorites, cartItemID)\n      .then(() => {\n        getFavoritesList();\n        finishRunning();\n        if (_.isFunction(callback)) {\n          callback();\n        }\n      })\n      .catch(err => {\n        finishRunning(\n          true,\n          err.message || \"Failed to delete favorites list item\"\n        );\n      });\n  }\n\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void => {\n    setRunning();\n    cartFactory\n      .updateItemQuantity(ServiceStrings.carts.types.favorites, cartItemID, quantity)\n      .then(() => {\n        finishRunning();\n        getFavoritesList();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  return (\n    <Row className=\"position-relative\">\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <RemoveFromCartModal\n        show={removeFromFLConfirmationModalInfo?.show}\n        productName={removeFromFLConfirmationModalInfo?.product?.Name}\n        onCancel={() => setRemoveFromFLConfirmationModalInfo({ show: false, product: null })}\n        onConfirm={() => {\n          deleteFavoritesListItem(removeFromFLConfirmationModalInfo.product.ID, () => {\n            setRemoveFromFLConfirmationModalInfo({\n              show: false,\n              product: null\n            });\n          });\n        }}\n        parentRunning={viewState.running}\n        cartTypeText={t(\"ui.storefront.common.FavoritesList\")}\n        cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}\n      />\n      <Col xs={12}>\n        <h1>\n          <i className=\"fal fa-fw fa-star me-2\" />\n          <span>{t(\"ui.storefront.common.FavoritesList\")}</span>\n        </h1>\n      </Col>\n      <Col xs={12}>\n        <Row>\n          <Col xs={12} className=\"d-flex justify-content-end\">\n            <Button\n              variant=\"secondary\"\n              className=\"mb-3\"\n              id=\"btnClearFavoritesList\"\n              name=\"btnClearFavoritesList\"\n              title={t(\"ui.storefront.userDashboard2.controls.favorites.ClearFavorites\")}\n              aria-label={t(\"ui.storefront.userDashboard2.controls.favorites.ClearFavorites\")}\n              disabled={!favoritesListSalesItems.length}\n              onClick={clearFavoritesList}>\n              {t(\n                \"ui.storefront.userDashboard2.controls.favorites.ClearFavorites\"\n              )}\n            </Button>\n          </Col>\n          <Col xs={12}>\n            {favoritesListSalesItems.length\n              ? <CartTableWideScreen\n                includeAddToCart={true}\n                cartProducts={favoritesListProducts}\n                cartHasItems={favoritesListSalesItems?.length > 0}\n                cartToUse={favoritesListCart}\n                orderDiscounts={null}\n                shippingDiscounts={null}\n                onChangeSalesItemQuantity={onChangeSalesItemQuantity}\n                onRemoveItemFromCartClicked={\n                  (productName: string, salesItemId: number) => deleteFavoritesListItem(salesItemId)}\n                queuedIDs={[]}\n                parentRunning={viewState.running}\n                excludeBackorderInfo={true}\n              />\n              : <span className=\"h4\" id=\"FavoritesListNoItemsText\">\n                {t(\n                  \"ui.storefront.userDashboard2.controls.favorites.NoItemsHaveBeenAddedToTheFavorites\"\n                )}\n              </span>\n            }\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\n\nexport const InStockAlerts = (): JSX.Element => {\n  const [ inStockAlertSalesItems, setInStockAlertSalesItems ] = useState<\n    SalesItemBaseModel<AppliedCartItemDiscountModel>[]\n  >([]);\n  const [ inStockAlertProducts, setInStockAlertProducts ] = useState<{ [id: string]: ProductModel }>(null);\n  const inStockAlertCart = useCart(ServiceStrings.carts.types.notifyMe);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const productFactory = useProductFactory();\n\n  useEffect(() => {\n    if (!inStockAlertCart || !productFactory) {\n      return;\n    }\n    getInStockAlerts();\n  }, [ inStockAlertCart, productFactory ]);\n\n  async function getInStockAlerts() {\n    if (!productFactory) {\n      return;\n    }\n    setRunning(\"Fetching notify me list...\");\n    try {\n      if (!inStockAlertCart?.SalesItems?.length) {\n        setInStockAlertSalesItems([]);\n        setInStockAlertProducts(null);\n        finishRunning();\n        return;\n      }\n      const flSalesItems = inStockAlertCart.SalesItems;\n      setInStockAlertSalesItems(flSalesItems);\n\n      const products = await productFactory.getProductsByIDs(flSalesItems.map(item => item.ProductID));\n\n      const productsMap: { [id: string]: ProductModel } = {};\n      products.forEach(product => {\n        productsMap[product.ID.toString()] = product;\n      });\n      setInStockAlertProducts(productsMap);\n      finishRunning();\n    } catch (err: any) {\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch notify me when in stock list\" ]);\n    }\n  }\n\n  function clearInStockAlerts(): void {\n    setRunning();\n    cvApi.shopping\n      .ClearCurrentStaticCart({ TypeName: ServiceStrings.carts.types.notifyMe })\n      .then(_res => {\n        finishRunning();\n        setInStockAlertSalesItems([]);\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to clear in stock alerts\");\n      });\n  }\n\n  function deleteInStockAlertItem(salesItemId: number, callback?: () => void): void {\n    setRunning();\n    cvApi.shopping\n      .RemoveCartItemByID(salesItemId)\n      .then(res => {\n        if (res.data) {\n          getInStockAlerts();\n          finishRunning();\n        }\n        if (callback) {\n          callback();\n        }\n      })\n      .catch(err => {\n        finishRunning(\n          true,\n          err.message || \"failed to delete in stock alert item\"\n        );\n      });\n  }\n\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void => {\n    setRunning();\n    cvApi.shopping\n      .UpdateCartItemQuantity({\n        CartItemID: cartItemID,\n        Quantity: quantity,\n        QuantityBackOrdered: 0,\n        QuantityPreSold: 0\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          finishRunning(true, null, res.data.Messages);\n          return;\n        }\n        getInStockAlerts();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  return (\n    <Row className=\"position-relative\">\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <Col xs={12}>\n        <h1>\n          <i className=\"fal fa-fw fa-bell me-2\" />\n          <span>\n            {t(\"ui.storefront.userDashboard2.userDashboard.InStockAlerts\")}\n          </span>\n        </h1>\n      </Col>\n      <Col xs={12}>\n        <Row>\n          <Col xs={12} className=\"d-flex justify-content-end\">\n            <Button\n              variant=\"secondary\"\n              className=\"mb-3\"\n              id=\"btnClearInStockAlert\"\n              name=\"btnClearInStockAlert\"\n              title=\"Clear Notify Me List\"\n              aria-label=\"Clear Notify Me List\"\n              disabled={!inStockAlertSalesItems.length}\n              onClick={clearInStockAlerts}>\n              {t(\n                \"ui.storefront.userDashboard2.controls.notifyMeList.ClearNotifyMeList\"\n              )}\n            </Button>\n          </Col>\n          <Col xs={12}>\n            {inStockAlertSalesItems.length\n              ? <CartTableWideScreen\n                includeAddToCart={true}\n                cartProducts={inStockAlertProducts}\n                cartHasItems={inStockAlertSalesItems?.length > 0}\n                cartToUse={inStockAlertCart}\n                orderDiscounts={null}\n                shippingDiscounts={null}\n                onChangeSalesItemQuantity={onChangeSalesItemQuantity}\n                onRemoveItemFromCartClicked={\n                  (productName: string, salesItemId: number) => deleteInStockAlertItem(salesItemId)}\n                queuedIDs={[]}\n                parentRunning={viewState.running}\n                excludeBackorderInfo={true}\n              />\n              : <span className=\"h4\" id=\"InStockAlertNoItemsText\">\n                {t(\n                  \"ui.storefront.userDashboard2.controls.notifyMeList.NoItemsHaveBeenAddedToTheNotifyMeWhenInStockList\"\n                )}\n              </span>\n            }\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { useMemo } from \"react\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useRouteMatch } from \"react-router-dom\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nimport { usePatient } from \"../../_shared/customHooks/usePatient\";\nimport { ClaimedOrderContext } from \"./ClaimedOrderContext\";\nimport ClaimedOrderPatientDetails from \"./ClaimedOrderPatientDetails\";\nimport ClaimedOrderOrderDetails from \"./ClaimedOrderOrderDetails\";\nimport ClaimedOrderTabs from \"./ClaimedOrderTabs\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useSalesOrder } from \"../../_shared/customHooks/useSalesOrder\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { ClaimedOrderDoseSpot } from \"./ClaimedOrderDoseSpot\";\n\ninterface IClaimedOrderParams {\n  id: string;\n  userId: string;\n}\n\nexport const ClaimedOrderDetail = (): JSX.Element => {\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n  const { params } = useRouteMatch<IClaimedOrderParams>(corsLink(\n    cefConfig,\n    \"/claimed-orders/:id-:userId\",\n    \"dashboard\"\n  ));\n  const { patient, reloadPatient, usePatientViewState } = usePatient(Number(params.userId));\n  const { reloadSalesOrder, salesOrder, useSalesOrderViewState } = useSalesOrder(Number(params.id));\n\n  const claimedOrdersHref = useMemo(() => {\n    return cefConfig?.dashboard?.find(x => x.name === \"ClaimedOrders\")?.href ?? \"/\";\n  }, [ cefConfig ]);\n\n  return <AuthGuard requiresRole=\"Doctor\">\n    <ClaimedOrderContext.Provider value={{\n      patient,\n      reloadOrder: reloadSalesOrder,\n      reloadPatient,\n      salesOrder\n    }}>\n      {(usePatientViewState.running || useSalesOrderViewState.running) && <LoadingWidget overlay={true} />}\n      <Row className=\"mb-2 mt-3 row small\">\n        <Col xs={12}>\n          <Link className=\"d-flex align-items-center\" to={claimedOrdersHref}>\n            <i className=\"far fa-fw fa-chevron-double-left small me-2\" />\n            <span>\n              {t(\"ui.storefront.userDashboard.claimedOrders.BackToAll\", \"Back to All Claimed Orders\")}\n            </span>\n          </Link>\n        </Col>\n      </Row>\n      <Row>\n        <Col xs={12}>\n          {usePatientViewState.hasError && <ErrorView viewState={usePatientViewState} />}\n          {useSalesOrderViewState.hasError && <ErrorView viewState={useSalesOrderViewState} />}\n        </Col>\n      </Row>\n      <Row className=\"mb-4\">\n        <Col xs={12}>\n          <div className=\"d-flex align-items-center\">\n            <i className=\"far fa-fw fa-hospital-user fa-2x me-2\" />\n            <span className=\"h1 mb-0\">\n              {`${patient?.Contact?.FirstName} ${patient?.Contact?.LastName}`}\n            </span>\n          </div>\n        </Col>\n      </Row>\n      <Row className=\"mb-6\">\n        <Col xs={12}>\n          <ClaimedOrderPatientDetails />\n        </Col>\n      </Row>\n      <ClaimedOrderOrderDetails />\n      {cefConfig.featureSet.doseSpot?.enabled\n        && patient\n        && <ClaimedOrderDoseSpot patient={patient} />}\n      <ClaimedOrderTabs />\n    </ClaimedOrderContext.Provider>\n  </AuthGuard>;\n};\n","import { useSalesOrderFactory } from \"src/_shared/customHooks/useSalesOrderFactory\";\nimport { useEffect, useState } from \"react\";\nimport { SalesOrderModel } from \"src/_api/cvApi._DtoClasses\";\nimport { IViewState } from \"src/_shared/customHooks/_customHooksTypes\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\n\ninterface IUseSalesOrderData {\n  reloadSalesOrder?: () => void;\n  salesOrder?: SalesOrderModel;\n  useSalesOrderViewState: IViewState;\n}\n\nexport const useSalesOrder = (salesOrderID: number): IUseSalesOrderData => {\n  const [ salesOrder, setSalesOrder ] = useState<SalesOrderModel>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const salesOrderFactory = useSalesOrderFactory();\n\n  const fetchSalesOrder = async (force?: boolean) => {\n    setRunning();\n    try {\n      const res = await salesOrderFactory.getSalesOrder(salesOrderID, force);\n      setSalesOrder(res);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  };\n\n  useEffect(() => {\n    if (!salesOrderFactory || salesOrder) {\n      return;\n    }\n    fetchSalesOrder();\n  }, [ salesOrderFactory ]);\n\n  return {\n    reloadSalesOrder: () => {\n      fetchSalesOrder(true);\n    },\n    salesOrder,\n    useSalesOrderViewState: viewState\n  };\n};\n","/* eslint-disable max-len */\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Col, Row } from \"react-bootstrap\";\nimport { faFileDownload, faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport { faFile } from \"@fortawesome/free-regular-svg-icons\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { PrivacyDataActionCard } from \"src/Dashboard/Privacy/PrivacyDataActionCard\";\n\nexport const Privacy = (): JSX.Element => {\n  const { t } = useTranslation();\n  // TODO: setRunning and finishRunning somewhere in this component, or remove this\n  const { viewState } = useViewState();\n\n  const privacyDownloadKey = \"txtPrivacyDownloadKey\";\n  const privacyDownloadHeaderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Download.headerKey\";\n  const privacyDownloadBodyKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Download.bodyKey\";\n  const privacyDownloadPlaceholderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Download.placeholderKey\";\n\n  const privacyDeleteKey = \"txtPrivacyDeleteKey\";\n  const privacyDeleteHeaderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Delete.headerKey\";\n  const privacyDeleteBodyKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Delete.bodyKey\";\n  const privacyDeletePlaceholderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Delete.placeholderKey\";\n\n  const privacyRestrictKey = \"txtPrivacyRestrictKey\";\n  const privacyRestrictHeaderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Restrict.headerKey\";\n  const privacyRestrictBodyKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Restrict.bodyKey\";\n  const privacyRestrictPlaceholderKey = \"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Restrict.placeholderKey\";\n\n  return (\n    <Row className=\"position-relative\">\n      <Col xs=\"12\">\n        <h1>{t(\"ui.storefront.userDashboard2.userDashboard.PrivacySettings\")}</h1>\n      </Col>\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <hr />\n      <Col xs=\"12\" className=\"mb-5\">\n        <p>{t(\"ui.storefront.userDashboard2.userDashboard.PrivacySettings.Privacy.Text\")}</p>\n        <Row>\n          <Col xs=\"12\"\n            lg=\"4\"\n            className=\"mb-5\">\n            <PrivacyDataActionCard\n              formKey={privacyDownloadKey}\n              headerKey={privacyDownloadHeaderKey}\n              headerIcon={faFileDownload}\n              bodyKey={privacyDownloadBodyKey}\n              placeholderKey={privacyDownloadPlaceholderKey}\n              request={cvApi.contacts.RequestPrivacyData}\n            />\n          </Col>\n          <Col xs=\"12\"\n            lg=\"4\"\n            className=\"mb-5\">\n            <PrivacyDataActionCard\n              formKey={privacyRestrictKey}\n              headerKey={privacyRestrictHeaderKey}\n              headerIcon={faFile}\n              bodyKey={privacyRestrictBodyKey}\n              placeholderKey={privacyRestrictPlaceholderKey}\n              request={cvApi.contacts.RestrictPrivacyData}\n            />\n          </Col>\n          <Col xs=\"12\"\n            lg=\"4\"\n            className=\"mb-5\">\n            <PrivacyDataActionCard\n              formKey={privacyDeleteKey}\n              headerKey={privacyDeleteHeaderKey}\n              headerIcon={faTrash}\n              bodyKey={privacyDeleteBodyKey}\n              placeholderKey={privacyDeletePlaceholderKey}\n              request={cvApi.contacts.RemovePrivacyData}\n            />\n          </Col>\n        </Row>\n      </Col>\n      <Col xs=\"12\">\n        {viewState.hasError && <Alert key=\"danger\" variant=\"danger\">\n          <p>{viewState.errorMessage}</p>\n          <p>{viewState.errorMessages}</p>\n        </Alert>}\n      </Col>\n    </Row>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Link, Route, Switch, useLocation } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { DateTime } from \"luxon\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { CreateShoppingListModal } from \"src/Dashboard/ShoppingList/CreateShoppingListModal\";\nimport { CartModel, CartTypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { ShoppingListsDetail } from \"src/Dashboard/ShoppingList/ShoppingListsDetail\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport promiser from \"src/_shared/Promiser\";\nimport { CVGrid } from \"src/_shared/CVGrid/CVGrid\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport const ShoppingLists = (): JSX.Element => {\n  const [ showCreateListModal, setShowCreateListModal ]\n    = useState<boolean>(false);\n  const [ shoppingLists, setShoppingLists ] = useState<CartTypeModel[]>([]);\n\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const location = useLocation();\n\n  useEffect(() => {\n    getShoppingLists();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [ location ]);\n\n  function getShoppingLists(): void {\n    setRunning();\n    cvApi.shopping\n      .GetCurrentUserCartTypes({ IncludeNotCreated: false })\n      .then(res => {\n        setShoppingLists(res.data.Results);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(\n          true,\n          err.message || \"Failed to get current user cart types\"\n        );\n      });\n  }\n\n  function ViewDetailsButton(rowData: CartTypeModel): JSX.Element {\n    return (\n      // TODO: don't use string literals for path names, this needs to be in cvServiceStrings or something\n      <Link\n        to={corsLink(cefConfig, `/shopping-lists/detail/${rowData.Name}`, \"dashboard\")}\n        className=\"btn btn-outline-primary btn-sm\"\n        type=\"button\">\n        {t(\"ui.storefront.common.View\")}\n      </Link>\n    );\n  }\n\n  function ListDate(rowData: CartTypeModel): JSX.Element {\n    return (\n      <span>{DateTime.fromISO(rowData.CreatedDate?.toString()).toFormat(\"y-LL-dd\")}</span>\n    );\n  }\n\n  function ListItemCount(rowData: CartTypeModel): JSX.Element {\n    const [ items, setItems ] = useState<CartModel>();\n    const [ loading, setLoading ] = useState<boolean>(true);\n    useEffect(() => {\n      const promiserKey = `GetCurrentStaticCart({ TypeName: ${rowData.Name} })`;\n      promiser.resolve(\n        promiserKey,\n        () => cvApi.shopping.GetCurrentStaticCart({ TypeName: rowData.Name })\n      ).then(result => {\n        setLoading(false);\n        if (!result.data) {\n          return;\n        }\n        setItems(result.data);\n      });\n    }, []);\n    if (!items && loading) {\n      return <LoadingWidget innerClasses={\"p-0\"} size={\"1x\"} />;\n    }\n    if (!items) {\n      return <span>0</span>;\n    }\n    return (\n      // eslint-disable-next-line no-return-assign, no-param-reassign\n      <span>{items.SalesItems.reduce((accu, salesItem) => accu += salesItem.Quantity, 0)}</span>\n    );\n  }\n\n  return (\n    <Switch>\n      <Route path={corsLink(cefConfig, \"/shopping-lists\", \"dashboard\")} exact>\n        <CreateShoppingListModal\n          show={showCreateListModal}\n          onCancel={() => setShowCreateListModal(false)}\n          onConfirm={() => {\n            getShoppingLists();\n            setShowCreateListModal(false);\n          }}\n        />\n        <Row>\n          <Col xs={12}>\n            <h1>\n              <i className=\"fal fa-fw fa-clipboard-list me-2\" />\n              <span>Shopping List</span>\n            </h1>\n          </Col>\n          <Col xs={12}>\n            <Row>\n              <Col xs={12} className=\"d-flex justify-content-end align-items-center\">\n                <Button\n                  variant=\"secondary\"\n                  className=\"mb-3\"\n                  id=\"btnShoppingListCreate\"\n                  name=\"btnShoppingListCreate\"\n                  title=\"Create a New List\"\n                  aria-label=\"Create a New List\"\n                  onClick={() => setShowCreateListModal(true)}>\n                  {t(\"ui.storefront.userDashboard2.userDashboard.controls.createANewList\")}\n                </Button>\n              </Col>\n              <Col xs={12}>\n                {!Boolean(shoppingLists.length) && (\n                  <span className=\"h4\" id=\"ShoppingListNoItemsText\">\n                    {t(\n                      \"ui.storefront.userDashboard2.controls.shoppingListDetail.NoItemsHaveBeenAddedToThisShoppingList\"\n                    )}\n                  </span>\n                )}\n                {Boolean(shoppingLists.length) && (\n                  <CVGrid\n                    data={shoppingLists}>\n                    <CVGrid.Column\n                      title=\"List Name\"\n                      binding=\"Name\" />\n                    <CVGrid.Column\n                      title=\"Last Modified Date\">\n                      {ListDate}\n                    </CVGrid.Column>\n                    <CVGrid.Column<CartTypeModel>\n                      title=\"Item Count\">\n                      {data => <ListItemCount {...data} />}\n                    </CVGrid.Column>\n                    <CVGrid.Column\n                      title=\"Details\"\n                      tdClass=\"w-1\"\n                      hideHeader>\n                      {ViewDetailsButton}\n                    </CVGrid.Column>\n                  </CVGrid>\n                )}\n              </Col>\n            </Row>\n          </Col>\n          {viewState.hasError\n            && <Col xs={12}>\n              <ErrorView viewState={viewState} />\n            </Col>\n          }\n        </Row>\n      </Route>\n      <Route path={corsLink(cefConfig, \"/shopping-lists/detail/:typeName\", \"dashboard\")} exact>\n        <ShoppingListsDetail />\n      </Route>\n    </Switch>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RemoveFromCartModal } from \"src/Cart/modals\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\n\nexport const WishList = (): JSX.Element => {\n  const [ wishListSalesItems, setWishListSalesItems ] = useState<\n    SalesItemBaseModel<AppliedCartItemDiscountModel>[]\n  >([]);\n  const [ wishListProducts, setWishListProducts ] = useState<{ [id: string]: ProductModel }>(null);\n\n  const wishListCart = useCart(ServiceStrings.carts.types.wishList);\n  const [ removeFromWLConfirmationModalInfo, setRemoveFromWLConfirmationModalInfo ] = useState<{\n    show: boolean;\n    product: ProductModel;\n  }>({\n    show: false,\n    product: null\n  });\n\n  const { t } = useTranslation();\n  const productFactory = useProductFactory();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  useEffect(() => {\n    if (!wishListCart || !productFactory) {\n      return;\n    }\n    getWishList();\n  }, [ wishListCart, productFactory ]);\n\n  async function getWishList() {\n    if (!productFactory) {\n      return;\n    }\n    setRunning(\"Fetching wishlist...\");\n    try {\n      if (!wishListCart?.SalesItems?.length) {\n        setWishListSalesItems([]);\n        setWishListProducts(null);\n        finishRunning();\n        return;\n      }\n      const wlSalesItems = wishListCart.SalesItems;\n      setWishListSalesItems(wlSalesItems);\n\n      const products = await productFactory.getProductsByIDs(wlSalesItems.map(item => item.ProductID));\n\n      const productsMap: { [id: string]: ProductModel } = {};\n      products?.forEach(product => {\n        productsMap[product.ID.toString()] = product;\n      });\n      setWishListProducts(productsMap);\n      finishRunning();\n    } catch (err: any) {\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch wish list\" ]);\n    }\n  }\n\n  function clearWishList(): void {\n    setRunning();\n    cvApi.shopping\n      .ClearCurrentStaticCart({ TypeName: ServiceStrings.carts.types.wishList })\n      .then(_red => {\n        setWishListSalesItems([]);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"\");\n      });\n  }\n\n  function deleteWishListItem(salesItemId: number, callback?: () => void): void {\n    setRunning();\n    cvApi.shopping\n      .RemoveCartItemByID(salesItemId)\n      .then(res => {\n        if (res.data) {\n          getWishList();\n          finishRunning();\n        }\n        if (callback) {\n          callback();\n        }\n      })\n      .catch(err => {\n        finishRunning(true, err.message);\n      });\n  }\n\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void => {\n    setRunning();\n    cvApi.shopping\n      .UpdateCartItemQuantity({\n        CartItemID: cartItemID,\n        Quantity: quantity,\n        QuantityBackOrdered: 0,\n        QuantityPreSold: 0\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          finishRunning(true, null, res.data.Messages);\n          return;\n        }\n        getWishList();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  return (\n    <Row className=\"position-relative\">\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <RemoveFromCartModal\n        show={removeFromWLConfirmationModalInfo?.show}\n        productName={removeFromWLConfirmationModalInfo?.product?.Name}\n        onCancel={() => setRemoveFromWLConfirmationModalInfo({ show: false, product: null })}\n        onConfirm={() => {\n          deleteWishListItem(removeFromWLConfirmationModalInfo.product.ID, () => {\n            setRemoveFromWLConfirmationModalInfo({\n              show: false,\n              product: null\n            });\n          });\n        }}\n        parentRunning={viewState.running}\n        cartTypeText={t(\"ui.storefront.common.WishList\")}\n        cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}\n      />\n      <Col xs={12}>\n        <h1>\n          <i className=\"fal fa-fw fa-heart me-2\" />\n          <span>{t(\"ui.storefront.common.WishList\")}</span>\n        </h1>\n      </Col>\n      <Col xs={12}>\n        <Row>\n          <Col xs={12} className=\"d-flex justify-content-end\">\n            <Button\n              variant=\"secondary\"\n              className=\"mb-3\"\n              id=\"btnClearWishList\"\n              name=\"btnClearWishList\"\n              title={t(\"ui.storefront.userDashboard2.controls.wishList.ClearWishList\")}\n              aria-label={t(\"ui.storefront.userDashboard2.controls.wishList.ClearWishList\")}\n              disabled={!wishListSalesItems?.length}\n              onClick={clearWishList}>\n              {t(\n                \"ui.storefront.userDashboard2.controls.wishList.ClearWishList\"\n              )}\n            </Button>\n          </Col>\n          <Col xs={12}>\n            {wishListSalesItems?.length\n              ? <CartTableWideScreen\n                includeAddToCart={true}\n                cartProducts={wishListProducts}\n                cartHasItems={wishListSalesItems?.length > 0}\n                cartToUse={wishListCart}\n                orderDiscounts={null}\n                shippingDiscounts={null}\n                onChangeSalesItemQuantity={onChangeSalesItemQuantity}\n                onRemoveItemFromCartClicked={\n                  (productName: string, salesItemId: number) => deleteWishListItem(salesItemId)}\n                queuedIDs={[]}\n                parentRunning={viewState.running}\n                excludeBackorderInfo={true}\n              />\n              : <span className=\"h4\" id=\"WishListNoItemsText\">\n                {t(\n                  \"ui.storefront.userDashboard2.controls.wishList.NoItemsHaveBeenAddedToTheWishList\"\n                )}\n              </span>\n            }\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import { useEffect, useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ProductModel, SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RemoveFromCartModal } from \"src/Cart/modals\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { CartTableWideScreen } from \"src/Cart/views/CartTableWideScreen\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useProductFactory } from \"src/_shared/customHooks/useProductFactory\";\n\nexport const WatchList = (): JSX.Element => {\n  const [ watchListSalesItems, setWatchListSalesItems ] = useState<\n    SalesItemBaseModel<AppliedCartItemDiscountModel>[]\n  >([]);\n  const [ watchListProducts, setWatchListProducts ] = useState<{ [id: string]: ProductModel }>(null);\n\n  const watchListCart = useCart(ServiceStrings.carts.types.watchList);\n  const [ removeFromWLConfirmationModalInfo, setRemoveFromWLConfirmationModalInfo ] = useState<{\n    show: boolean;\n    product: ProductModel;\n  }>({\n    show: false,\n    product: null\n  });\n\n  const { t } = useTranslation();\n  const productFactory = useProductFactory();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  useEffect(() => {\n    if (!watchListCart || !productFactory) {\n      return;\n    }\n    getWatchList();\n  }, [ watchListCart, productFactory ]);\n\n  async function getWatchList() {\n    if (!productFactory) {\n      return;\n    }\n    setRunning(\"Fetching watchlist...\");\n    try {\n      if (!watchListCart?.SalesItems?.length) {\n        setWatchListSalesItems([]);\n        setWatchListProducts(null);\n        finishRunning();\n        return;\n      }\n      const wlSalesItems = watchListCart.SalesItems;\n      setWatchListSalesItems(wlSalesItems);\n\n      const products = await productFactory.getProductsByIDs(wlSalesItems.map(item => item.ProductID));\n\n      const productsMap: { [id: string]: ProductModel } = {};\n      products?.forEach(product => {\n        productsMap[product.ID.toString()] = product;\n      });\n      setWatchListProducts(productsMap);\n      finishRunning();\n    } catch (err: any) {\n      finishRunning(true, err?.Message ?? null, err?.Messages ?? [ \"Failed to fetch watch list\" ]);\n    }\n  }\n\n  function clearWatchList(): void {\n    setRunning();\n    cvApi.shopping\n      .ClearCurrentStaticCart({ TypeName: ServiceStrings.carts.types.watchList })\n      .then(_red => {\n        setWatchListSalesItems([]);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"\");\n      });\n  }\n\n  function deleteWatchListItem(salesItemId: number, callback?: () => void): void {\n    setRunning();\n    cvApi.shopping\n      .RemoveCartItemByID(salesItemId)\n      .then(res => {\n        if (res.data) {\n          getWatchList();\n          finishRunning();\n        }\n        if (callback) {\n          callback();\n        }\n      })\n      .catch(err => {\n        finishRunning(true, err.message);\n      });\n  }\n\n  const onChangeSalesItemQuantity = (cartItemID: number, quantity: number): void => {\n    setRunning();\n    cvApi.shopping\n      .UpdateCartItemQuantity({\n        CartItemID: cartItemID,\n        Quantity: quantity,\n        QuantityBackOrdered: 0,\n        QuantityPreSold: 0\n      })\n      .then(res => {\n        if (!res.data.ActionSucceeded) {\n          finishRunning(true, null, res.data.Messages);\n          return;\n        }\n        getWatchList();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  return (\n    <Row className=\"position-relative\">\n      {viewState.running ? <LoadingWidget overlay={true} /> : null}\n      <RemoveFromCartModal\n        show={removeFromWLConfirmationModalInfo?.show}\n        productName={removeFromWLConfirmationModalInfo?.product?.Name}\n        onCancel={() => setRemoveFromWLConfirmationModalInfo({ show: false, product: null })}\n        onConfirm={() => {\n          deleteWatchListItem(removeFromWLConfirmationModalInfo.product.ID, () => {\n            setRemoveFromWLConfirmationModalInfo({\n              show: false,\n              product: null\n            });\n          });\n        }}\n        parentRunning={viewState.running}\n        cartTypeText={t(\"ui.storefront.common.WatchList\")}\n        cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}\n      />\n      <Col xs={12}>\n        <h1>\n          <i className=\"fal fa-fw fa-eye me-2\" />\n          <span>{t(\"ui.storefront.common.WatchList\")}</span>\n        </h1>\n      </Col>\n      <Col xs={12}>\n        <Row>\n          <Col xs={12} className=\"d-flex justify-content-end\">\n            <Button\n              variant=\"secondary\"\n              className=\"mb-3\"\n              id=\"btnClearWatchList\"\n              name=\"btnClearWatchList\"\n              title={t(\"ui.storefront.userDashboard2.controls.watchList.ClearWatchList\")}\n              aria-label={t(\"ui.storefront.userDashboard2.controls.watchList.ClearWatchList\")}\n              disabled={!watchListSalesItems?.length}\n              onClick={clearWatchList}>\n              {t(\n                \"ui.storefront.userDashboard2.controls.watchList.ClearWatchList\"\n              )}\n            </Button>\n          </Col>\n          <Col xs={12}>\n            {watchListSalesItems?.length\n              ? <CartTableWideScreen\n                includeAddToCart={true}\n                cartProducts={watchListProducts}\n                cartHasItems={watchListSalesItems?.length > 0}\n                cartToUse={watchListCart}\n                orderDiscounts={null}\n                shippingDiscounts={null}\n                onChangeSalesItemQuantity={onChangeSalesItemQuantity}\n                onRemoveItemFromCartClicked={\n                  (productName: string, salesItemId: number) => deleteWatchListItem(salesItemId)}\n                queuedIDs={[]}\n                parentRunning={viewState.running}\n                excludeBackorderInfo={true}\n              />\n              : <span className=\"h4\" id=\"WatchListNoItemsText\">\n                {t(\n                  \"ui.storefront.userDashboard2.controls.watchList.NoItemsHaveBeenAddedToTheWatchList\"\n                )}\n              </span>\n            }\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport \"./ChatButton.scss\";\n\ninterface IChatMsg {\n  CreatedDate: string,\n  ID: number,\n  From: string,\n  Message: string,\n}\n\nexport const ChatButton = (): JSX.Element => {\n  const [ showChat, setShowChat ] = useState<boolean>(false);\n  const [ chatInputText, setChatInputText ] = useState<string>(\"\");\n  const [ msgID, setMsgId ] = useState<number>(1);\n  const [ chatMessages, setChatMessages ] = useState<IChatMsg[]>([]);\n  const scrollTargetRef = useRef(null);\n\n  const handleChange: any = (e: React.ChangeEvent<HTMLInputElement>): void => {\n    const { value } = e.target;\n    setChatInputText(value);\n  };\n\n  const toggleChatWindow: () => void = () => {\n    setShowChat(prev => !prev);\n    scrollDown();\n  };\n\n  const scrollDown = () => {\n    const target = scrollTargetRef?.current;\n    if (target) {\n      setTimeout(() => {\n        target.scrollIntoView({\n          behavior: \"smooth\"\n        });\n      }, 100);\n    }\n  };\n\n  const getDate = () => {\n    const date = new Date();\n    const formattedDate = date.toLocaleString(\"en-US\", {\n      day: \"numeric\",\n      hour: \"numeric\",\n      minute: \"2-digit\",\n      month: \"short\",\n      second: \"2-digit\",\n      year: \"numeric\"\n    });\n    return formattedDate;\n  };\n\n  const sendMessage = (e: any) => {\n    e.preventDefault();\n    const formattedDate = getDate();\n    const tempMessage = { CreatedDate: formattedDate, ID: msgID, From: \"user\", Message: chatInputText };\n    const allChatMessages = chatMessages;\n    allChatMessages.push(tempMessage);\n    setChatMessages(allChatMessages);\n    setChatInputText(\"\");\n    setMsgId(prev => prev + 1);\n    scrollDown();\n  };\n\n  useEffect(() => {\n    scrollDown();\n  }, [ showChat ]);\n\n  // Placeholder chat conversation starter.\n  useEffect(() => {\n    const formattedDate = getDate();\n    const tempMessage = {\n      CreatedDate: formattedDate,\n      ID: msgID,\n      From: \"employee\",\n      Message: \"Welcome to Clarity!  How may I assist you today?\"\n    };\n    const allChatMessages = chatMessages;\n    allChatMessages.push(tempMessage);\n    setChatMessages(allChatMessages);\n    setMsgId(prev => prev + 1);\n  }, []);\n\n  return (\n    <section className=\"chat-section\">\n      {showChat\n      && <div className=\"chat-window\">\n        <header className=\"chat-header\">\n          <h3>Live Chat</h3>\n          <button type=\"button\"\n            className=\"close-btn\"\n            onClick={toggleChatWindow}>\n            <i className=\"fal fa-fw fa-times\" />\n          </button>\n        </header>\n        <div className=\"message-box\">\n          {chatMessages.map(({ CreatedDate, ID, From, Message }) => {\n            return <div key={ID} className={`message ${From === \"user\" ? \"user\" : \"employee\"}`}>\n              <p className=\"created-date\">{CreatedDate}</p>\n              <p>{Message}</p>\n            </div>;\n          })}\n          <div ref={scrollTargetRef}></div>\n        </div>\n        <form className=\"chat-form\" onSubmit={(e) => sendMessage(e)}>\n          <input type=\"text\"\n            className=\"chat-input\"\n            value={chatInputText}\n            onChange={(e: React.ChangeEvent<HTMLInputElement>) => handleChange(e)} />\n          <button type=\"submit\"\n            disabled={chatInputText === \"\"}\n            className=\"send-btn\" >\n            Send\n          </button>\n        </form>\n      </div> }\n      <button type=\"button\"\n        className=\"chat-btn\"\n        onClick={toggleChatWindow}>\n        <i className=\"fal fa-fw fa-comments-alt\" />\n      </button>\n    </section>\n  );\n};\n","/**\n * eslint-disable max-len\n *\n * @format\n */\n\nimport { useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\n\nexport const Success = (): JSX.Element => {\n  useEffect(() => {\n    const storedData = sessionStorage.getItem(\"successData\");\n    const purchased = sessionStorage.getItem(\"purchased\");\n\n    if (purchased) {\n      return;\n    }\n\n    const data = JSON.parse(storedData);\n\n    console.log(data);\n\n    if (data && location.pathname === \"/Dashboard/success\") {\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push({\n        event: \"purchase\",\n        ecommerce: {\n          transaction_id: data?.SalesItems?.[0].ID,\n          currency: \"USD\",\n          value: data?.Totals?.Total,\n          items: [\n            {\n              item_id: data?.SalesItems?.[0].ProductID,\n              item_name: data?.SalesItems?.[0].ProductName,\n              price: data?.Totals?.Total,\n              quantity: data?.SalesItems?.[0].TotalQuantity\n            }\n          ]\n        }\n      });\n      sessionStorage.setItem(\"purchased\", \"true\");\n    }\n  }, []);\n  return (\n    <div className=\"d-flex flex-column justify-content-center align-items-center\">\n      <div className=\"form-vertical bg-brand-light vw-100 py-4 d-flex flex-column justify-content-center align-items-center\">\n        <div className=\"success-container d-flex flex-column justify-content-center align-items-center gap-4\">\n          <h1 className=\"text-center congrats-header\">\n            Get ready<span className=\"d-block text-brand-orange congrats-header pt-2\">to feel your best</span>\n          </h1>\n          <img\n            src=\"/wp-content/uploads/2025/03/success.jpg\"\n            alt=\"mobile\"\n            className=\"border border-4 border-brand-orange rounded-4 congrats-img\"\n          />\n          <div className=\"d-flex flex-column justify-content-center align-items-center\">\n            <p className=\"text-center pt-4 fw-bold mb-0\">Your order has been placed.</p>\n            <p className=\"text-center congrats-text\">\n              You’ll receive an email confirmation shortly with details. We’ll hit you up again when your order is on\n              the move.\n            </p>\n            <p className=\"text-center fw-bold mb-0\">Want to keep tabs on your order?</p>\n            <p className=\"text-center congrats-text\">\n              Sign in to your MangoRx account anytime to get updates on the status of your order.\n            </p>\n          </div>\n          <Button\n            className=\"py-3 px-5 border-0\"\n            onClick={() => {\n              location.pathname = \"/Dashboard\";\n            }}>\n            Go to Dashboard\n          </Button>\n        </div>\n      </div>\n    </div>\n  );\n};\n","/**\n * eslint-disable camelcase\n *\n * @format\n */\n\n/* eslint-disable no-mixed-spaces-and-tabs */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, Route, Switch, useHistory, useLocation } from \"react-router-dom\";\nimport Interweave from \"interweave\";\nimport { IDashboardSettings } from \"src/_shared/CefConfigTypes\";\n\n// Dashboard components\nimport { Col, Nav, Navbar, Row } from \"react-bootstrap\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\nimport { dashboardTabComponents } from \"src/Dashboard/dashboardTabComponents\";\nimport { useDashboardLinks } from \"src/_shared/customHooks/useDashboardLinks\";\nimport { EditLot } from \"src/Dashboard/EditLot/EditLot\";\nimport { SalesGroup } from \"src/Dashboard/SalesGroup/SalesGroup\";\nimport { ChatButton } from \"src/Dashboard/ChatButton\";\nimport { Success } from \"./Success\";\nimport { CartModel } from \"src/_api/cvApi._DtoClasses\";\n\nexport const Dashboard = (): JSX.Element => {\n  // Const [recentOrders, setRecentOrders] = useState([]);\n  const [showLoginModal, setShowLoginModal] = useState(false);\n\n  const { dashboardLinks, flattenedLinks, activeLink, setActiveLink } = useDashboardLinks();\n\n  const { t } = useTranslation();\n  const pathName = useLocation().pathname;\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n\n  document.addEventListener(\"DOMContentLoaded\", () => {\n    document.body.scrollTo(0, 0);\n  });\n\n  // Check if user is logged in and pop login modal accordingly.\n  useEffect(() => {\n    if (currentUser.Loading) {\n      return;\n    }\n    setTimeout(() => {\n      if (!(currentUser.ID > 0)) {\n        setShowLoginModal(true);\n      }\n    }, 500);\n  }, [currentUser]);\n\n  const breadCrumbs = useMemo(() => {\n    let bCrumbs = pathName.replace(\"/Dashboard\", \"\").replace(\"/dashboard\", \"\").slice(1).split(\"/\");\n    if (bCrumbs.some(crumb => crumb.toLowerCase() === \"sales-group\")) {\n      bCrumbs = [\"Group Detail\"];\n    } else if (bCrumbs.some(crumb => crumb.toLowerCase() === \"shopping-lists\")) {\n      bCrumbs = [\"Shopping Lists\"];\n    } else if (bCrumbs.some(crumb => crumb.toLowerCase() === \"consultations\")) {\n      bCrumbs = [\"Scheduled Appointments\"];\n    } else if (bCrumbs.every(x => !x)) {\n      bCrumbs = [t(\"ui.storefront.common.MyDashboard\", \"My Dashboard\")];\n    }\n    return bCrumbs;\n  }, [pathName]);\n\n  const renderedDashboardPaths: IDashboardSettings[] = flattenedLinks\n    ? flattenedLinks\n        .filter((x: IDashboardSettings) => x.href)\n        .sort((linkOne: IDashboardSettings, linkTwo: IDashboardSettings) => linkOne.order - linkTwo.order)\n    : [];\n\n  const getRouterRoutes = () => {\n    const routes = [];\n    renderedDashboardPaths.forEach(link => {\n      if (dashboardTabComponents[link.name]?.component) {\n        routes.push(\n          <Route\n            exact={true}\n            key={link.href}\n            path={link.href}\n            component={dashboardTabComponents[link.name].component as () => JSX.Element}\n          />\n        );\n        if (link.detailName && dashboardTabComponents[link.detailName]?.component) {\n          routes.push(\n            <Route\n              key={link.detailHref}\n              path={link.detailHref}\n              component={dashboardTabComponents[link.detailName].component as () => JSX.Element}\n            />\n          );\n        }\n      }\n    });\n    const includeSalesGroupDetail: boolean = Boolean(\n      renderedDashboardPaths.find(link => link.name === \"Orders\" || link.name === \"Invoices\" || link.name === \"Quotes\")\n    );\n    if (includeSalesGroupDetail) {\n      routes.push(\n        <Route\n          key={corsLink(cefConfig, \"/sales-group/:salesGroupId/:type/:typeId\", \"dashboard\")}\n          path={corsLink(cefConfig, \"/sales-group/:salesGroupId/:type/:typeId\", \"dashboard\")}\n          component={SalesGroup}\n        />\n      );\n    }\n    const includeEditLot: boolean = Boolean(renderedDashboardPaths.find(x => x.name === \"AuctionsLive\"));\n\n    if (includeEditLot) {\n      routes.push(\n        <Route\n          key={corsLink(cefConfig, \"/edit-lot/:lotID\", \"dashboard\")}\n          path={corsLink(cefConfig, \"/edit-lot/:lotID\", \"dashboard\")}\n          component={EditLot}\n        />\n      );\n    }\n    return routes;\n  };\n  if (!cefConfig) {\n    return null;\n  }\n\n  if (pathName === \"/Dashboard/success\") {\n    return <Success />;\n  }\n\n  return (\n    <main\n      id=\"main\"\n      role=\"main\">\n      <LoginModal\n        show={showLoginModal}\n        onConfirm={() => setShowLoginModal(false)}\n        onCancel={() => {\n          setShowLoginModal(false);\n          document.location.href = \"/\";\n        }}\n      />\n      {cefConfig.featureSet.chat.enabled && <ChatButton />}\n      <Row className=\"cef-dashboard-container\">\n        <Col\n          xs={12}\n          md={3}\n          lg={2}\n          className=\"d-print-none cef-dashboard-nav bg-light ps-4 pt-5 pe-3 pb-3\">\n          <Navbar\n            bg=\"light\"\n            expand=\"md\"\n            className=\"pt-lg-0\">\n            <div className=\"navbar-header pb-2\">\n              <Navbar.Toggle aria-controls=\"cef-dashboard-nav-collapse\" />\n            </div>\n            <Navbar.Collapse id=\"cef-dashboard-nav-collapse\">\n              <Nav className=\"w-100\">\n                <ul className=\"nav flex-column w-100 ms-3\">\n                  {dashboardLinks &&\n                    dashboardLinks.map(link => (\n                      <li\n                        className=\"nav-item\"\n                        key={link.href || link.name}>\n                        <Link\n                          data-sid={`udSideNavLinkText_${link.name}`}\n                          to={\n                            link.href ||\n                            (link?.children?.length ? link.children[0].href : corsLink(cefConfig, \"/\", \"dashboard\"))\n                          }\n                          className={`nav-link ud-side-nav-link ${\n                            activeLink?.href === link.href || link?.children?.some(c => c.href === activeLink?.href)\n                              ? \"active\"\n                              : \"\"\n                          }`}\n                          onClick={() => {\n                            setActiveLink(link.children ? link.children[0] : link);\n                          }}>\n                          {link.icon ? (\n                            <Interweave\n                              className=\"me-1\"\n                              content={link.icon}\n                            />\n                          ) : dashboardTabComponents[link.name]?.iconString ? (\n                            <i\n                              className={`${link.icon ?? dashboardTabComponents[link.name].iconString} fa-fw mb-0 me-1`}\n                            />\n                          ) : null}\n                          <span className=\"nav-text\">{t(link.titleKey)}</span>\n                        </Link>\n                        {link.children && (\n                          <ul\n                            className=\"nav flex-column user-dashboard-sub-nav\"\n                            aria-labelledby=\"asideDrop\">\n                            {link.children\n                              .filter(child => child.enabled && child.href)\n                              .map(child => (\n                                <li\n                                  key={child.href || child.name}\n                                  className=\"nav-item\">\n                                  <Link\n                                    data-sid={`udSideNavLinkText_${child.name}`}\n                                    to={child.href}\n                                    className={`nav-link ud-side-nav-link-inner py-0 my-1 rounded-0 ${\n                                      activeLink?.href === child.href ? \"active\" : \"\"\n                                    }`}\n                                    onClick={() => setActiveLink(child)}>\n                                    {child.icon ? (\n                                      <Interweave\n                                        className=\"me-1\"\n                                        content={child.icon}\n                                      />\n                                    ) : dashboardTabComponents[child.name]?.iconString ? (\n                                      <i\n                                        className={`${\n                                          child.icon ?? dashboardTabComponents[child.name].iconString\n                                        } fa-fw mb-0 me-1`}\n                                      />\n                                    ) : null}\n                                    <span className=\"text-capitalize\">{t(child.titleKey)}</span>\n                                  </Link>\n                                </li>\n                              ))}\n                          </ul>\n                        )}\n                      </li>\n                    ))}\n                </ul>\n              </Nav>\n            </Navbar.Collapse>\n          </Navbar>\n        </Col>\n        <Col\n          md=\"9\"\n          lg=\"10\"\n          className=\"cef-dashboard-content position-relative lg-px-6\">\n          <Row>\n            <Col xs={12}>\n              <Row className=\"row d-none d-sm-block d-print-none\">\n                <nav className=\"breadcrumbs ps-0\">\n                  <ol className=\"breadcrumb bg-transparent mx-3 mt-3 mb-5 small\">\n                    <li\n                      key=\"Home\"\n                      className=\"breadcrumb-item\">\n                      <a\n                        data-sid=\"udBreadCrumbHome\"\n                        href={corsLink(cefConfig, \"/\", \"site\")}\n                        className=\"text-capitalize ud-breadcrumb-home\">\n                        {t(\"ui.storefront.common.Home\")}\n                      </a>\n                    </li>\n                    {breadCrumbs.map((crumb, index): JSX.Element => {\n                      const textColor = index === breadCrumbs.length - 1 ? \"text-primary\" : \"ud-breadcrumb-tab-text\";\n                      return (\n                        <li\n                          key={crumb}\n                          className=\"breadcrumb-item\">\n                          {index === breadCrumbs.length - 1 ? (\n                            <span\n                              data-sid=\"udBreadCrumbTabText\"\n                              className={`text-capitalize ${textColor}`}>\n                              {crumb}\n                            </span>\n                          ) : (\n                            <Link\n                              data-sid=\"udBreadCrumbDashboard\"\n                              className={`text-capitalize ${textColor}`}\n                              to={\n                                index === 0\n                                  ? corsLink(cefConfig, \"/\", \"dashboard\")\n                                  : corsLink(cefConfig, `/${crumb}`, \"dashboard\")\n                              }>\n                              {crumb}\n                            </Link>\n                          )}\n                        </li>\n                      );\n                    })}\n                  </ol>\n                </nav>\n              </Row>\n            </Col>\n          </Row>\n          <Switch>{getRouterRoutes()}</Switch>\n        </Col>\n      </Row>\n    </main>\n  );\n};\n","/** @format */\nimport { useTranslation } from \"react-i18next\";\n\ninterface IRegistrationStepsHeaderProps {\n  valid: boolean;\n  titleKey: string;\n}\n\nexport const RegistrationStepsHeader = (props: IRegistrationStepsHeaderProps): JSX.Element => {\n  const { valid, titleKey } = props;\n  const { t } = useTranslation();\n  return (\n    <h5>\n      <i className={`fal ${valid ? \"fa-check-square text-success\" : \"fa-square text-primary\"}`} />\n      &nbsp;\n      <span className={`text-${valid ? \"success\" : \"primary\"}`}>\n        <span data-sid=\"txtRegistrationStepHeader\">{t(titleKey)}</span>\n      </span>\n    </h5>\n  );\n};\n","/**\n * @file framework/store/user/registration/steps/registrationSteps.ts\n * @author Copyright (c) 2020-2023 clarity-ventures.com. All rights reserved.\n * @desc Register for the site: The steps of the wizard\n */\n\nimport { CEFConfig, IRegistrationStepConfig } from \"src/_shared/CefConfigTypes\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\n\nexport interface IRegistrationStep extends IRegistrationStepConfig {\n  // Properties\n  readonly name: string;\n  /**\n   * The text that would be on the button of the preceding step which would lead\n   * to this step\n   * @virtual\n   * @memberof IRegistrationStep\n   */\n  readonly continueTextKey: string;\n  readonly continueText?: string;\n  readonly titleKey: string;\n  invalid: boolean;\n  complete: boolean;\n  readonly order: number;\n  readonly index: number;\n  readonly templateURL: string;\n  component: Element | JSX.Element;\n  building: boolean;\n  // Functions\n  /**\n   * By default, no requirements should be checked, and just return a promise with\n   * value of true\n   * @virtual\n   * @returns {Promise<boolean>}\n   * @memberof IRegistrationStep\n   */\n  canEnable(): Promise<boolean>;\n  /**\n   * By default, no action is taken, and just return a promise with value of true\n   * @virtual\n   * @returns {Promise<boolean>}\n   * @memberof IRegistrationStep\n   */\n  initialize(): Promise<boolean>;\n  /**\n   * By default, no requirements should be checked, and just return a promise with\n   * value of true\n   * @returns {Promise<boolean>}\n   * @memberof IRegistrationStep\n   */\n  validate(): Promise<boolean>;\n  submit(): Promise<boolean>;\n  // Events\n  // <None>\n}\n\nexport abstract class RegistrationStep implements IRegistrationStep {\n  // Properties\n  building: boolean = true;\n\n  index: number;\n\n  show: boolean;\n\n  showButton: boolean;\n\n  abstract get name(): string;\n\n  invalid: boolean = true;\n\n  complete: boolean = false;\n\n  get continueTextKey(): string {\n    if (!this.name) {\n      return undefined;\n    }\n    return this.cefConfig.register.sections[this.name].continueTextKey;\n  }\n\n  get titleKey(): string {\n    if (!this.name) {\n      return undefined;\n    }\n    return this.cefConfig.register.sections[this.name].titleKey;\n  }\n\n  get order(): number {\n    if (!this.name) {\n      return undefined;\n    }\n    return this.cefConfig.register.sections[this.name].order;\n  }\n\n  get templateURL(): string {\n    if (!this.name) {\n      return undefined;\n    }\n    return this.cefConfig.register.sections[this.name].templateURL;\n  }\n\n  // Functions\n\n  canEnable(): Promise<boolean> {\n    console.debug(\"RegistrationStep.canEnable()\");\n    if (!this.name) {\n      console.debug(\"RegistrationStep.canEnable() No name yet\");\n      return Promise.reject(new Error(\"RegistrationStep.canEnable() does not have a 'name' yet\"));\n    }\n    // Do Nothing\n    return Promise.resolve(this.cefConfig.register.sections[this.name]?.show);\n  }\n\n  initialize(): Promise<boolean> {\n    console.debug(\"RegistrationStep.initialize()\");\n    this.building = true;\n    this.building = false;\n    return Promise.resolve(true);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  validate(): Promise<boolean> {\n    console.debug(\"RegistrationStep.validate()\");\n    // Do Nothing\n    return Promise.resolve(true);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  submit(): Promise<boolean> {\n    console.debug(\"RegistrationStep.submit()\");\n    // Do Nothing\n    return Promise.resolve(true);\n  }\n\n  protected fullReject(reject: (...args: any[]) => void | any, toReturn: unknown): void {\n    console.debug(\"RegistrationStep.fullReject(reject, toReturn)\");\n    reject(toReturn);\n    this.building = false;\n  }\n\n  // Constructor\n  // eslint-disable-next-line no-empty-function, no-useless-constructor\n  constructor(protected readonly cefConfig: CEFConfig, public readonly component: Element | JSX.Element) { }\n}\n\nexport const registrationStepFactory = (cefConfig: CEFConfig): IRegistrationStep[] => {\n  if (!cefConfig) {\n    console.warn(\"Missing cefConfig in registrationStepFactory\");\n    return [];\n  }\n  return Object.keys(cefConfig.register.sections)\n    .reduce((steps, current) => {\n      const registrationStepConfig = cefConfig.register.sections[current];\n      if (cefConfig.debug) {\n        console.log(\n          \"cefConfig.register.sections\\n\",\n          cefConfig.register.sections,\n          \"\\n\",\n          \"current\\n\",\n          current,\n          \"\\n\",\n          \"ServiceStrings.registration.steps[current]\\n\",\n          ServiceStrings.registration.steps[current],\n          \"\\n\",\n          \"registrationStepConfig\\n\",\n          registrationStepConfig\n        );\n      }\n      if (registrationStepConfig && registrationStepConfig.show) {\n        steps.push(registrationStepConfig);\n      }\n      return steps;\n    }, [])\n    .sort((a: IRegistrationStep, b: IRegistrationStep): number => a.order - b.order);\n};\n","import { useEffect } from \"react\";\nimport { SubmitHandler, useForm, useWatch } from \"react-hook-form\";\nimport { Button, Col, Form, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport {\n  PasswordInputFormGroup,\n  TextInputFormGroup\n} from \"src/_shared/forms/formGroups\";\nimport { IRegistrationStepBasicInfoData } from \"src/Authentication/Registration/_registrationTypes\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\n\ninterface IRegistrationBasicInfoStepProps {\n  cefConfig: CEFConfig;\n  onCompleteBasicInfoStep: Function;\n  continueText: string;\n}\n\nexport const RegistrationBasicInfoStep = (\n  props: IRegistrationBasicInfoStepProps\n): JSX.Element => {\n  const { onCompleteBasicInfoStep, continueText, cefConfig } = props;\n  const userNameIsEmailEnabled: boolean\n    = cefConfig.featureSet.registration.usernameIsEmail;\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  const {\n    register,\n    handleSubmit,\n    setError,\n    getValues,\n    setValue,\n    control,\n    formState: { errors }\n  } = useForm<IRegistrationStepBasicInfoData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const boundUserName = useWatch({\n    control,\n    name: \"emEmailRegistration\",\n    disabled: !userNameIsEmailEnabled,\n    exact: true\n  });\n\n  useEffect(() => {\n    if (userNameIsEmailEnabled) {\n      setValue(\"emUsername\", boundUserName);\n    }\n  }, [ boundUserName ]);\n\n  const onSubmit: SubmitHandler<IRegistrationStepBasicInfoData> = async data => {\n    if (viewState.running) {\n      return;\n    }\n    setRunning();\n    const r = await cvApi.authentication.ValidateEmailIsUnique({\n      Email: data.emEmailRegistration\n    });\n    if (!r.data.ActionSucceeded) {\n      setError(\"emEmailRegistration\", {\n        type: \"uniqueEmail\",\n        message: \"Account with that email already exists.\"\n      });\n      finishRunning();\n      return;\n    }\n    finishRunning();\n    onCompleteBasicInfoStep(data);\n  };\n\n  return (\n    <Row as={Form}\n      onSubmit={handleSubmit(onSubmit)}\n      autoComplete=\"off\"\n      className=\"position-relative\">\n      {viewState.running\n        && <Col xs={12}>\n          <LoadingWidget overlay={true} />\n        </Col>\n      }\n      <Col xs={12}>\n        <Row>\n          <TextInputFormGroup\n            register={register}\n            errors={errors}\n            formClasses=\"col-md-6 form-group\"\n            formIdentifier=\"firstNameRegistration\"\n            labelText=\"First Name\"\n            labelKey=\"ui.storefront.common.FirstName\"\n            placeholderText=\"First Name\"\n            placeholderKey=\"ui.storefront.common.FirstName\"\n            required={true}\n            maxLength={128}\n            maxLengthMessage=\"First name may not exceed 128 characters\"\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={errors}\n            formClasses=\"col-md-6 form-group\"\n            formIdentifier=\"lastNameRegistration\"\n            labelText=\"Last Name\"\n            labelKey=\"ui.storefront.common.LastName\"\n            placeholderText=\"Last Name\"\n            placeholderKey=\"ui.storefront.common.LastName\"\n            required={true}\n            maxLength={128}\n            maxLengthMessage=\"Last name may not exceed 128 characters\"\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={errors}\n            isEmail={true}\n            formClasses=\"col-12 form-group\"\n            formIdentifier=\"emEmailRegistration\"\n            labelText=\"Email\"\n            labelKey=\"ui.storefront.common.Email\"\n            placeholderText=\"Email\"\n            placeholderKey=\"ui.storefront.common.Email\"\n            required={true}\n            maxLength={128}\n            maxLengthMessage=\"Email may not exceed 128 characters\"\n            validateObject={{\n              isUnique: () => new Promise<boolean | string>((resolve, reject) => {\n                const curEmailValue = getValues(\"emEmailRegistration\");\n                if (!curEmailValue?.length) {\n                  resolve(false);\n                  return;\n                }\n                cvApi.authentication\n                  .ValidateEmailIsUnique({ Email: getValues(\"emEmailRegistration\") })\n                  .then(success => {\n                    if (!success.data?.ActionSucceeded) {\n                      const translated: string = t(\"ui.storefront.registration.emailMustBeUnique\");\n                      resolve(translated);\n                      return;\n                    }\n                    resolve(success.data?.ActionSucceeded);\n                  })\n                  .catch(error => {\n                    reject(error);\n                  });\n              })\n            }}\n            patternMessage=\"Email is not valid/formatted properly\"\n          />\n          <TextInputFormGroup\n            register={register}\n            errors={errors}\n            isPhone={true}\n            formClasses=\"col-12 form-group\"\n            formIdentifier=\"telPhoneRegistration\"\n            labelText=\"Phone\"\n            labelKey=\"ui.storefront.common.Phone\"\n            placeholderText=\"Phone\"\n            placeholderKey=\"ui.storefront.common.Phone\"\n            required={true}\n            maxLength={40}\n            maxLengthMessage=\"Phone numbers may not exceed 40 characters\"\n            minLength={10}\n            minLengthMessage=\"Phone numbers must include area code.\"\n          />\n        </Row>\n      </Col>\n      <Col xs={12}>\n        <hr />\n        <Row>\n          <TextInputFormGroup\n            register={register}\n            errors={errors}\n            formClasses=\"col-md-6 form-group\"\n            formIdentifier=\"emUsername\"\n            labelText=\"Username\"\n            disabled={Boolean(userNameIsEmailEnabled)}\n            labelKey=\"ui.storefront.common.Username\"\n            placeholderText=\"Username\"\n            placeholderKey=\"ui.storefront.common.Username\"\n            tooltipKey={\n              userNameIsEmailEnabled\n                ? \"ui.storefront.user.registration.UsernameIsEmailByDefault\"\n                : \"ui.storefront.user.registration.ValidUsernameTips\"}\n            required={true}\n            maxLength={100}\n            minLength={3}\n          />\n          <PasswordInputFormGroup\n            register={register}\n            errors={errors}\n            formClasses=\"col-md-6 form-group\"\n            formIdentifier=\"pwPasswordRegistration\"\n            labelText=\"Password\"\n            labelKey=\"ui.storefront.common.Password\"\n            placeholderText=\"••••••\"\n            tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\n            required={true}\n          />\n        </Row>\n      </Col>\n      <Col xs={12}>\n        <Button\n          id=\"btnSubmit_registrationStepBasicInfo\"\n          as=\"input\"\n          variant=\"primary\"\n          className=\"my-3\"\n          value={continueText}\n          type=\"submit\"\n          disabled={viewState.running} />\n      </Col>\n    </Row>\n  );\n};\n","import { useState } from \"react\";\nimport { Button, Col, Row } from \"react-bootstrap\";\nimport { NewAddressModal } from \"src/Dashboard/AddressBook/NewAddressModal\";\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\nimport { AccountContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { IRegistrationStepBasicInfoData } from \"src/Authentication/Registration/_registrationTypes\";\n\ninterface IRegistrationAddressBookStepProps {\n  onCompleteAddressBookStep: (\n    billingAddress: AccountContactModel,\n    shippingAddress: AccountContactModel\n  ) => void;\n  continueText: string;\n  basicInfoStepData?: IRegistrationStepBasicInfoData;\n}\n\nexport const RegistrationAddressBookStep = (\n  props: IRegistrationAddressBookStepProps\n): JSX.Element => {\n  const { onCompleteAddressBookStep, continueText, basicInfoStepData } = props;\n\n  const [ showAddBillingAddressModal, setShowAddBillingAddressModal ]\n    = useState(false);\n  const [ showAddShippingAddressModal, setShowAddShippingAddressModal ]\n    = useState(false);\n  const [ userBillingAddressComplete, setUserBillingAddressComplete ]\n    = useState<boolean>(false);\n  const [ userShippingAddressComplete, setUserShippingAddressComplete ]\n    = useState<boolean>(false);\n\n  const getInitialAccountContact = (isBilling?: boolean): AccountContactModel => {\n    let basicInfoFirstName = \"\";\n    let basicInfoLastName = \"\";\n    let basicInfoEmail = \"\";\n    let basicInfoPhone = \"\";\n    if (basicInfoStepData) {\n      basicInfoFirstName = basicInfoStepData.firstNameRegistration;\n      basicInfoLastName = basicInfoStepData.lastNameRegistration;\n      basicInfoEmail = basicInfoStepData.emEmailRegistration;\n      basicInfoPhone = basicInfoStepData.telPhoneRegistration;\n    }\n    return {\n      Active: true,\n      CreatedDate: new Date(),\n      CustomKey: isBilling ? \"BILL TO\" : \"SHIP TO\",\n      ID: null,\n      IsBilling: isBilling,\n      IsPrimary: !isBilling,\n      MasterID: null,\n      Slave: {\n        Active: true,\n        Address: {\n          Active: true,\n          City: \"\",\n          Company: \"\",\n          Country: null,\n          CountryCode: null,\n          CountryKey: null,\n          CountryName: \"\",\n          CreatedDate: new Date(),\n          CustomKey: isBilling ? \"BILL TO\" : \"SHIP TO\",\n          ID: null,\n          PostalCode: \"\",\n          Region: null,\n          RegionCode: \"\",\n          RegionID: null,\n          RegionKey: \"\",\n          RegionName: \"\",\n          Street1: \"\",\n          Street2: \"\",\n          Street3: \"\"\n        },\n        CreatedDate: new Date(),\n        Email1: basicInfoEmail,\n        Fax1: \"\",\n        FirstName: basicInfoFirstName,\n        FullName: `${basicInfoFirstName} ${basicInfoLastName}`,\n        ID: null,\n        LastName: basicInfoLastName,\n        Phone1: basicInfoPhone,\n        TypeID: null,\n        TypeKey: isBilling ? \"Billing\" : \"Shipping\"\n      },\n      SlaveID: null,\n      TransmittedToERP: false,\n      UpdatedDate: null\n    };\n  };\n  const [ userBillingAddress, setUserBillingAddress ]\n    = useState<AccountContactModel>(getInitialAccountContact(true));\n  const [ userShippingAddress, setUserShippingAddress ]\n    = useState<AccountContactModel>(getInitialAccountContact(false));\n\n  return (\n    <Row>\n      <Col xs={12}>\n        <p>\n          Your account will need both a billing and a shipping address assigned\n          for payments and shipments.\n        </p>\n      </Col>\n      <Col xs={6}>\n        <Button\n          variant=\"primary\"\n          className=\"btn-block mb-3 w-100\"\n          onClick={() => setShowAddBillingAddressModal(true)}>\n          {userBillingAddressComplete\n            ? \"Edit Billing Address\"\n            : \"Add a Billing Address\"}\n        </Button>\n        <NewAddressModal\n          type=\"billing\"\n          show={showAddBillingAddressModal}\n          onCancel={() => setShowAddBillingAddressModal(false)}\n          onConfirm={data => {\n            setUserBillingAddress({\n              ...data,\n              IsPrimary: false,\n              IsBilling: true,\n            });\n            setUserBillingAddressComplete(true);\n            setShowAddBillingAddressModal(false);\n          }}\n          accountContact={userBillingAddress}\n        />\n        <div className=\"mb-2\">\n          {userBillingAddressComplete\n            ? <AddressBlock\n              address={userBillingAddress?.Slave?.Address}\n              contact={userBillingAddress?.Slave}\n            />\n            : null}\n        </div>\n      </Col>\n      <Col xs={6}>\n        <Button\n          variant=\"secondary\"\n          className=\"btn-block mb-3 w-100\"\n          onClick={() => setShowAddShippingAddressModal(true)}>\n          {userShippingAddressComplete\n            ? \"Edit Shipping Address\"\n            : \"Add a Shipping Address\"}\n        </Button>\n        <NewAddressModal\n          show={showAddShippingAddressModal}\n          type=\"shipping\"\n          onCancel={() => setShowAddShippingAddressModal(false)}\n          onConfirm={(data: AccountContactModel) => {\n            setUserShippingAddress({\n              ...data,\n              IsPrimary: true,\n              IsShipping: false,\n              Slave: {\n                ...data.Slave,\n                Address: {\n                  ...data.Slave.Address,\n                  CustomKey: \"SHIP TO\"\n                }\n              }\n            });\n            setUserShippingAddressComplete(true);\n            setShowAddShippingAddressModal(false);\n          }}\n          accountContact={userShippingAddress}\n        />\n        {userShippingAddressComplete ? null\n          : <Button\n            variant=\"secondary\"\n            disabled={!userBillingAddressComplete}\n            className=\"btn-block mb-3 w-100\"\n            id=\"btnRegAddShippingByCopyBilling\"\n            name=\"btnRegAddShippingByCopyBilling\"\n            onClick={() => {\n              if (userBillingAddressComplete) {\n                setUserShippingAddress({\n                  ...userBillingAddress,\n                  IsBilling: false,\n                  IsPrimary: true,\n                  Slave: {\n                    ...userBillingAddress.Slave,\n                    Address: {\n                      ...userBillingAddress.Slave.Address,\n                      CustomKey: \"SHIP TO\"\n                    }\n                  }\n                });\n                setUserShippingAddressComplete(true);\n              }\n            }}>\n            Copy the billing address for shipping\n          </Button>\n        }\n        <div className=\"mb-2\">\n          {userShippingAddressComplete\n            ? <AddressBlock\n              address={userShippingAddress?.Slave?.Address}\n              contact={userShippingAddress?.Slave}\n            />\n            : null}\n        </div>\n      </Col>\n      <Col xs={12}>\n        <Button\n          variant=\"primary\"\n          className=\"btn-block mb-3\"\n          id=\"btnSubmit_registrationStepAddressBook\"\n          name=\"btnSubmit_registrationStepAddressBook\"\n          disabled={\n            Boolean(!userShippingAddressComplete || !userBillingAddressComplete)\n          }\n          onClick={() => {\n            if (userShippingAddressComplete && userBillingAddressComplete) {\n              onCompleteAddressBookStep(userBillingAddress, userShippingAddress);\n            }\n          }}>\n          {continueText}\n        </Button>\n      </Col>\n    </Row>\n  );\n};\n","import { Button } from \"react-bootstrap\";\n\ninterface IRegistrationWalletStepProps {\n  onCompleteWalletStep: Function;\n  continueText: string;\n}\n\nexport const RegistrationWalletStep = (props: IRegistrationWalletStepProps): JSX.Element => {\n  const { onCompleteWalletStep, continueText } = props;\n\n  // TODO: implement\n  return (\n    <>\n      <h2>RegistrationWalletStep</h2>\n      <Button variant=\"primary\" onClick={() => onCompleteWalletStep(null)}>\n        {continueText}\n      </Button>\n    </>\n  );\n};\n","import { Button } from \"react-bootstrap\";\n\ninterface IRegistrationCustomStepProps {\n  onCompleteCustomStep: Function;\n  continueText: string;\n}\n\nexport const RegistrationCustomStep = (props: IRegistrationCustomStepProps): JSX.Element => {\n  const { onCompleteCustomStep, continueText } = props;\n\n  // TODO: implement\n  return (\n    <>\n      <h2>RegistrationWalletStep</h2>\n      <Button variant=\"primary\" onClick={() => onCompleteCustomStep(null)}>\n        {continueText}\n      </Button>\n    </>\n  );\n};\n","import { Col } from \"react-bootstrap\";\nimport { useForm } from \"react-hook-form\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { CheckboxFormGroup } from \"src/_shared/forms/formGroups\";\n\ninterface IRegistrationConfirmationStepProps {\n  submitRegistrationForm: Function;\n  parentRunning: boolean;\n  continueText: string;\n}\n\nexport const RegistrationConfirmationStep = (\n  props: IRegistrationConfirmationStepProps\n): JSX.Element => {\n  const { submitRegistrationForm, parentRunning, continueText } = props;\n  const {\n    register,\n    handleSubmit,\n    formState: { errors }\n  } = useForm({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const onSubmit = (_data: unknown) => {\n    submitRegistrationForm();\n  };\n\n  return (\n    <form className=\"row position-relative\" onSubmit={handleSubmit(onSubmit)}>\n      {parentRunning ? <LoadingWidget overlay={true} /> : null}\n      <Col xs={12}>\n        <CheckboxFormGroup\n          formIdentifier=\"ckAgreed\"\n          register={register}\n          errors={errors}\n          checkboxOptions={[\n            {\n              identifier: \"ckAgreedTerms\",\n              labelKey: \"ui.storefront.user.registration.IAgreeToTheTermsOfUseForThisWebsite\",\n              labelText: \"I agree to the terms of use for this website\",\n              required: true,\n              requiredMessage: \"You are required to agree to the terms\"\n            }\n          ]}\n        />\n      </Col>\n      <Col xs={12}>\n        <input\n          type=\"submit\"\n          className=\"btn btn-primary my-3\"\n          title={continueText}\n          id=\"btnSubmit_registrationStepConfirmation\"\n          name=\"btnSubmit_registrationStepConfirmation\"\n        />\n      </Col>\n    </form>\n  );\n};\n","import { Fragment } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Col, Row } from \"react-bootstrap\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { corsLink } from \"src/_shared/common/Cors\";\ninterface IRegistrationCompletedStepProps {\n  cefConfig: CEFConfig;\n  emailRegisteredWith: string;\n}\n\nexport const RegistrationCompletedStep = (props: IRegistrationCompletedStepProps): JSX.Element => {\n  const { emailRegisteredWith, cefConfig } = props;\n  const { t } = useTranslation();\n\n  return (\n    <Fragment>\n      <Row as={Alert}\n        variant=\"success\"\n        className=\"text-center align-items-center pt-4\">\n        <Col xs={12} className=\"mb-3\">\n          <p className=\"mb-0\">\n            <strong>{t(\"ui.storefront.common.Success.Exclamation\")}</strong>\n            &nbsp;\n            <span>{t(\"ui.storefront.user.registration.Success.UsernameMessage\")}</span>\n            &nbsp;\n            <strong>{emailRegisteredWith}</strong>\n            &nbsp;\n          </p>\n          {cefConfig.authProviderMFAEnabled\n            ? <>\n              <span>{t(\"ui.storefront.user.registration.mfaMessage\")}</span>\n            </>\n            : <span>{t(\"ui.storefront.user.registration.Success1.Message\")}</span>}\n        </Col>\n        {cefConfig.authProviderMFAEnabled\n          ? null\n          : <>\n            <Col xs={12} className=\"mb-2\">\n              <span className=\"d-block\">{\"What's next?\"}</span>\n            </Col>\n            {cefConfig.featureSet.payments.wallet.enabled\n              ? <>\n                <Col md={4} xl={12}>\n                  <span>\n                    {\"Save time at checkout by creating your\"}&nbsp;\n                    <a href={corsLink(cefConfig, \"/wallet\", \"dashboard\")}>\n                      {t(\"ui.storefront.userDashboard2.userDashboard.Wallet\")}\n                    </a>\n                  </span>\n                </Col>\n                <Col md={4} xl={12}>\n                  <span>{\"OR\"}</span>\n                </Col>\n              </>\n              : null}\n            <Col md={4} xl={12}>\n              <div className=\"d-flex flex-column justify-content-center align-items-center\">\n                <span>{\"Get right to shopping!\"}</span>\n                <a href={corsLink(cefConfig, \"/\", \"catalog\")}>\n                  {t(\"ui.storefront.cart.continueShopping\")}\n                </a>\n              </div>\n            </Col>\n          </>}\n      </Row>\n    </Fragment>\n  );\n};\n","import { Col } from \"react-bootstrap\";\n\nexport const RegistrationHeader = (): JSX.Element => {\n\n  return (\n    <>\n      <Col sm={2} className=\"d-none d-sm-block create-account-header\" />\n      <Col\n        xs={12}\n        sm={8}\n        className=\"text-center mb-4\">\n        <h1 className=\"mb-2 pt-4\"\n          data-sid=\"txtRegistrationHeaderTitle\"\n          id=\"header-font\">\n            Let&apos;s get\n          <span className=\"text-primary d-block\" id=\"header-font\">started!</span>\n        </h1>\n        <h2 className=\"py-4\">Create Account</h2>\n      </Col>\n      <Col sm={2} className=\"d-none d-sm-block\" />\n    </>\n  );\n};\n","import { Fragment, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Container, Row } from \"react-bootstrap\";\n// TODO: import { useHistory } from \"react-router-dom\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { RegisterNewUserDto } from \"src/_api/cvApi.Authentication\";\nimport { RegistrationStepsHeader } from \"src/Authentication/Registration/steps/_shared/RegistrationStepsHeader\";\nimport {\n  IRegistrationStep,\n  registrationStepFactory\n} from \"src/Authentication/Registration/steps/registrationSteps\";\nimport { RegistrationBasicInfoStep } from \"src/Authentication/Registration/steps/basicInfo/RegistrationBasicInfoStep\";\nimport {\n  RegistrationAddressBookStep\n} from \"src/Authentication/Registration/steps/addressBook/RegistrationAddressBookStep\";\nimport { RegistrationWalletStep } from \"src/Authentication/Registration/steps/wallet/RegistrationWalletStep\";\nimport { RegistrationCustomStep } from \"src/Authentication/Registration/steps/custom/RegistrationCustomStep\";\nimport {\n  RegistrationConfirmationStep\n} from \"src/Authentication/Registration/steps/confirmation/RegistrationConfirmationStep\";\nimport { RegistrationCompletedStep } from \"src/Authentication/Registration/steps/completed/RegistrationCompletedStep\";\nimport {\n  IRegistrationProps,\n  IRegistrationStepBasicInfoData\n} from \"src/Authentication/Registration/_registrationTypes\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { AccountContactModel, ContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { RegistrationHeader } from \"src/Authentication/Registration/RegistrationHeader\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { LoginResponseStatus, useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\nexport const Registration = (props: IRegistrationProps): JSX.Element => {\n  const [ allSteps, setAllSteps ] = useState<IRegistrationStep[]>(null);\n  const [ step, setStep ] = useState(1);\n  const [ basicInfoStepData, setStepBasicInfoStepData ]\n    = useState<IRegistrationStepBasicInfoData>({\n      emEmailRegistration: \"\",\n      emUsername: \"\",\n      firstNameRegistration: \"\",\n      lastNameRegistration: \"\",\n      pwPasswordRegistration: \"\",\n      telPhoneRegistration: \"\"\n    });\n  const [ stepAddressBookBillingData, setStepAddressBookBillingData ]\n    = useState<AccountContactModel>(null);\n  const [ stepAddressBookShippingData, setStepAddressBookShippingData ]\n    = useState<AccountContactModel>(null);\n  const [ , setStepWalletData ] = useState<any>();\n  const [ , setStepCustomData ] = useState<any>();\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>();\n  const [ mapBillingOrShippingAddress, setMapBillingOrShippingAddress ] = useState<boolean>(true);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n  // TODO: const history = useHistory();\n  const cefConfig = useCefConfig();\n  const authFactory = useAuthFactory();\n  const currentUser = useCurrentUser();\n\n  useEffect(() => {\n    if (!allSteps) {\n      return;\n    }\n    if (currentUser.ID > 0 && step < allSteps.length) {\n      setStep(allSteps.length);\n    }\n  }, [ currentUser, allSteps ]);\n\n  const proceed = (): void => {\n    setStep(s => s + 1);\n  };\n\n  const onCompleteBasicInfoStep = (\n    data: IRegistrationStepBasicInfoData\n  ): void => {\n    setStepBasicInfoStepData(data);\n    proceed();\n  };\n\n  const onCompleteAddressBookStep = (\n    billingAddress: AccountContactModel,\n    shippingAddress: AccountContactModel\n  ): void => {\n    setStepAddressBookBillingData(billingAddress);\n    setStepAddressBookShippingData(shippingAddress);\n    proceed();\n  };\n\n  const onCompleteWalletStep = (walletData: any): void => {\n    setStepWalletData(walletData);\n    proceed();\n  };\n\n  const onCompleteCustomStep = (customData: any): void => {\n    setStepCustomData(customData);\n    proceed();\n  };\n\n  const submitRegistrationForm = () => {\n    setRunning();\n    let contact: ContactModel = {\n      Active: true,\n      AddressID: null,\n      AddressKey: null,\n      CreatedDate: new Date(),\n      CustomKey: basicInfoStepData.emEmailRegistration,\n      Email1: basicInfoStepData.emEmailRegistration,\n      FirstName: basicInfoStepData.firstNameRegistration,\n      ID: null,\n      LastName: basicInfoStepData.lastNameRegistration,\n      TypeID: 1,\n      TypeKey: \"General\"\n    };\n    if (mapBillingOrShippingAddress) {\n      if (stepAddressBookBillingData?.Slave) {\n        contact = { ...contact, ...stepAddressBookBillingData.Slave };\n        if (stepAddressBookBillingData.Slave.Address) {\n          contact.Address = {\n            ...stepAddressBookBillingData.Slave.Address,\n            CustomKey: basicInfoStepData.emEmailRegistration\n          };\n        }\n      }\n    } else if (stepAddressBookShippingData?.Slave) {\n      contact = { ...contact, ...stepAddressBookShippingData.Slave };\n      if (stepAddressBookShippingData.Slave.Address) {\n        contact.Address = {\n          ...stepAddressBookShippingData.Slave.Address,\n          CustomKey: basicInfoStepData.emEmailRegistration\n        };\n      }\n    }\n    const dto: RegisterNewUserDto = {\n      Active: true,\n      AddressBook: [],\n      Contact: contact,\n      ContactID: null,\n      CreatedDate: new Date(),\n      CustomKey: basicInfoStepData.emEmailRegistration,\n      Email: basicInfoStepData.emEmailRegistration,\n      ID: null,\n      InService: null,\n      IsSMSAllowed: false,\n      OverridePassword: basicInfoStepData.pwPasswordRegistration,\n      SerializableAttributes: {},\n      Status: null,\n      StatusID: null,\n      StatusKey: \"Registered\",\n      StatusName: null,\n      Type: null,\n      TypeID: null,\n      TypeKey: null,\n      TypeName: \"Customer\",\n      UseAutoPay: null,\n      UserName: basicInfoStepData.emEmailRegistration\n    };\n    if (stepAddressBookBillingData) {\n      dto.AddressBook.push(stepAddressBookBillingData);\n    }\n    if (stepAddressBookShippingData) {\n      dto.AddressBook.push(stepAddressBookShippingData);\n    }\n    authFactory.register(dto)\n      .then(() => authFactory.login({ Username: dto.UserName, Password: dto.OverridePassword }))\n      .then(r => {\n        proceed();\n        finishRunning();\n        if (r.Status === LoginResponseStatus.Challenge) {\n          setShowLoginModal(true);\n        }\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  useEffect(() => {\n    if (!cefConfig || allSteps) {\n      return;\n    }\n    const stepsToShow = registrationStepFactory(cefConfig);\n    const fullSteps = stepsToShow.map((stepI, index) => {\n      const continueText = t(stepsToShow[index + 1]?.continueTextKey ?? \"\");\n      return {\n        ...stepI,\n        continueText\n      };\n    });\n    setMapBillingOrShippingAddress(cefConfig.featureSet.addressBook.mapBillingOrShippingAddress);\n    setAllSteps(fullSteps);\n  }, [ cefConfig ]);\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  return (\n    <AuthGuard\n      requiresNoAuth={true}\n      redirectPath={\n        corsLink(\n          cefConfig,\n          cefConfig.routes.site.root,\n          \"site\"\n        )\n      }>\n      <Container>\n        <Row>\n          <RegistrationHeader />\n          {viewState.hasError\n            && <ErrorView viewState={viewState} />\n          }\n          <Col xs={12}>\n            {allSteps\n              && allSteps.map((stepData, index) => {\n                const { continueText, titleKey: title } = stepData;\n                let component = null;\n                switch (stepData.name) {\n                  case ServiceStrings.registration.steps.basicInfo:\n                    component\n                      = <RegistrationBasicInfoStep\n                        key={stepData.name}\n                        cefConfig={cefConfig}\n                        continueText={continueText}\n                        onCompleteBasicInfoStep={onCompleteBasicInfoStep}\n                      />;\n                    break;\n                  case ServiceStrings.registration.steps.addressBook:\n                    component\n                      = <RegistrationAddressBookStep\n                        key={stepData.name}\n                        continueText={continueText}\n                        onCompleteAddressBookStep={onCompleteAddressBookStep}\n                        basicInfoStepData={basicInfoStepData}\n                      />;\n                    break;\n                  case ServiceStrings.registration.steps.wallet:\n                    component\n                      = <RegistrationWalletStep\n                        key={stepData.name}\n                        onCompleteWalletStep={onCompleteWalletStep}\n                        continueText={continueText}\n                      />;\n                    break;\n                  case ServiceStrings.registration.steps.custom:\n                    component\n                      = <RegistrationCustomStep\n                        key={stepData.name}\n                        onCompleteCustomStep={onCompleteCustomStep}\n                        continueText={continueText}\n                      />;\n                    break;\n                  case ServiceStrings.registration.steps.confirmation:\n                    component\n                      = <RegistrationConfirmationStep\n                        key={stepData.name}\n                        continueText={continueText}\n                        submitRegistrationForm={submitRegistrationForm}\n                        parentRunning={viewState.running}\n                      />;\n                    break;\n                  case ServiceStrings.registration.steps.completed:\n                    component\n                      = <RegistrationCompletedStep\n                        cefConfig={cefConfig}\n                        key={stepData.name}\n                        emailRegisteredWith={\n                          basicInfoStepData ? basicInfoStepData.emEmailRegistration : \"\"\n                        }\n                      />;\n                    break;\n                  default:\n                    console.error(\"Failed to find step for registration in cefConfig\");\n                    break;\n                }\n                return (\n                  <Fragment key={title}>\n                    <Row>\n                      <Col xs={12} sm=\"auto\">\n                        <RegistrationStepsHeader\n                          valid={step >= index + 2 || currentUser.ID > 0}\n                          titleKey={title}\n                        />\n                        <hr />\n                      </Col>\n                    </Row>\n                    {step === index + 1 && component}\n                  </Fragment>\n                );\n              })}\n          </Col>\n        </Row>\n        <LoginModal\n          show={showLoginModal}\n          onConfirm={() => {\n            setShowLoginModal(false);\n          }}\n          onCancel={() => setShowLoginModal(false)}\n        />\n      </Container>\n    </AuthGuard>\n  );\n};\n","import { Alert } from \"react-bootstrap\";\n\ninterface IMessageProps {\n  error?: boolean;\n  message: string;\n}\n\nexport const Message = (props: IMessageProps): JSX.Element => {\n  const { error, message } = props;\n\n  let alertClass = \"info\";\n  let icon = null;\n\n  if (typeof error === \"boolean\") {\n    alertClass = error ? \"danger\" : \"success\";\n    icon = error ? \"fa-exclamation-triangle\" : \"fa-check-circle\";\n  }\n\n  return (\n    <Alert variant={alertClass} className=\"d-flex align-items-center\">\n      {icon ? <i className={`fal ${icon} fa-2x fa-fw me-2`} /> : null}\n      <b className=\"text-break\">{message}</b>\n    </Alert>\n  );\n};\n","/* eslint-disable max-len */\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Form, InputGroup, ListGroup, Row } from \"react-bootstrap\";\nimport { Message } from \"src/_shared/common/Message\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport cvApi from \"src/_api/cvApi\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\n\nconst pattern = /[a-zA-Z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/u;\n\nexport const ForgotPassword = (): JSX.Element => {\n  const [ email, setEmail ] = useState<string>(\"\");\n  const [ wasSent, setWasSent ] = useState<boolean>(false);\n  const [ isFormValid, setIsFormValid ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    setIsFormValid(pattern.test(email));\n    setWasSent(false);\n  }, [ email ]);\n\n  function submitRequestForPasswordReset(): void {\n    setRunning();\n    cvApi.authentication\n      .ForgotPassword({ Email: email })\n      .then(res => {\n        setWasSent(true);\n        finishRunning(!res.data.ActionSucceeded, null, res.data.Messages);\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  return (\n    <AuthGuard\n      requiresNoAuth={true}\n      redirectPath={\n        corsLink(\n          cefConfig,\n          cefConfig.routes.site.root,\n          \"site\"\n        )\n      }\n      delay={0}>\n      <div className=\"d-flex flex-column justify-content-center align-items-center\">\n        <div className=\"form-vertical bg-brand-light vw-100 py-4 d-flex flex-column justify-content-center align-items-center\">\n          <div className=\"forgot-password-wrapper\">\n            <Col xs={12}>\n              <h1 className=\"mb-2 pt-4 text-center\"\n                data-sid=\"txtRegistrationHeaderTitle\"\n                id=\"header-font\">\n                Forgot\n                <span className=\"text-primary d-block\" id=\"header-font\">Password?</span>\n              </h1>\n              <p className=\"py-4 text-center text-balance password-reset-info mx-auto\">\n              The password reset link sent to you will be valid for 24 hours. Check your spam (junk) folders if you don’t see an email from us.\n              </p>\n            </Col>\n            <Col xs={12}>\n              <div className=\"forgot-password-container mx-auto\">\n                <div>\n                  {viewState.running\n                    ? <LoadingWidget />\n                    : <Form.Group as={Col}\n                      xs={12}\n                      className=\"has-error\">\n                      <Form.Label htmlFor=\"txtForgotPasswordEmail\">\n                        <span>{t(\"ui.storefront.common.Email\")}</span>\n                            &nbsp;\n                        <span className=\"text-danger\">*</span>\n                      </Form.Label>\n                      <InputGroup>\n                        <Form.Control\n                          type=\"email\"\n                          id=\"txtForgotPasswordEmail\"\n                          name=\"txtForgotPasswordEmail\"\n                          placeholder=\"Email\"\n                          required\n                          isValid={isFormValid}\n                          isInvalid={!isFormValid && email.length > 0}\n                          pattern={String(pattern)}\n                          value={email}\n                          onChange={e => setEmail(e.target.value)}\n                        />\n                        <Form.Control.Feedback data-sid=\"txtInvalidEmailFormat\" type=\"invalid\">\n                          {t(\"ui.storefront.userDashboard2.controls.accountProfile.InvalidEmailFormat\")}\n                        </ Form.Control.Feedback>\n                      </InputGroup>\n                    </Form.Group>\n                  }\n                </div>\n                <div className=\"d-flex align-items-center pt-4\">\n                  <Col xs={12} className=\"d-flex align-items-center\">\n                    <Button\n                      id=\"btnForgotPasswordRequestPassword\"\n                      className=\"btn-fat mx-auto\"\n                      variant=\"primary\"\n                      disabled={viewState.running || wasSent || !isFormValid}\n                      onClick={submitRequestForPasswordReset}\n                      title={t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}\n                      aria-label={t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}>\n                      {t(\"ui.storefront.user.forgotPassword.RequestPasswordReset\")}\n                    </Button>\n                  </Col>\n                </div>\n              </div>\n              {wasSent && viewState.hasError\n                ? <Row className=\"mt-3\">\n                  <Col xs={12}>\n                    <ListGroup as=\"ul\" className=\"list-unstyled\">\n                      {Array.isArray(viewState.errorMessages) && viewState.errorMessages.length\n                        ? viewState.errorMessages.map(msg => <ListGroup.Item className=\"border-0 p-0\"\n                          key={msg as string}>\n                          <Message error={true} message={msg as string} />\n                        </ListGroup.Item>)\n                        : <ListGroup.Item className=\"border-0 p-0\">\n                          <Message error={true} message={viewState.errorMessage as string} />\n                        </ListGroup.Item>\n                      }\n                    </ListGroup>\n                  </Col>\n                </Row>\n                : null}\n              {wasSent && !viewState.hasError\n                ? <Row className=\"mt-3\">\n                  <Col xs={12}>\n                    <Alert data-sid=\"txtPasswordRequestSuccess\"\n                      variant=\"success\"\n                      className=\"d-flex align-items-center\">\n                      <i className=\"fal fa-fw fa-check fa-2x fa-fw\" aria-hidden={true} />\n                      <b>{t(\"ui.storefront.user.forgotPassword.CheckYourEmailForAPasswordResetLink\")}</b>\n                    </Alert>\n                  </Col>\n                </Row>\n                : null}\n            </Col>\n          </div>\n        </div>\n      </div>\n    </AuthGuard>\n  );\n};\n","/** @format */\n\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Form, InputGroup, ListGroup, Row } from \"react-bootstrap\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { Message } from \"src/_shared/common/Message\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport cvApi from \"src/_api/cvApi\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport const ForgotUsername = (): JSX.Element => {\n  const [ email, setEmail ] = useState<string>(\"\");\n  const [ wasSent, setWasSent ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    setWasSent(false);\n  }, [ email ]);\n\n  function submitRequestForUsername(): void {\n    setRunning();\n    cvApi.authentication\n      .ForgotUsername({ Email: email })\n      .then(res => {\n        setWasSent(true);\n        finishRunning(res.data.Messages.length > 0, null, res.data.Messages);\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  }\n\n  return (\n    <Row as={Form} className=\"form-vertical\">\n      <Col xs={12}>\n        <h2 className=\"text-center ng-scope\">{t(\"ui.storefront.user.forgotUsername.RequestYourUsername\")}</h2>\n        <p>\n          <span>{t(\"ui.storefront.user.forgotPassword.YourPrivacyIsImportantToUs.Message\")}</span>\n          &nbsp;\n          <span>\n            {t(\n              \"ui.storefront.user.forgotPassword.IsAddedToYourEmailWhitelistApprovedSendersAndCheckYourSpamJunkFolders\"\n            )}\n          </span>\n        </p>\n      </Col>\n      <Col xs={12}>\n        <Row>\n          {viewState.running\n            ? <LoadingWidget />\n            : <Form.Group as={Col}\n              xs={12}\n              className=\"has-error\">\n              <Form.Label htmlFor=\"txtForgotUsernameEmail\">\n                <span>{t(\"ui.storefront.common.Email\")}</span>\n                &nbsp;\n                <span className=\"text-danger\">*</span>\n              </Form.Label>\n              <InputGroup>\n                <InputGroup.Text>\n                  <span className=\"input-group-text h-100\">\n                    <i className=\"fal fa-fw fa-at fa-fw\" />\n                  </span>\n                </InputGroup.Text>\n                <Form.Control\n                  type=\"email\"\n                  id=\"txtForgotUsernameEmail\"\n                  name=\"txtForgotUsernameEmail\"\n                  placeholder=\"john.smith@email.com\"\n                  required\n                  value={email}\n                  onChange={e => setEmail(e.target.value)}\n                />\n              </InputGroup>\n            </Form.Group>\n          }\n        </Row>\n        <Row className=\"align-items-center\">\n          <Col className=\"text-end\">\n            <a href={corsLink(cefConfig, \"/\", \"registration\")}>\n              <span>{t(\"ui.storefront.common.Register\")}</span>\n            </a>\n          </Col>\n          <Col xs=\"auto\">\n            <Button\n              variant=\"primary\"\n              disabled={viewState.running || wasSent}\n              onClick={submitRequestForUsername}\n              title={t(\"ui.storefront.user.forgotUsername.RetrieveUsername\")}\n              aria-label={t(\"ui.storefront.user.forgotUsername.RetrieveUsername\")}>\n              {t(\"ui.storefront.user.forgotUsername.RetrieveUsername\")}\n            </Button>\n          </Col>\n        </Row>\n        {wasSent && viewState.hasError\n          ? <Row className=\"mt-3\">\n            <Col xs={12}>\n              <ListGroup as=\"ul\" className=\"list-unstyled\">\n                {Array.isArray(viewState.errorMessages) && viewState.errorMessages.length\n                  ? viewState.errorMessages.map(msg => <ListGroup.Item key={msg as string}>\n                    <Message error={true} message={msg as string} />\n                  </ListGroup.Item>)\n                  : <ListGroup.Item>\n                    <Message error={true} message={viewState.errorMessage as string} />\n                  </ListGroup.Item>\n                }\n              </ListGroup>\n            </Col>\n          </Row>\n          : null}\n        {wasSent && !viewState.hasError\n          ? <Row className=\"mt-3\">\n            <Col xs={12}>\n              <Alert variant=\"success\" className=\"d-flex align-items-center\">\n                <i className=\"fal fa-fw fa-check fa-2x fa-fw\" aria-hidden={true} />\n                <b>{t(\"ui.storefront.user.forgotUsername.CheckYourEmailForYourUsername\")}</b>\n              </Alert>\n            </Col>\n          </Row>\n          : null}\n      </Col>\n    </Row>\n  );\n};\n","/** @format */\n\nimport { Col, Container, Row } from \"react-bootstrap\";\n\nexport const Privacy = (): JSX.Element => <Container>\n  <Row>\n    <Col xs={12} className=\"my-4\">\n      <span>\n        <div className=\"text-start\">\n          <p>\n              Clarity eCommerce Development Website is committed to protecting your privacy and developing technology\n              that gives you the most powerful and safe online experience. This Statement of Privacy applies to the\n              Clarity eCommerce Development Website site and governs data collection and usage. By using the Clarity\n              eCommerce Development Website site, you consent to the data practices described in this statement.\n          </p>\n          <p>\n            <span className=\"SubHead\">Collection of your Personal Information</span>\n          </p>\n          <p>\n              Clarity eCommerce Development Website collects personally identifiable information, such as your email\n              address, name, home or work address or telephone number. Clarity eCommerce Development Website also\n              collects anonymous demographic information, which is not unique to you, such as your ZIP code, age,\n              gender, preferences, interests and favorites.\n          </p>\n          <p>\n              There is also information about your computer hardware and software that is automatically collected by\n              Clarity eCommerce Development Website. This information can include: your IP address, browser type, domain\n              names, access times and referring website addresses. This information is used by Clarity eCommerce\n              Development Website for the operation of the service, to maintain quality of the service, and to provide\n              general statistics regarding use of the Clarity eCommerce Development Website site.\n          </p>\n          <p>\n              Please keep in mind that if you directly disclose personally identifiable information or personally\n              sensitive data through Clarity eCommerce Development Website public message boards, this information may\n              be collected and used by others. Note: Clarity eCommerce Development Website does not read any of your\n              private online communications.\n          </p>\n          <p>\n              Clarity eCommerce Development Website encourages you to review the privacy statements of Web sites you\n              choose to link to from Clarity eCommerce Development Website so that you can understand how those Web\n              sites collect, use and share your information. Clarity eCommerce Development Website is not responsible\n              for the privacy statements or other content on Web sites outside of the Clarity eCommerce Development\n              Website and Clarity eCommerce Development Website family of Web sites.\n          </p>\n          <p>\n            <span className=\"SubHead\">Use of your Personal Information</span>\n          </p>\n          <p>\n              Clarity eCommerce Development Website collects and uses your personal information to operate the Clarity\n              eCommerce Development Website Web site and deliver the services you have requested. Clarity eCommerce\n              Development Website also uses your personally identifiable information to inform you of other products or\n              services available from Clarity eCommerce Development Website and its affiliates. Clarity eCommerce\n              Development Website may also contact you via surveys to conduct research about your opinion of current\n              services or of potential new services that may be offered.\n          </p>\n          <p>\n              Clarity eCommerce Development Website does not sell, rent or lease its customer lists to third parties.\n              Clarity eCommerce Development Website may, from time to time, contact you on behalf of external business\n              partners about a particular offering that may be of interest to you. In those cases, your unique\n              personally identifiable information (e-mail, name, address, telephone number) is not transferred to the\n              third party. In addition, Clarity eCommerce Development Website may share data with trusted partners to\n              help us perform statistical analysis, send you email or postal mail, provide customer support, or arrange\n              for deliveries. All such third parties are prohibited from using your personal information except to\n              provide these services to Clarity eCommerce Development Website, and they are required to maintain the\n              confidentiality of your information.\n          </p>\n          <p>\n              Clarity eCommerce Development Website does not use or disclose sensitive personal information, such as\n              race, religion, or political affiliations, without your explicit consent.\n          </p>\n          <p>\n              Clarity eCommerce Development Website keeps track of the Web sites and pages our customers visit within\n              Clarity eCommerce Development Website, in order to determine what Clarity eCommerce Development Website\n              services are the most popular. This data is used to deliver customized content and advertising within\n              Clarity eCommerce Development Website to customers whose behavior indicates that they are interested in a\n              particular subject area.\n          </p>\n          <p>\n              Clarity eCommerce Development Website Web sites will disclose your personal information, without notice,\n              only if required to do so by law or in the good faith belief that such action is necessary to: (a) conform\n              to the edicts of the law or comply with legal process served on Clarity eCommerce Development Website or\n              the site; (b) protect and defend the rights or property of Clarity eCommerce Development Website; and, (c)\n              act under exigent circumstances to protect the personal safety of users of Clarity eCommerce Development\n              Website, or the public.\n          </p>\n          <p>\n            <span className=\"SubHead\">Use of Cookies</span>\n          </p>\n          <p>\n              The Clarity eCommerce Development Website Web site use &quot;cookies&quot; to help you personalize your\n              online experience. A cookie is a text file that is placed on your hard disk by a Web page server. Cookies\n              cannot be used to run programs or deliver viruses to your computer. Cookies are uniquely assigned to you,\n              and can only be read by a web server in the domain that issued the cookie to you.\n          </p>\n          <p>\n              One of the primary purposes of cookies is to provide a convenience feature to save you time. The purpose\n              of a cookie is to tell the Web server that you have returned to a specific page. For example, if you\n              personalize Clarity eCommerce Development Website pages, or register with Clarity eCommerce Development\n              Website site or services, a cookie helps Clarity eCommerce Development Website to recall your specific\n              information on subsequent visits. This simplifies the process of recording your personal information, such\n              as billing addresses, shipping addresses, and so on. When you return to the same Clarity eCommerce\n              Development Website Web site, the information you previously provided can be retrieved, so you can easily\n              use the Clarity eCommerce Development Website features that you customized.\n          </p>\n          <p>\n              You have the ability to accept or decline cookies. Most Web browsers automatically accept cookies, but you\n              can usually modify your browser setting to decline cookies if you prefer. If you choose to decline\n              cookies, you may not be able to fully experience the interactive features of the Clarity eCommerce\n              Development Website services or Web sites you visit.\n          </p>\n          <p>\n            <span className=\"SubHead\">Security of your Personal Information</span>\n          </p>\n          <p>\n              Clarity eCommerce Development Website secures your personal information from unauthorized access, use or\n              disclosure. Clarity eCommerce Development Website secures the personally identifiable information you\n              provide on computer servers in a controlled, secure environment, protected from unauthorized access, use\n              or disclosure. When personal information (such as a credit card number) is transmitted to other Web sites,\n              it is protected through the use of encryption, such as the Secure Socket Layer (SSL) protocol.\n          </p>\n          <p>\n            <span className=\"SubHead\">Changes to this Statement</span>\n          </p>\n          <p>\n              Clarity eCommerce Development Website will occasionally update this Statement of Privacy to reflect\n              company and customer feedback. Clarity eCommerce Development Website encourages you to periodically review\n              this Statement to be informed of how Clarity eCommerce Development Website is protecting your information.\n          </p>\n          <p>\n            <span className=\"SubHead\">Contact Information</span>\n          </p>\n          <p>\n              Clarity eCommerce Development Website welcomes your comments regarding this Statement of Privacy. If you\n              believe that Clarity eCommerce Development Website has not adhered to this Statement, please contact\n              Clarity eCommerce Development Website at <a href=\"mailto:dev@claritymis.com\">dev@claritymis.com</a>. We\n              will use commercially reasonable efforts to promptly determine and remedy the problem.\n          </p>\n        </div>\n      </span>\n    </Col>\n  </Row>\n</Container>;\n","import { useState } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Form, ListGroup, Row } from \"react-bootstrap\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { PasswordInputFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\n\ninterface IPasswordResetData {\n  emForcedResetUsername: string;\n  pwForcedResetPassword: string;\n  pwForcedResetNewPassword: string;\n}\n\nexport const ForcedPasswordReset = (): JSX.Element => {\n  const [ wasSent, setWasSent ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n\n  const history = useHistory();\n  const location = useLocation();\n\n  const params = new URLSearchParams(location.search);\n  const returnUrl = params.get(\"returnUrl\");\n\n  const {\n    register,\n    handleSubmit,\n    formState\n  } = useForm<IPasswordResetData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\",\n    defaultValues: {\n      emForcedResetUsername: params.get(\"email\") ?? \"\"\n    }\n  });\n\n  const onSubmit: SubmitHandler<IPasswordResetData> = data => {\n    setRunning();\n    setWasSent(false);\n    cvApi.authentication.ValidatePasswordIsGood({\n      Password: data.pwForcedResetNewPassword\n    }).then(res => {\n      if (!res?.data?.ActionSucceeded) {\n        throw new Error(\"New password does not meet requirements\");\n      }\n      return cvApi.authentication.ForcedPasswordReset({\n        Email: data.emForcedResetUsername,\n        OldPassword: data.pwForcedResetPassword,\n        NewPassword: data.pwForcedResetNewPassword\n      });\n    })\n      .then(res => {\n        setWasSent(true);\n        if (!res.data.ActionSucceeded) {\n          throw new Error(null);\n        }\n        setTimeout(() => {\n          history.push(returnUrl ?? \"/\");\n          history.go(0);\n        }, 4000);\n      })\n      .catch(err => {\n        // Error msg handled in JSX\n        finishRunning(true, null);\n      });\n  };\n\n  return (\n    <Row as={Form}\n      className=\"form-vertical\"\n      onSubmit={handleSubmit(onSubmit)}>\n      <Col xs={12}>\n        <h2 className=\"text-center\">\n          {t(\"ui.storefront.user.forcedPasswordReset.YouAreRequiredToChangeYourPassword\")}\n        </h2>\n      </Col>\n      <TextInputFormGroup\n        register={register}\n        errors={formState.errors}\n        formIdentifier=\"emForcedResetUsername\"\n        formClasses=\"mb-3 col-xs-12\"\n        labelKey=\"ui.storefront.common.Username\"\n        placeholderKey=\"ui.storefront.common.Username\"\n        required={true}\n        disabled={true}\n      />\n      <PasswordInputFormGroup\n        register={register}\n        errors={formState.errors}\n        formIdentifier=\"pwForcedResetPassword\"\n        formClasses=\"mb-3 col-xs-12\"\n        labelKey=\"ui.storefront.user.forcedPasswordReset.CurrentPassword\"\n        required={true}\n        placeholderKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourCurrentPassword\"\n        tooltipKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourCurrentPassword\"\n        hideInvalidTooltip={true}\n      />\n      <PasswordInputFormGroup\n        register={register}\n        errors={formState.errors}\n        formIdentifier=\"pwForcedResetNewPassword\"\n        formClasses=\"mb-3 col-xs-12\"\n        labelKey=\"ui.storefront.user.forgotPasswordReturn.NewPassword\"\n        required={true}\n        placeholderKey=\"ui.storefront.userDashboard2.controls.userProfile.EnterYourNewPassword\"\n        tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\n        forceTooltipWithFocus={true}\n        showValidTooltip={true}\n        minLength={6}\n      />\n      <Col xs={12}>\n        <Button\n          as=\"input\"\n          variant=\"primary\"\n          size=\"lg\"\n          type=\"submit\"\n          className=\"btn-block w-100\"\n          disabled={viewState.running || !formState.isValid}\n          value={t(\"ui.storefront.user.forcedPasswordReset.ChangePassword\") as string}\n        />\n      </Col>\n      <Col xs={12}>\n        {wasSent && viewState.hasError\n          ? <Row className=\"mt-3\">\n            <Col xs={12}>\n              <ListGroup\n                as=\"ul\"\n                className=\"list-unstyled\">\n                <ListGroup.Item className=\"border-0 p-0\">\n                  <Alert variant=\"danger\">\n                    <p>\n                      <span>{t(\"ui.storefront.user.forcedPasswordReset.Error\")}</span>&nbsp;\n                      <a href={corsLink(cefConfig, \"/\", \"contactUs\")}>\n                        {t(\"ui.storefront.user.forcedPasswordReset.ContactUs\")}\n                      </a>\n                    </p>\n                  </Alert>\n                </ListGroup.Item>\n              </ListGroup>\n            </Col>\n          </Row>\n          : null}\n        {wasSent && !viewState.hasError\n          ? <Row className=\"mt-3\">\n            <Col xs={12}>\n              <Alert\n                variant=\"success\"\n                className=\"d-flex align-items-center\">\n                <p>\n                  <b>\n                    {t(\"ui.storefront.user.forcedPasswordReset.Success\")}&nbsp;\n                    {t(\"ui.storefront.user.forcedPasswordReset.YourPasswordHasBeenChanged\")}\n                  </b>\n                </p>\n              </Alert>\n            </Col>\n          </Row>\n          : null}\n      </Col>\n    </Row>\n  );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"storeCard\":\"StoreLocatorCard_storeCard__3sa3b\"};","/** @format */\n\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Row, Table } from \"react-bootstrap\";\nimport Card from \"react-bootstrap/Card\";\nimport axios from \"axios\";\nimport { AddressBlock } from \"src/Dashboard/AddressBook/AddressBlock\";\nimport { StoreModel } from \"src/_api/cvApi._DtoClasses\";\nimport classes from \"src/StoreLocator/StoreLocatorCard.module.scss\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\n\ninterface IStoreCardProps {\n  store: StoreModel;\n  onStoreClicked: Function;\n  selected: boolean;\n  useSmallText?: boolean;\n}\n\ntype TOpenClose = {\n  open?: number;\n  close?: number;\n};\n\ninterface IStoreHoursItem {\n  day: string;\n  open?: number;\n  close?: number;\n}\n\ntype TWeekdays = {\n  Monday?: TOpenClose;\n  Tuesday?: TOpenClose;\n  Wednesday?: TOpenClose;\n  Thursday?: TOpenClose;\n  Friday?: TOpenClose;\n  Saturday?: TOpenClose;\n  Sunday?: TOpenClose;\n};\n\ntype TWeekday = keyof TWeekdays;\n\nconst weekDays: TWeekday[] = [ \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ];\n\nexport const StoreLocatorCard = (props: IStoreCardProps): JSX.Element => {\n  const { store, onStoreClicked, selected, useSmallText } = props;\n  const { Name, ContactFirstName, ContactLastName, Contact } = store;\n  const { Address } = Contact;\n\n  const [ storeHours, setStoreHours ] = useState<IStoreHoursItem[]>([]);\n  const [ , setCurrentUserCoords ] = useState(null);\n  const [ currentUserFormattedAddress, setCurrentUserFormattedAddress ] = useState<string>(null);\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  useEffect(() => {\n    if (store) {\n      setStoreHours(buildStoreHoursArray(store));\n    }\n  }, [ store ]);\n\n  useEffect(() => {\n    if (navigator && navigator.permissions) {\n      navigator.permissions.query({ name: \"geolocation\" }).then(status => {\n        if (status.state !== \"denied\") {\n          navigator.geolocation.getCurrentPosition(\n            locationData => {\n              setCurrentUserCoords({\n                lat: locationData.coords.latitude,\n                lng: locationData.coords.longitude\n              });\n              if (currentUserFormattedAddress !== null) {\n                return;\n              }\n              getAddressFromLatLng(\n                {\n                  lat: locationData.coords.latitude,\n                  lng: locationData.coords.longitude\n                },\n                cefConfig\n              )\n                .then((res: any) => {\n                  setCurrentUserFormattedAddress(res.data.results[0].formatted_address);\n                })\n                .catch(err => {\n                  console.error(err);\n                  console.error(\"Unabled to get user's address with coordinates\");\n                });\n            },\n            _err => {\n              console.error(_err);\n            }\n          );\n        }\n      });\n    }\n  }, [ cefConfig ]);\n\n  const getGetDirectionsLink = (): string => {\n    const root = \"http://maps.google.com/maps\";\n    if (currentUserFormattedAddress !== null) {\n      return `${root}/dir/${encodeURI(\n        `${Address.Street1}, ${Address.City}, ${Address.RegionCode} ${Address.PostalCode}`\n      )} /${encodeURI(currentUserFormattedAddress)}`;\n    }\n    return `${root}/place/${encodeURI(\n      `${Address.Street1}, ${Address.City}, ${Address.RegionCode} ${Address.PostalCode}`\n    )}`;\n  };\n\n  return (\n    <Card\n      className={`shadow mb-4 pointer ${selected ? \"border-dark border-1\" : \"\"}`}\n      style={{ width: \"100%\" }}\n      onClick={() => onStoreClicked(store.ID)}>\n      <div className=\"d-flex\">\n        <Card.Body className={classes.storeCard}>\n          <Card.Title className=\"mb-4\">{Name}</Card.Title>\n          <Card.Subtitle style={{ fontWeight: 400 }}>\n            {ContactFirstName} {ContactLastName}\n          </Card.Subtitle>\n          <Row>\n            <Col xs={12} sm={5}>\n              <AddressBlock address={Contact.Address} contact={Contact} />\n            </Col>\n            <Col xs={12} sm={7}>\n              <Table size=\"sm\"\n                borderless\n                className={`store-hours ${useSmallText ? \"small\" : \"\"}`}>\n                <tbody>\n                  {storeHours.length\n                    ? getCollapsedDaysWithHours(storeHours).map((dayObj: IStoreHoursItem) => {\n                      const { day, open, close } = dayObj;\n                      return (\n                        <tr key={dayObj.day}>\n                          <td>\n                            <b>{day}&nbsp;&nbsp;&nbsp;&nbsp;</b>\n                          </td>\n                          {open ? null : <td>{t(\"ui.storefront.location.shipTo.shipToDetails.Closed\")}</td>}\n                          {open === null ? null : <td className=\"text-end\">{militaryToTwelveHour(open)}</td>}\n                          {close === null ? null : <td>&nbsp;-&nbsp;</td>}\n                          {close === null ? null : <td>{militaryToTwelveHour(close)}</td>}\n                        </tr>\n                      );\n                    })\n                    : null}\n                </tbody>\n              </Table>\n            </Col>\n          </Row>\n          <Row>\n            <Col xs={12} sm={6} />\n            <Col xs={12} sm={6}>\n              <Button\n                as=\"a\"\n                variant=\"primary\"\n                className=\"w-100\"\n                href={getGetDirectionsLink()}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\">\n                {t(\"ui.storefront.common.GetDirection.Plural\")}\n              </Button>\n            </Col>\n          </Row>\n        </Card.Body>\n      </div>\n    </Card>\n  );\n};\n\nfunction getAddressFromLatLng(coords: { lat: number; lng: number }, cefConfig: CEFConfig) {\n  if (!cefConfig || !coords) {\n    return new Promise((_resolve, reject) => {\n      reject(new Error(\"CefConfig or coords unavailable\"));\n    });\n  }\n  return axios.get(\n    `https://maps.googleapis.com/maps/api/geocode/json?&latlng=${coords.lat\n    },${coords.lng}&key=${cefConfig.google.maps.apiKey}`\n  );\n}\n\nfunction decimalToMilitary(n: number): number {\n  return Math.round(n * 100);\n}\n\nfunction militaryToTwelveHour(n: number): string {\n  const suffix = n >= 1200 ? \"pm\" : \"am\";\n  const hr = n === 1200 ? n : n % 1200;\n  const hoursAsString = hr.toString().padStart(4, \"0\");\n  const hours = hoursAsString.substr(0, 2).replace(/0/gu, \"\");\n  const minutes = hoursAsString.substr(hoursAsString.length - 2);\n  const time = `${hours}:${minutes} ${suffix}`;\n  return time;\n}\n\nfunction buildStoreHoursArray(store: StoreModel): Array<IStoreHoursItem> {\n  const storeHours = weekDays.reduce((acc: TWeekdays, day) => {\n    const open = store[`OperatingHours${day}Start` as keyof StoreModel];\n    const close = store[`OperatingHours${day}End` as keyof StoreModel];\n\n    const openInMilitary = open === null ? null : decimalToMilitary(open as number);\n    const closeInMilitary = close === null ? null : decimalToMilitary(close as number);\n    acc[day] = {\n      open: openInMilitary,\n      close: closeInMilitary\n    };\n    return acc;\n  }, {});\n\n  const arr: Array<IStoreHoursItem> = [];\n  for (const day in storeHours) {\n    if (!Object.hasOwn(storeHours, day)) {\n      continue;\n    }\n    arr.push({\n      day,\n      ...storeHours[day as TWeekday]\n    });\n  }\n  return arr;\n}\n\nfunction getCollapsedDaysWithHours(storeHours: IStoreHoursItem[]): IStoreHoursItem[] {\n  return storeHours.reduce((existingArr: IStoreHoursItem[], currentValue: IStoreHoursItem) => {\n    if (!existingArr.length) {\n      return [ currentValue ];\n    }\n    const prevStoreHoursItem = existingArr[existingArr.length - 1];\n    // TODO: const previousDay = prevStoreHoursItem.day;\n    const previousOpen = prevStoreHoursItem.open;\n    const previousClose = prevStoreHoursItem.close;\n    // TODO: const currentDay = currentValue.day;\n    const currentOpen = currentValue.open;\n    const currentClose = currentValue.close;\n    if (previousOpen === currentOpen && previousClose === currentClose) {\n      // Collapse\n      return [ ...existingArr, currentValue ];\n    }\n    return [ ...existingArr, currentValue ];\n  }, []);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"markerTooltipCard\":\"StoreLocatorMarkerTip_markerTooltipCard__UWMfj\"};","/** @format */\n\nimport React from \"react\";\nimport { Button, Card } from \"react-bootstrap\";\nimport classes from \"src/StoreLocator/StoreLocatorMarkerTip.module.scss\";\n\ninterface IStoreLocatorMarkerTipProps {\n  children: React.ReactNode;\n  onXButtonClicked: Function;\n}\n\nexport const StoreLocatorMarkerTip = (props: IStoreLocatorMarkerTipProps): JSX.Element => {\n  const { children, onXButtonClicked } = props;\n\n  return (\n    <Card className={classes.markerTooltipCard}>\n      <Card.Header className=\"py-0 pe-1 d-flex justify-content-end bg-white border-0\">\n        <Button className=\"p-0\" onClick={() => onXButtonClicked()}>\n          <i className=\"fal fa-fw fa-times\" />\n        </Button>\n      </Card.Header>\n      <Card.Body className=\"p-2 position-relative\">{children}</Card.Body>\n    </Card>\n  );\n};\n","/** @format */\n\nimport { useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { faMapMarker } from \"@fortawesome/free-solid-svg-icons\";\nimport { StoreLocatorMarkerTip } from \"src/StoreLocator/StoreLocatorMarkerTip\";\n\ninterface IStoreLocatorMarkerProps {\n  onMarkerClicked: Function;\n  storeID: number;\n  lat: number;\n  lng: number;\n  selected: boolean;\n  useTooltip?: boolean;\n  TooltipComponent?: () => JSX.Element;\n  clearSelectedStore: Function;\n}\n\nexport const StoreLocatorMarker = (props: IStoreLocatorMarkerProps): JSX.Element => {\n  const { onMarkerClicked, storeID, selected, useTooltip, TooltipComponent, clearSelectedStore } = props;\n\n  const [ showTooltip, setShowTooltip ] = useState<boolean>(false);\n\n  return (\n    <div className=\"position-relative\">\n      {useTooltip && showTooltip || selected\n        ? <StoreLocatorMarkerTip\n          onXButtonClicked={() => {\n            setShowTooltip(false);\n            clearSelectedStore();\n          }}>\n          <TooltipComponent />\n        </StoreLocatorMarkerTip>\n        : null}\n      <FontAwesomeIcon\n        icon={faMapMarker as IconProp}\n        className={`text-danger pointer fa-fw fa-${selected || showTooltip ? \"3\" : \"2\"}x`}\n        style={{ transform: \"translate(-50%, -100%)\" }}\n        onClick={() => onMarkerClicked(storeID)}\n        onMouseEnter={() => setShowTooltip(true)}\n        onMouseLeave={() => setShowTooltip(false)}\n      />\n    </div>\n  );\n};\n","/** @format */\n\nimport React, { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col, Form, InputGroup, Row } from \"react-bootstrap\";\nimport GoogleMapReact from \"google-map-react\";\nimport axios, { AxiosResponse } from \"axios\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport { AddressModel, StoreModel } from \"src/_api/cvApi._DtoClasses\";\nimport { StoreLocatorCard } from \"src/StoreLocator/StoreLocatorCard\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { StoreLocatorMarker } from \"src/StoreLocator/StoreLocatorMarker\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport type TCoords = {\n  lat: number;\n  lng: number;\n};\n\nexport const StoreLocator = (): JSX.Element => {\n  const [ zipCode, setZipCode ] = useState<string>(\"\");\n  const [ stores, setStores ] = useState<Array<StoreModel>>([]);\n  const [ center, setCenter ] = useState<TCoords>({\n    lat: 30.3542409,\n    lng: -97.7742702\n  });\n  const [ IDOfselectedStore, setIDOfselectedStore ] = useState<number>(null);\n  const [ radius, setRadius ] = useState<number>(5);\n  // TODO: const [page, setPage] = useState<number>(1);\n  // TODO: const [pageSize, setPageSize] = useState<number>(8);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n\n  async function getAllStores() {\n    setRunning();\n    try {\n      const getStoresResult = (\n        await cvApi.stores.GetStores({\n          // TODO: GetStores DTO\n          // Radius: radius\n          // ZipCode: zipCode\n        })\n      ).data;\n      const storesI = getStoresResult.Results;\n      const storesToAssign = [];\n      for (let i = 0; i < storesI.length; i++) {\n        const store = storesI[i];\n        const address = store.Contact.Address;\n        if (address.Latitude !== null && address.Longitude !== null) {\n          storesToAssign.push(store);\n        } else {\n          // eslint-disable-next-line no-await-in-loop\n          const googleLatLngResult = await getLatLngFromAddress(address, cefConfig);\n          const latLngResult: TCoords = googleLatLngResult.data.results[0].geometry.location;\n          const { lat, lng } = latLngResult;\n          store.Contact.Address.Latitude = lat;\n          store.Contact.Address.Longitude = lng;\n          storesToAssign.push(store);\n        }\n      }\n      if (zipCode.length >= 5) {\n        const centerQuery = await axios.get(\n          `https://maps.googleapis.com/maps/api/geocode/json?address=${zipCode}&key=${cefConfig.google.maps.apiKey}`\n        );\n        const { lat, lng } = centerQuery.data.results[0].geometry.location;\n        setCenter({\n          lat,\n          lng\n        });\n      }\n      setStores(storesToAssign);\n      finishRunning();\n    } catch (err) {\n      finishRunning(true, err as any as Error);\n    }\n  }\n\n  useEffect(() => {\n    getAllStores();\n  }, []);\n\n  const TooltipBody = () => <ul>\n    <li>\n      <input value=\"Test\" readOnly />\n    </li>\n    <li>Another</li>\n    <li>More</li>\n  </ul>;\n\n  if (viewState.running) {\n    return (\n      <Row className=\"mt-4 mb-5\">\n        <Col xs={12}>\n          <div className=\"d-flex flex-column align-items-center\">\n            <h3>{t(\"ui.storefront.common.Loading.Ellipses\")}</h3>\n            <LoadingWidget />\n          </div>\n        </Col>\n      </Row>\n    );\n  }\n\n  return (\n    <>\n      <Row className=\"mt-4 mb-5\">\n        <Col xs={12}>\n          <div className=\"d-flex flex-column align-items-center\">\n            <h3>{t(\"ui.storefront.location.customerLocationEntry.findStores\")}</h3>\n            <p>{t(\"ui.storefront.cart.cartShippingEstimator.enterYourZipOrPostalCode\")}</p>\n            <Form.Group>\n              <InputGroup>\n                <input\n                  className=\"p-2 rounded-start border-1\"\n                  value={zipCode}\n                  onChange={(e: React.ChangeEvent<HTMLInputElement>) => setZipCode(e.target.value)}\n                  onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n                    if (e.key === \"Enter\") {\n                      e.preventDefault();\n                      if (zipCode.length >= 5) {\n                        getAllStores();\n                      }\n                    }\n                  }}\n                  placeholder={t(\"ui.storefront.cart.cartShippingEstimator.enterYourZipOrPostalCode\")}\n                />\n                <select\n                  className=\"input-group-append rounded-end\"\n                  onChange={e => setRadius(Number(e.target.value))}\n                  value={radius}>\n                  {[ 5, 10, 15 ].map(n => <option key={n.toString()} value={n}>\n                    {`${n} mi`}\n                  </option>)}\n                </select>\n              </InputGroup>\n            </Form.Group>\n          </div>\n        </Col>\n      </Row>\n      {stores.length\n        ? <Row className=\"mt-4 mb-5\" style={{ height: \"70vh\" }}>\n          <Col xs={6} style={{ maxHeight: \"100%\", overflowY: \"auto\" }}>\n            {stores.map(store => <StoreLocatorCard\n              key={`storeCard_${store.ID}`}\n              store={store}\n              onStoreClicked={(id: number) => {\n                setIDOfselectedStore(id);\n                setCenter({\n                  lat: store.Contact.Address.Latitude,\n                  lng: store.Contact.Address.Longitude\n                });\n              }}\n              selected={IDOfselectedStore === store.ID}\n            />)}\n          </Col>\n          <Col xs={6}>\n            <GoogleMapReact\n              bootstrapURLKeys={{\n                key: cefConfig.google.maps.apiKey\n              }}\n              key={`${center.lat}${center.lng}`}\n              defaultCenter={center}\n              defaultZoom={10}>\n              {stores.map(store => <StoreLocatorMarker\n                key={store.ID}\n                lat={store.Contact.Address.Latitude}\n                lng={store.Contact.Address.Longitude}\n                storeID={store.ID}\n                onMarkerClicked={(id: number) => setIDOfselectedStore(id)}\n                clearSelectedStore={() => setIDOfselectedStore(null)}\n                selected={IDOfselectedStore === store.ID}\n                useTooltip={true}\n                TooltipComponent={TooltipBody}\n              />)}\n            </GoogleMapReact>\n          </Col>\n        </Row>\n        : <h3 className=\"text-center mb-5\">No stores found</h3>\n      }\n    </>\n  );\n};\n\ninterface IGoogleMapsAddressComponent {\n  long_name: string;\n  short_name: string;\n  types: string[];\n}\n\ninterface IGoogleMapsCoordinatePair {\n  lat: number;\n  lng: number;\n}\n\ninterface IGoogleMapsBoundedCoordinateBox {\n  northeast: IGoogleMapsCoordinatePair;\n  southwest: IGoogleMapsCoordinatePair;\n}\n\ninterface IGoogleMapsGeographyResult {\n  bounds: IGoogleMapsBoundedCoordinateBox;\n  location: IGoogleMapsCoordinatePair;\n  location_type: string;\n  viewport: IGoogleMapsBoundedCoordinateBox;\n}\n\ninterface IGoogleMapsGeoCodeResult {\n  address_components: IGoogleMapsAddressComponent[];\n  formatted_address: string;\n  geometry: IGoogleMapsGeographyResult;\n  place_id: string;\n  types: string[];\n}\n\ninterface IGoogleMapsGeoCodeResults {\n  results: IGoogleMapsGeoCodeResult[];\n}\n\nfunction getLatLngFromAddress(\n    address: AddressModel,\n    cefConfig: CEFConfig\n): Promise<AxiosResponse<IGoogleMapsGeoCodeResults>> {\n  if (!address || !cefConfig) {\n    return Promise.reject(new Error(\"Address or CefConfig unavailable; cannot fetch address\"));\n  }\n  const { Street1, City, Region } = address;\n  const addressQueryString = `${Street1}%20${City}%20${Region}`;\n  return axios.get<IGoogleMapsGeoCodeResults>(\n    `https://maps.googleapis.com/maps/api/geocode/json?address=${addressQueryString\n    }&key=${cefConfig.google.maps.apiKey}`\n  );\n}\n","import { Redirect, Route, Switch } from \"react-router-dom\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { createBrowserHistory } from \"history\";\nimport \"src/_meta/css/clarity.scss\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useCefConfig } from \"./_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"./_redux/slices/authSlice\";\nimport { Layout } from \"src/Layout\";\nimport { Home } from \"src/Home/Home\";\nimport { Cart } from \"src/Cart\";\nimport { Catalog } from \"src/Catalog/Catalog\";\nimport { Checkout } from \"src/Checkout/Checkout\";\nimport { ProductDetails } from \"src/Catalog/ProductDetails\";\nimport { Dashboard } from \"src/Dashboard/Dashboard\";\nimport { Registration } from \"src/Authentication/Registration/Registration\";\nimport { ForgotPassword } from \"src/Authentication/ForgotPassword\";\nimport { ForgotUsername } from \"src/Authentication/ForgotUsername\";\nimport { Privacy } from \"src/Legal/Privacy\";\nimport { ForcedPasswordReset } from \"src/Authentication/ForcedPasswordReset\";\nimport { Compare } from \"src/Catalog/views/Compare\";\nimport { StoreLocator } from \"src/StoreLocator/StoreLocator\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\nexport const history = createBrowserHistory({\n  basename: process.env.PUBLIC_URL\n});\n\nconst App = (): JSX.Element => {\n  const currentUser = useCurrentUser();\n  const cefConfig: CEFConfig = useCefConfig();\n\n  const authenticatedRoutes = [\n    <Route\n      key={cefConfig.routes.dashboard.root}\n      path={cefConfig.routes.dashboard.root}\n      component={Dashboard}\n    />\n  ];\n\n  const unauthenticatedRoutes = [\n    <Route\n      key={cefConfig.routes.forgotPassword.root}\n      path={cefConfig.routes.forgotPassword.root}>\n      <Row>\n        <Col xs={12}\n          sm={8}\n          md={6}\n          lg={5}\n          className=\"mx-auto my-5\">\n          <ForgotPassword />\n        </Col>\n      </Row>\n    </Route>,\n    <Route\n      key={cefConfig.routes.forgotUsername.root}\n      path={cefConfig.routes.forgotUsername.root}>\n      <Row>\n        <Col xs={12}\n          sm={8}\n          md={6}\n          lg={5}\n          className=\"mx-auto my-5\">\n          <ForgotUsername />\n        </Col>\n      </Row>\n    </Route>,\n    <Route\n      key={cefConfig.routes.forcedPasswordReset.root}\n      path={cefConfig.routes.forcedPasswordReset.root}>\n      <Row>\n        <Col xs={12}\n          sm={8}\n          md={6}\n          lg={5}\n          className=\"mx-auto my-5\">\n          <ForcedPasswordReset />\n        </Col>\n      </Row>\n    </Route>,\n    <Route\n      key={cefConfig.routes.registration.root}\n      path={cefConfig.routes.registration.root}\n      component={Registration}\n    />\n  ];\n\n  return (\n    <Layout>\n      <Switch>\n        <Route exact\n          path={cefConfig.routes.site.root}\n          component={Home} />\n        <Route path={cefConfig.routes.cart.root} component={Cart} />\n        <Route path={cefConfig.routes.catalog.root} component={Catalog} />\n        <Route path=\"/compare\" component={Compare} />\n        {/* @ts-ignore */}\n        <Route path={cefConfig.routes.checkout.root} component={Checkout} />\n        <Route path={cefConfig.routes.productDetail.root} component={ProductDetails} />\n        <Route path=\"/privacy-statement\" component={Privacy} />\n        <Route path=\"/store-locator\" component={StoreLocator} />\n        {/* eslint-disable-next-line no-negated-condition */}\n        {currentUser.ID > 0\n          ? [ ...authenticatedRoutes, unauthenticatedRoutes ]\n          : [ ...unauthenticatedRoutes ]}\n        <Redirect to={corsLink(cefConfig, \"/\", \"site\")} />\n      </Switch>\n    </Layout>\n  );\n};\n\nexport default App;\n","/** @format */\n\n// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n  window.location.hostname === \"localhost\" ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === \"[::1]\" ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport default function register() {\n  if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener(\"load\", () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Lets check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl);\n      } else {\n        // Is not local host. Just register service worker\n        registerValidSW(swUrl);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === \"installed\") {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the old content will have been purged and\n              // the fresh content will have been added to the cache.\n              // It's the perfect time to display a \"New content is\n              // available; please refresh.\" message in your web app.\n              console.log(\"New content is available; please refresh.\");\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log(\"Content is cached for offline use.\");\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error(\"Error during service worker registration:\", error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      if (response.status === 404 || response.headers.get(\"content-type\").indexOf(\"javascript\") === -1) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl);\n      }\n    })\n    .catch(() => {\n      console.log(\"No internet connection found. App is running in offline mode.\");\n    });\n}\n\nexport function unregister() {\n  if (\"serviceWorker\" in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n","import i18n from \"i18next\";\nimport axios from \"axios\";\nimport { initReactI18next } from \"react-i18next\";\nimport resourcesToBackend from \"i18next-resources-to-backend\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\ni18n\n  // detect user language\n  // learn more: https://github.com/i18next/i18next-browser-languageDetector\n  .use(LanguageDetector)\n  // pass the i18n instance to react-i18next.\n  .use(initReactI18next)\n  .use(\n    resourcesToBackend(async (language, namespace, callback) => {\n      while (!document.cefConfig) {\n        await new Promise(resolve => setTimeout(resolve, 100));\n      }\n      const cefConfig = document.cefConfig;\n      axios\n        .get(\n          corsLink(\n            cefConfig,\n            \"/lib/cef/js/i18n/\" + \"ui.storefront.\" + language + \".json\",\n            \"ui\"\n          )\n        )\n        .then((resources) => {\n          callback(null, resources.data);\n        })\n        .catch((error) => {\n          console.error(\"resourcesToBackEnd:Error\\n\", error);\n          callback(error, null);\n        });\n    })\n  )\n  // init i18next\n  // for all options read: https://www.i18next.com/overview/configuration-options\n  .init({\n    debug: false,\n    fallbackLng: \"en_US\",\n    supportedLngs: [\n      \"en_US\",\n      \"de_DE\",\n      \"en_CA\",\n      \"en_GB\",\n      \"es_ES\",\n      \"fr_FR\",\n      \"it_IT\",\n      \"ja_JP\",\n      \"ko_KR\",\n      \"pt_PT\",\n      \"ru\",\n      \"sw\",\n      \"tr\",\n      \"zh_Hans_CN\",\n      \"zh_TW\"\n    ],\n    interpolation: {\n      escapeValue: false // not needed, react escapes by default\n    }\n  });\n\nexport default i18n;\n","import { configureStore } from \"@reduxjs/toolkit\";\n\nimport addressBookReducer from \"src/_redux/slices/addressBookSlice\";\nimport authReducer from \"src/_redux/slices/authSlice\";\nimport brandReducer from \"src/_redux/slices/brandSlice\";\nimport cartReducer from \"src/_redux/slices/cartSlice\";\nimport cefConfigReducer from \"src/_redux/slices/cefConfigSlice\";\nimport signalRReducer from \"src/_redux/slices/signalRSlice\";\nimport walletSliceReducer from \"src/_redux/slices/walletSlice\";\nimport geographySliceReducer from \"src/_redux/slices/geographySlice\";\n\nexport const store = configureStore({\n  reducer: {\n    addressBook: addressBookReducer,\n    auth: authReducer,\n    brand: brandReducer,\n    carts: cartReducer,\n    cefConfig: cefConfigReducer,\n    geography: geographySliceReducer,\n    signalR: signalRReducer,\n    wallet: walletSliceReducer,\n  }\n});\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type WithLoading<T> = T & { Loading?: boolean; };\n","import { AnchorHTMLAttributes, PropsWithChildren, useMemo } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { ICEFConfigRoutes } from \"../CefConfigTypes\";\n\ninterface ICorsLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n  spaMode?: boolean;\n  textKey?: string;\n  path: string;\n  area: keyof ICEFConfigRoutes;\n  whichUrl?: string;\n  noCache?: boolean;\n  paramsBody?: { [key: string]: any };\n}\n\nexport const CorsLink = (props: PropsWithChildren<ICorsLinkProps>): JSX.Element => {\n  const {\n    spaMode,\n    textKey,\n    path,\n    area,\n    whichUrl,\n    noCache,\n    paramsBody,\n    children,\n    ...remaining\n  } = props;\n\n  const cefConfig = useCefConfig();\n  const { t } = useTranslation();\n\n  const innerContent = useMemo(() => {\n    return textKey ? t(textKey) : children;\n  }, [ textKey, children ]);\n\n  const to = useMemo(() => {\n    return corsLink(\n      cefConfig,\n      path,\n      area,\n      whichUrl,\n      noCache,\n      paramsBody\n    );\n  }, [ cefConfig, props ]);\n\n  if (spaMode) {\n    return <Link\n      to={to}\n      {...remaining}>\n      {innerContent}\n    </Link>;\n  }\n\n  return <a href={to} {...remaining}>\n    {innerContent}\n  </a>;\n};\n\nCorsLink.defaultProps = {\n  spaMode: false,\n  whichUrl: \"primary\",\n  noCache: false,\n};\n","import React, { useCallback, useState } from \"react\";\nimport { Alert, Card, Col, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useLotFactory } from \"src/_shared/customHooks/useLotFactory\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LotForm } from \"src/_shared/forms/LotForm\";\nimport { ILotFormConfirmData } from \"src/_shared/interfaces/ILotFormConfirmData\";\nimport { ConfirmationModal } from \"src/_shared/modals\";\n\nexport const CreateLot = (): JSX.Element => {\n  const [ creationSuccessInfo, setCreationSuccessInfo ] = useState<{\n    successful: boolean;\n    lotName?: string;\n    lotID?: number;\n  }>({ successful: false });\n\n  const [ showShowcaseModal, setShowShowcaseModal ] = useState<boolean>(false);\n\n  const { t } = useTranslation();\n\n  const lotFactory = useLotFactory();\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const onLotFormConfirmed = useCallback((data: ILotFormConfirmData): void => {\n    setRunning();\n    lotFactory.createLot(data)\n      .then((r: any) => {\n        setCreationSuccessInfo({\n          successful: true,\n          lotName: data.txtLotFormTitle,\n          lotID: r\n        });\n        // setShowShowcaseModal(true);\n        finishRunning();\n      })\n      .catch((err: any) => {\n        finishRunning(true, err);\n      });\n  }, [ lotFactory ]);\n\n  const makeAuctionShowcase = async () => {\n    try {\n      const lot = await lotFactory.getLotByID(creationSuccessInfo?.lotID);\n      lot.SerializableAttributes = {\n        ...lot.SerializableAttributes,\n        ShowcaseAuction: {\n          ID: 0,\n          Key: \"ShowcaseAuction\",\n          Value: \"true\"\n        }\n      };\n      await cvApi.auctions.UpdateLotAsSeller(lot);\n      setShowShowcaseModal(false);\n    } catch (err) {\n      console.error(err);\n    }\n  };\n\n  return <Row>\n    <Col xs={12}>\n      <h1 className=\"text-primary text-center\">\n        {t(\"ui.storefront.auction.AddAuction\")}\n      </h1>\n      {viewState.hasError && <ErrorView viewState={viewState} />}\n    </Col>\n    <Col xs={12} className=\"position-relative\">\n      {viewState.running && <LoadingWidget overlay={true} />}\n      <Card className=\"bg-white p-5\">\n        {creationSuccessInfo.successful\n          ? <Alert variant=\"success\">\n            {t(\"ui.storefront.common.Success.Exclamation\")}{\" \"}\n            {t(\"ui.storefront.forms.LotForm.AuctionWithName\")}\n            {\" \"}{creationSuccessInfo.lotName}{\" \"}\n            {t(\"ui.storefront.common.Success.Created\")}\n          </Alert>\n          : <LotForm\n            onConfirm={onLotFormConfirmed}\n          />\n        }\n      </Card>\n      <ConfirmationModal\n        title={t(\"ui.storefront.auction.makeShowcase\")}\n        show={showShowcaseModal}\n        confirmBtnLabel={t(\"ui.storefront.common.Confirm\")}\n        confirmBtnSID=\"showcaseAuctionConfirmationModalConfirm\"\n        cancelBtnLabel={t(\"ui.storefront.common.Cancel\")}\n        onConfirm={makeAuctionShowcase}\n        onCancel={() => setShowShowcaseModal(false)}\n        size=\"md\">\n        <p id=\"lbRFCMContent\">\n          <span>{t(\"ui.storefront.auction.makeShowcaseAuctionText\")}</span>\n        </p>\n      </ConfirmationModal>\n    </Col>\n  </Row>;\n};\n","import { useTranslation } from \"react-i18next\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { Button, Col, Collapse, Form, ListGroup, ListGroupItem, Row } from \"react-bootstrap\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { useForm } from \"react-hook-form\";\nimport { ParseDocumentDto } from \"src/_api/cvApi.Importer\";\nimport { FileEntityType, ImportResponse } from \"src/_api/cvApi._DtoClasses\";\nimport { Dictionary, IHttpPromise, IUploadResult } from \"src/_api/cvApi.shared\";\nimport axios from \"src/axios\";\nimport _ from \"lodash\";\nimport React, { BaseSyntheticEvent, useEffect, useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport const Importer = (props: { type: string; }): JSX.Element => {\n  const [ importMap, setImportMap ] = useState<Dictionary<string[]>>({});\n  const [ columns, setColumns ] = useState<string[]>();\n  const [ cleanedFileName, setCleanedFileName ] = useState<string>();\n  const [ success, setSuccess ] = useState<ImportResponse[]>();\n  const [ messageOpen, setMessageOpen ] = useState<{ [id: number]: boolean }>({});\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { register, handleSubmit } = useForm<Dictionary<string[]>>();\n\n  useEffect(() => {\n    if (!_.isString(cleanedFileName)) {\n      return;\n    }\n    const dto: ParseDocumentDto = {\n      File: cleanedFileName,\n      SkipReadingData: true,\n    };\n    cvApi.importer.ParseDocument(dto).then(response => {\n      setColumns(response.data.ColumnNames.sort());\n    });\n  }, [ cleanedFileName ]);\n\n  async function handleFileUpload(event: React.ChangeEvent<HTMLInputElement>) {\n    setRunning();\n    const [ file ] = event.target.files;\n    if (!_.isObject(file)) {\n      finishRunning();\n      return;\n    }\n    const formData = new FormData();\n    formData.append(\"EntityFileType\", String(FileEntityType.ImportExcel));\n    formData.append(\"file\", file, file.name);\n    // Using a direct axios post since uploadFiles sends an empty body to API\n    const fileUploadResponse = await axios.post(\n      [ \"Media\", \"StoredFiles\", \"Upload\", \".json\" ].join(\"/\"),\n      formData\n    );\n    if (!fileUploadResponse?.data) {\n      finishRunning(true, \"Failed to upload\");\n      return;\n    }\n    const files : Array<IUploadResult> = fileUploadResponse.data.UploadFiles;\n    setCleanedFileName(_.last(_.first(files).FilePath.split(\"\\\\\")));\n    finishRunning();\n  }\n\n  function submitImportMap(data: Dictionary<string[]>, event: BaseSyntheticEvent) {\n    let importPromise = null;\n    switch (props.type) {\n      case \"AccountModel\": {\n        importPromise = cvApi.accounts.ImportAccounts;\n        break;\n      }\n      case \"ProductModel\":\n      default: {\n        importPromise = cvApi.products.ImportProducts;\n      }\n    }\n    importPromise({\n      File: cleanedFileName,\n      Map: importMap\n    }).then(result => {\n      // @ts-ignore t4 is wrong\n      setSuccess(result.data);\n    });\n  }\n\n  const getKeysPromise = () => {\n    switch (props.type) {\n      case \"AccountModel\": {\n        return cvApi.accounts.GetAccountKeys;\n      }\n      case \"ProductModel\":\n      default: {\n        return cvApi.products.GetProductKeys;\n      }\n    }\n  };\n\n  const fileInput = register(\"importFileUpload\", {\n    onChange: handleFileUpload\n  });\n\n  return (\n    <AuthGuard requiresRole=\"CEF Global Administrator\"\n      fallback={\n        <div className=\"mt-5 w-100 align-self-center alert alert-danger text-center\">\n          Not authorized to view this page.\n        </div>\n      }>\n      {/* File input */}\n      <Form onSubmit={handleSubmit(submitImportMap)} className=\"pt-2 pb-5\">\n        <Row>\n          <Col xs={12}>\n            <Form.Group\n              controlId=\"formFile\"\n              className=\"mb-3\">\n              <Form.Label>{t(\"ui.storefront.importer.inputTitle\")}</Form.Label>\n              <Form.Control\n                {...fileInput}\n                type=\"file\"\n                accept=\".xlsx\" />\n            </Form.Group>\n          </Col>\n          { _.isArray(columns) && <Col xs={12}>\n            <p>{t(\"ui.storefront.importer.importerDescription\")}</p>\n            <ImportMapper\n              type={props.type}\n              columns={columns}\n              importMapState={[ importMap, setImportMap ]}\n              getKeys={getKeysPromise()} />\n            { !_.isArray(success)\n              && <Button type=\"submit\" disabled={viewState.running}>\n                {t(\"ui.storefront.common.submit\")}\n              </Button>\n            }\n            { _.isArray(success)\n              && <>\n                <h3 className=\"alert alert-success\">{t(\"ui.storefront.importer.successMessage\")}</h3>\n                <ListGroup>\n                  { success.map(message => <ListGroupItem key={message.ID}>\n                    <Button variant=\"none\"\n                      className=\"w-100\"\n                      onClick={() => setMessageOpen(prev => {\n                        const next = { ...prev };\n                        next[message.ID] = !next[message.ID];\n                        return next;\n                      })}\n                      aria-controls={`message-list-${message.ID}`}\n                      aria-expanded={messageOpen[message.ID]}\n                      style={{ boxShadow: \"none\" }}>\n                      <div className=\"d-flex flex-row\">\n                        <div className=\"justify-content-around d-flex flex-fill\">\n                          <span>{message.Type} - {message.ID}</span>\n                          <span>{message.CustomKey}</span>\n                        </div>\n                        <i className={`d-inline-flex align-self-center fa fa-fw fa-sm\n                          fa-caret-${messageOpen[message.ID] ? \"up\" : \"down\"}`}></i>\n                      </div>\n                    </Button>\n                    <Collapse in={_.isArray(message.Messages) && messageOpen[message.ID]}>\n                      <div id={`message-list-${message.ID}`}>\n                        { message.Messages?.map((msg) => <p key={`msg_${msg}`}>\n                          {msg}\n                        </p>) }\n                      </div>\n                    </Collapse>\n                  </ListGroupItem>)}\n                </ListGroup>\n              </>\n            }\n          </Col>\n          }\n        </Row>\n      </Form>\n    </AuthGuard>\n  );\n};\n\ninterface IImportMapperProps {\n  // The columns returned\n  columns: string[];\n  // The model type 'ProductModel' 'AccountModel'\n  type: string;\n  // The state defined in the Form Component\n  importMapState: [\n    Dictionary<string[]>,\n    (items: Dictionary<string[]> | ((prev: Dictionary<string[]>) => Dictionary<string[]>)) => void\n  ];\n  getKeys(): IHttpPromise<Dictionary<Array<string>>>;\n}\n\nexport const ImportMapper = (props: IImportMapperProps): JSX.Element | null => {\n  const [ keys, setKeys ] = useState<Dictionary<Array<string>>>();\n  const [ keysSorted, setKeysSorted ] = useState<Array<string>>();\n  const { setRunning, finishRunning } = useViewState();\n  const [ importMap, setImportMap ] = props.importMapState;\n\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    setRunning();\n    props.getKeys()\n      .then(result => {\n        setKeys(result.data);\n        setKeysSorted(_.keys(result.data).sort());\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  }, []);\n\n  useEffect(() => {\n    if (!_.isArray(keysSorted) || !cefConfig) {\n      return;\n    }\n    setImportMap((prev: Dictionary<string[]>) => {\n      const next = { ...prev } as Dictionary<string[]>;\n      _.forEach(props.columns, (col, i) => {\n        // TODO: Create a key mapper to help auto populate the columns,\n        // \"Kit Components\" => ProductAssociations\n        const fallback = cefConfig.featureSet.importer.defaultToAttributes ? \"JsonAttributes\" : null;\n        const defaultKey = _.find(keysSorted, key => key.toLowerCase().startsWith(col.toLowerCase())) ?? fallback;\n        next[col] = [ defaultKey ];\n        if (defaultKey && keys[defaultKey]?.length > 0) {\n          next[col][0] += `?${_.first(keys[defaultKey])}`;\n        }\n      });\n      return next;\n    });\n  }, [ keysSorted, cefConfig ]);\n\n  if (!_.isObject(importMap) || !_.isObject(keysSorted)) {\n    return null;\n  }\n\n  const handleColumnChange = (\n    column: string,\n    idx: number,\n    concat?: boolean\n  ) => (event: React.ChangeEvent<HTMLSelectElement>) => {\n    let { value } = event.target;\n    // Initial selection\n    if (keys[value]?.length && _.indexOf(importMap[column][idx], \"?\") < 0) {\n      value += `?${_.first(keys[value])}`;\n    }\n    setImportMap((prev: Dictionary<string[]>) => {\n      const next = { ...prev };\n      if (concat) {\n        next[column][idx] = `${_.first(next[column][idx].split(\"?\"))}?${value}`;\n        return next;\n      }\n      next[column][idx] = value;\n      return next;\n    });\n  };\n\n  const addItem = (column: string) => {\n    const newValue = { ...importMap };\n    newValue[column].push(null);\n    setImportMap(newValue);\n  };\n\n  const removeItem = (column: string, idx: number) => {\n    const newValue = { ...importMap };\n    newValue[column].splice(idx, 1);\n    setImportMap(newValue);\n  };\n\n  return <>\n    {\n      props.columns.map(column => {\n        const component = <Row key={`row_${column}`} className=\"pb-2\">\n          <Col xs={6}>\n            <span>{column}</span>\n          </Col>\n          <Col>\n            {Boolean(importMap[column]?.length) && importMap[column].map((selectedProperty, index) => (\n              // eslint-disable-next-line react/no-array-index-key\n              <div key={`${selectedProperty}&${index}`} className=\"d-flex\">\n                <div className=\"d-flex\">\n                  <Form.Select\n                    onChange={handleColumnChange(column, index)}\n                    value={_.first(selectedProperty?.split(\"?\"))}>\n                    <option value={null}>Unmapped</option>\n                    {keysSorted.map(key => {\n                      return <option\n                        key={`option_${column}_${key}`}\n                        value={key}>{key}</option>;\n                    })}\n                  </Form.Select>\n                  {\n                    keys[_.first(selectedProperty?.split(\"?\"))]?.length > 0 && (\n                      <Form.Select\n                        value={_.last(selectedProperty.split(\"?\"))}\n                        onChange={handleColumnChange(column, index, true)}>\n                        {keys[_.first(selectedProperty.split(\"?\"))].map(option3 => {\n                          return <option\n                            key={option3}\n                            value={option3}>{option3}</option>;\n                        })}\n                      </Form.Select>\n                    )\n                  }\n                </div>\n                {(importMap[column].length > 1) && (\n                  <Button variant=\"danger\" onClick={() => removeItem(column, index)}>\n                    <FontAwesomeIcon className=\"fa-fw\" icon={faMinus as IconProp} />\n                  </Button>\n                )}\n                {(index === importMap[column].length - 1) && (\n                  <Button variant=\"success\" onClick={() => addItem(column)}>\n                    <FontAwesomeIcon className=\"fa-fw\" icon={faPlus as IconProp} />\n                  </Button>\n                )}\n              </div>\n            ))}\n          </Col>\n        </Row>;\n        return component;\n      })\n    }\n  </>;\n};\n","import { Button, Col, Container, Row } from \"react-bootstrap\";\nimport { IRegistrationB2CData } from \"src/Authentication/Registration/_registrationTypes\";\nimport { RegistrationHeader } from \"../Registration/RegistrationHeader\";\nimport { useForm } from \"react-hook-form\";\nimport { useState } from \"react\";\nimport RegistrationB2CForm from \"./RegistrationB2CForm\";\nimport { ContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { useTranslation } from \"react-i18next\";\nimport { LoginResponseStatus, useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport cvApi from \"src/_api/cvApi\";\nimport { RegisterNewUserDto } from \"src/_api\";\nimport { LoginModal } from \"src/Authentication/LoginModal\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { trackEvent } from \"src/Klaviyo/klaviyo_helpers\";\n\nexport const RegistrationB2C = (): JSX.Element => {\n  const [ showLoginModal, setShowLoginModal ] = useState<boolean>();\n  const [ showSuccessMessage, setShowSuccessMessage ] = useState<boolean>(false);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const { t } = useTranslation();\n  const authFactory = useAuthFactory();\n  const location = useLocation();\n  const history = useHistory();\n  const cefConfig = useCefConfig();\n\n  const queryParams = new URLSearchParams(location.search);\n  const returnUrl = queryParams.get(\"returnUrl\");\n\n  const { setError } = useForm<IRegistrationB2CData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const submitRegistrationB2CForm = async (data: IRegistrationB2CData) => {\n    if (viewState.running) {\n      return;\n    }\n    setRunning();\n    const r = await cvApi.authentication.ValidateEmailIsUnique({\n      Email: data.emEmailRegistrationB2C\n    });\n    if (!r.data.ActionSucceeded) {\n      setError(\"emEmailRegistrationB2C\", {\n        type: \"uniqueEmail\",\n        message: \"Account with that email already exists.\"\n      });\n      finishRunning();\n      return;\n    }\n    const contact: ContactModel = {\n      Active: true,\n      AddressID: null,\n      AddressKey: null,\n      CreatedDate: new Date(),\n      CustomKey: data.emEmailRegistrationB2C,\n      Email1: data.emEmailRegistrationB2C,\n      FirstName: null,\n      ID: null,\n      LastName: null,\n      TypeID: 1,\n      TypeKey: \"General\"\n    };\n    const dto: RegisterNewUserDto = {\n      Active: true,\n      AddressBook: [],\n      Contact: contact,\n      ContactID: null,\n      CreatedDate: new Date(),\n      CustomKey: data.emEmailRegistrationB2C,\n      Email: data.emEmailRegistrationB2C,\n      ID: null,\n      InService: null,\n      IsSMSAllowed: false,\n      OverridePassword: data.pwPasswordRegistrationB2C,\n      SerializableAttributes: {},\n      Status: null,\n      StatusID: null,\n      StatusKey: \"Registered\",\n      StatusName: null,\n      Type: null,\n      TypeID: null,\n      TypeKey: null,\n      TypeName: \"Customer\",\n      UseAutoPay: null,\n      UserName: data.emEmailRegistrationB2C\n    };\n\n    trackEvent(\n      \"Created Account\",\n      {\n        \"Email\": data.emEmailRegistrationB2C,\n        \"Account ID\": \"\",\n      }\n    );\n\n    authFactory\n      .register(dto)\n      .then(() => authFactory.login({ Username: dto.UserName, Password: dto.OverridePassword }))\n      .then(res => {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({\n          event: \"account_created\"\n        });\n        finishRunning();\n        if (res.Status === LoginResponseStatus.Challenge) {\n          setShowLoginModal(true);\n        }\n        setShowSuccessMessage(true);\n        if (returnUrl !== \"/\") {\n          history.push(returnUrl);\n          history.go(0);\n        }\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  return (\n    <AuthGuard\n      requiresNoAuth={true}\n      redirectPath={\n        corsLink(\n          cefConfig,\n          cefConfig.routes.site.root,\n          \"site\"\n        )\n      }\n      // Give time for the returnUrl to push the user away first\n      delay={5000}>\n      <div className=\"d-flex flex-column justify-content-center align-items-center\">\n        <div className=\"bg-brand-light vw-100 create-account-container\">\n          {showSuccessMessage ? (\n            <div className=\"d-flex justify-content-center bg-success-subtle rounded p-3 text-success-emphasis\">\n              <span>\n                {t(\"ui.storefront.common.registrationCompletedSuccessfully\", \"Registration completed successfully.\")}\n              </span>\n            </div>\n          ) : (\n            <Row>\n              <RegistrationHeader />\n              <Col\n                xs={12}\n                sm={6}\n                className=\"m-auto create-account-form-container\">\n                <RegistrationB2CForm\n                  submitRegistrationB2CForm={submitRegistrationB2CForm}\n                />\n                <p className=\"text-center\">Already have an account?</p>\n                <div className=\"d-flex justify-content-center\">\n                  <Button\n                    variant=\"secondary\"\n                    className=\"pointer btn-fat\"\n                    data-sid=\"btnMiniMenuLogin\"\n                    onClick={() => setShowLoginModal(true)}>\n                    Sign In\n                  </Button>\n                </div>\n              </Col>\n\n            </Row>\n          )}\n          <LoginModal\n            show={showLoginModal}\n            onConfirm={() => {\n              setShowLoginModal(false);\n            }}\n            onCancel={() => setShowLoginModal(false)}\n          />\n        </div>\n      </div>\n    </AuthGuard>\n  );\n};\n\nexport default RegistrationB2C;\n","import { useEffect, useRef, useState } from \"react\";\nimport Cookies from \"js-cookie\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport {\n  EndUserEventRequest,\n  EventModel,\n  PageViewEventModel,\n  PageViewModel,\n  VisitModel,\n  VisitorModel\n} from \"src/_api/cvApi._DtoClasses\";\nimport cvApi from \"src/_api/cvApi\";\nimport { CEFConfig } from \"src/_shared/CefConfigTypes\";\nimport { useLocation } from \"react-router\";\nimport { Guid } from \"src/_api/cvApi.shared\";\n\nexport const TrackingSnippet = (): JSX.Element => {\n  const cefConfig = useCefConfig();\n  const location = useLocation();\n\n  const lastEventRef = useRef(null);\n\n  const [ cookieData, setCookieData ] = useState<{\n    visitorKeyCookie: string;\n    visitKeyCookie: string;\n    visitorID: string;\n    visitID: string;\n  }>(null);\n\n  const upsertVisitorModel = (): VisitorModel => ({\n    Active: true,\n    CreatedDate: new Date(),\n    CustomKey: Cookies.get(ServiceStrings.tracking.visitorKey),\n    ID: 0,\n    StatusID: 1,\n    TypeID: 1\n  } as VisitorModel);\n\n  const upsertVisitModel = (): VisitModel => ({\n    Active: true,\n    CreatedDate: new Date(),\n    CustomKey: Cookies.get(ServiceStrings.tracking.visitKey),\n    ID: 0,\n    StatusID: 1,\n    TypeID: 1,\n    VisitorID: Number(cookieData?.visitorID) || null\n  } as VisitModel);\n\n  const upsertEventModel = (): EventModel => ({\n    Active: true,\n    CreatedDate: new Date(),\n    CustomKey: \"Page View\",\n    Name: \"Page View\",\n    StatusID: 1,\n    TypeID: 1,\n    VisitID: Number(cookieData?.visitID) || null,\n    VisitorID: Number(cookieData?.visitorID) || null\n  } as EventModel);\n\n  const createPageViewModel = (): PageViewModel => ({\n    Active: true,\n    CreatedDate: new Date(),\n    Name: document.title,\n    StatusID: 1,\n    TypeID: 1,\n    URI: window.location.href,\n    VisitorID: Number(cookieData?.visitorID) || null\n  } as PageViewModel);\n\n  const createPageViewEventModel = (): PageViewEventModel => ({\n    Active: true,\n    CreatedDate: new Date(),\n    EventID: null,\n    ID: 0,\n    Name: \"Page View Event\",\n    PageViewID: null,\n    StatusID: 1,\n    TypeID: 1\n  } as PageViewEventModel);\n\n  useEffect(() => {\n    if (!cefConfig?.featureSet.tracking.enabled) {\n      return;\n    }\n    setupCookies();\n  }, [ cefConfig ]);\n\n  useEffect(() => {\n    if (cookieData && window.location.href !== lastEventRef.current) {\n      lastEventRef.current = window.location.href;\n      createEvent();\n    }\n  }, [ cookieData, location ]);\n\n  function setupCookies(): void {\n    let visitorKeyCookie = Cookies.get(ServiceStrings.tracking.visitorKey);\n    if (!visitorKeyCookie) {\n      const newGUID = Guid.newGuid();\n      Cookies.set(ServiceStrings.tracking.visitorKey, newGUID, getCookiesOptions(cefConfig));\n      visitorKeyCookie = newGUID;\n    }\n    let visitKeyCookie = Cookies.get(ServiceStrings.tracking.visitKey);\n    if (!visitKeyCookie) {\n      const newGUID = Guid.newGuid();\n      Cookies.set(ServiceStrings.tracking.visitKey, newGUID, getCookiesOptions(cefConfig));\n      visitKeyCookie = newGUID;\n    }\n    const visitorID = Cookies.get(ServiceStrings.tracking.visitorID);\n    const visitID = Cookies.get(ServiceStrings.tracking.visitID);\n    setCookieData({ visitorKeyCookie, visitKeyCookie, visitorID, visitID });\n  }\n\n  function createEvent(): void {\n    // Check for visitor and visit, if exists then reference ID\n    const dto = {\n      PageView: createPageViewModel(),\n      PageViewEvent: createPageViewEventModel()\n    } as EndUserEventRequest;\n    if (cookieData?.visitorID) {\n      dto.VisitorID = Number(cookieData.visitorID);\n    } else {\n      dto.Visitor = upsertVisitorModel();\n    }\n    if (cookieData?.visitID) {\n      dto.VisitID = Number(cookieData.visitID);\n    } else {\n      dto.Visit = upsertVisitModel();\n    }\n    dto.Event = upsertEventModel();\n    cvApi.tracking.CreateFullPageViewEvent(dto)\n      .then(r => {\n        if (!r?.data?.ActionSucceeded) {\n          console.error(\"Failed to store tracking data for page view\");\n          return;\n        }\n        const visitorIDFromRes = r.data.Result.VisitorID;\n        Cookies.set(\n          ServiceStrings.tracking.visitorID,\n          visitorIDFromRes.toString(),\n          getCookiesOptions(cefConfig, false)\n        );\n        const visitIDFromRes = r.data.Result.VisitID;\n        Cookies.set(\n          ServiceStrings.tracking.visitID,\n          visitIDFromRes.toString(),\n          getCookiesOptions(cefConfig, false)\n        );\n      })\n      .catch(err => console.error(err));\n  }\n\n  return <input type=\"hidden\" id=\"trackingSnippet\" />;\n};\n\nfunction getSubDomain(cefConfig: CEFConfig): string {\n  const { host } = window.location;\n  let count = 0;\n  const matchOfHost = host.match(/\\\\./gu);\n  if (matchOfHost) {\n    count = matchOfHost.length;\n  }\n  const rootSegmentCount = (cefConfig?.useSubDomainForCookies\n    ? null\n    : cefConfig?.usePartialSubDomainForCookiesRootSegmentCount) || 2;\n  if (count <= rootSegmentCount - 1) {\n    // No subdomain available, like 'claritydev.us'\n    return null;\n  }\n  // At least one subdomain available like 'local.claritydev.us' or 'api.local.claritydev.us'\n  const array = host.split(\".\");\n  let returnValue = \"\";\n  for (let i = 0; i < array.length - rootSegmentCount; i++) {\n    if (i > 0) {\n      // E.g. 'api.local', put the '.' back in\n      returnValue += \".\";\n    }\n    returnValue += array[i];\n  }\n  // E.g.- 'local' or 'api.local'\n  return returnValue;\n}\n\nfunction getCookiesOptions(cefConfig: CEFConfig, allowExpire: boolean = false): Cookies.CookieAttributes {\n  const options: Cookies.CookieAttributes = {\n    path: \"/\",\n    domain: cefConfig?.useSubDomainForCookies || !getSubDomain(cefConfig)\n      ? window.location.host\n      : window.location.host.replace(getSubDomain(cefConfig), \"\")\n  };\n  if (allowExpire) {\n    const in120 = new Date();\n    in120.setMinutes(in120.getMinutes() + cefConfig.featureSet.tracking.expires);\n    options.expires = in120;\n  }\n  return options;\n}\n","import { Button, Col, ListGroup, Row } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { AppliedCartItemDiscountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { currencyFormatter, limitWithEllipses } from \"src/_shared/common/Formatters\";\n\ninterface IMiniCartDiscountListItemProps {\n  discount: AppliedCartItemDiscountModel;\n  type: \"Order\" | \"Shipping\";\n  index: number;\n  onRemoveDiscountClicked: (discount: AppliedCartItemDiscountModel) => void;\n}\n\nexport const MiniCartDiscountListItem = (props: IMiniCartDiscountListItemProps): JSX.Element => {\n  const { discount, type, index, onRemoveDiscountClicked } = props;\n\n  const { t } = useTranslation();\n\n  return (\n    <ListGroup.Item className=\"px-3\">\n      <Row className=\"gx-0 align-items-center\">\n        <Col xs=\"auto\" className=\"pe-1\">\n          {!discount.DiscountIsAutoApplied\n            && <Button\n              variant=\"link\"\n              className=\"float-left text-danger top p-0\"\n              id={`btnRemove${type}Discount_${index}`}\n              title={t(\"ui.storefront.cart.removeItemFromCart\")}\n              aria-label={t(\"ui.storefront.cart.removeItemFromCart\")}\n              onClick={() => onRemoveDiscountClicked(discount)}>\n              <i className=\"fal fa-fw fa-trash fa-lg\" />\n              <span className=\"sr-only\">{t(\"ui.storefront.cart.removeDiscountFromItem\")}</span>\n            </Button>\n          }\n        </Col>\n        <Col>\n          <div className=\"text-start px-1\">\n            <div\n              id={`${type.toLowerCase()}DiscountName_${index}`}\n              className=\"form-control-static font-weight-normal\">\n              <span>{limitWithEllipses(discount.SlaveName, 13)}</span>\n            </div>\n          </div>\n        </Col>\n        <Col>\n          <div className=\"text-end px-1\">\n            <div\n              id={`${type.toLowerCase()}DiscountValue_${index}`}\n              className=\"d-block form-control-static cart-price price text-end\">\n              <span>\n                {discount.DiscountValueType === 1\n                  ? currencyFormatter.format(discount.DiscountValue)\n                  : `${discount.DiscountValue}%`}\n              </span>\n              &nbsp;<span>{t(\"ui.storefront.common.Off\")}</span>\n            </div>\n          </div>\n        </Col>\n        <Col>\n          <div\n            id={`${type.toLowerCase()}DiscountTotal_${index}`}\n            className=\"ps-1 d-block form-control-static cart-price price text-end text-success\">\n            <b>{currencyFormatter.format(discount.DiscountTotal)}</b>\n          </div>\n        </Col>\n      </Row>\n    </ListGroup.Item>\n  );\n};\n","import { Dispatch, SetStateAction, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Anchor, Button, Card, Col, Form, InputGroup, ListGroup, Row, Table } from \"react-bootstrap\";\nimport { currencyFormatter } from \"src/_shared/common/Formatters\";\nimport { TotalsWidget } from \"src/Cart/views/TotalsWidget\";\nimport { SalesItemBaseModel } from \"src/_api/cvApi.shared\";\nimport { AppliedCartItemDiscountModel, CartTotals } from \"src/_api/cvApi._DtoClasses\";\nimport { ImageWithFallback } from \"src/_shared/common/ImageWithFallback\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { LoginForPricing } from \"src/Cart/views/LoginForPricing\";\nimport { ConfirmationModal, Modal } from \"src/_shared/modals\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { MiniCartDiscountListItem } from \"src/Cart/views/MiniCartDiscountListItem\";\nimport { CartValidator } from \"src/Cart/views/CartValidator\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { DateTime } from \"luxon\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { ProductCardNameWidget } from \"src/Catalog/views/ProductCardWidgets\";\nimport { NotesWidget } from \"./NotesWidget\";\n\ninterface IMiniCartB2CProps {\n  type: \"Cart\" | \"Quote Cart\";\n  totals: CartTotals;\n  checkoutRunning: boolean;\n  enteredNoteText: string;\n  setEnteredNoteText: Dispatch<SetStateAction<string>>;\n}\n\nexport const MiniCartB2C = (props: IMiniCartB2CProps): JSX.Element => {\n  const { type, totals, checkoutRunning, enteredNoteText, setEnteredNoteText } = props;\n\n  const [ showRemoveDiscountConfirmationModal, setShowRemoveDiscountConfirmationModal ]\n    = useState<boolean>(false);\n  const [ discountToRemove, setDiscountToRemove ] = useState<AppliedCartItemDiscountModel>(null);\n  const [ quantityOfItemsToShow, setQuantityOfItemsToShow ] = useState<number>(4);\n  const [ discountCode, setDiscountCode ] = useState<string>(\"\");\n  const [ showDiscountResponseModal, setShowDiscountResponseModal ] = useState<boolean>(false);\n  const [ discountResponseModalMessage, setDiscountResponseModalMessage ] = useState<string>(null);\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n  const cartToUse = useCart(type);\n  const cartFactory = useCartFactory();\n\n  if (!cefConfig?.featureSet?.carts?.miniCart?.enabled) {\n    if (cefConfig.debug) {\n      console.log(\"Attempted to render MiniCart when it is not enabled\");\n    }\n    return null;\n  }\n\n  if (!cartToUse?.SalesItems?.length) {\n    return (\n      <Card className=\"mb-3\">\n        <Card.Header className=\"p-4\">\n          <h4>{t(\"ui.storefront.checkout.cartEmpty\")}</h4>\n        </Card.Header>\n      </Card>\n    );\n  }\n\n  const removeCartItemDiscount = (discount: AppliedCartItemDiscountModel): void => {\n    setRunning();\n    cartFactory.removeDiscount(type, discount)\n      .then(() => {\n        setShowRemoveDiscountConfirmationModal(false);\n        setDiscountToRemove(null);\n        finishRunning();\n      })\n      .catch(err => {\n        setShowRemoveDiscountConfirmationModal(false);\n        setDiscountToRemove(null);\n        setShowDiscountResponseModal(true);\n        setDiscountResponseModalMessage(t(\"ui.storefront.cart.RemoveDiscount.UnableToRemoveDiscount\"));\n        finishRunning(true, err);\n      });\n  };\n\n  const getAddCartDiscountErrMessage = (messages: string[]): string => {\n    if (messages?.length > 1) {\n      const cleanMsgs: string[] = messages.map(m => m.replace(\"ERROR! \", \"\"));\n      for (let i = 0; i < cleanMsgs.length; i++) {\n        const curMsg = cleanMsgs[i];\n        const isDate = Boolean(Date.parse(curMsg));\n        if (isDate) {\n          cleanMsgs[i] = DateTime.fromISO(curMsg).toFormat(\"ff\");\n        }\n      }\n      return cleanMsgs.join(\" \");\n    } else if (messages?.length === 1) {\n      return messages[0].replace(\"ERROR! \", \"\");\n    }\n    return t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\");\n  };\n\n  const addCartDiscount = () => {\n    if (!discountCode) {\n      return;\n    }\n    setRunning();\n    cartFactory.addDiscount(ServiceStrings.carts.types.cart, discountCode)\n      .then(res => {\n        if (!res?.ActionSucceeded) {\n          const properMsg = getAddCartDiscountErrMessage(res?.Messages);\n          setDiscountResponseModalMessage(properMsg);\n          setShowDiscountResponseModal(true);\n          throw t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\");\n        }\n        setDiscountCode(\"\");\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  const orderDiscounts = cartToUse?.Discounts ? cartToUse.Discounts.filter(d => d.DiscountTypeID === 0) : [];\n  const shippingDiscounts = cartToUse?.Discounts\n    ? cartToUse.Discounts.filter(d => d.DiscountTypeID === 2)\n    : [];\n\n  return (\n    <Card className=\"mb-3\">\n      <ConfirmationModal\n        show={showRemoveDiscountConfirmationModal}\n        onCancel={() => {\n          setShowRemoveDiscountConfirmationModal(false);\n          setDiscountToRemove(null);\n        }}\n        onConfirm={() => removeCartItemDiscount(discountToRemove)}\n        size=\"md\"\n        confirmBtnLabel={t(\"ui.storefront.common.Yes\")}\n        cancelBtnLabel={t(\"ui.storefront.common.No\")}>\n        {viewState.running && <LoadingWidget overlay={true} />}\n        {t(\"ui.storefront.discounts.AreYouSureYouWantToRemoveThisDiscount\")}\n      </ConfirmationModal>\n      <Modal\n        show={showDiscountResponseModal}\n        onCancel={() => {\n          setShowDiscountResponseModal(false);\n          setDiscountResponseModalMessage(null);\n        }}\n        size=\"md\"\n        modalBodyClasses=\"p-0\">\n        <div className=\"p-3\">\n          {discountResponseModalMessage ?? t(\"ui.storefront.cart.AddDiscount.UnableToAddDiscount\")}\n        </div>\n        <div className=\"modal-footer\">\n          <Button\n            variant=\"primary\"\n            onClick={() => {\n              setShowDiscountResponseModal(false);\n              setDiscountResponseModalMessage(null);\n            }}>\n            {t(\"ui.storefront.common.OK\")}\n          </Button>\n        </div>\n      </Modal>\n      <Card.Header className=\"border-0 bg-transparent\">\n        <Row>\n          <Col>\n            <h4 className=\"my-0\" id={`lbl${type === ServiceStrings.carts.types.quote ? \"Quote\" : \"Order\"}Summary`}>\n              {t(\n                type === ServiceStrings.carts.types.cart\n                  ? \"ui.storefront.common.OrderSummary\"\n                  : \"ui.storefront.common.QuoteSummary\"\n              )}\n            </h4>\n          </Col>\n        </Row>\n      </Card.Header>\n      <ListGroup>\n        {cartToUse.SalesItems.slice(0, quantityOfItemsToShow).map(\n          (salesItem: SalesItemBaseModel<AppliedCartItemDiscountModel>, itemIndex: number) => {\n            const {\n              ID,\n              ProductName,\n              UnitSoldPrice,\n              UnitCorePrice,\n              Quantity,\n              QuantityBackOrdered,\n              QuantityPreSold,\n              ExtendedPrice,\n              Discounts,\n              ProductPrimaryImage\n            } = salesItem;\n            const totalQuantity = (Quantity ?? 0) + (QuantityBackOrdered ?? 0) + (QuantityPreSold ?? 0);\n            const discountTotal = Discounts\n              ? Discounts.reduce((curVal, accu) => curVal + accu.DiscountTotal, 0)\n              : 0;\n            return (\n              <ListGroup.Item key={ID} className=\"p-0 border-0\">\n                <Row className=\"gx-0\">\n                  <Col xs={3} className=\"d-none d-xl-flex xl-ps-2 xl-py-2 tk-py-2 fk-py-2\">\n                    <div id={`miniCartProductImageThumbnail${itemIndex}`} className=\"card-img\">\n                      <Anchor\n                        href={corsLink(cefConfig, `/${salesItem.ProductSeoUrl}`, \"productDetail\")}\n                        id={`cartProductImageThumbnail${itemIndex}`}\n                        className=\"product-image d-flex justify-content-center\">\n                        <ImageWithFallback\n                          className=\"img-fluid\"\n                          alt={ProductName}\n                          // eslint-disable-next-line camelcase\n                          src={ProductPrimaryImage}\n                          imageResizerParamsBody={{\n                            maxwidth: 80,\n                            maxheight: 80,\n                            scale: \"both\",\n                            mode: \"pad\"\n                          }}\n                        />\n                      </Anchor>\n                    </div>\n                  </Col>\n                  <Col className=\"py-2 ps-3 xl-ps-2 tk-ps-2 fk-ps-3 pe-3\">\n                    <span className=\"cart-item-label\"\n                      data-sid={`miniCartProductName_${itemIndex}`}\n                      id={`miniCartProductName_${itemIndex}`}>\n                      <ProductCardNameWidget\n                        productName={ProductName}\n                        productSeoUrl={salesItem.ProductSeoUrl}\n                      />\n                    </span>\n                    {(!cefConfig?.loginForPricing?.enabled || currentUser)\n                      && <Row className=\"gx-0\">\n                        <Col xs={6} className=\"small\">\n                          <div\n                            className=\"text-start fw-bold\"\n                            id={`MiniCartProductPriceText_${itemIndex}`}>\n                            {t(\"ui.storefront.common.Price\")}\n                          </div>\n                          {discountTotal < 0\n                            ? <div\n                              className=\"d-block form-control-static cart-price price text-left py-0\">\n                              { // eslint-disable-next-line @typescript-eslint/no-extra-parens, max-len\n                                currencyFormatter.format((UnitSoldPrice || UnitCorePrice || 0) + (discountTotal / totalQuantity))}\n                            </div>\n                            : <div\n                              className=\"d-block form-control-static cart-price price text-start py-0\"\n                              id={`cartProductSalePrice_${itemIndex}`}>\n                              {currencyFormatter.format(UnitSoldPrice)}\n                            </div>}\n                        </Col>\n                        <Col xs={6} className=\"small\">\n                          <div className=\"fw-bold\">\n                            {t(\"ui.storefront.checkout.views.checkoutLabelItemTotal.avd\")}\n                          </div>\n                          {discountTotal < 0\n                            ? <div\n                              className=\"d-block form-control-static font-weight-normal py-0\"\n                              id={`cartProductSubtotalWithDiscounts${itemIndex}`}>\n                              {currencyFormatter.format(ExtendedPrice + discountTotal)}\n                            </div>\n                            : <div\n                              className={`d-block form-control-static font-weight-normal py-0 ${\n                                discountTotal < 0 ? \"strike-through text-disabled\" : \"\"\n                              }`}\n                              id={`cartProductSubtotal_${itemIndex}`}>\n                              {currencyFormatter.format(ExtendedPrice)}\n                            </div>}\n                        </Col>\n                      </Row>\n                    }\n                    {cefConfig?.loginForPricing?.enabled && !currentUser\n                      && <LoginForPricing />\n                    }\n                  </Col>\n                </Row>\n                {cefConfig.featureSet.discounts.enabled\n                  && Discounts\n                  && Discounts.length\n                  && (cefConfig.loginForPricing.enabled || currentUser)\n                    && <Row className=\"gx-0\">\n                      <Col xs={12} className=\"small\">\n                        <Table className=\"Table-borderless w-auto mb-2 mx-3\">\n                          <tbody>\n                            {Discounts.map((discount, discountIndex) => {\n                              const {\n                                SlaveName,\n                                DiscountIsAutoApplied,\n                                DiscountValueType,\n                                DiscountValue\n                              } = discount;\n                              return (\n                                <tr key={discount.ID}>\n                                  <td className=\"text-right w-auto\">\n                                    <span\n                                      id={`cartProductDiscountDescription_${\n                                        `${itemIndex}.${discountIndex}`\n                                      }`}\n                                      title={SlaveName}>\n                                      {SlaveName.length > 25\n                                        ? `${SlaveName.substr(0, 25)}...`\n                                        : SlaveName}\n                                    </span>\n                                  </td>\n                                  <td className=\"w-auto\">\n                                    {DiscountIsAutoApplied\n                                      ? <span>\n                                        <span\n                                          id={`cartProductDiscountValue${itemIndex}.${discountIndex}`}\n                                          className=\"text-success\">\n                                          {DiscountValueType === 1\n                                            ? currencyFormatter.format(DiscountValue)\n                                            : `${DiscountValue} %`}\n                                        </span>\n                                      &nbsp;\n                                        <span className=\"text-success\">\n                                          {t(\"ui.storefront.common.Off\")}\n                                        </span>\n                                      </span>\n                                      : <Button\n                                        variant=\"link\"\n                                        className=\"top p-0 text-nowrap\"\n                                        id={`btnRemoveDiscountFromItem${itemIndex}.${discountIndex}`}\n                                        title={t(\"ui.storefront.cart.removeDiscountFromItem\")}\n                                        aria-label={t(\"ui.storefront.cart.removeDiscountFromItem\")}\n                                        onClick={() => {\n                                          setShowRemoveDiscountConfirmationModal(true);\n                                          setDiscountToRemove(discount);\n                                        }}>\n                                        <span\n                                          id={`cartProductDiscountValue${itemIndex}.${discountIndex}`}\n                                          className=\"text-success\">\n                                          {DiscountValueType === 1\n                                            ? currencyFormatter.format(DiscountValue)\n                                            : `${DiscountValue} %`}\n                                        </span>\n                                      &nbsp;\n                                        <span className=\"text-success\">\n                                          {t(\"ui.storefront.common.Off\")}\n                                        </span>\n                                      &nbsp;\n                                        <i className=\"fal fa-fw fa-trash fa-lg text-danger\" />\n                                        <span className=\"sr-only\">\n                                          {t(\"ui.storefront.cart.removeDiscountFromItem\")}\n                                        </span>\n                                      </Button>\n                                    }\n                                  </td>\n                                </tr>\n                              );\n                            })}\n                          </tbody>\n                        </Table>\n                      </Col>\n                    </Row>\n                }\n              </ListGroup.Item>\n            );\n          }\n        )}\n        {cartToUse.SalesItems.length > 4 && quantityOfItemsToShow < cartToUse.SalesItems.length\n          && <ListGroup.Item className=\"p-1\">\n            <Button\n              variant=\"secondary\"\n              className=\"w-100\"\n              title={t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\n              aria-label={t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\n              onClick={() => setQuantityOfItemsToShow(quantityOfItemsToShow + 4)}>\n              {t(\"ui.storefront.cart.cartShippingEstimator.ShowMore\")}\n            </Button>\n          </ListGroup.Item>\n        }\n        {cartToUse.SalesItems.length > 4 && quantityOfItemsToShow > 4\n          && <ListGroup.Item ng-if=\"cvmcCtrl.showShowLessButton\" className=\"p-1\">\n            <Button\n              variant=\"secondary\"\n              className=\"w-100\"\n              title={t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\n              aria-label={t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\n              onClick={() => setQuantityOfItemsToShow(Math.max(4, quantityOfItemsToShow - 4))}>\n              {t(\"ui.storefront.cart.cartShippingEstimator.ShowLess\")}\n            </Button>\n          </ListGroup.Item>\n        }\n      </ListGroup>\n      {cefConfig?.featureSet.discounts.enabled\n        && (Boolean(orderDiscounts?.length) || Boolean(shippingDiscounts?.length))\n          && <Card.Body className=\"py-1 bg-medium text-dark\">\n            <span className=\"card-subtitle fw-bold\">\n              {t(\"ui.storefront.checkout.appliedDiscounts\")}\n            </span>\n          </Card.Body>\n      }\n      {cefConfig?.featureSet.discounts.enabled\n        && (Boolean(orderDiscounts.length) || Boolean(shippingDiscounts.length))\n        && (!cefConfig.loginForPricing.enabled || Boolean(currentUser))\n          && <ListGroup className=\"list-group-flush\" id=\"miniCartDiscounts\">\n            {orderDiscounts.map((orderDiscount, index) => <MiniCartDiscountListItem\n              key={orderDiscount.ID}\n              discount={orderDiscount}\n              index={index}\n              type=\"Order\"\n              onRemoveDiscountClicked={discount => {\n                setShowRemoveDiscountConfirmationModal(true);\n                setDiscountToRemove(discount);\n              }}\n            />)}\n            {shippingDiscounts.map((shippingDiscount, index) => <MiniCartDiscountListItem\n              key={shippingDiscount.ID}\n              discount={shippingDiscount}\n              index={index}\n              type=\"Shipping\"\n              onRemoveDiscountClicked={discount => {\n                setShowRemoveDiscountConfirmationModal(true);\n                setDiscountToRemove(discount);\n              }}\n            />)}\n          </ListGroup>\n      }\n      {totals && <Card.Body className=\"p-0\">\n        <TotalsWidget\n          totals={totals}\n          type={type}\n          tableClasses=\"w-100 mb-0 table-borderless\"\n          padAlign={true}\n        />\n      </Card.Body>}\n      {/* TODO: add || cartRes.validationResponse */}\n      {/*   Ng-if=\"cefConfig.featureSet.discounts.enabled && type !== 'Quote Cart'\n      || cvCartService.validationResponse\" */}\n      {cefConfig?.featureSet?.discounts?.enabled && type === ServiceStrings.carts.types.cart\n        && <Card.Footer className=\"p-3\">\n          <Table borderless>\n            <tbody>\n              <tr>\n                <td>\n                  <Row>\n                    {cefConfig.featureSet.discounts.enabled\n                      && <Col xs={12} className=\"cef-checkout\">\n                        <h4 id=\"MiniCartDoYouHaveAnyDiscountsText\">\n                          {t(\"ui.storefront.checkout.discounts.DoYouHaveAnyDiscounts\")}\n                        </h4>\n                        <InputGroup className=\"mb-1\">\n                          <Form.Control\n                            type=\"text\"\n                            id=\"txtCoupon\"\n                            placeholder={t(\"ui.storefront.cart.enterCouponCode\")}\n                            required={true}\n                            onKeyDown={e => {\n                              if (e.key === \"Enter\") {\n                                addCartDiscount();\n                                e.preventDefault();\n                              }\n                            }}\n                            onChange={e => setDiscountCode(e.target.value)}\n                            value={discountCode}\n                          />\n                          <div className=\"input-group-append input-group-btn\">\n                            <Button\n                              variant=\"secondary\"\n                              id=\"btnApplyDiscountToCart\"\n                              title={t(\"ui.storefront.cart.Apply\")}\n                              aria-label={t(\"ui.storefront.cart.Apply\")}\n                              disabled={!discountCode}\n                              onClick={() => addCartDiscount()}>\n                              {t(\"ui.storefront.cart.Apply\")}\n                            </Button>\n                          </div>\n                        </InputGroup>\n                      </Col>\n                    }\n                    <Col xs={12}>\n                      <CartValidator type={type} />\n                    </Col>\n                  </Row>\n                </td>\n              </tr>\n              {cefConfig?.featureSet.checkoutNotes?.enabled && <tr>\n                <td>\n                  <Row>\n                    <Col xs={12} className=\"cef-checkout\">\n                      <NotesWidget\n                        parentRunning={checkoutRunning}\n                        enteredNoteText={enteredNoteText}\n                        setEnteredNoteText={setEnteredNoteText}\n                      />\n                    </Col>\n                  </Row>\n                </td>\n              </tr>}\n            </tbody>\n          </Table>\n        </Card.Footer>\n      }\n    </Card>\n  );\n};\n","/* eslint-disable camelcase */\nimport { useEffect, useState } from \"react\";\nimport { useCountries, useRegions } from \"src/_redux/slices/geographySlice\";\nimport { ICheckoutB2CShippingFormData } from \"src/CheckoutB2C/_checkoutB2CTypes\";\nimport { AccountContactModel, CartModel, ContactModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport { useContactTypes } from \"src/_shared/customHooks/useContactTypes\";\nimport { useCurrentAccount, useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { TItem } from \"src/Checkout/_checkoutTypes\";\nimport {\n  assignDestinationContactToAllTargets,\n  cleanTargets,\n  targetFactory\n} from \"src/Checkout/steps/shipping/checkoutShippingFunctions\";\nimport { useAddressBookFactory } from \"src/_redux/factories/addressBookFactory\";\nimport cvApi from \"src/_api/cvApi\";\n\ninterface ICheckoutB2CFactory {\n  copyShippingFieldsToBillingFields: (formData: ICheckoutB2CShippingFormData) => ICheckoutB2CShippingFormData;\n  getShippingContactFromCheckoutB2CShippingForm: (formData: ICheckoutB2CShippingFormData) => ContactModel;\n  getBillingContactFromCheckoutB2CShippingForm: (formData: ICheckoutB2CShippingFormData) => ContactModel;\n  processShippingStep: (\n    formData: ICheckoutB2CShippingFormData,\n    cartType: string,\n    cart: CartModel,\n    sameAsBilling?: boolean,\n  ) => Promise<{\n    shippingContact: ContactModel,\n    billingContact: ContactModel\n  }>;\n}\n\nexport const useCheckoutB2CFactory = (): ICheckoutB2CFactory => {\n  const [ checkoutB2CFactory, setCheckoutB2CFactory ] = useState<ICheckoutB2CFactory>(null);\n\n  const countries = useCountries();\n  const regions = useRegions();\n  const addressBook = useAddressBook();\n  const contactTypes = useContactTypes();\n  const currentUser = useCurrentUser();\n  const currentAccount = useCurrentAccount();\n  const addressBookFactory = useAddressBookFactory();\n\n  useEffect(() => {\n    if (!countries?.length || !regions?.length) {\n      return;\n    }\n    const factory = {\n      getShippingContactFromCheckoutB2CShippingForm: (\n        formData: ICheckoutB2CShippingFormData\n      ): ContactModel => {\n        const {\n          txtFirstNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtLastNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          emEmail1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          telPhone1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtStreet1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtStreet2RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtStreet3RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtCityRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtZipRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          ddlRegionIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          ddlCountryIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n        } = formData;\n\n        const shippingRegion = regions.find(\n          x => x.Name === ddlRegionIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress\n        );\n        const shippingCountry = countries.find(\n          x => x.Name === ddlCountryIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress\n        );\n\n        const matchingAccountContact = addressBook?.find(acctContact => {\n          const { Slave } = acctContact;\n          if (!Slave) {\n            return false;\n          }\n          return Slave.FirstName === txtFirstNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress\n            && Slave.LastName === txtLastNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress\n            && Slave.Phone1 === telPhone1RegistrationAddressBookShipping_CheckoutB2CShippingAddress\n            && Slave.Address.Street1 === txtStreet1RegistrationAddressBookShipping_CheckoutB2CShippingAddress\n            && Slave.Address.City === txtCityRegistrationAddressBookShipping_CheckoutB2CShippingAddress\n            && Slave.Address.PostalCode === txtZipRegistrationAddressBookShipping_CheckoutB2CShippingAddress\n            && Slave.Address.Region.ID === shippingRegion.ID\n            && Slave.Address.Country.ID === shippingCountry.ID;\n        });\n\n        if (matchingAccountContact) {\n          return matchingAccountContact.Slave;\n        }\n\n        const shippingContactType = contactTypes.find(\n          x => x.Name.toLowerCase() === \"shipping\"\n        );\n\n        return {\n          Active: true,\n          Address: {\n            Active: true,\n            City: txtCityRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n            Company: null,\n            Country: shippingCountry,\n            CountryCode: shippingCountry?.Code,\n            CountryKey: shippingCountry?.CustomKey,\n            CountryName: shippingCountry?.Name,\n            CreatedDate: new Date(),\n            CustomKey: `Shipping ${new Date().toISOString()}`,\n            ID: null,\n            PostalCode: txtZipRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n            Region: shippingRegion,\n            RegionCode: shippingRegion?.Code,\n            RegionID: shippingRegion?.ID,\n            RegionKey: shippingRegion?.CustomKey,\n            RegionName: shippingRegion?.Name,\n            Street1: txtStreet1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n            Street2: txtStreet2RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n            Street3: txtStreet3RegistrationAddressBookShipping_CheckoutB2CShippingAddress\n          },\n          CreatedDate: new Date(),\n          Email1: emEmail1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          Fax1: null,\n          FirstName: txtFirstNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          FullName: `${txtFirstNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress}\n            ${txtLastNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress}`,\n          ID: null,\n          LastName: txtLastNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          Phone1: telPhone1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          Phone2: null,\n          Phone3: null,\n          Type: shippingContactType,\n          TypeID: shippingContactType.ID,\n          TypeKey: shippingContactType.CustomKey,\n          TypeName: shippingContactType.Name\n        };\n      },\n      getBillingContactFromCheckoutB2CShippingForm: (\n        formData: ICheckoutB2CShippingFormData\n      ): ContactModel => {\n        const {\n          txtFirstNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          txtLastNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          emEmail1RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          telPhone1RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          txtStreet1RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          txtStreet2RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          txtStreet3RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          txtCityRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          txtZipRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          ddlRegionIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          ddlCountryIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress\n        } = formData;\n\n        const billingRegion = regions.find(\n          x => x.Name === ddlRegionIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress\n        );\n        const billingCountry = countries.find(\n          x => x.Name === ddlCountryIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress\n        );\n\n        const matchingAccountContact = addressBook?.find(acctContact => {\n          const { Slave } = acctContact;\n          if (!Slave) {\n            return false;\n          }\n          return Slave.FirstName === txtFirstNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress\n            && Slave.LastName === txtLastNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress\n            && Slave.Phone1 === telPhone1RegistrationAddressBookBilling_CheckoutB2CBillingAddress\n            && Slave.Address.Street1 === txtStreet1RegistrationAddressBookBilling_CheckoutB2CBillingAddress\n            && Slave.Address.City === txtCityRegistrationAddressBookBilling_CheckoutB2CBillingAddress\n            && Slave.Address.PostalCode === txtZipRegistrationAddressBookBilling_CheckoutB2CBillingAddress\n            && Slave.Address.Region.ID === billingRegion.ID\n            && Slave.Address.Country.ID === billingCountry.ID;\n        });\n\n        if (matchingAccountContact) {\n          return matchingAccountContact.Slave;\n        }\n\n        const billingContactType = contactTypes.find(\n          x => x.Name.toLowerCase() === \"billing\"\n        );\n\n        return {\n          Active: true,\n          Address: {\n            Active: true,\n            City: txtCityRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n            Company: null,\n            Country: billingCountry,\n            CountryCode: billingCountry?.Code,\n            CountryKey: billingCountry?.CustomKey,\n            CountryName: billingCountry?.Name,\n            CreatedDate: new Date(),\n            CustomKey: `Billing ${new Date().toISOString()}`,\n            ID: null,\n            PostalCode: txtZipRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n            Region: billingRegion,\n            RegionCode: billingRegion?.Code,\n            RegionID: billingRegion?.ID,\n            RegionKey: billingRegion?.CustomKey,\n            RegionName: billingRegion?.Name,\n            Street1: txtStreet1RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n            Street2: txtStreet2RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n            Street3: txtStreet3RegistrationAddressBookBilling_CheckoutB2CBillingAddress\n          },\n          CreatedDate: new Date(),\n          Email1: emEmail1RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          Fax1: null,\n          FirstName: txtFirstNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          FullName: `${txtFirstNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress}\n            ${txtLastNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress}`,\n          ID: null,\n          LastName: txtLastNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          Phone1: telPhone1RegistrationAddressBookBilling_CheckoutB2CBillingAddress,\n          Phone2: null,\n          Phone3: null,\n          Type: billingContactType,\n          TypeID: billingContactType.ID,\n          TypeKey: billingContactType.CustomKey,\n          TypeName: billingContactType.Name\n        };\n      },\n      copyShippingFieldsToBillingFields: (formData: ICheckoutB2CShippingFormData): ICheckoutB2CShippingFormData => {\n        return {\n          ...formData,\n          txtFirstNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.txtFirstNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtLastNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.txtLastNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          emEmail1RegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.emEmail1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          telPhone1RegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.telPhone1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtStreet1RegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.txtStreet1RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtStreet2RegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.txtStreet2RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtStreet3RegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.txtStreet3RegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtCityRegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.txtCityRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          txtZipRegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.txtZipRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          ddlRegionIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.ddlRegionIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress,\n          ddlCountryIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress:\n            formData.ddlCountryIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress\n        };\n      },\n      processShippingStep: async (\n        formData: ICheckoutB2CShippingFormData,\n        cartType: string,\n        cart: CartModel,\n        sameAsBilling?: boolean\n      ): Promise<{\n        shippingContact: ContactModel,\n        billingContact: ContactModel\n      }> => {\n        let formDataCopy = { ...formData };\n        if (sameAsBilling) {\n          formDataCopy = factory.copyShippingFieldsToBillingFields(formData);\n        }\n\n        const shippingContact = factory.getShippingContactFromCheckoutB2CShippingForm({\n          ...formDataCopy,\n          emEmail1RegistrationAddressBookShipping_CheckoutB2CShippingAddress: currentUser?.ID\n            ? currentUser.Email\n            : formDataCopy.emEmail1RegistrationAddressBookShipping_CheckoutB2CShippingAddress\n        });\n        const billingContact = factory.getBillingContactFromCheckoutB2CShippingForm({\n          ...formDataCopy,\n          emEmail1RegistrationAddressBookBilling_CheckoutB2CBillingAddress: currentUser?.ID\n            ? currentUser.Email\n            : formDataCopy.emEmail1RegistrationAddressBookBilling_CheckoutB2CBillingAddress\n        });\n\n        let shippingAcctContact: AccountContactModel = {\n          ID: 0,\n          Active: true,\n          CreatedDate: new Date(),\n          MasterID: currentAccount?.ID,\n          MasterKey: currentAccount?.CustomKey,\n          MasterName: currentAccount?.Name,\n          Slave: shippingContact\n        };\n\n        let billingAcctContact: AccountContactModel = {\n          ID: 0,\n          Active: true,\n          CreatedDate: new Date(),\n          MasterID: currentAccount?.ID,\n          MasterKey: currentAccount?.CustomKey,\n          MasterName: currentAccount?.Name,\n          Slave: billingContact\n        };\n\n        if (!shippingContact.ID) {\n          shippingAcctContact = await addressBookFactory.createNewAddress({\n            ID: 0,\n            Active: true,\n            CreatedDate: new Date(),\n            MasterID: currentAccount?.ID,\n            MasterKey: currentAccount?.CustomKey,\n            MasterName: currentAccount?.Name,\n            Slave: shippingContact\n          });\n        }\n\n        if (sameAsBilling) {\n          billingAcctContact.Slave = shippingAcctContact.Slave;\n        }\n\n        if (!billingAcctContact.Slave.ID) {\n          billingAcctContact = await addressBookFactory.createNewAddress({\n            ID: 0,\n            Active: true,\n            CreatedDate: new Date(),\n            MasterID: currentAccount?.ID,\n            MasterKey: currentAccount?.CustomKey,\n            MasterName: currentAccount?.Name,\n            Slave: billingContact\n          });\n        }\n\n        const items: TItem[] = cart.SalesItems\n          .filter((x: TItem) => !x.ProductNothingToShip)\n          .map(item => {\n            const itemCopy = {\n              ...item\n            };\n            if (!itemCopy.Targets) {\n              const newTarget = targetFactory(\n                itemCopy.TotalQuantity,\n                shippingAcctContact\n              );\n              itemCopy.Targets = [ newTarget ];\n            }\n            return {\n              ...itemCopy,\n              Targets: cleanTargets(itemCopy)\n            };\n          });\n\n        const itemsWithAssignedContact = assignDestinationContactToAllTargets(\n          items,\n          shippingAcctContact\n        );\n\n        const updateRes = await cvApi.shopping.UpdateCartItems({\n          TypeName: cartType,\n          Items: itemsWithAssignedContact\n        });\n\n        if (!updateRes || !updateRes.data || updateRes.status !== 200) {\n          throw new Error(\"Failed to update cart items\");\n        }\n        // Assign billing contact\n        const setBillingContactRes = await cvApi.shopping.CurrentCartSetBillingContact({\n          TypeName: cartType,\n          BillingContact: billingAcctContact.Slave\n        });\n\n        if (!setBillingContactRes?.data?.ActionSucceeded) {\n          throw new Error(\"Failed to update cart billing contact\");\n        }\n        return {\n          billingContact: billingAcctContact.Slave,\n          shippingContact: shippingAcctContact.Slave\n        };\n      }\n    };\n    setCheckoutB2CFactory(factory);\n  }, [ countries, regions, addressBook, currentAccount, currentUser, contactTypes, addressBookFactory ]);\n\n  return checkoutB2CFactory;\n};\n","import { useEffect, useState } from \"react\";\nimport { TypeModel } from \"src/_api/cvApi._DtoClasses\";\nimport promiser from \"src/_shared/Promiser\";\nimport cvApi from \"src/_api/cvApi\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\nexport const useContactTypes = (): TypeModel[] => {\n  const [ contactTypes, setContactTypes ] = useState<TypeModel[]>(null);\n\n  const cefConfig = useCefConfig();\n\n  useEffect(() => {\n    const promiserKey = \"getContactTypes\";\n    promiser.resolve(\n      promiserKey,\n      () => cvApi.contacts.GetContactTypes({\n        Active: true,\n        AsListing: true\n      })\n    )\n      .then(res => {\n        setContactTypes(res.data.Results);\n      })\n      .catch(err => {\n        if (cefConfig.debug) {\n          console.error(err);\n        }\n      });\n  }, []);\n\n  return contactTypes;\n};\n","/* eslint-disable camelcase */\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Button, Form } from \"react-bootstrap\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ICheckoutB2CShippingFormData, ICheckoutB2CShippingStepProps } from \"src/CheckoutB2C/_checkoutB2CTypes\";\nimport { useAddressBook } from \"src/_redux/slices/addressBookSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useCountries } from \"src/_redux/slices/geographySlice\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { NewAddressForm } from \"src/_shared/forms/NewAddressForm\";\nimport { useCartFactory } from \"src/_redux/factories/cartFactory\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCheckoutB2CFactory } from \"src/CheckoutB2C/useCheckoutB2CFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\nexport const CheckoutB2CShippingStep = (props: ICheckoutB2CShippingStepProps): JSX.Element => {\n  const { cartBillingContact, cartShippingContact, continueText, onComplete, cartType } = props;\n\n  const [ sameAsBilling, setSameAsBilling ] = useState<boolean>(true);\n\n  const {\n    formState,\n    getValues,\n    handleSubmit,\n    register,\n    reset,\n    setValue,\n    trigger,\n    watch\n    // TODO: type this\n  } = useForm<ICheckoutB2CShippingFormData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\"\n  });\n\n  const cefConfig = useCefConfig();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const currentUser = useCurrentUser();\n\n  const addressBook = useAddressBook();\n  const cartFactory = useCartFactory();\n  const checkoutB2CFactory = useCheckoutB2CFactory();\n  const countries = useCountries();\n  const cart = useCart(cartType);\n\n  useEffect(() => {\n    // In case this step is returned to\n    onChangeWithRatesReset();\n  }, []);\n\n  const onChangeWithRatesReset = useCallback(() => {\n    setRunning();\n    cvApi.shopping\n      .ClearCurrentCartShippingRateQuote({ TypeName: cartType })\n      .then(_res => {\n        cartFactory.reloadCart(cartType, true);\n        finishRunning();\n      })\n      .catch(err => {\n        finishRunning(true, err.message || \"Failed to clear current cart shipping rate quote\");\n      });\n  }, [ cartFactory, cartType ]);\n\n  const onSubmit = useCallback(async (formData: ICheckoutB2CShippingFormData) => {\n    setRunning();\n    try {\n      const {\n        shippingContact,\n        billingContact\n      } = await checkoutB2CFactory.processShippingStep(\n        formData,\n        cartType,\n        cart,\n        sameAsBilling\n      );\n      finishRunning();\n      onComplete(\n        sameAsBilling,\n        shippingContact,\n        billingContact\n      );\n    } catch (err) {\n      finishRunning(true, err);\n    }\n  }, [ onComplete, checkoutB2CFactory, cart, cartType, sameAsBilling ]);\n\n  if (!countries) {\n    return null;\n  }\n\n  const forcedCountryID = countries?.find(x => x.Name === cefConfig.countryCode)?.ID ?? 1;\n\n  return <Form className=\"position-relative mb-3\" onSubmit={handleSubmit(onSubmit)}>\n    {viewState.running && <LoadingWidget overlay={true} />}\n    <h2 className=\"h4\">\n      {t(\"ui.storefront.checkout.checkoutPanels.ShippingAddress2\")}\n    </h2>\n    <NewAddressForm\n      idSuffix=\"CheckoutB2CShippingAddress\"\n      type=\"shipping\"\n      showCancel={false}\n      parentUseFormOverrides={{\n        // @ts-ignore\n        formState,\n        register,\n        // @ts-ignore\n        handleSubmit,\n        getValues,\n        reset,\n        setValue,\n        trigger,\n        watch\n      }}\n      hiddenFields={{\n        customKey: true,\n        email: Boolean(currentUser.ID),\n        phone: true,\n        fax: true,\n        company: true,\n        country: true\n      }}\n      IDOfForcedCountry={forcedCountryID}\n      accountContact={addressBook\n        ? cartShippingContact\n          ? addressBook.find(x => x.SlaveID === cartShippingContact.ID)\n          : addressBook?.find(x => x.IsPrimary)\n        : null}\n      looseColumns={true}\n      forceSingleStreet={true}\n    />\n    <h2 className=\"h4 d-flex align-items-center justify-content-start\">\n      <span>\n        {t(\"ui.storefront.checkout.checkoutPanels.ShippingAddress2\")}\n      </span>\n      <input type=\"checkbox\"\n        className=\"d-inline-block mx-2\"\n        onChange={e => setSameAsBilling(!sameAsBilling)}\n        checked={sameAsBilling}\n      />\n      <span className=\"small\">\n        {t(\"ui.storefront.common.SameAsShipping\")}\n      </span>\n    </h2>\n    <div className={`${sameAsBilling ? \"d-none\" : \"\"}`}>\n      <NewAddressForm\n        idSuffix=\"CheckoutB2CBillingAddress\"\n        type=\"billing\"\n        showCancel={false}\n        parentUseFormOverrides={{\n        // @ts-ignore\n          formState,\n          register,\n          // @ts-ignore\n          handleSubmit,\n          getValues,\n          reset,\n          setValue,\n          trigger,\n          watch\n        }}\n        hiddenFields={{\n          customKey: true,\n          email: Boolean(currentUser.ID),\n          phone: true,\n          fax: true,\n          company: true,\n          country: true\n        }}\n        IDOfForcedCountry={forcedCountryID}\n        accountContact={addressBook\n          ? cartBillingContact\n            ? addressBook.find(x => x.SlaveID === cartBillingContact.ID)\n            : addressBook?.find(x => x.IsPrimary)\n          : null}\n        looseColumns={true}\n        forceSingleStreet={true}\n      />\n    </div>\n    <div className=\"d-flex justify-content-center\">\n      <Button\n        id=\"btnGetShippingRateQuotes\"\n        data-sid=\"btnGetShippingRateQuotes\"\n        type=\"submit\"\n        variant=\"primary\"\n        // disabled={somethingToShip && !allTargetsHaveADestination}\n      >\n        {continueText}\n      </Button>\n    </div>\n  </Form>;\n};\n","import { PaymentMethodCreditCardBody } from \"src/Checkout/steps/payment/methods/PaymentMethodCreditCardBody\";\nimport { ICheckoutB2CPaymentStepProps } from \"src/CheckoutB2C/_checkoutB2CTypes\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport googleTagManagerService from \"src/_shared/tracking/googleTagManagerService\";\nimport { useCart } from \"src/_redux/slices/cartSlice\";\nimport { useWallet } from \"src/_redux/slices/walletSlice\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\nexport const CheckoutB2CPaymentStep = (props: ICheckoutB2CPaymentStepProps): JSX.Element => {\n  const {\n    onComplete,\n    continueText,\n    existingPaymentData,\n    methodIsGuest,\n    cartType\n  } = props;\n\n  const cart = useCart(cartType);\n  const cefConfig = useCefConfig();\n  const wallet = useWallet();\n  const currentUser = useCurrentUser();\n\n  if (currentUser.Loading || !wallet) {\n    return null;\n  }\n\n  return <PaymentMethodCreditCardBody\n    continueText={continueText}\n    onSubmit={(type: \"PayByCreditCard\" | \"PayByWalletEntry\", creditCardData: any) => {\n      onComplete(\n        {\n          [type]: {\n            ...creditCardData\n          }\n        },\n        ServiceStrings.checkout.paymentMethods.creditCard\n      );\n      if (cefConfig.googleTagManager.enabled) {\n        googleTagManagerService.ga4checkoutOption(\n          cart,\n          \"eec.addPaymentInfo\",\n          `Credit Card ${creditCardData.CardType}`\n        );\n      }\n    }}\n    initialWalletID={\n      existingPaymentData && existingPaymentData.PayByWalletEntry\n        ? existingPaymentData.PayByWalletEntry.WalletID\n        : wallet?.find(x => x.IsDefault)\n    }\n    usingGuestCheckout={methodIsGuest}\n    btnContainerClasses=\"d-flex justify-content-center\"\n  />;\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Col, Row } from \"react-bootstrap\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { ICheckoutB2CCompletedStepProps } from \"src/CheckoutB2C/_checkoutB2CTypes\";\n\nexport const CheckoutB2CCompletedStep = (props: ICheckoutB2CCompletedStepProps): JSX.Element => {\n  const { subOrderID, methodIsGuest } = props;\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  return (\n    <div className=\"step step-three\">\n      <div className=\"checkout-box\">\n        <Row>\n          <Col xs={12} className=\"text-center\">\n            <h4 className=\"mb-4\"\n              id=\"lbThankYouForYourPurchase\"\n              data-sid=\"lbThankYouForYourPurchase\">\n              {`${t(\"ui.storefront.checkout.views.orderConfirmation.thankYouForYouPurchase\")}!`}\n            </h4>\n          </Col>\n        </Row>\n        <Row className=\"mb-4\">\n          <div className=\"col-12 col-sm-6\">\n            <p id=\"PurchaseSuccessText\">\n              {t(\n                \"ui.storefront.checkout.views.orderConfirmation.yourPurchaseWasSuccessfulAndIsInTheProcessOfBeing\"\n              )}\n            </p>\n          </div>\n          {subOrderID\n            ? <Col xs={12} sm={6}>\n              <h5>\n                <span data-sid=\"CheckoutSubOrderText\">\n                  {t(\"ui.storefront.checkout.views.orderConfirmation.SubOrder.OptionalPlural\")}\n                </span>\n                &nbsp;\n                <b data-sid=\"CheckoutSubOrderID\">{subOrderID}</b>\n              </h5>\n              <p className=\"small\" id=\"CheckoutSubOrderMessage\">\n                {t(\"ui.storefront.checkout.views.orderConfirmation.SubOrder.Message\")}\n              </p>\n            </Col>\n            : null\n          }\n        </Row>\n        <Row className=\"mb-3\">\n          <Col xs={12}>\n            <div className=\"d-flex justify-content-end\">\n              <a\n                className=\"btn btn-primary underline-hover-none\"\n                data-sid=\"btnCheckoutContinueShopping\"\n                href={corsLink(cefConfig, \"/\", \"catalog\")}>\n                {t(\"ui.storefront.cart.continueShopping\")}\n              </a>\n              {methodIsGuest\n                ? null\n                : <a className=\"btn btn-secondary underline-hover-none\"\n                  href={corsLink(cefConfig, \"/orders\", \"dashboard\")}\n                  data-sid=\"btnCheckoutOrderHistory\">\n                  {t(\"ui.storefront.checkout.confirmation.YourOrderHistory\")}\n                </a>\n              }\n            </div>\n          </Col>\n        </Row>\n      </div>\n    </div>\n  );\n};\n","/* eslint-disable camelcase */\nimport { ICheckoutB2CStepDataState } from \"src/CheckoutB2C/_checkoutB2CTypes\";\n\nexport function checkoutB2CReducer(\n    state: ICheckoutB2CStepDataState,\n    action: { type: string; payload?: any }\n): ICheckoutB2CStepDataState {\n  switch (action.type) {\n    case \"paymentStepComplete\": {\n      return {\n        ...state,\n        paymentStepData: {\n          paymentStyle: action.payload.paymentStyle,\n          payBy: action.payload.payBy\n        }\n      };\n    }\n    case \"shippingStepComplete\": {\n      return {\n        ...state,\n        shippingStepData: {\n          cartShippingContact: action.payload.cartShippingContact,\n          cartBillingContact: action.payload.cartBillingContact,\n          sameAsBilling: action.payload.sameAsBilling\n        }\n      };\n    }\n    case \"shippingRatesStepComplete\": {\n      return {\n        ...state,\n        shippingRatesStepData: {\n          complete: true\n        }\n      };\n    }\n    default: {\n      throw new Error(\"Failed to account for completed step\");\n    }\n  }\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Fragment, useEffect, useReducer, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Col, Container, Row } from \"react-bootstrap\";\nimport { useDispatch } from \"react-redux\";\nimport _ from \"lodash\";\nimport { MiniCartB2C } from \"src/Cart/views/MiniCartB2C\";\nimport { ErrorView } from \"src/_shared/common/ErrorView\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ICheckoutProps } from \"src/Checkout/_checkoutTypes\";\nimport { CheckoutB2CShippingStep } from \"src/CheckoutB2C/steps/shipping/CheckoutB2CShippingStep\";\nimport { CheckoutB2CPaymentStep } from \"src/CheckoutB2C/steps/payment/CheckoutB2CPaymentStep\";\nimport { CheckoutB2CCompletedStep } from \"src/CheckoutB2C/steps/completed/CheckoutB2CCompletedStep\";\nimport { AccountContactModel, CartModel, CartTotals } from \"src/_api/cvApi._DtoClasses\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\nimport { setCartByType, useCart } from \"src/_redux/slices/cartSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { getTotalsForAllCarts } from \"src/Checkout/checkoutFunctions\";\nimport { checkoutB2CReducer } from \"src/CheckoutB2C/checkoutB2CFunctions\";\nimport { useCheckoutFactory, useCheckoutSteps } from \"src/_shared/customHooks/useCheckoutFactory\";\nimport { useCurrentUser } from \"src/_redux/slices/authSlice\";\n\nexport const CheckoutB2C = (props: ICheckoutProps): JSX.Element => {\n  const {\n    cartType,\n  } = props;\n\n  const [ step, setStep ] = useState<number>(1);\n  const [ completedOrderID, setCompletedOrderID ] = useState<number>(null);\n  const [ checkoutComplete, setCheckoutComplete ] = useState<boolean>(false);\n  const [ targetedCarts ] = useState<CartModel[]>(null);\n  const [ gatheredTotals, setGatheredTotals ] = useState<CartTotals>(null);\n  const [ enteredNoteText, setEnteredNoteText ] = useState<string>(\"\");\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const { t } = useTranslation();\n\n  const allSteps = useCheckoutSteps(cartType, true);\n\n  const currentUser = useCurrentUser();\n  const cartToUse = useCart(cartType);\n  const cefConfig = useCefConfig();\n  const checkoutFactory = useCheckoutFactory();\n  const reduxDispatch = useDispatch();\n\n  const [ state, dispatch ] = useReducer(checkoutB2CReducer, {\n    paymentStepData: {\n      paymentStyle: null,\n      payBy: null\n    },\n    shippingStepData: {\n      sameAsBilling: false,\n      cartShippingContact: null,\n      cartBillingContact: null\n    },\n    shippingRatesStepData: {\n      complete: false\n    },\n  });\n\n  useEffect(() => {\n    proceedOrPurchase();\n  }, [ state ]);\n\n  useEffect(() => {\n    updateTotalsOfAllCarts(targetedCarts);\n  }, [ cartToUse, cartType, targetedCarts, step ]);\n\n  const proceedOrPurchase = (): void => {\n    if (!allSteps || !checkoutFactory) {\n      return;\n    }\n    if (step !== allSteps.length - 1) {\n      setStep(prevStep => prevStep + 1);\n      return;\n    }\n    setRunning();\n    checkoutFactory.confirmAndPurchase(\n      cartToUse,\n      cartType,\n      state,\n      enteredNoteText\n    )\n      .then(res => {\n        // B2C only allows one destination\n        setCompletedOrderID(res.SlaveOrderIDs[0]);\n        setStep(prevStep => prevStep + 1);\n        setCheckoutComplete(true);\n        finishRunning();\n      })\n      .catch(err => {\n        setCheckoutComplete(true);\n        finishRunning(true, typeof err === \"string\"\n          ? err\n          : err.message\n        ?? \"Failed to process current cart to target orders\");\n      });\n  };\n\n  const onCompleteCheckoutShippingStep = (\n    sameAsBilling: boolean,\n    cartShippingContact: AccountContactModel,\n    cartBillingContact: AccountContactModel\n  ): void => {\n    dispatch({\n      type: \"shippingStepComplete\",\n      payload: {\n        sameAsBilling,\n        cartShippingContact,\n        cartBillingContact\n      }\n    });\n  };\n\n  const onCompleteCheckoutPaymentStep = (\n    paymentData: any,\n    paymentStyle: string\n  ) => {\n    dispatch({\n      type: \"paymentStepComplete\",\n      payload: {\n        paymentStyle,\n        payBy: paymentData\n      }\n    });\n  };\n\n  function updateTotalsOfAllCarts(targetedCartsI: CartModel[]): void {\n    if (!cartToUse?.Totals || cartToUse.Loading) {\n      return;\n    }\n    const { cartTotals, cartItemsWithCorrectExtendedPrice } = getTotalsForAllCarts(\n      cartToUse,\n      targetedCartsI\n    );\n    if (cartToUse.SalesItems.every(\n      (item, index) => item.ExtendedPrice === cartItemsWithCorrectExtendedPrice[index].ExtendedPrice\n    )) {\n      setGatheredTotals(cartTotals);\n    } else {\n      reduxDispatch(setCartByType({\n        type: cartType,\n        cart: { ...cartToUse, SalesItems: cartItemsWithCorrectExtendedPrice }\n      }));\n    }\n  }\n\n  if (_.isUndefined(cartToUse) || _.some(cartToUse.Messages, x => x.indexOf(\"ERROR!\") !== -1)) {\n    return <LoadingWidget />;\n  }\n\n  if (!cartToUse?.SalesItems?.length && !checkoutComplete) {\n    return (\n      <section className=\"section-checkout\">\n        <div className=\"container\">\n          <Row>\n            <Col xs={12} className=\"text-center mt-4\">\n              <h3>{t(\"ui.storefront.checkout.cartEmpty\")}</h3>\n              <a\n                href={corsLink(cefConfig, \"/\", \"catalog\")}\n                className=\"btn btn-primary underline-hover-none\">\n                {t(\"ui.storefront.cart.continueShopping\")}\n              </a>\n            </Col>\n          </Row>\n        </div>\n      </section>\n    );\n  }\n\n  return (\n    <section className=\"section-checkout\">\n      <Container>\n        <div className=\"section-head\">\n          <h1 className=\"title fw-normal mt-3\">\n            {t(cartType === ServiceStrings.carts.types.cart\n              ? \"ui.storefront.memberships.membershipRegistration.membershipLevelPurchase\"\n              : \"ui.storefront.common.SubmitQuote\")}\n          </h1>\n        </div>\n        <Row>\n          <Col xs={12}\n            lg={8}\n            className=\"order-lg-1 order-2\">\n            <div className=\"checkout-steps\">\n              {viewState.hasError\n                ? <ErrorView viewState={viewState} />\n                : Array.isArray(allSteps)\n                  ? allSteps.map((stepData, index) => {\n                    const { continueText, titleKey } = stepData;\n                    let component = null;\n                    switch (stepData.name) {\n                      case ServiceStrings.checkout.stepsB2C.shipping: {\n                        component\n                        = <CheckoutB2CShippingStep\n                            key={stepData.name}\n                            continueText={continueText}\n                            onComplete={onCompleteCheckoutShippingStep}\n                            cartBillingContact={state.shippingStepData.cartBillingContact}\n                            cartShippingContact={state.shippingStepData.cartShippingContact}\n                            cartType={cartType}\n                          />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.stepsB2C.completed: {\n                        component\n                        = <CheckoutB2CCompletedStep\n                            key={stepData.name}\n                            subOrderID={completedOrderID}\n                            methodIsGuest={!currentUser.ID}\n                          />;\n                        break;\n                      }\n                      case ServiceStrings.checkout.stepsB2C.payment: {\n                        component\n                        = <CheckoutB2CPaymentStep\n                            key={stepData.name}\n                            continueText={continueText}\n                            onComplete={onCompleteCheckoutPaymentStep}\n                            existingPaymentData={state.paymentStepData.payBy}\n                            methodIsGuest={!currentUser.ID}\n                            cartType={cartType}\n                          />;\n                        break;\n                      }\n                      default: {\n                        console.error(\n                          `Failed to find step for checkout in cefConfig, name: ${stepData.name}`\n                        );\n                        break;\n                      }\n                    }\n                    const locationOfCurStep = index + 1;\n                    const curStepIsActiveStep = step === locationOfCurStep;\n                    return (\n                      <Fragment key={titleKey}>\n                        <Row className={curStepIsActiveStep ? \"mb-3\" : \"\"}>\n                          <Col xs={12} className=\"position-relative\">\n                            {curStepIsActiveStep && !viewState.running\n                              ? component\n                              : curStepIsActiveStep && viewState.running\n                                ? <LoadingWidget />\n                                : null}\n                          </Col>\n                          {!checkoutComplete\n                            && curStepIsActiveStep\n                            && <Col xs={12} className=\"d-flex justify-content-center align-items-center\">\n                              <Button\n                                variant=\"secondary\"\n                                onClick={() => setStep(step - 1)}\n                                disabled={viewState.running || step === 1}>\n                                {t(\"ui.storefront.common.Back\")}\n                              </Button>\n                            </Col>}\n                        </Row>\n                      </Fragment>\n                    );\n                  }) : <h2>No steps</h2>}\n            </div>\n          </Col>\n          <Col xs={12}\n            lg={4}\n            className=\"order-1 order-lg-2\">\n            {!checkoutComplete\n            && <MiniCartB2C\n              type={cartType}\n              totals={gatheredTotals}\n              checkoutRunning={viewState.running}\n              enteredNoteText={enteredNoteText}\n              setEnteredNoteText={setEnteredNoteText}\n            />}\n          </Col>\n        </Row>\n        {viewState.hasError\n          && <Row>\n            <Col xs={12}>\n              <ErrorView viewState={viewState} />\n            </Col>\n          </Row>\n        }\n      </Container>\n    </section>\n  );\n};\n\n// \"ui.storefront.common.Back\": \"Back\"\n","/** @format */\n\nimport App from \"src/App\";\nimport ReactDOM from \"react-dom\";\nimport registerServiceWorker from \"src/registerServiceWorker\";\nimport \"bootstrap/dist/js/bootstrap.min.js\";\nimport \"src/_meta/js/i18n\";\nimport { Suspense } from \"react\";\nimport { BrowserRouter, Route } from \"react-router-dom\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { Provider } from \"react-redux\";\nimport { QueryParamProvider } from \"use-query-params\";\nimport { store } from \"src/_redux/store\";\nimport { AddAuctionLink } from \"./_shared/AddAuctionLink\";\nimport { AffiliateSelectorButton } from \"src/_shared/AffiliateSelectorButton\";\nimport { AuthGuard } from \"src/_shared/AuthGuard\";\nimport { Cart } from \"src/Cart\";\nimport { Catalog } from \"src/Catalog/Catalog\";\nimport { Categories } from \"src/_shared/Categories\";\nimport { CategoriesMenuBar } from \"src/_shared/CategoriesMenuBar\";\nimport { CefConfigKeyEnabled } from \"src/_shared/CefConfigKeyEnabled\";\nimport { Checkout } from \"src/Checkout/Checkout\";\nimport { Compare } from \"src/Catalog/views/Compare\";\nimport { CorsLink } from \"src/_shared/common/CorsLink\";\nimport { CreateLot } from \"src/Admin/Lots/CreateLot\";\nimport { CSREmulationBanner } from \"src/_shared/CSREmulationBanner\";\nimport { Dashboard } from \"src/Dashboard/Dashboard\";\nimport { ExternalSearchBox } from \"src/Catalog/controls\";\nimport { Footer } from \"src/_shared/Footer\";\nimport { ForcedPasswordReset } from \"src/Authentication/ForcedPasswordReset\";\nimport { ForgotPassword } from \"src/Authentication/ForgotPassword\";\nimport { ForgotPasswordReturn } from \"src/Authentication/ForgotPasswordReturn\";\nimport { ForgotUsername } from \"src/Authentication/ForgotUsername\";\nimport { HeaderMid } from \"src/_shared/HeaderMid\";\nimport { Home } from \"src/Home/Home\";\nimport { Icon } from \"src/_shared/Icon\";\nimport { Importer } from \"src/Admin/Importer/Importer\";\nimport { LanguageSelectorButton } from \"src/_shared/LanguageSelectorButton\";\nimport { LoginForm } from \"src/_shared/forms/LoginForm\";\nimport { MicroCart } from \"src/Cart/views\";\nimport { MiniCart } from \"src/Cart/views/MiniCart\";\nimport { MiniMenu } from \"src/_shared/MiniMenu\";\nimport { NavMenu } from \"src/Navigation/NavMenu\";\nimport { PopularProducts } from \"src/Catalog/controls/PopularProducts\";\nimport { ProductDetails } from \"src/Catalog\";\nimport { Registration } from \"src/Authentication/Registration/Registration\";\nimport { RegistrationB2C } from \"src/Authentication/RegistrationB2C/RegistrationB2C\"\nimport { StoreLocator } from \"src/StoreLocator/StoreLocator\";\nimport { Translate } from \"src/_shared/Translate\";\nimport { TrackingSnippet } from \"src/Tracking/TrackingSnippet\";\nimport { CheckoutB2C } from \"src/CheckoutB2C/CheckoutB2C\";\n\nexport const componentMap = {\n  AddAuctionLink: AddAuctionLink,\n  AffiliateSelectorButton: AffiliateSelectorButton,\n  AuthGuard: AuthGuard,\n  Cart: Cart,\n  Catalog: Catalog,\n  Categories: Categories,\n  CategoriesMenuBar: CategoriesMenuBar,\n  CefConfigKeyEnabled: CefConfigKeyEnabled,\n  Checkout: Checkout,\n  CheckoutB2C: CheckoutB2C,\n  CorsLink: CorsLink,\n  Compare: Compare,\n  CreateLot: CreateLot,\n  CSREmulationBanner: CSREmulationBanner,\n  Dashboard: Dashboard,\n  ExternalSearchBox: ExternalSearchBox,\n  Footer: Footer,\n  ForcedPasswordReset: ForcedPasswordReset,\n  ForgotPassword: ForgotPassword,\n  ForgotPasswordReturn: ForgotPasswordReturn,\n  ForgotUsername: ForgotUsername,\n  HeaderMid: HeaderMid,\n  Home: Home,\n  Icon: Icon,\n  Importer: Importer,\n  LanguageSelectorButton: LanguageSelectorButton,\n  LoginForm: LoginForm,\n  MicroCart: MicroCart,\n  MiniCart: MiniCart,\n  MiniMenu: MiniMenu,\n  NavMenu: NavMenu,\n  PopularProducts: PopularProducts,\n  ProductDetails: ProductDetails,\n  Registration: Registration,\n  RegistrationB2C: RegistrationB2C,\n  StoreLocator: StoreLocator,\n  TrackingSnippet: TrackingSnippet,\n  Translate: Translate\n};\n\nconst getComponentById = id => {\n  /*\n  When fetching a component, it is important to return null in case of failure,\n  because rendering null will not cause a React error as opposed to rendering undefined.\n  */\n  if (id) {\n    return componentMap[id] || null;\n  }\n  return null;\n};\n\nconst parseJsonProps = JsonProps => {\n  try {\n    return JSON.parse(JsonProps);\n  } catch (err) {\n    return {};\n  }\n};\n\nconst getFallback = (props, hideSuspenseDNNComponents, componentId) => {\n  if (props?.hideSuspense || hideSuspenseDNNComponents.includes(componentId)) {\n    return \"\";\n  }\n  if (props?.suspenseMessage) {\n    return props.suspenseMessage;\n  }\n  return <LoadingWidget size=\"3x\" innerClasses=\"p-2\" />;\n};\n\nconst baseElement = document.getElementsByTagName(\"base\")[0];\nconst rootElement = document.getElementById(\"cef-react-root\");\nif (rootElement) {\n  console.log(`NODE_ENV=${process.env.NODE_ENV}, SPA MODE`);\n\n  const baseUrl = baseElement.getAttribute(\"href\");\n  ReactDOM.render(\n    <Provider store={store}>\n      <BrowserRouter basename={baseUrl}>\n        <QueryParamProvider ReactRouterRoute={Route}>\n          <Suspense fallback={\"...Loading\"}>\n            <App />\n          </Suspense>\n        </QueryParamProvider>\n      </BrowserRouter>\n    </Provider>,\n    rootElement\n  );\n\n  registerServiceWorker();\n} else {\n  console.log(`NODE_ENV=${process.env.NODE_ENV}, DNN MODE`);\n\n  document.addEventListener(\"DOMContentLoaded\", _e => {\n    const roots = Array.from(document.querySelectorAll(\"[data-react-component]\"));\n    if (!roots) {\n      return;\n    }\n    const reactPortalAnchor = document.querySelector(\"div.react-portals-anchor\");\n    const hideSuspenseDNNComponents = [\"CategoriesMenuBar\"];\n    ReactDOM.render(\n      <Provider store={store}>\n        <BrowserRouter basename=\"/\">\n          <QueryParamProvider ReactRouterRoute={Route}>\n            {roots\n              .filter(r => Boolean(getComponentById(r.dataset.reactComponent)))\n              .map(root => {\n                const componentId = root.dataset.reactComponent;\n                const Component = getComponentById(componentId);\n                const componentJsonProps = root.dataset.reactProps;\n                const props = parseJsonProps(componentJsonProps);\n                return ReactDOM.createPortal(\n                  <Suspense fallback={getFallback(props, hideSuspenseDNNComponents, componentId)}>\n                    <Component {...props} />\n                  </Suspense>,\n                  root\n                );\n              })\n            }\n          </QueryParamProvider>\n        </BrowserRouter>\n      </Provider>,\n      reactPortalAnchor\n    );\n  });\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Anchor } from \"react-bootstrap\";\nimport { useTranslation } from \"react-i18next\";\nimport { useCurrentAccount, useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { corsLink } from \"src/_shared/common/Cors\";\nimport { ServiceStrings } from \"src/_shared/ServiceStrings\";\n\ninterface IAddAuctionLinkProps {\n  classes?: string;\n}\n\nexport const AddAuctionLink = (props: IAddAuctionLinkProps): JSX.Element => {\n  const [ canView, setCanView ] = useState(false);\n\n  const currentUser = useCurrentUser();\n  const currentAccount = useCurrentAccount();\n  const cefConfig = useCefConfig();\n  const authFactory = useAuthFactory();\n  const { t } = useTranslation();\n\n  useEffect(() => {\n    if (currentUser.Loading\n      || currentAccount.Loading\n      || !cefConfig\n      || !currentUser.ID) {\n      return;\n    }\n\n    authFactory.hasRole(ServiceStrings.auth.roleNames.seller)\n      .then(r => {\n        if (r) {\n          setCanView(true);\n        } else {\n          setCanView(false);\n        }\n      });\n  }, [ currentUser, currentAccount, cefConfig ]);\n\n  if (!canView) {\n    return null;\n  }\n\n  return <Anchor\n    className={props.classes ?? \"\"}\n    href={corsLink(cefConfig, \"/Create-Auction\", \"site\")}>\n    <i className=\"fa fa-gavel me-2\"></i>\n    {t(\"ui.storefront.auction.AddAuction\")}\n  </Anchor>;\n};\n","import { useEffect, useState } from \"react\";\nimport { Dropdown } from \"react-bootstrap\";\nimport { AccountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useAffiliateAccounts } from \"src/_redux/slices/authSlice\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { getCookieValue } from \"src/_shared/common/Helpers\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\n\nexport const AffiliateSelectorButton = (): JSX.Element => {\n  const [ selectedAffiliate, setSelectedAffiliate ] = useState<AccountModel>(null);\n  const cefConfig = useCefConfig();\n  const affiliateAccounts = useAffiliateAccounts();\n  const authFactory = useAuthFactory();\n  const { setRunning, finishRunning, viewState } = useViewState();\n\n  const affiliateKey = getCookieValue(\"cefSelectedAffiliateAccountKey\");\n\n  useEffect(() => {\n    if (!affiliateAccounts?.length) {\n      return;\n    }\n    if (!affiliateKey) {\n      return;\n    }\n    const selected = affiliateAccounts.find(x => x.CustomKey === affiliateKey);\n    setSelectedAffiliate(selected);\n  }, [ affiliateAccounts ]);\n\n  const selectAccount = (accountKey: string): void => {\n    const affiliate = affiliateAccounts.find(x => x.CustomKey === accountKey);\n    if (selectedAffiliate === affiliate) {\n      return;\n    }\n    setRunning();\n    authFactory.setAffiliateAccount(accountKey)\n      .then(() => {\n        setSelectedAffiliate(affiliate);\n        finishRunning();\n      });\n  };\n\n  if (!cefConfig?.featureSet.affiliates.enabled\n    || !affiliateAccounts?.length) {\n    return null;\n  }\n\n  return (\n    <Dropdown>\n      <Dropdown.Toggle\n        variant=\"secondary\"\n        id=\"dropdownAffiliate\"\n        data-sid=\"btnAffiliateAccountName\"\n        aria-label=\"account-dropdown\"\n        disabled={viewState.running}>\n        <span>{selectedAffiliate?.Name ?? \"Select Account\"}</span>\n      </Dropdown.Toggle>\n      <Dropdown.Menu>\n        {affiliateKey && (\n          <Dropdown.Item\n            onClick={() => selectAccount(null)}>\n            <span>Clear Affiliate</span>\n          </Dropdown.Item>\n        )}\n        {affiliateAccounts.map(acc => (\n          <Dropdown.Item\n            key={acc.CustomKey}\n            onClick={() => selectAccount(acc.CustomKey)}>\n            {acc.Name}\n          </Dropdown.Item>\n        ))}\n      </Dropdown.Menu>\n    </Dropdown>\n  );\n};\n","/** @format */\n\nimport { useTranslation } from \"react-i18next\";\nimport { Anchor, Dropdown } from \"react-bootstrap\";\nimport { Categories } from \"src/_shared/Categories\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\ntype TCategoriesMenuBarRender = \"mega\" | \"across\" | \"down\";\ntype TCategoriesMenuBarRenderInner = \"dropdown\" | \"mega-tabs\" | \"category-grid\";\n\ninterface ICategoriesMenuBarProps {\n  render: TCategoriesMenuBarRender;\n  renderInner?: TCategoriesMenuBarRenderInner;\n  behavior: Array<string>;\n  text?: number;\n  limitChildren?: number;\n  limitGrandChildren?: number;\n}\n\nexport const CategoriesMenuBar = (props: ICategoriesMenuBarProps): JSX.Element => {\n  const { t } = useTranslation();\n  const cefConfig = useCefConfig();\n\n  if (!cefConfig) {\n    return null;\n  }\n\n  if (!cefConfig.featureSet.categories.enabled) {\n    return (\n      <Anchor\n        href={corsLink(cefConfig, \"/\", \"catalog\")}\n        className=\"nav-link\">\n        {t(\"ui.storefront.product.catalog.productCatalog.Catalog\")}\n      </Anchor>\n    );\n  }\n\n  return (\n    <Dropdown className=\"position-static\">\n      <Dropdown.Toggle\n        variant=\"link\"\n        as=\"a\"\n        data-sid=\"products-dropdown\"\n        id=\"products-dropdown\"\n        className=\"nav-link pointer\"\n        rel=\"nofollow\">\n        {t(\"ui.storefront.common.Product.Plural\")}\n      </Dropdown.Toggle>\n      <Dropdown.Menu\n        renderOnMount={true}\n        className=\"border-0\"\n        id=\"products-dropdown-categories\">\n        <Categories />\n      </Dropdown.Menu>\n    </Dropdown>\n  );\n};\n","import React, { useCallback } from \"react\";\nimport { componentMap } from \"src\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface ICefConfigKeyEnabledProps {\n  cefConfigKey: string;\n  negated?: boolean;\n  childComponent?: string;\n  childComponentProps?: any;\n}\n\nexport const CefConfigKeyEnabled = (props: ICefConfigKeyEnabledProps): JSX.Element => {\n  const { cefConfigKey, negated, childComponent, childComponentProps } = props;\n  const cefConfig = useCefConfig();\n\n  const getKeyEnabled = useCallback((): boolean => {\n    if (!cefConfig) {\n      return false;\n    }\n    const result = cefConfigKey.split(\".\").reduce((value, index) => value[index], cefConfig as any);\n    return result;\n  }, [ cefConfig, cefConfigKey ]);\n\n  const Component: () => JSX.Element = (\n    componentMap as unknown as { [componentName: string]: () => JSX.Element }\n  )[childComponent];\n\n  if (cefConfig && Component && (negated && !getKeyEnabled() || !negated && getKeyEnabled())) {\n    return <Component {...childComponentProps} />;\n  }\n\n  return null;\n};\n","import _ from \"lodash\";\nimport { AccountModel } from \"src/_api/cvApi._DtoClasses\";\nimport { Button, Form } from \"react-bootstrap\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport { ServiceStrings } from \"./ServiceStrings\";\nimport { useAuthFactory } from \"src/_redux/factories/authFactory\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { setUser, useCurrentUser } from \"src/_redux/slices/authSlice\";\nimport { useEffect, useState } from \"react\";\nimport { UserModel } from \"src/_api/cvApi.shared\";\nimport { useViewState } from \"./customHooks/useViewState\";\nimport cvApi from \"src/_api/cvApi\";\nimport promiser from \"src/_shared/Promiser\";\nimport { useDispatch } from \"react-redux\";\n\nexport const CSREmulationBanner = (): JSX.Element | null => {\n  const [ isCSR, setIsCSR ] = useState<boolean>(false);\n  const [ selectedAccount, setSelectedAccount ] = useState<AccountModel>(null);\n  const [ selectedUser, setSelectedUser ] = useState<UserModel>(null);\n  const [ accountOptions, setAccountOptions ] = useState<AccountModel[]>(null);\n  const [ userOptions, setUserOptions ] = useState<UserModel[]>(null);\n\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const currentUser = useCurrentUser();\n  const authFactory = useAuthFactory();\n  const dispatch = useDispatch();\n\n  function checkCSRRole() {\n    authFactory.hasRole(ServiceStrings.auth.roleNames.csr)\n      .then(r => {\n        setIsCSR(r);\n        if (r) {\n          getAccountOptionsWithQuery();\n        }\n      });\n  }\n\n  function getAccountOptionsWithQuery() {\n    setRunning();\n    cvApi.contacts.GetEmulatableAccountsForCurrentCSR()\n      .then(r => {\n        setAccountOptions(r.data);\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  }\n\n  useEffect(() => {\n    if (authFactory) {\n      checkCSRRole();\n    }\n  }, [ authFactory ]);\n\n  if (!_.isObject(cefConfig)) {\n    return null;\n  }\n\n  if (!cefConfig.featureSet.userEmulation.enabled) {\n    return null;\n  }\n\n  if (!isCSR) {\n    return null;\n  }\n\n  const onAccountSelected = (accountID: number) => {\n    if (!accountID) {\n      setSelectedAccount(undefined);\n    }\n    setSelectedAccount(accountOptions.find(x => x.ID === accountID));\n    getUsersForAccount(accountID);\n  };\n\n  const getUsersForAccount = (accountID: number) => {\n    const key = `usersForAccount:${accountID}`;\n    setRunning();\n    promiser\n      .resolve(\n        key,\n        () => cvApi.contacts.GetEmulatableUsersForCurrentCSR({ EmulateUserAccountID: accountID })\n      )\n      .then(r => {\n        setUserOptions(r.data);\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  };\n\n  const onUserSelected = (userID: number) => {\n    if (!userID) {\n      setSelectedUser(undefined);\n      return;\n    }\n    setSelectedUser(userOptions.find(x => x.ID === userID));\n  };\n\n  const startEmulation = () => {\n    setRunning();\n    cvApi.contacts\n      .EmulateUser({\n        EmulateAccountID: selectedAccount.ID,\n        EmulateUserID: selectedUser.ID\n      })\n      .then(() => cvApi.contacts.GetCurrentUser())\n      .then(r => {\n        dispatch(setUser({ ...r.data, Loading: false }));\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  };\n\n  const stopEmulation = () => {\n    setRunning();\n    cvApi.contacts\n      .StopEmulation()\n      .then(() => cvApi.contacts.GetCurrentUser())\n      .then(r => {\n        dispatch(setUser({ ...r.data, Loading: false }));\n        finishRunning();\n      })\n      .catch(err => finishRunning(true, err));\n  };\n\n  const isEmulating = currentUser\n    ? Boolean(currentUser?.CSRUserID)\n    : undefined;\n\n  return <div className=\"d-flex justify-content-between align-items-center py-1 px-2 d-print-none\">\n    <span className=\"h5 mb-0 text-black my-2\">\n      CSR Banner\n    </span>\n    {isEmulating === undefined && <LoadingWidget size=\"sm\" innerClasses=\" \" />}\n    {isEmulating === false && <div className=\"d-flex align-items-center\">\n      <Form.Select\n        disabled={!accountOptions?.length || viewState.running}\n        onChange={e => onAccountSelected(Number(e.target.value))}>\n        <option>Select Account</option>\n        {accountOptions?.map(opt => <option key={opt.ID} value={opt.ID}>{opt.Name}</option>)}\n      </Form.Select>\n      <Form.Select\n        disabled={!accountOptions?.length || !selectedAccount}\n        onChange={e => onUserSelected(Number(e.target.value))}>\n        <option>Select User</option>\n        {userOptions?.map(opt => <option key={opt.ID} value={opt.ID}>{opt.UserName}</option>)}\n      </Form.Select>\n      <Button\n        disabled={!selectedUser || viewState.running}\n        onClick={startEmulation}>\n        Emulate\n      </Button>\n    </div>}\n    {isEmulating === true && <div className=\"d-flex align-items-center\">\n      <span className=\"mx-3\">You are currently emulating {currentUser.UserName}</span>\n      <Button\n        disabled={viewState.running}\n        onClick={stopEmulation}>\n        Stop Emulation\n      </Button>\n    </div>}\n  </div>;\n};\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert, Button, Col, Form, Row } from \"react-bootstrap\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { faKey } from \"@fortawesome/pro-solid-svg-icons\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { LoadingWidget } from \"src/_shared/common/LoadingWidget\";\nimport cvApi from \"src/_api/cvApi\";\nimport { PasswordInputFormGroup, TextInputFormGroup } from \"src/_shared/forms/formGroups\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { corsLink } from \"src/_shared/common/Cors\";\n\ninterface IForgotPasswordReturnFormData {\n  txtEmail: string;\n  txtPassword: string;\n  txtToken: string\n}\n\nexport const ForgotPasswordReturn = (): JSX.Element => {\n  const location = useLocation();\n  const urlParams = new URLSearchParams(location.search);\n\n  const [ wasSent, setWasSent ] = useState<boolean>(false);\n\n  const history = useHistory();\n\n  const { t } = useTranslation();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const cefConfig = useCefConfig();\n  const { register, formState, handleSubmit } = useForm<IForgotPasswordReturnFormData>({\n    mode: \"onChange\",\n    criteriaMode: \"all\",\n    defaultValues: {\n      txtEmail: urlParams.get(\"email\") ?? \"\",\n      txtToken: urlParams.get(\"token\") ?? \"\"\n    }\n  });\n\n  const onSubmit: SubmitHandler<IForgotPasswordReturnFormData> = (data): void => {\n    const { txtEmail, txtPassword, txtToken } = data;\n    setRunning();\n    cvApi.authentication\n      .ForgotPasswordReturn({\n        Email: txtEmail,\n        Password: txtPassword,\n        Token: txtToken\n      })\n      .then(res => {\n        setWasSent(true);\n        history.push(\"/Authentication/Sign-In/Login\");\n        setTimeout(() => window.location.reload(), 500);\n        finishRunning(!res.data.ActionSucceeded, null, res.data.Messages);\n      })\n      .catch(err => {\n        finishRunning(true, err);\n      });\n  };\n\n  // Console.log(formState.isValid);\n\n  return (\n    <Form className=\"form-vertical\"\n      onSubmit={handleSubmit(onSubmit)}\n      autoComplete=\"off\">\n      <Row>\n        <Col xs={12}>\n          <h2 className=\"text-center ng-scope\">\n            {t(\"ui.storefront.user.forgotPasswordReturn.PasswordResetForm\")}\n          </h2>\n          <p>\n            {t(\n              // eslint-disable-next-line max-len\n              \"ui.storefront.user.forgotPasswordReturn.WithAValidTokenWeCanSetANewPasswordOnYourAccountYouWillBeRequired\"\n            )}\n          </p>\n        </Col>\n      </Row>\n      <Row className=\"position-relative\">\n        {viewState.running ? <LoadingWidget overlay={true} /> : null}\n        <TextInputFormGroup\n          register={register}\n          errors={formState.errors}\n          isEmail={true}\n          formClasses=\"col-12 mb-3\"\n          formIdentifier=\"txtEmail\"\n          labelText=\"Email\"\n          labelKey=\"ui.storefront.common.Email\"\n          placeholderText=\"Email\"\n          placeholderKey=\"ui.storefront.common.Email\"\n          required={true}\n          disabled={true}\n          maxLength={128}\n          maxLengthMessage=\"Email may not exceed 128 characters\"\n          patternMessage=\"Email is not valid/formatted properly\"\n        />\n        <TextInputFormGroup\n          register={register}\n          errors={formState.errors}\n          formClasses=\"col-12 mb-3\"\n          formIdentifier=\"txtToken\"\n          labelKey={t(\"ui.storefront.user.forgotPasswordReturn.Token\")}\n          placeholderKey={t(\"ui.storefront.user.forgotPasswordReturn.Token\")}\n          required={true}\n          disabled={true}\n          // @ts-ignore fontawesome pro icon\n          leftIcon={faKey}\n        />\n        <PasswordInputFormGroup\n          register={register}\n          errors={formState.errors}\n          formClasses=\"col-12 mb-3\"\n          formIdentifier=\"txtPassword\"\n          labelKey=\"ui.storefront.user.forgotPasswordReturn.NewPassword\"\n          tooltipKey=\"ui.storefront.user.registration.PasswordRequirements.Message\"\n          placeholderText=\"••••••\"\n          required={true}\n          minLength={7}\n        />\n      </Row>\n      <Row>\n        <Col xs={12}>\n          <Button\n            as=\"input\"\n            type=\"submit\"\n            variant=\"primary\"\n            disabled= {wasSent || !formState.isValid}\n            size=\"lg\"\n            className={\"w-100\"}\n            value={t(\"ui.storefront.user.forgotPasswordReturn.SaveNewPassword\") as string}\n          />\n        </Col>\n      </Row>\n      <Row>\n        <Col xs={12}>\n          {wasSent\n            ? <Row className=\"mt-3\">\n              <Col xs={12}>\n                <Alert variant=\"success\">\n                  <p>\n                    <span>\n                      {t(\n                        \"ui.storefront.user.forgotPasswordReturn.yourPasswordHasBeenReset.Message\"\n                      )}\n                    </span>\n                  </p>\n                </Alert>\n              </Col>\n            </Row>\n            : null}\n        </Col>\n      </Row>\n      <Row>\n        <Col xs={12}>\n          {wasSent && viewState.hasError\n            ? <Row className=\"mt-3\">\n              <Col xs={12}>\n                <Alert variant=\"danger\">\n                  <p>\n                    <span>\n                      {t(\n                        // eslint-disable-next-line max-len\n                        \"ui.storefront.user.forgotPasswordReturn.ThereWasAnIssueApplyingTheNewPasswordPleaseCheckYourInputsAndTry\"\n                      )}\n                    </span>\n                    &nbsp;\n                    <a href={corsLink(cefConfig, \"/\", \"contactUs\")}>\n                      {t(\"ui.storefront.common.ContactUs\")}\n                    </a>\n                  </p>\n                </Alert>\n              </Col>\n            </Row>\n            : null}\n        </Col>\n      </Row>\n    </Form>\n  );\n};\n","/** @format */\nimport React from \"react\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { LanguageSelectorButton } from \"src/_shared/LanguageSelectorButton\";\nimport { MiniMenu } from \"src/_shared/MiniMenu\";\nimport { ExternalSearchBox } from \"src/Catalog/controls\";\nimport { corsLink } from \"./common/Cors\";\n\nexport const HeaderMid = (): JSX.Element => {\n  const cefConfig = useCefConfig();\n\n  // TODO: Replace with CorsLink\n  const LogoImg = \"/Portals/0/clarity-ecommerce-logo.png\";\n\n  const languagesEnabled = cefConfig?.featureSet?.languages?.enabled;\n\n  return (\n    <>\n      <div className=\"col-12 text-center col-md-auto\">\n        <a data-sid=\"linkHeaderLogo\"\n          className=\"navbar-brand\"\n          href={corsLink(cefConfig, \"/\", \"site\")}\n          title=\"Clarity eCommerce Development Website\">\n          <img\n            data-sid=\"imgHeaderLogo\"\n            className=\"img-fluid lazyload\"\n            alt=\"Clarity eCommerce Development Website\"\n            width=\"175\"\n            height=\"38\"\n            src={LogoImg}\n          />\n        </a>\n        {/* <div cef-brand-formatting-header></div> */}\n      </div>\n      <div className=\"col form-inline\">\n        <ExternalSearchBox />\n      </div>\n      <div\n        className=\"col-12 col-xl-auto\"\n        style={{\n          minHeight: cefConfig && cefConfig.featureSet.languages.enabled ? 70 : 0\n        }}>\n        <div className={`row align-items-center ${languagesEnabled ? \"mt-2\" : \"\"}`}>\n          <div className=\"nav-item col-auto ms-auto dropdown\">\n            <MiniMenu />\n          </div>\n        </div>\n        {cefConfig && cefConfig.featureSet.languages.enabled\n          ? <div className=\"row align-items-center mb-2\">\n            {/* <div className=\"nav-item col\">\n              <div cef-affiliate-account-selector></div>\n            </div> */}\n            <div className=\"col-auto nav-item\">\n              <LanguageSelectorButton />\n            </div>\n          </div>\n          : null}\n      </div>\n    </>\n  );\n};\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconDefinition, IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface IIconProps {\n  icon: IconDefinition;\n  type: \"regular\" | \"solid\" | \"brands\";\n  classes?: string;\n}\n\nexport const Icon = (props: IIconProps): JSX.Element => {\n  const { icon, type, classes } = props;\n\n  function getIcon(): IconDefinition {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const newIcon: IconDefinition = require(`@fortawesome/free-${type}-svg-icons`)[\n      icon as keyof IconProp\n    ];\n    if (!newIcon) {\n      console.error(`Unknown icon: ${icon} type: ${type}`, \"Look in Icon.tsx\");\n      return null;\n    }\n    return newIcon;\n  }\n\n  return <FontAwesomeIcon icon={getIcon()} className={`fa-fw ${classes ?? \"\"}`} />;\n};\n","// import { currencyFormatter } from \"src/_shared/common/Formatters\";\n// import { corsLink } from \"src/_shared/common/Cors\";\n// import { ServiceStrings } from \"src/_shared/ServiceStrings\";\n// import { useCart } from \"src/_redux/slices/cartSlice\";\n// import { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\n\ninterface IMicroCartProps {\n  type: \"Quote Cart\" | \"Cart\";\n}\n\nexport const MicroCart = (props: IMicroCartProps): JSX.Element => {\n  return null;\n};\n\n//   const { type } = props;\n//   const cefConfig = useCefConfig();\n//   const cart = useCart(type);\n\n//   const isQuoteCart = type === ServiceStrings.carts.types.quote;\n\n//   if (cefConfig?.featureSet && !cefConfig.featureSet.carts.enabled) {\n//     return null;\n//   }\n\n//   if (isQuoteCart) {\n//     if (cefConfig?.featureSet?.salesQuotes?.enabled) {\n//       return (\n//         <a className=\"cef-micro-cart nav-link\"\n//           href={corsLink(cefConfig, \"/\", \"quoteCart\")}>\n//           <i className=\"fal fa-fw fa-lg fa-quote-right\" />\n//           {\n//             <span className=\"ps-1\">{`(${cart && cart.ItemQuantity ? cart.ItemQuantity : 0}) ${\n//               cart && cart.Totals\n//                 ? currencyFormatter.format(cart.Totals.Total)\n//                 : currencyFormatter.format(0.0)\n//             }`}</span>\n//           }\n//         </a>\n//       );\n//     }\n//     return null;\n//   }\n\n//   return (\n//     <a className=\"cef-micro-cart nav-link\"\n//       href={corsLink(cefConfig, \"/\", \"cart\")}>\n//       <i className=\"fa fa-fw fa-lg fa-shopping-cart\" />\n//       {\n//         <span className=\"ps-1\" data-sid=\"micro-cart\">\n//           {`(${cart && cart.ItemQuantity ? cart.ItemQuantity : 0}) ${\n//             cart && cart.Totals\n//               ? currencyFormatter.format(cart.Totals.Total)\n//               : currencyFormatter.format(0.0)\n//           }`}</span>\n//       }\n//     </a>\n//   );\n// };\n","/**\n * @file React/src/Catalog/controls/PopularProducts.tsx\n * @author Copyright (c) 2023 clarity-ventures.com. All rights reserved.\n * @desc Popular Products Component\n */\n\nimport { useEffect, useState } from \"react\";\nimport { Carousel } from \"src/_shared/common/Carousel\";\nimport cvApi from \"src/_api/cvApi\";\nimport { ProductModel } from \"src/_api/cvApi.shared\";\nimport { useViewState } from \"src/_shared/customHooks/useViewState\";\nimport { ProductCard } from \"src/Catalog/views/ProductCard\";\nimport _ from \"lodash\";\nimport { useInventoryFactory } from \"src/_shared/customHooks/useInventoryFactory\";\nimport { usePricingFactory } from \"src/_shared/customHooks/usePricingFactory\";\nimport { useCefConfig } from \"src/_redux/slices/cefConfigSlice\";\nimport { Row } from \"react-bootstrap\";\n\nexport const PopularProducts = (): JSX.Element => {\n  const [ products, setProducts ] = useState<ProductModel[]>();\n  const cefConfig = useCefConfig();\n  const { setRunning, finishRunning, viewState } = useViewState();\n  const inventoryFactory = useInventoryFactory();\n  const pricingFactory = usePricingFactory();\n  useEffect(() => {\n    if (!_.isObject(cefConfig)\n      || !_.isObject(inventoryFactory)\n      || !_.isObject(pricingFactory)) {\n      return;\n    }\n    const getProductsAsync = async () => {\n      try {\n        setRunning();\n        const result = await cvApi.products.GetBestSellersProducts({\n          Count: 8,\n          Days: 999,\n        });\n        if (cefConfig.featureSet.inventory.enabled) {\n          result.data = await inventoryFactory.bulkFactoryAssign(result.data);\n        }\n        if (cefConfig.featureSet.pricing.enabled) {\n          result.data = await pricingFactory.bulkFactoryAssign(result.data);\n        }\n        setProducts(result.data);\n        finishRunning();\n      } catch (err) {\n        finishRunning(true);\n      }\n    };\n    getProductsAsync();\n  }, [ cefConfig, inventoryFactory, pricingFactory ]);\n\n  return (\n    !viewState.running\n    && _.isArray(products)\n    && <Carousel\n      items={\n        _.chunk(products, 4)\n          .map((chunk, index): JSX.Element => <Row key={`chunk_${_.first(chunk).ID}`}>\n            {chunk.map(product => {\n              return <ProductCard\n                product={product}\n                key={product.ID}\n                customClasses=\"col-6 col-xl-3\"\n                index={index}\n              />;\n            })}\n          </Row>)}\n    />\n  );\n};\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 = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > 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 < 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 < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__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 < 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 = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (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\t792: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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 < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && 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, [96], () => (__webpack_require__(59727)))\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","swapReturnUrlToken","path","retVal","indexOf","replace","encodeURI","window","location","pathname","corsLink","cefConfig","_areaToUse$hostIsProv","area","arguments","length","undefined","whichUrl","noCache","paramsBody","path2","concat","Date","getTime","areaToUse","routes","root","hostIsProvidedByLookup","urlConfig","host","corsLinkRoot","base3","pathToUse3","test","RegExp","substring","appendQueryStringParams","basePlusPath","JSON","stringify","queryString","URLSearchParams","key","hasOwn","property","append","corsImageLink","fileName","kind","imageResizerParamsBody","images","suffix","encodeObjectParam","param","encodeURIComponent","axios","baseURL","withCredentials","headers","paramsSerializer","params","stringified","i","Array","j","param2","Accounts","constructor","CreateAccountContact","routeParams","post","join","DeleteAccountContactByID","delete","GetAccountAssociationTypes","get","_","cvApi","cacheCounter","GetAccountContactByID","GetAccountKeys","GetAccountPatientSubscriptions","GetAccounts","GetAccountsForCurrentAccount","GetAccountStatuses","GetAccountTypes","GetAllUserIDsForCurrentAccount","GetCurrentAccount","GetCurrentPatientPrescriptions","GetUsersForCurrentAccount","ImportAccounts","IncrementContactAttemptsMade","MarkAccountContactAsDefaultBilling","patch","MarkAccountContactAsNeitherBillingNorShipping","MarkAccountContactAsPrimaryShipping","UpdateAccountContact","put","UpdateCurrentAccount","Advertising","GetAdByID","GetAdZones","GetZoneByID","Appointments","ListAppointmentsByAccountIDAndType","RescheduleAppointment","ScheduleAppointmentWithGoogle","Attributes","CheckGeneralAttributeExistsByDisplayName","CheckGeneralAttributeExistsByKey","CheckGeneralAttributeExistsByName","GetAttributeGroups","GetAttributeTabs","GetAttributeTypes","GetGeneralAttributeByID","GetGeneralAttributePredefinedOptions","GetGeneralAttributes","Auctions","CheckAuctionExistsByID","CheckAuctionExistsByKey","CheckAuctionExistsByName","CheckLotExistsByID","CheckLotExistsByKey","CheckLotExistsByName","CreateLotAsSeller","GetAuctionByID","GetAuctions","GetBids","GetBuyerLostTableData","GetBuyerWonTableData","GetCurrentBuyerBidsAndLotInfo","GetHighestBidForLot","GetLotByID","GetLotCategories","GetLots","GetLotStatuses","GetLotTypes","GetSellerAuctionsLiveTableData","GetSellerAuctionsSoldTableData","GetSellerNoWinTableData","PlaceBid","UpdateLotAsSeller","UpdateProductPricingAsSeller","Authentication","ApproveUserRegistration","ChangePassword","CheckForcedPasswordReset","CheckForMFAForUsername","userName","CompleteRegistration","CreateLiteAccountAndSendValidationEmail","CurrentUserHasAnyPermission","CurrentUserHasAnyRole","CurrentUserHasPermission","CurrentUserHasRole","ForcedPasswordReset","ForgotPassword","ForgotPasswordReturn","ForgotUsername","OktaCodeCallback","OpenIDConnectCodeCallback","RegisterNewUser","RequestMFAForUsername","ValidateEmail","ValidateEmailIsUnique","ValidateInvitation","ValidatePassword","ValidatePasswordIsGood","ValidateUserNameIsGood","Brands","GetBrandCurrencies","GetBrandLanguages","GetBrands","GetBrandSiteDomains","GetCurrentBrand","Categories","CheckCategoryExistsByID","CheckCategoryExistsByKey","CheckCategoryExistsByName","CheckCategoryExistsBySeoUrl","CheckForCategoryRegionRestrictionsForCurrenUserStateOfResidence","GetCategories","GetCategoriesThreeLevels","GetCategoryByID","GetCategoryByKey","GetCategoryBySeoUrl","GetCategoryForMetaData","GetCategoryImageByID","GetCategoryImages","GetCategoryTree","GetCategoryTypes","GetMenuCategoriesThreeLevels","GetPersonalizedCategoriesForCurrentUser","Contacts","CheckUserExistsByKey","CreateUser","CreateUserWithCode","EmulateUser","GetContactByID","GetContactTypes","GetCurrentUser","GetCurrentUserName","GetCurrentUserOnlineStatus","GetEmulatableAccountsForCurrentCSR","GetEmulatableUsersForCurrentCSR","GetPrimaryImageForUserID","GetSelectedOrCurrentUser","GetUserByID","GetUserByKey","GetUserOnlineStatuses","GetUsers","GetUserStatuses","GetUserTypes","RemovePrivacyData","data","RequestPrivacyData","RestrictPrivacyData","SetCurrentUserOnlineStatus","StopEmulation","UpdateCurrentUser","UpdateSelectedOrCurrentUser","UpsertContact","Currencies","ConvertCurrencyValueAtoB","GetCurrencies","GetCurrencyByKey","DoseSpot","CreateDoseSpotPatient","DoseSpotWebhook","GetDoseSpotIFrameUrl","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","Importer","ParseDocument","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","DownloadStoredFile","GetStoredFiles","GetStoredFileTypes","GetStoredFileUrl","GetUploadStoredFileResults","UploadStoredFile","Messaging","CreateConversation","CreateMessage","DeactivateMessageByID","EndConversation","GetConversationHeadersForCurrentUser","GetMessageByID","GetMessagesForActiveConversationsForCurrentUser","GetMessagesForCurrentUser","GetMessagesForEndedConversationsForCurrentUser","GetMessagesFromCurrentUser","GetOtherConversationUsersTypingStatuses","PostMessageToConversation","SetConversationToCopy","SetConversationUserTypingStateForCurrentUser","isTyping","UpdateMessage","Ordering","ApproveSalesOrder","CheckSalesOrderStateExistsByDisplayName","CheckSalesOrderStateExistsByKey","CheckSalesOrderStateExistsByName","CheckSalesOrderStatusExistsByDisplayName","CheckSalesOrderStatusExistsByKey","CheckSalesOrderStatusExistsByName","CheckSalesOrderTypeExistsByDisplayName","CheckSalesOrderTypeExistsByKey","CheckSalesOrderTypeExistsByName","ClaimOrder","DenySalesOrder","GetAllOrdersForProvider","GetAvailableOrdersForProvider","GetCurrentAccountSalesOrders","GetCurrentStoreSalesOrders","GetCurrentUserSalesOrders","GetSalesOrderByID","GetSalesOrderEvents","GetSalesOrderStateByID","GetSalesOrderStates","GetSalesOrderStatusByID","GetSalesOrderStatuses","GetSalesOrderTypeByID","GetSalesOrderTypes","GetSecureSalesOrder","GetSubscriptionBySalesOrderID","GetSubscriptionHistoryBySubscriptionID","SendSalesOrderConfirmationEmail","UnclaimOrder","UpdateProductOnOrder","Payments","AssignPayoneerAccountUserForCurrentStore","AssignPayoneerAccountUserForCurrentUser","CheckCreditStatusForStorefrontExistsByDisplayName","CheckCreditStatusForStorefrontExistsByKey","CheckCreditStatusForStorefrontExistsByName","CreateAPayoneerAccountForCurrentStore","CreateAPayoneerAccountForCurrentUser","CreateCurrentUserWalletEntry","CreditForCurrentAccount","CreditPaymentsForCurrentAccount","CreditsForCurrentAccount","CreditsForCurrentAccountLite","CurrentUserMarkWalletEntryAsDefault","DeactivateCurrentUserSubscriptionByID","DeactivateCurrentUserWalletEntry","GetAuthedURLForBuyerToSetUpPaymentAccounts","GetAuthedURLForStoreOwnerToAddATrackingNumberToTheEscrowOrder","orderID","GetAuthedURLForStoreOwnerToSetUpPayoutAccountsForCurrentStore","GetAuthedURLToReleaseFundsForEscrowOrder","GetCreditStatusesForStorefront","GetCreditStatusForStorefrontByID","GetCurrentUserSubscriptions","GetCurrentUserWallet","GetCurrentUserWalletEntryByID","GetPaymentInstructionsUrlForEscrowOrder","payoneerAccountID","payoneerCustomerID","GetPaymentMethods","GetPaymentsProviderAuthenticationToken","GetPaymentStatuses","GetPaymentTransactionReport","GetPaymentTypes","GetRepeatTypes","GetSalesInvoicePaymentsForCurrentAccount","GetSubscriptionByID","GetSubscriptionStatuses","GetSubscriptionTypes","GetSurchargeForInvoicePayment","GetSurchargeForQuickInvoicePayment","PayoneerOrderEventWebhookReturn","RefillOnDemandSubscription","UpdateCurrentUserWalletEntry","ViewOnDemandSubscriptions","Prescriptions","CancelExistingPrescription","GenerateEPIQPrescription","Pricing","CalculatePricesForProduct","productID","quantity","CalculatePricesForProducts","CreatePriceRule","DeletePriceRuleByID","GetPricePoints","GetPriceRuleByID","GetPriceRules","UpdatePriceRule","Products","CheckProductExistsByID","CheckProductExistsByKey","CheckProductExistsByName","CheckProductExistsBySeoUrl","GetAllPackSizesForPurchaseOption","GetBestSellersProducts","GetOneTimeVariantFromAnyProductID","GetPersonalizationProductsForCurrentUser","GetPersonalizedCategoryAndProductFeedForCurrentUser","GetProductAssociationTypes","GetProductByID","GetProductByKey","GetProductDownloadTypes","GetProductImages","GetProductImageTypes","GetProductInventoryLocationSections","GetProductKeys","GetProductMetadataByURL","GetProductReview","GetProductReviews","GetProducts","GetProductsByCategory","GetProductsByIDs","GetProductsByPreviouslyOrdered","GetProductsForCurrentStore","GetProductStatuses","GetProductTypes","ImportProducts","ReplacementProducts","Providers","AnalyzeCurrentCartToTargetCarts","AnalyzeCurrentQuoteCartToTargetQuoteCarts","BulkCalculateInventory","BulkCheckHasAnyAvailableInventory","CalculateInventory","CheckHasAnyAvailableInventory","ClearCurrentCartToTargetCartsAnalysis","ClearCurrentQuoteCartToTargetCartsAnalysis","CreateSalesReturnFromStorefront","GetAvailableInventoryCount","GetBulkAvailableInventoryCount","GetCurrentAccountSalesInvoices","GetCurrentAccountSalesInvoicesLite","GetCurrentAccountSalesQuotes","GetCurrentAccountSalesReturns","GetCurrentAccountSampleRequests","GetCurrentAccountUnpaidOrPartiallyPaidSalesInvoicesCount","GetCurrentUserSalesInvoices","GetCurrentUserSalesQuotes","GetCurrentUserSalesReturns","GetCurrentUserSampleRequests","GetDiscountsForInvoice","GetDiscountsForOrder","GetDiscountsForQuote","GetQuickPaySalesInvoice","GetSecureSalesInvoice","GetSecureSalesInvoiceByKey","GetSecureSalesQuote","GetSecureSalesReturn","GetSecureSampleRequest","IsSalesOrderReadyForReturn","PayMultipleInvoicesByAmounts","PaySingleInvoiceByID","PlaidCreateWallet","PlaidGetLinkToken","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","CreateQuestion","CreateQuestionnaire","CreateQuestionType","DeactivateQuestionByID","DeactivateQuestionnaireByID","DeleteQuestionByID","DeleteQuestionnaireByID","GetAnswersForQuestions","GetQuestionByID","GetQuestionnaireByID","GetQuestionnaireByKey","GetQuestionnaires","GetQuestions","GetQuestionTypeByID","GetQuestionTypes","ReactivateQuestionByID","ReactivateQuestionnaireByID","SecureCreateOrUpdateAnswers","UpdateQuestion","UpdateQuestionnaire","UpdateQuestionOption","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","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","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","CreateSecurePatientNoteAsDoctor","GetNoteByID","GetNotes","GetNoteTypes","GetSecurePatientNotesAsDoctor","Tracking","CreateFullPageViewEvent","GetRecentlyViewedProducts","Vendors","CheckVendorExistsByID","CheckVendorExistsByKey","CheckVendorExistsByName","GetVendorByID","GetVendors","accounts","advertising","appointments","attributes","auctions","authentication","brands","categories","contacts","currencies","doseSpot","franchises","geography","globalization","importer","inventory","invoicing","jsConfigs","manufacturers","media","messaging","ordering","payments","prescriptions","pricing","products","providers","questionnaire","quoting","returning","reviews","sales","sampling","scheduling","shipping","shopping","stores","structure","tracking","vendors","this","promises","results","toCall","cacheResult","tryCount","undefinedIsFailure","Promise","internalPromiseWrapper","async","reject","errors","r","isUndefined","err","push","console","error","flush","resultKey","cefConfigSlice","createSlice","name","initialState","value","reducers","setCefConfig","state","action","payload","actions","useCefConfig","useSelector","dispatch","useDispatch","useEffect","fromDoc","document","defaults","promiser","then","catch","counter","getCookieValue","_document$cookie$matc","cookie","match","pop","sortByCreatedDateDescending","a","b","CreatedDate","isFileAcceptable","fileTypes","_fileName$split$pop","fileExtension","split","toLowerCase","fileMimeType","extension","mimeTypes","getMimeType","some","t","typeLowered","endsWith","baseType","startsWith","jpg","jpeg","png","gif","bmp","webp","tiff","tif","svg","ico","pdf","doc","docx","xls","xlsx","ppt","pptx","txt","csv","rtf","odt","ods","mp3","wav","ogg","m4a","flac","aac","mp4","avi","mkv","mov","wmv","webm","flv","ogv","zip","rar","tar","gz","html","css","js","json","xml","wasm","md","woff","woff2","ttf","otf","apk","exe","dmg","iso","LoginResponseStatus","readOrPopulateAuthenticationCookie","populator","loop","cookieValue","useAuthFactory","authFactory","setAuthFactory","useState","factory","preAuth","force","_r$data$ActionSucceed","_r$data","ActionSucceeded","reason","log","loadCurrentUser","authed","setUser","Loading","loadCurrentAccount","setAccount","loadAffiliateAccounts","hasRole","Active","AsListing","setAffiliateAccounts","Results","setAffiliateAccount","Cookies","set","remove","role","res","Name","readRoleCookie","hasPermission","permission","readPermissionCookie","login","authProviderMFAEnabled","_credentials$Password","_credentials$MFAToken","credentials","MFAToken","checked","_mfaResult$data","mfaResult","Username","Status","Challenge","MFAResult","Result","Password","_forcedResetChecked$d","UserName","authProvider","provider","_authResponse$data","authResponse","Success","Failure","requestMFA","username","usePhone","UsePhone","_r$data2","logout","href","site","register","user","_r$data3","_r$data$Messages","_r$data4","Messages","updateCurrentUser","newUser","_r$data5","_r$data$Messages2","_r$data6","updateCurrentAccount","newAccount","authSlice","currentUser","currentAccount","affiliateAccounts","useCurrentUser","auth","AccountID","ContactPhone","ContactEmail","ContactFirstName","ContactLastName","_learnq","identifyUser","useCurrentAccount","account","ErrorView","props","viewState","componentName","classes","hasError","debug","errorMessageArr","errorMessage","errorMessages","_jsx","Alert","variant","className","children","slice","Translate","translateKey","remaining","useTranslation","LoadingWidget","overlay","padIn","message","messageKey","innerClasses","additionalClasses","Row","style","zIndex","background","_jsxs","Col","xs","Spinner","animation","ConfirmationModal","title","showHeader","bodyClasses","confirmBtnLabel","confirmBtnClasses","confirmBtnVariant","cancelBtnLabel","cancelBtnVariant","cancelBtnClasses","onConfirm","confirmButton","confirmDisabled","customHeaderComponent","footerClasses","headerClasses","onCancel","size","show","confirmBtnSID","cancelBtnSID","onCancelButtonPressed","BootstrapModal","onHide","contentClassName","Header","closeButton","Body","hideFooter","Footer","Button","onClick","disabled","onConfirmButtonPressed","defaultProps","confirm","div","createElement","cleanup","ReactDOM","body","removeChild","appendChild","Modal","titleID","loading","CustomHeader","modalBodyClasses","modalClasses","includeFooter","hideCloseButton","backdrop","closeVariant","modal","useViewState","setViewState","running","success","waitMessage","setRunning","newValue","prototype","toString","call","msg","finishRunning","useModal","messageToUse","Message","ResponseStatus","consoleDebug","cleanUp","setLoading","finishLoading","debounce500","updateOn","debounce","default","blur","allowInvalid","ImageWithFallback","_ref","src","alt","imgSrc","setImgSrc","fallBackError","setFallBackError","onError","event","mode","scale","maxheight","maxwidth","setCategories","categoriesBySeoUrl","setCategoriesBySeoUrl","categoriesByNamePipeKey","setCategoriesByNamePipeKey","result","newCatsBySeoUrl","newCatsByNamePipeKey","cat","SeoUrl","CustomKey","Children","kit","warn","ID","n","category","_category$DisplayName","categoryTop","categoryMid","Boolean","full","DisplayName","_Fragment","isArray","index","_category$Serializabl","_category$Serializabl2","_category$Serializabl3","_category$Serializabl4","_category$Serializabl5","_category$DisplayName2","ParentName","SerializableAttributes","AltLink","Anchor","Value","PrimaryImageFileName","height","width","Description","FormGroupLabel","tooltipText","label","labelClassName","formIdentifier","required","hideRequired","RenderTooltip","tooltipProps","Tooltip","isRegistrationForm","OverlayTrigger","placement","delay","hide","Form","Label","htmlFor","func","wait","context","timeout","_len","args","_key","clearTimeout","setTimeout","later","apply","TextInputFormGroupNew","_inputAutoComplete","pattern","patternMessage","validateObject","dataSid","requiredMessage","autoComplete","labelKey","labelText","tooltipKey","leftIcon","rightIcon","inputClasses","formClasses","onBlur","onFocus","onKeyDown","onKeyUp","onKeyPress","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOver","onMouseUp","onPaste","extraOnChange","hideInvalidTooltip","placeholderKey","placeholderText","minLength","minLengthMessage","maxLength","maxLengthMessage","isEmail","isPhone","isFax","isUsername","unitLabel","leftIconContainerClassName","valueToPrefill","touched","setTouched","textInput","validate","inputAutoComplete","Group","InputGroup","renderLeftIcon","iconString","faRoad","faBriefcase","faCity","Text","FontAwesomeIcon","icon","Control","type","as","PatternFormatWrapper","defaultValue","format","onChange","placeholder","forwardRef","ref","PatternFormat","getInputRef","displayName","PasswordInputFormGroupNew","requireDigitMessage","requireUppercaseMessage","requireLowercaseMessage","requireSpecialMessage","suppressRequirements","showPassword","setShowPassword","reqd","passwordInput","passwordRequireLength","hasLowerCase","passwordRequireLowercase","hasUpperCase","passwordRequireUppercase","hasNumber","passwordRequireDigit","hasSpecial","passwordRequireSpecial","applyValidClass","toggleShowPassword","ListGroup","values","types","CheckboxFormGroupNew","inputClass","checkboxOptions","tooltipIsOpen","setTooltipIsOpen","errorExists","setErrorExists","inputsRefs","useRef","relevantFields","op","identifier","willBeError","field","option","checkboxInput","Check","current","filter","errorKey","includes","LoginForm","showCancel","onLoginSuccess","returnUrl","onClearError","signInLeft","usernameFieldId","passwordFieldId","usernameDataSid","passwordDataSid","showMFA","setShowMFA","setHideLogin","emailFirstAndLastFour","setEmailFirstAndLastFour","setMFAToken","hasRunLoginSuccess","setHasRunLoginSuccess","authenticationFactory","history","useHistory","useLocation","returnUrlParam","search","reset","formState","getValues","useForm","criteriaMode","usernameIDResolved","passwordIDResolved","handleCancel","handleSubmit","_res$MFAResult","EmailFirstAndLastFour","link","email","go","dataLayer","requestMFATokenViaEmail","loginData","keySubmit","isValid","Contact","FirstName","target","setValue","submitRegistrationB2CForm","trigger","onSubmit","isUnique","curEmailValue","Email","_success$data","_success$data2","translated","trackEvent","eventName","properties","LoginModal","signUpModal","isSignUpModal","setIsSignUpModal","loginErrorExists","setLoginErrorExists","showModal","setShowModal","setError","RegistrationB2CForm","emEmailRegistrationB2C","dto","AddressBook","AddressID","AddressKey","Email1","LastName","TypeID","TypeKey","ContactID","InService","IsSMSAllowed","OverridePassword","pwPasswordRegistrationB2C","StatusID","StatusKey","StatusName","Type","TypeName","UseAutoPay","_window$dataLayer","brandSlice","currentBrand","setCurrentBrand","useCurrentBrand","brand","brandFactory","useBrandFactory","loadCurrentBrand","_result$data","_cefConfig$featureSet","_cefConfig$featureSet2","featureSet","enabled","useDashboardLinks","dashboardLinks","setDashboardLinks","flattenedLinks","setFlattenedLinks","activeLink","setActiveLink","pathName","filterByRequiredX","useCallback","links","filterBy","filterByPromiseMap","Roles","Permissions","linkKeyToCheck","checkPromise","shouldInclude","all","x","filterLinks","filteredLinks","linksArr","_link$children","getUsableLinks","dashboard","sort","order","y","find","titleKey","titleKeyFallback","reqAnyRoles","reqAnyPerms","reqAnyBrandKeys","_x$reqAnyBrandKeys","isFound","filterByRequiredBrandKey","dashboardBase","forEach","_link$children2","childLink","linksToSet","linksFlattened","reduce","accu","curVal","child","_linksFlattened$i$hre","populateDashboardLinks","MiniMenu","_currentUser$DisplayN","_currentUser$UserName","showLoginModal","setShowLoginModal","groupedLinks","acc","item","accountSettings","Dropdown","Toggle","trim","Menu","left","innerIndex","Item","Interweave","content","preventDefault","CatalogFilterHeaderButton","expandedFilterName","setExpandedFilterName","onHeaderClicked","useAccordionButton","Card","Title","CatalogFilter","customBodyComponent","list","onListItemClicked","onListItemExpandBtnClicked","onCollapseAllClicked","onExpandAllClicked","isChildExpanded","sm","Accordion","Collapse","eventKey","maxHeight","overflowY","_e","formatLabel","count","alignItems","AttributesFilter","allAttributes","productSearchViewModel","onAttributeClicked","expandedAttributes","setExpandedAttributes","toggleExpansion","listItem","attr","Key","c","callbackLabel","parentKey","childKey","childListItem","BrandsFilter","onBrandNameClicked","brandsInOrder","setBrandsInOrder","brandNames","unbrandedOptionIndex","splice","brandName","CategoriesFilter","categoriesTree","onCategoryClicked","expandedCategories","setExpandedCategories","ch","SuspectedThisLevelDocCount","catalog","filters","topLevelCategoryProductCounts","subLevelCategoryProductCounts","DocCount","ec","ServiceStrings","Vendor","Customer","Affiliate","Organization","Fabricator","inStorePickup","selectedStoreID","shipOption","shipToHome","shipToStore","cobalt","dnnSSO","identity","openIdConnect","unableToDetectDNNLogin","roleNames","csr","seller","carts","cart","compare","favorites","notifyMe","quote","samples","wishList","watchList","targetGroupingPrefix","kinds","session","static","hasASelectedRateQuote","checkout","paymentMethods","ach","creditCard","echeck","free","invoice","payPal","payoneer","quoteMe","storeCredit","wireTransfer","steps","billing","completed","confirmation","method","payment","shippingRates","splitShipping","stepsB2C","cvgrid","attribute","autocomplete","boolean","input","minmaxdate","minmaxnumber","select","events","loaded","updated","refreshRoles","addressBook","added","deleteCancelled","deleteConfirmed","deleted","editCancelled","editSave","resetRegionDropdownNeeded","associator","removed","ready","changed","signIn","signInFailed","signOut","cleared","itemAdded","itemRemoved","itemsAdded","resetTargets","updateShoppingLists","change","categoryTreeReady","searchComplete","chat","newMessage","nextStep","propertyChanged","currency","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","BOOLEAN","MULTIPLE_CHOICE","NUMBER","RADIO","SELECT","STRING","TEXT_AREA","redux","actionTypes","setCart","setMessages","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","genBlankInventoryObj","AllowBackOrder","AllowPreSale","IsDiscontinued","IsOutOfStock","IsUnlimitedStock","MaximumBackOrderPurchaseQuantity","MaximumBackOrderPurchaseQuantityGlobal","MaximumBackOrderPurchaseQuantityIfPastPurchased","MaximumPrePurchaseQuantity","MaximumPrePurchaseQuantityGlobal","MaximumPrePurchaseQuantityIfPastPurchased","MaximumPurchaseQuantity","MaximumPurchaseQuantityIfPastPurchased","PreSellEndDate","ProductID","QuantityAllocated","QuantityOnHand","QuantityPreSellable","QuantityPreSold","QuantityPresent","RelevantLocations","factoryAssign","product","readInventory","idToUse","bulkFactoryAssign","dontBuildReadInventoryFunction","toProcess","productIDsToUse","isSalesItem","ProductIDs","found","Number","canProductBeAddedToCart","_this$cefConfig","productInventory","useInventoryFactory","inventoryFactory","setInventoryFactory","instance","Dictionary","Guid","newGuid","Math","random","click","callback","price","calculateRevenue","eventCallback","items","mapToProductFieldObjectInner","detail","currencyCode","revenue","add","checkoutOption","step","checkout_option","actionField","refund","refundItems","refundInner","mapped","refundItem","mapToProductFieldObject","Quantity","QuantityBackOrdered","UnitSoldPrice","UnitCorePrice","promiserKey","ga4checkoutOption","extraInfo","SalesItems","salesItem","TotalQuantity","totalPrice","Discounts","coupon","discount","sc","DiscountName","DiscountKey","addShippingInfo","paymentType","reason2","buildTransactionId","checkoutResult","PaymentTransactionID","PaymentTransactionIDs","orderIdPart","OrderID","OrderIDs","ga4CheckoutFinalize","_cart$Totals$SubTotal","_Shipping","_Tax","Totals","Total","SubTotal","Tax","transaction_id","reason1","prices","base","readPrices","primaryCategory","toSend","BrandName","SlaveName","SlaveKey","item_brand","item_id","item_name","isSale","sale","propName","haveBase","SalePrice","BasePrice","useCartFactory","cartFactory","setCartFactory","allCarts","useAllCarts","addItemToCart","skipRedux","checkIfQuantityExceedsStock","_cart$SalesItems$find","_cart$SalesItems","_cart$SalesItems$find2","_inventory$QuantityOn","totalQuantityDesired","GeneralMedicalCompleted","regionRes","checkRestrictedRegions","googleTagManager","googleTagManagerService","reloadCart","_result$Messages","CartActionSucceeded","addAllItemsToCart","ExtendedPrice","ItemType","Items","Product","addItemToStaticCart","reloadStaticCart","removeItemFromCart","cartItemID","removeItemFromStaticCart","_r$data$Messages3","addToCompare","_r$data7","_r$data$Messages4","_r$data8","removeFromCompare","_r$data9","_r$data$Messages5","_r$data10","clearCompare","_r$data11","_r$data$Messages6","_r$data12","addDiscount","Code","_r$data13","removeDiscount","discountType","DiscountTypeID","removeFn","_r$data14","_r$data$Messages7","_r$data15","updateItemQuantity","CartItemID","_r$data16","_r$data$Messages8","_r$data17","createShoppingList","reloadSessionCart","setCartByType","Validate","_r$data18","_r$data19","_r$data19$Messages","_resultCopy$SalesItem","_r$data$Messages10","_r$data21","_r$data$Messages9","_r$data20","resultCopy","messages","cartValue","reloadShoppingLists","IncludeNotCreated","_r$data22","_r$data23","checkIfItemIsInStaticCart","_cart$SalesItems2","canProductBeAddedToStandardCart","addable","swapItemInCart","newProduct","oldItemID","oldCart","_oldCart$SalesItems$f","_copy$SalesItems","attributesToSend","prev","cur","newCartItemRes","cartData","copy","itemIDsToIndexes","obj","curIdx","newItem","oldCartItems","cartSlice","shoppingLists","useCart","condition","useShoppingLists","CompareFilter","_compareCartItems$len","_compareCartItems$len2","compareCart","compareCartItems","showClearCompareCartModal","setShowClearCompareCartModal","Fragment","ProductName","ProductSeoUrl","removeItemFromCompareCart","PriceRangesFilter","pricingRanges","onPricingRangeClicked","range","FileEntityType","SearchSort","SerializableAttributesDictionary","OutsideClickDetector","wrapperRef","useDetectOutsideClick","onOutSideClicked","onOutsideClicked","handleClickOutside","contains","addEventListener","removeEventListener","useDebounceWithCallback","timer","SearchTermFilter","onSearchSubmitted","currentFormQuery","query","setQuery","suggestions","setSuggestions","hideOverflow","setHideOverflow","s","Page","PageSetSize","defaultPageSize","PageSize","Query","Sort","defaultSort","Relevance","onQueryChanged","currentlyExpanded","borderRight","borderLeft","top","overflow","suggestion","onSuggestionClicked","stars","ProductRatingsFilter","ratingRanges","onRatingRangeClicked","isChecked","ListGroupItem","Input","index2","xmlns","viewBox","d","fill","AppliedFilterBlock","titleId","CatalogFilters","_productSearchViewMod","_productSearchViewMod2","_productSearchViewMod3","_productSearchViewMod4","_productSearchViewMod5","_productSearchViewMod6","_productSearchViewMod7","_productSearchViewMod8","_productSearchViewMod9","_productSearchViewMod10","_productSearchViewMod11","_productSearchViewMod12","_productSearchViewMod13","_productSearchViewMod14","_productSearchViewMod15","_productSearchViewMod16","_productSearchViewMod17","_productSearchViewMod18","_productSearchViewMod19","_productSearchViewMod20","_productSearchViewMod21","_productSearchViewMod22","_productSearchViewMod23","_productSearchViewMod24","_productSearchViewMod25","_productSearchViewMod26","_productSearchViewMod27","setProductSearchViewModel","multiFilterMode","onClickRemoveParam","paramKey","form","parse","p","alterSearchViewModelForm","newForm","alterAttribute","changeType","attributeName","formKey","newAttributes","attributeAlreadyIncluded","filterProps","filterParamsExist","Category","RatingRanges","PricingRanges","AttributesAny","AttributesAll","onClickRemoveParams","textAlign","val","ranges","CategoriesTree","seoUrl","reverse","CategoryMid","CategoryTop","BrandNames","CartMessages","alertVariant","toUpperCase","useStoredFileTypes","storedFileTypes","setStoredFileTypes","useStoredFileTypesViewState","FileUploadWidget","uploadedFiles","setUploadedFiles","fileNotAllowed","setFileNotAllowed","pendingUpload","setPendingUpload","handleFile","files","file","acceptableFileTypes","uploadCallback","allowMultiple","_props$storedFileType","formData","FormData","String","uploadType","storedFileType","fileUploadResponse","UploadFiles","prevUploadedFiles","FileName","_err$response","_err$response$data","response","inputContainer","getElementById","classList","cloud","shapeRendering","textRendering","imageRendering","fillRule","clipRule","inputContainerClassName","accept","handleClick","_document$getElementB","pathPieces","AddToCartModalContext","React","actionIndex","alterCanProceed","canProceed","proceed","_newAttributes","masterProduct","isPrimeOrMojo","useAddToCartModalContext","useContext","AddToCartModalContextProvider","_props$messages","setAttributes","setCanProceed","setActionIndex","Provider","newCanProceed","attributesToSet","wasLastAction","retryAddToCart","idx","QuestionnaireModalHeader","BloodworkModal","screenSize","setScreenSize","screenWidth","innerWidth","paddingLeft","StoredFileAccount","fileIsAcceptable","BloodworkComplete","CancelPrescriptionModal","actionArgument","CancelPrescription","prescriptionId","PrescriptionID","parseInt","_result$data$Messages","_result$data$Messages2","useGeographyFactory","geographyFactory","loadCountries","_r$data$Results","setCountries","loadRegions","countryID","_r$data$Results2","setRegions","geographySlice","countries","regions","useCountries","useRegions","CardInputFormGroup","cardInput","_event$target","valid","cardValidator","isPotentiallyValid","card","cardNumber","cardNumberVerification","cardNumberToUse","replaceAll","gaps","offsets","components","start","end","min","prettyCardNumber","inputMode","hideIcon","CheckboxFormGroup","DateInputFormGroup","minMessage","max","maxMessage","includeTime","dateInput","timeInput","NumberInputFormGroup","isCurrency","isPercent","numberInput","valueAsNumber","PasswordInputFormGroup","SelectFormGroup","options","selectClass","optionsAsValue","includeNull","nullKey","nullText","hideOptionKey","initialOption","watchOption","productId","doNotValidate","nullOptionDisabled","setNullOptionDisabled","selectedValue","setSelectedValue","checkingAvailability","setCheckingAvailability","nullString","changeOption","optionArg","initialValueOption","_initialValueOption$v","isNotNull","StateOfResidenceName","_cart$SalesItems$","newState","productIdOrFromCart","StateOfResidenceCode","StateOfResidenceID","StateOfResidenceKey","StateOfResidence","checkAvailability","Select","opt","_opt$value","TextAreaFormGroup","showCharacterCounter","rows","letterCount","setLetterCount","textArea","maxWidth","minHeight","TextInputFormGroup","numberInputOnly","inputValue","isNaN","eighteenYearsAgo","subYears","twentyfourYearsAgo","GeneralMedicalForm","_currentUser$Contact2","showGenderRestrictionMessage","setShowGenderResctrictionMessage","showRegionResctrictionMessage","setShowRegionRestrictionMessage","regionRestrictionMessage","setRegionRestrictionMessage","init","setInit","dateIsValid","setDateIsValid","minAge","_currentUser$Contact","_currentUser$HeightFe","_currentUser$HeightIn","_currentUser$Weight","Phone1","HeightFeet","HeightInches","Weight","Gender","DateOfBirth","date","toISOString","dateToDefaultValue","txtPatientDateOfBirth","txtPatientHeightFt","txtPatientHeightIn","txtPatientGender","txtPatientWeight","txtPatientState","txtPatientFirstName","txtPatientLastName","txtPatientPhoneNumber","regionOptions","region","Container","v","handleSubmitAndTrack","GeneralQuestionnaireModal","closeMedicalForm","currencyFormatter","Intl","NumberFormat","getDtoAsPromiserKeyFragment","str","removeMgLabelFromString","w","AnswerContext","answers","addOrUpdateAnswer","createAnswer","question","QuestionOption","useFormContext","existingAnswer","useMemo","QuestionID","OptionID","getDefaultCheckedState","renderInput","element","isInvalid","controlName","labelDataSID","questionTranslationKey","OptionTranslationKey","inputDataSID","inputID","idsForLargerTextFields","typeKey","getControlName","QuestionKey","OptionKey","Option","fetchAnswers","validQuestions","forUserID","_answersRes$data$Resu","_answersRes$data","questionIDs","q","answersRes","QuestionIDs","ForUserID","fetchedAnswers","Options","Question","isVisible","questionLabelClasses","control","warningMessage","setWarningMessage","questionHasMultipleOptions","getExistingAnswer","iquestion","handleInputChange","RequiresAdditionalInformation","AdditionalInformation","currentTarget","MessageIfSelected","PreventsContinuing","handleAdditionalInformation","controllerOptions","answersForThisQuestion","isRequired","_$first","_$first2","_$first2$OptionID","rules","messageIfSelected","currentValue","fullOptions","oID","fullOption","getControllerOptions","renderFormGroup","selectedOptions","_question$Options","_getExistingAnswer","_formState$errors$con","autoFocus","Feedback","_question$Options3","_question$Options2","_getExistingAnswer2","_formState$errors$con2","Controller","shouldUnregister","render","_ref2","_formState$errors$con3","_question$Options4","QuestionTranslationKey","SortOrder","QuestionnaireProgressBar","questions","visibleQuestionID","currentQuestionPosition","findIndex","sections","sectionNames","_q$SerializableAttrib","_q$SerializableAttrib2","Section","total","section","sectionKey","amountInThisSection","distanceIntoThisSection","sumOfAllPreviousSections","_sectKey","sectKey","isFirst","isLast","additionalProgressbarClasses","ProgressBar","now","padding","display","marginTop","right","QuestionnaireComponent","_questionnaire$Descri","_props$submitButtonTe","_props$submitButtonTe2","questionsFromParent","_props$questionsData","questionsData","setQuestionnaire","questionnaireData","setQuestions","setAnswers","modifiedAnswers","setModifiedAnswers","setVisibleQuestionID","oneByOne","questionnaireFactory","useQuestionnaireFactory","getQuestionnaireByID","getQuestionnaireByKey","customKey","getQuestions","methods","contentRef","buttonContainerRef","handleScrollToTop","scrollTo","behavior","questionsRequiringAnAnswer","visibleQuestionIndex","qu","thisQuestionsAnswers","thisQuestionIsBeforeVisibleQuestion","thisQuestionHasNoAnswers","goToNextQuestion","_currentQuestionAnswe","_relevantAnswerOption","currentQuestionIndex","currentQuestion","currentQuestionAnswers","relevantAnswerOption","_currentQuestionAnswe2","_a$Option","FollowUpQuestionID","newVisibleQuestionID","NextQuestionID","clearAnswersOfQuestions","startIndex","endIndex","IDsOfQuestionsToClear","processAnswerClearing","answrArr","goToPreviousQuestion","didSet","prevQuestion","answerForPrevQuestion","optionForPrevQuestion","setVisibleQuestionToLastAnswered","setAnswerValuesInForm","answArr","questionArr","selectedAnswers","hasAlreadyRun","questionnaireCustomKey","questionnaireID","answersWithFullOptions","fetchQuestionsAndAnswers","sortedQuestions","iquestionnaire","questionnaireResult","fetchQuestionnaireByKey","fetchQuestionnaireByID","fullQuestions","IDs","Questions","answeredQuestions","activeAnswers","formIsValidAndUntouched","onFormValidityChange","submitCount","visibleQuestionHasBeenAnswered","isViewingFirstQuestion","isViewingLastQuestion","FormProvider","showTitle","showProgressBar","showSubmitButton","answersToSend","Answers","afterSubmit","topClasses","answer","prevAnswers","existingIndex","newAnswers","prevModified","existingModifiedIndex","newModifiedAnswers","bottomClasses","showCancelButton","onCancelClicked","submitButtonText","hideButtonOnValidSubmission","isDirty","QuestionnaireModal","UploadIDModal","checkmark","version","IDComplete","AddToCartModalBody","cartTypeName","modifiedMessages","setModifiedMessages","isForQuoteCart","onViewCartClicked","onContinueShoppingClicked","actualMessages","currentAction","actionName","AddToCartModal","_props$masterProduct","_props$masterProduct2","attrs","onRetry","AddAllToCartModal","cartType","alertClass","firstWord","RemoveFromCartModal","productName","parentRunning","cartTypeText","useNoteFactory","noteFactory","createNote","getNotes","_res$data","getNoteTypes","_res$data2","usePatientFactory","patientFactory","setPatientFactory","storedFilesFactory","useStoredFilesFactory","getStoredFileTypes","getStoredFiles","getPatient","getPatientBloodworkFiles","patientAccountID","bloodWorkType","getPatientFiles","ExcludedTypeName","getPatientNotes","patientNoteType","getDoctorNotesForPatient","doctorNoteType","usePatientFiles","pagedPatientFiles","setPagedPatientFiles","fetchPatientFiles","useModalForFailure","patientFiles","reloadPatientFiles","usePatientFilesViewState","AddToCartButton","_currentCart$SalesIte","_product$ID2","_product$Name","_product$ID3","_product$Name2","_props$dropDirection","_product$ID4","_currentCart$SalesIte2","btnClasses","btnGroupClasses","btnVariant","btnSize","btnIcon","dropdownBtnClasses","asIcon","excludeQuoteCart","quoteCartOnly","quoteBtnDisabled","useConfirmModal","useErrorModal","onItemAdded","verticalAlign","dropdownBtnVariant","ignorePricingAndInventory","showAddToCartModal","setShowAddToCartModal","showAddToQuoteCartModal","setShowAddToQuoteCartModal","addToCartModalMessages","setAddToCartModalMessages","onItemAddedCalled","setOnItemAddedCalled","showErrorMessagesModal","setShowErrorMessagesModal","showTooltip","setShowTooltip","buttonRef","currentCart","retryWithAttributes","sad","onAddCartItem","typeName","$_rawPrices","amountOff","ecommerce","isPrime","isMojo","orderMapping","_res$Messages2","flatAttributes","newMessages","_res$Messages","from","Set","addToQuoteCartModalDisabled","disableAddToCartModals","currentPath","localStorage","getItem","Account","removeItem","addToACartModals","_product$ID","faQuoteRight","ButtonGroup","setItem","faCartPlus","drop","dropDirection","cssVariables","align","cursor","AddAllToCartButton","_viewState$errorMessa","salesItems","confirmationModalData","setConfirmationModalData","onAddCartItems","confirmMsg","_err$Messages","every","AddToCartQuantitySelector","_props$debounceMS","_props$id","_props$id2","initialValue","increaseDisabled","decreaseDisabled","useInput","setQuantity","firstRender","debounceMS","minWidth","canIncreaseFn","ViewDetailsButton","includeQuoteCart","showConfirmationModal","setShowConfirmationModal","confirmationModalMessages","setConfirmationModalMessages","faList","onAddQuoteCartItem","itemResponse","startSignalRConnection","connection","assert","HubConnectionState","Connected","Disconnected","setupSignalRConnection","connectionHub","HubConnectionBuilder","withUrl","withAutomaticReconnect","withHubProtocol","JsonHubProtocol","configureLogging","LogLevel","Information","build","serverTimeoutInMilliseconds","onclose","onreconnecting","Reconnecting","onreconnected","connectionId","signalRSlice","PricingFactory","genBlankPricesObj","haveMsrp","haveReduction","haveSale","msrp","percentOff","reduction","Function","MsrpPrice","ReductionPrice","repeatAbbr","RepeatTypeAbbreviation","repeatPeriods","RepeatTypePeriods","_reject","usePricingFactory","pricingFactory","setPricingFactory","useProductFactory","productFactory","setProductFactory","applyDefaultStatusToProduct","normalStatus","getProductStatuses","applyDefaultTypeToProduct","generalType","getProductTypes","getProductByID","productRes","skipInventory","skipPricing","getProductsByIDs","ids","inner","idSet","indexKey","forceInner","promiserKeyInner","productsRes","_stack","stack","skipForcedPage","collected","page","thisSlice","rarr","flatMap","getPackSizesForPurchaseOptions","productIDs","SelectedProductID","validResults","getReplacementProductOptions","getOneTimeVariantFromAnyProductID","useBiddingFactory","biddingFactory","setBiddingFactory","useSignalR","setConnection","placeBid","lotID","bidAmount","LotID","BidAmount","getQuickBidAmount","getCurrentLotData","_r$HighestBid$Current","_r$HighestBid","HighestBid","CurrentBid","StartingPrice","getIncrement","getBidsForCurrentUser","_res$data2$Results","lot","_map","_lot$IncrementProfile","_lot$IncrementProfile2","_lot$Auction","_lot$Auction$Incremen","increments","IncrementProfile","IncrementSteps","Auction","Start","increment","Increment","onLotUpdate","on","newLot","Price","hidePercentOff","sizeClass","muteDiscountText","colClasses","pricesToUse","setPricesToUse","isPrimeOrMojoInitial","toUse","trunc","LotStatus","lotStatus","opensAtDate","OpensAt","closesAtDate","ClosesAt","Opening","Open","Closed","ProductCardBiddingWidget","setLot","setNow","currentBid","setCurrentBid","setBidAmount","bidPlacedSuccess","setBidPlacedSuccess","lotUpdateReceived","newQuickBid","intervalId","setInterval","clearInterval","onChangeBidAmount","disableBidButton","UserID","BuyNowAvailable","Tabs","defaultActiveKey","Tab","tabClassName","CurrentBidTab","BuyNowTab","_props$lot$HighestBid","_props$currentBid$Cur","_props$currentBid","_props$bidAmount","_props$lot$ReservePri","_props$currentBid$Cur2","_props$currentBid2","_props$product$Name","_props$product$Name2","_props$bidAmount2","_props$currentBid$Cur3","_props$currentBid3","faCrown","color","ReservePrice","ProductCardActionButtonWidget","_props$initialQuantit","containerClasses","containerStyle","addToCartBtnClasses","addToCartBtnVariant","viewDetailsBtnVariant","useOutOfStockInsteadOfViewDetails","outOfStockBtnVariant","outOfStockBtnClasses","small","buttonView","disableModals","localQuantity","setLocalQuantity","initialQuantity","buttonViewInternal","showAddToQuoteCartBtn","useQuoteCart","productIsOutOfStock","productAllowsBackOrder","productIsVariantMaster","productCantBeAddedToRegularCart","forceNoQuantitySelector","ExternalSearchBox","showSuggestions","setShowSuggestions","qry","sorted","Score","getSuggestionsWithQuery","borderTopLeftRadius","borderBottomLeftRadius","onToggle","nextShow","LanguageSelectorButton","showSelectLanguageModal","setShowSelectLanguageModal","availableLanguages","setAvailableLanguages","i18n","currentLng","Locale","language","changeLanguage","UnicodeName","onLanguageSelectorButtonClicked","NavMenu","fluid","Link","to","rel","faMapMarker","faPhoneSquare","faAt","faFacebook","faTwitter","faLinkedin","faCcPaypal","faCcVisa","faCcMastercard","faCcAmex","faCcDiscover","Layout","Home","CartValidator","shift","setErrorMessages","updating","setUpdating","cartMessages","buildErrorMessages","resolveMessage","messageData","RemoveDiscountButton","btnIdPrefix","labelIdPrefix","idSuffix","hideText","showRemoveDiscountConfirmationModal","setShowRemoveDiscountConfirmationModal","showDiscountResponseModal","setShowDiscountResponseModal","discountResponseModalMessage","setDiscountResponseModalMessage","DiscountValueType","DiscountValue","removeCartItemDiscount","discountI","ProductCardAttributesWidget","_product$Serializable","ProductCardNameWidget","productSeoUrl","ProductCardPricingWidget","_product$ProductAssoc","displayStyle","loginForPricing","ProductAssociations","associatedProduct","prdtPrices","Slave","round","ProductCardSkuWidget","containerClassName","hideLabels","ProductCardStockWidget","hideStock","alertClasses","hideStockInternal","loginForInventory","isVariantMaster","ProductCardLotTimerWidget","_props$product","renderer","days","hours","minutes","showSeconds","seconds","getCountdown","Countdown","closesAtDateMinusWarningThreshold","setSeconds","getSeconds","bidEndsWarningThreshold","SalesItemQuantityLine","_props$salesItem$Quan","excludeTotal","packQuantity","primeOrMojoQuantity","LoginForPricing","tabIndex","CartTableWideScreen","_cartToUse$SalesItems","cartHasItems","cartToUse","shippingDiscounts","orderDiscounts","onRemoveItemFromCartClicked","queuedIDs","handlePackSizeChange","handleSubscriptionToggle","packSizeResults","setSubscriptionIsChecked","subscriptionIsChecked","setShowSubscriptionOffer","getPackResultsToUse","itemProductID","_productToUse$Seriali","_productToUse$Seriali2","productToUse","packResultsToUse","_packResultsToUse","PurchaseOption","PurchaseOptions","_option$SerializableA","_option$SerializableA2","itemIndex","_productToUse$Seriali7","_productToUse$Seriali8","_packResultsToUse$fin","_item$ExtendedPrice","DiscountTotal","getDiscountTotal","productUrl","serializableAttributes","packLevelVariantOfCurrentItem","_variant$Serializable","_variant$Serializable2","_productToUse$Seriali3","_productToUse$Seriali4","_variant$Serializable3","_variant$Serializable4","_productToUse$Seriali5","_productToUse$Seriali6","Dosage","Count","itemsPackLevelHasSubscriptionOption","_option$SerializableA3","_option$SerializableA4","itemHasPackOptions","ProductPrimaryImage","Table","borderless","discountIndex","DiscountIsAutoApplied","ProductRepeatTypeAbbreviation","_serializableAttribut","_option$SerializableA5","_option$SerializableA6","includeAddToCart","cartProducts","excludeBackorderInfo","toggled","preSale","ProductAllowPreSale","backOrder","_cart$Discounts2","removeDiscountConfirmationModalInfo","setRemoveDiscountConfirmationModalInfo","discountToRemove","discounts","_cart$Discounts","onDeleteDiscountClicked","TotalsWidget","tableClasses","totals","hideShipping","hideHandling","hideFees","hideDiscounts","hideTaxes","padAlign","corePrice","colSpan","Handling","Fees","DiscountsList","abs","taxes","Cart","_cartToUse$SalesItems2","_cartToUse$SalesItems3","_cartToUse$SalesItems4","_cartToUse$SalesItems5","_cartToUse$SalesItems6","setQueuedIDs","removeFromCartModalInfo","setRemoveFromCartModalInfo","setProducts","setPackSizeResults","showSubscriptionOffer","selectedProduct","setSelectedProduct","productIdsToUse","getProducts","getPackSizeOptions","selectedItem","variantLevelProduct","oldProduct","purchaseOptionLevelNewProduct","_oldProduct$Serializa3","_oldProduct$Serializa4","newProductPackLevel","salesItemId","_oldProduct$Serializa","_oldProduct$Serializa2","trackInitiateCheckout","_cartToUse$Totals","_cartToUse$SalesItems7","_cartToUse$SalesItems8","_cartToUse$Totals2","_cartToUse$SalesItems9","removeCartItemByID","getRowTitles","compareProducts","skipKeys","attrKey","Compare","_compareCart$SalesIte2","setCompareProducts","carouselIndex","setCarouselIndex","_compareCart$SalesIte","getCompareCartItemProductsByIDs","HideFromStorefront","IsComparable","_res$data$Results","loadAttributes","Carousel","interval","activeIndex","onSelect","handleSelect","selectedIndex","indicators","chunk","CompareTable","_props$cefConfig","_props$cefConfig2","striped","hover","ShortDescription","widthExists","Width","depthExists","Depth","weightExists","WidthUnitOfMeasure","DepthUnitOfMeasure","WeightUnitOfMeasure","titleNoPrefix","word","charAt","UofM","PCCWOverlayLayout","idPrefix","PCCWHorizontalLayout","productIsMaster","hideI","PCCWVerticalLayout","_product$TypeName","nullOptionKey","AddToShoppingListModal","includeSwitchToCreateBtn","onSwitchToCreateButtonClicked","customConfirmMessage","clearCustomConfirmMessage","selectedShoppingListName","setSelectedShoppingListName","itemIsIncludedInList","setItemIsIncludedInList","showConfirmMessage","setShowConfirmMessage","shoppingList","onAddToListClicked","CreateShoppingListModal","listName","setListName","listNameTouched","setListNameTouched","confirmationMessage","setConfirmationMessage","displayMessageOnConfirm","productToAddAfterCreation","onConfirmClicked","onListNameChanged","AddToInStockAlertsModal","desiredQuantity","nudQIMQuantity","ProductCardControlsWidget","hideFavoritesList","hideWishList","hideNotifyMe","hideCompare","hideShoppingList","removeConfirmationModalData","setRemoveConfirmationModalData","showGoToCompareViewModal","setShowGoToCompareViewModal","showCreateShoppingListModal","setShowCreateShoppingListModal","showAddToShoppingListModal","setShowAddToShoppingListModal","showAddToInStockModal","setShowAddToInStockModal","addToShoppingListPending","setAddToShoppingListPending","addToShoppinglistCustomConfirmMessage","setAddToShoppingListCustomConfirmMessage","favoritesList","notifyMeWhenInStock","isFavorite","favoritesListTitleKey","fi","isWish","wishListTitleKey","wi","isNotifyMeItem","notifyMeTitleKey","ni","isCompare","compareTitleKey","resetRemoveConfirmationModal","toggle","isInList","removeItemFromList","addItemToList","toggleCompareItem","ci","closeModalOnSuccess","addItemToInStockAlerts","newShoppingListName","isFirstList","renderContent","isSelected","layoutProps","ProductCard","addToCartAsLink","customClasses","hideShortDescription","hideSku","countStoreStockOnly","productDetail","AlertInfoNoResults","timeoutHolder","CatalogGridView","onScrollToBottom","useInfinite","canCallScrollFn","setCanCallScrollFn","overflowX","onScroll","scrollHeight","scrollTop","clientHeight","bottom","ceil","CatalogListView","_props$allAttributes","HideFromCatalogViews","_a$SortOrder","_b$SortOrder","fn","arr","ColumnEditorModal","columnHeaders","setColumnHeaders","showColumnEditorModal","setShowColumnEditorModal","arrayMove","arrayMoveImmutable","SortableItemContainer","onSortEnd","oldIndex","newIndex","prevcolumnHeaders","columnTitle","SortableItem","hideable","updatedcolumnHeaders","handleCheckboxChange","SortableElement","SortableContainer","_ref3","ColumnEditor","columns","col","hideCell","ranAtLeastOnce","savedOrder","array1","array2","isEqualOrder","newSerializableAttributes","newOrderValue","_newSerializableAttri","_newSerializableAttri2","saveAttributes","useEffectSkipFirst","setColumns","orderLookup","header","next","column","aOrder","bOrder","correspondingHeader","CVGridToolbarFilterBtns","onCallFilterClicked","onResetClicked","isFilterColumnsAvailable","CVGrid","_props$tableClasses","_requestData$Paging$S3","_requestData$Paging2","startingProps","Paging","Size","pageSizes","StartIndex","initialFilters","setFilters","expandedRenderer","setExpandedRenderer","requestData","setRequestData","setData","expandedID","setExpandedID","resetKey","setResetKey","hideFilterButtons","newData","TotalPages","TotalCount","CurrentPage","CurrentCount","cols","fils","childProps","childType","__type","columnProps","onQueryChange","goToPage","toFormattedDate","dateArg","DateTime","fromJSDate","toFormat","renderCell","row","binding","fallback","_column$dateFormat","dateFormat","_column$dateFormat2","_column$dateFormat3","onFilterUpdated","update","_requestData$Paging$S2","newFilter","isDate","filterKey","filterProperty","_createElement","HeaderFilter","prevKey","sortable","noStripes","responsive","thClass","hideHeader","_row$SubscriptionID","toggleExpandedID","tdClass","extraRow","_n","SubscriptionID","hidePaging","showPagingLabel","renderPagination","_requestData$Paging$S","_requestData$Paging","_props$pageCount","pageCount","minPage","maxPage","Pagination","First","Prev","pn","active","Next","Last","setPageSize","pageSize","PagingLabel","Column","Filter","ExpandedRowRenderer","_ref4","_ref5","finalOptions","setFinalOptions","haveHandledDefault","setHaveHandledDefault","setMin","setMax","startDateInputRef","endDateInputRef","debouncedValue","useDebounce","setDebouncedValue","getDebounceDuration","handleDefault","ops","defaultOptionTitle","chosen","optionKey","promise","minKey","maxKey","getOptionKey","getOptionTitle","optionTitle","newMinDate","fromFormat","newMaxDate","ExpandedRow","CatalogTableView","_props$allAttributes$","CanBeTableColumn","CategoryLandingPageView","currentCategory","_child$DisplayName","fontWeight","CategoryLandingPageHeader","HeaderContent","CategoryLandingPageSidebar","SidebarContent","CategoryLandingPageFooter","FooterContent","showPagination","hideArrows","activeSlideIndex","setActiveSlideIndex","BootstrapCarousel","controls","wrap","prevIcon","nextIcon","SubCategoryCarousel","formatOptions","faThLarge","faTable","faThList","CatalogFormatSwitch","pageFormat","onFormatBtnClicked","sizeOptions","CatalogSizeSwitch","onPageSizeClicked","num","sortOptions","CatalogSortBySwitch","onSortByChanged","FormSelect","strNoSpaces","Breadcrumbs","currentCategorySeoUrl","currentQuery","breadcrumbsFromCatTree","setBreadcrumbsFromCatTree","showQueryOnly","breadcrumbsList","getHeritageListForKey","cleanedList","Breadcrumb","listProps","crumb","treeNode","desiredSeoUrl","SortingFactory","readSortOrder","sortOrder","RatingFactory","genBlankRatingsObj","readRatings","$_rawRatings","ratings","debugMsg","usePrevious","effectHook","dependencies","dependencyNames","previousDeps","changedDeps","accum","dependency","keyName","before","after","useEffectDebugger","CustomJsonParam","encode","any","decode","_result","jsonStr","inputI","inputToUse","_inputToUse","getEncodedValue","isDefinedWithValue","compareCustomJsonAttributes","previous","_JSON$stringify","_JSON$stringify2","compareProductCatalogSearchForm","previousForm","currentForm","_previousForm$Categor","_currentForm$Categori","_previousForm$Categor2","_currentForm$Categori2","_previousForm$StoreID","_currentForm$StoreIDs","_previousForm$StoreID2","_currentForm$StoreIDs2","_previousForm$Pricing","_currentForm$PricingR","_previousForm$RatingR","_currentForm$RatingRa","PageFormat","CategoriesAny","CategoriesAll","StoreID","StoreIDsAny","StoreIDsAll","useProductSearchViewModel","urlParams","useParams","setPathname","usePathname","initialUrlParams","createPath","_cefConfig$catalog$de4","_cefConfig$catalog","_cefConfig$catalog$de5","_cefConfig$catalog2","_cefConfig$catalog$de6","_cefConfig$catalog3","catTop","catMid","catBot","defaultFormat","setParams","useQueryParams","attributesAll","attributesAny","StringParam","categoriesAll","ArrayParam","categoriesAny","priceRanges","storeId","NumberParam","storeIdsAll","DelimitedNumericArrayParam","storeIdsAny","term","defaultViewModel","searchForm","storeIdsAn","Documents","ElapsedMilliseconds","IsValid","getDefaultProductSearchViewModel","useEffectSkipFirstDebugger","_cefConfig$catalog$de","_cefConfig$catalog$de2","_cefConfig$catalog$de3","viewModelToUrlParams","latestParams","configMap","viewModelToParams","CatalogPaginationControls","totalPages","navigateToPage","displayablePages","el","CatalogSortFactory","sortBy","hitScores","_hitScores$y$ID","_hitScores$x$ID","Popular","_y$TotalPurchasedQuan","_x$TotalPurchasedQuan","TotalPurchasedQuantity","Recent","_x$UpdatedDate$toStri","_y$UpdatedDate$toStri","xDate","UpdatedDate","yDate","NameAscending","localeCompare","NameDescending","PricingAscending","_this$getProductPrice","_this$getProductPrice2","getProductPrice","PricingDescending","_this$getProductPrice3","_this$getProductPrice4","RatingAscending","_this$getProductRatin","_this$getProductRatin2","getProductRating","RatingDescending","_this$getProductRatin3","_this$getProductRatin4","Defined","productsWithSortOrder","getProductSortOrder","productsWithoutSortOrder","_prices$sale","_prices$base","sortOrders","useCustomCompareMemo","equalFn","create","equal","CatalogBody","_currentCategory$Chil","sortingFactory","useSortingFactory","setSortingFactory","ratingFactory","useRatingFactory","setRatingFactory","catalogSortFactory","useCatalogSortFactory","setCatalogSortFactory","showCatLandingPage","categoryLandingPages","allCategories","catsBySeoUrl","setCatsBySeoUrl","catsByNamePipeKey","setCatsByNamePipeKey","setCurrentCategory","usingInfiniteScroll","showCatalog","depthOfCategory","showCategoriesForLevelsUpTo","catSeoUrl","parentSeoUrl","ParentSeoUrl","onChangeQueryParam","lookup","currentCat","ResultIDs","IDsToUse","newProducts","HitsMetaDataHitScores","getProductsByProductIDs","IncludeInMenu","IncludeChildrenInResults","kat","productSearchViewModelI","getCategories","finally","getAttributes","useCustomCompareEffect","searchDto","sortedKeys","searchPromiserKey","LogID","_message","catalogSearch","viewProps","renderProductsView","Catalog","setArr","catalogRoutePathRoot","setCatalogRoutePathRoot","tempCatalogRoutePathRoot","threeCatFragments","twoCatFragments","oneCatFragments","formatFragment","sortFragment","sizeFragment","pageFragment","Switch","Route","exact","component","NotesWidget","enteredNoteText","setEnteredNoteText","useCheckoutFactory","checkoutFactory","setCheckoutFactory","confirmAndPurchase","checkoutStepDataState","_checkoutStepDataStat","_checkoutStepDataStat2","_processResult$data$E","_processResult$data","_processResult$data2","IsPartialPayment","IsSameAsBilling","SpecialInstructions","WithCartInfo","CartSessionID","SessionID","CartTypeName","WithUserInfo","IsNewAccount","purchaseWithQuote","paymentStepData","paymentStyle","payBy","paymentData","cartBillingContact","_billingStepData$cart","_billingStepData$cart2","_checkoutStepDataStat3","billingStepData","shippingStepData","Billing","sameAsBilling","PaymentStyle","cartShippingContact","processResult","Succeeded","MasterOrderID","SlaveOrderIDs","ErrorMessage","ErrorMessages","getPurchaseSteps","purchase","purchaseStepConfig","getPurchaseB2CSteps","purchaseB2C","getSubmitQuoteSteps","_cefConfig$submitQuot","_result$data$ErrorMes","_result$data2","_result$data3","purchaseWithQuoteDto","masterQuoteID","subQuoteIDs","QuoteIDs","useCheckoutSteps","forB2C","checkoutSteps","setCheckoutSteps","ProductNothingToShip","stepsToRemove","stepI","_steps$continueTextKe","_steps","continueText","continueTextKey","checkoutReducer","methodStepData","shippingRatesStepData","splitShippingStepData","grouped","getModifiedValue","startingValue","modifier","getTotalsForAllCarts","targetedCartsI","cartItemsWithCorrectExtendedPrice","UnitSoldPriceModifier","UnitSoldPriceModifierMode","soldAt","totalQuantity","cartI","_cartI$Totals$Shippin","_cartI$Totals","_cartI$Totals$Tax","_cartI$Totals2","getTotalTaxesRaw","getTotal","SubtotalFeesModifier","SubtotalFeesModifierMode","SubtotalShippingModifier","SubtotalShippingModifierMode","SubtotalHandlingModifier","SubtotalHandlingModifierMode","SubtotalTaxesModifier","SubtotalTaxesModifierMode","SubtotalDiscountsModifier","SubtotalDiscountsModifierMode","cartTotals","itemsExist","handleRateQuotesDiscounts","rateQuotes","masterCart","curRateQuote","original","Rate","discounted","discountOne","discountTwo","DiscountPriority","getTargetedCarts","targetedCartsRes","ResetAnalysis","analyzeFn","fetchTargetedCarts","targetedCartsCopy","cartItemsForCartsRes","MasterID","getCartItemsForCarts","pagedResult","_pagedResult$data","_pagedResult$data2","resArr2","ShippingContact","ShippingContactID","resArr3","Targets","NothingToShip","Expedited","getShippingRateQuotesForCarts","shippableCarts","_response$data","_response$data2","selected","Selected","RateQuotes","cartOne","cartTwo","getCartsSortedByNothingToShip","CheckoutContext","checkoutComplete","loadTargetedCarts","setTargetedCarts","targetedCarts","gatheredTotals","proceedOrPurchase","completedIDs","useCheckoutContext","CheckoutContextProvider","_state$billingStepDat","_state$methodStepData","_state$paymentStepDat","setGatheredTotals","setCheckoutComplete","setStep","completedOrderIDs","setCompletedOrderIDs","completedQuoteIDs","setCompletedQuoteIDs","reduxDispatch","allSteps","useReducer","updateTotalsOfAllCarts","masterID","slaveIDs","prevStep","_err$message","shippingRatesStepIndex","editStep","stepToGoTo","fetchedTargetedCarts","MiniCart","_cefConfig$featureSet3","_cefConfig$featureSet4","_cefConfig$featureSet5","_cefConfig$featureSet6","quantityOfItemsToShow","setQuantityOfItemsToShow","discountCode","setDiscountCode","checkoutContext","miniCart","addCartDiscount","properMsg","cleanMsgs","m","curMsg","fromISO","getAddCartDiscountErrMessage","reload","paddingBottom","_packLevelVariantOfCu","_packLevelVariantOfCu2","_salesItem$ProductNam","_salesItem$ProductNam2","_salesItem$ProductNam3","_cefConfig$loginForPr","_cefConfig$loginForPr2","discountTotal","VariantSelectDropdownName","ProductTypeKey","checkoutNotes","makeKey","NewAddressForm","_accountContact$Slave","_accountContact$Slave2","_accountContact$Slave3","_accountContact$Slave4","_accountContact$Slave5","_accountContact$Slave6","_accountContact$Slave7","_accountContact$Slave8","_accountContact$Slave9","_accountContact$Slave10","_accountContact$Slave11","_accountContact$Slave12","_accountContact$Slave13","_accountContact$Slave14","_accountContact$Slave15","_accountContact$Slave16","_accountContact$Slave17","_accountContact$Slave18","_accountContact$Slave19","_accountContact$Slave20","_accountContact$Slave21","_accountContact$Slave22","_accountContact$Slave23","_accountContact$Slave24","_accountContact$Slave25","_accountContact$Slave26","_parentUseFormOverrid","_parentUseFormOverrid2","_parentUseFormOverrid3","_parentUseFormOverrid4","_parentUseFormOverrid5","_parentUseFormOverrid6","_parentUseFormOverrid7","accountContact","submitBtnKey","parentUseFormOverrides","hiddenFields","addressIsOptional","looseColumns","isShippingAddress","phoneFieldsAmount","setPhoneFieldsAmount","Phone3","Phone2","streetFieldsAmount","setStreetFieldsAmount","Address","Street3","typePascalCased","substr","customKeyKey","firstNameKey","lastNameKey","email1Key","companyKey","countryIdKey","phone1Key","phone2Key","phone3Key","street1Key","street2Key","street3Key","fax1Key","cityKey","regionIdKey","zipKey","defaultValues","City","Company","Country","CountryName","Fax1","Street1","Street2","PostalCode","watch","registerToUse","watchToUse","getValuesToUse","setValueToUse","formStateToUse","triggerToUse","resetToUse","countryValue","regionValue","countryValues","regionValues","entries","_ref6","poBoxRegex","_accountContact$IsBil","_accountContact$IsPri","_accountContact$Slave27","_accountContact$Slave28","_accountContact$Slave29","firstName","lastName","email1","company","countryId","phone1","phone2","phone3","street1","street2","street3","fax1","city","regionId","selectedCountry","selectedRegion","userAddressData","IsBilling","IsPrimary","CountryCode","CountryKey","Region","RegionCode","RegionID","RegionKey","RegionName","FullName","SlaveID","TransmittedToERP","phone","amt","reg","NewAddressModal","isBillingAddress","AddressBlock","_contact$LastName","address","contact","hidePostalCode","hideCountryKey","hideName","hideFirstName","hideLastName","hideStreet1","hideStreet2","hideStreet3","hideCity","hideRegionName","hidePhone1","hidePhone2","hidePhone3","hideFax1","hideEmail1","hideIcons","horizontal","ContactSwitch","_selectedContact$Slav","_accountContacts$","_accountContacts$$Sla","_accountContacts$$Sla2","_accountContacts$2","_accountContacts$2$Sl","_accountContacts$2$Sl2","_accountContacts$3","isa","iba","accountContacts","allowAdd","hideAddressBlock","initialContact","onAddressAdded","useAddButton","ddSelectAddressDataSID","btnAddAddressDataSID","handleRegionRestriction","selectedContact","setSelectedContact","showNewAddressModel","setShowNewAddressModal","restrictedRegions","globalRestrictedShippingRegions","selectedContactRegionCode","selectedContactIsRestricted","currentContactVal","_Slave$Address$Custom","newAddressData","addressBookSlice","setAddressBook","useAddressBook","addressBookFactory","useAddressBookFactory","loadAddressBook","createNewAddress","updateExistingAddress","validateAddress","deleteAddress","accountContactID","_contact$Slave","_toValidate$CountryID","_toValidate$Country","toValidate","CountryID","_r$data$IsValid","markAsDefaultBilling","markAsDefaultShipping","CheckoutBillingStep","setCartBillingContact","updateCartBillingContact","BillingContact","newContact","CheckoutConfirmationStep","onCompleteCheckoutConfirmationStep","CheckoutMethodStep","onCompleteCheckoutMethodStep","allowGuest","forceNoGuestCheckout","canAllocateQuantity","adjustment","totalItemQuantity","getAvailableAccountContactsForTarget","thisTarget","targets","selectedContactIDs","DestinationContact","ac","_thisTarget$Destinati","ac1","ac2","doCallbackIfTargetsExist","getSplitShippingGroupTitle","source","nothingToShip","storeName","vendorName","targetFactory","initialDestinationContact","_initialDestinationCo","_initialDestinationCo2","DestinationContactID","OriginProductInventoryLocationSectionID","OriginStoreProductID","OriginVendorProductID","SelectedRateQuoteID","InternalTrackingID","cleanTargets","assignDestinationContactToAllTargets","acctContact","salesItemsCopy","assign","DestinationContactKey","SplitShippingTotals","totalTargetedCartsTaxesRaw","_x$Totals$Tax","_x$Totals","curCart","_curCart$RateQuotes","selectedRateQuote","rq","totalTargetedCartsShippingRaw","tax","newTotal","grandTotal","PurchaseRateQuotesManagerWidget","quotes","onRateSelected","activeQuote","setSortBy","rateSortAsc","setRateSortAsc","selectedShippingRate","setSelectedShippingRate","handleRateHeadingClicked","returnValue","isSelectedQuote","ShipCarrierMethodName","SplitShippingTarget","onContactChanged","onQuantityChanged","removeDisabled","addDisabled","onRemoveClicked","onAddClicked","CheckoutTargets","setGrouped","parentViewState","parentSetRunning","parentFinishRunning","onTargetShippingContactUpdated","blankDestinationContactInfo","groupKey","groupedCopy","relevantGroup","g","relevantSalesItem","sItem","setDestinationContactForTarget","onlyAllowOneDestination","group","k","contactSwitchUpdateAllTargets","hasShipping","deepmerge","customMerge","targetVal","sourceVal","itemsWithAssignedContact","onNewAddressEnteredOnlyAllowOneDestination","outerIndex","_salesItem$TotalQuant","_salesItem$Targets","Sku","ProductKey","_target$Quantity","_salesItem$TotalQuant2","_salesItem$TotalQuant3","targetData","onNewAddressEntered","toTarget","fromTarget","relevantGroupIndex","tI","allocateQuantity","toAddQuantity","removeShippingTarget","_item$Targets$length","_item$Targets","gp","newTarget","addShippingTarget","CheckoutSplitShippingStep","haveInitializedSalesItems","setHaveInitializedSalesItems","selectedRegionIsRestricted","setSelectedRegionIsRestricted","defaultShippingContact","validatedSalesItems","itemCopy","generateTargets","destinationContact","setTargetDestinations","validGrouped","titlesMatchedToItems","curSalesItem","groupTitle","MasterName","getSalesItemsGroupedByTitle","initializeSalesItems","onChangeWithRatesReset","_res","rateQuotesHaveBeenSelected","_checkoutContext$targ","onGetShippingRateQuotesClicked","latestGrouped","onContinueClicked","somethingToShip","grp","shippingRatesNeeded","allTargetsHaveADestination","tgt","submitDisabled","itemOne","itemTwo","_sItem$Name","_sItem$Sku","rateQuote","selectedRateQuoteID","RateQuoteID","updatedCart","_$find","prevTargetedCarts","onRateQuoteSelected","thisYear","getFullYear","availableExpirationYears","PaymentMethodInvoiceBody","uploadedFileNames","setUploadedFileNames","txtPONumber","CustomerPurchaseOrderNumber","StoredFileSalesOrder","newFileNames","PaymentMethodQuoteBody","PaymentMethodFreeBody","PaymentMethodECheckBody","useWalletFactory","walletState","Wallet","walletFactory","addWalletEntry","entry","IsDefault","reloadWallet","deactivateWalletEntry","markEntryAsDefault","_r$data$Result","walletSlice","ACHWallet","newWallet","initial","currentItem","AccountNumber","RoutingNumber","CCWallet","useWallet","useACHWallet","NewACHWalletModal","clearErrors","ddlWalletAccountType","txtWalletFirstName","txtWalletLastName","txtWalletAccountNickname","txtWalletAccountNumber","txtWalletBankName","txtWalletRoutingNumber","keepDirty","keepErrors","keepIsSubmitted","keepIsValid","keepSubmitCount","keepTouched","formatted","BankName","CardNickName","CardType","ACHWalletEntryCard","onDeleteClicked","walletItem","CardHolderName","ACHWalletSwitch","initialWalletID","hideWalletBlock","selectedWalletItem","setSelectedWalletItem","showNewWalletModal","setShowNewWalletModal","initialDesiredWalletItem","defaultWalletItem","excludeAdd","usingGuestCheckout","walletData","User","PaymentMethodACHBody","initialACHItemID","selectedACHItem","setSelectedACHItem","initialDesiredWallet","ACHItem","onClickSubmit","WalletID","NewWalletForm","btnAlign","hideNickName","buttonsPosition","formWasSubmitted","setFormWasSubmitted","formValues","onFieldChanged","txtCVV","txtCardHolderName","txtWalletCardNumber","txtWalletCardType","txtReferenceName","ddlExpirationMonth","ddlExpirationYear","userWalletData","CreditCardCVV","CreditCardNumber","ExpirationMonth","ExpirationYear","confirmRes","cancelSubmitProps","cancelBtnText","submitBtnDisabled","submitBtnText","submitBtnVariant","submitBtnClasses","CancelSubmitButtons","year","monthsAbbreviated","NewWalletModal","parentError","ddlWalletExpirationMonth","ddlWalletExpirationYear","txtWalletCardHolderName","txtWalletCardNickname","_data$txtWalletCardNu","class","month","WalletEntryCardAlt","isDefault","getIconByCardType","padStart","setWalletCVV","walletCVV","setDeleteWalletItem","WalletSwitch","addInDropdown","CVV","onCVVChange","selectClassName","cvv","PaymentMethodCreditCardBody","onSelectedWalletChanged","btnContainerClasses","purchaseDetails","defaultWallet","CardNumber","creditCardType","niceType","onSubmitGuestCreditCard","_selectedWalletItem$C","_creditCardType$","WalletCVV","sessionStorage","CheckoutPaymentStep","_checkoutContext$gath","methodIsGuest","selectedPaymentMethod","setSelectedPaymentMethod","setMethods","onCompleteCheckoutPaymentStep","_cefConfig$purchase","builtMethods","allowedGuestMethods","creditCardData","PayByWalletEntry","invoiceFormData","PayByBillMeLater","FileNames","CheckoutCompletedStep","_checkoutContext$comp","CheckoutShippingRatesStep","_viewState$waitMessag","_checkoutContext$targ2","shippingRatesEstimatorEnabled","rates","estimator","resArr","_response$data$Messag","_cart$RateQuotes","_sItem$TotalQuantity","hideCompany","_res$data$Messages","_cart$RateQuotes2","CheckoutStepsHeader","allowEdit","isLastStep","isActiveStep","textClass","onEditClicked","CheckoutBody","stepData","isEditable","Checkout","MagicImageCarousel2","_props$magicScrollOpt","_props$magicZoomOptio","largeImageResizerParamsBody","thumbnailImageResizerParamsBody","MagicScrollOptions","magicScrollOptions","MagicScroll","stop","MagicZoom","Images","OriginalIsStoredInDB","ThumbnailIsStoredInDB","primaryImage","large","OriginalFileName","vertical","orientation","Image","aid","convertObjectToHtmlDataOptions","magicZoomOptions","onLoad","ScrollElement","_product$Images","image","largeScroll","thumbScroll","$","object","RatingSummary","hideCount","starsList","setStarsList","amount","star","starAmount","offset","stroke","strokeWidth","reviewID","stopColor","VariantSwatches","listOfVariants","selectedVariantProductId","onVariantSwatchClicked","swatchImages","setSwatchImages","accumulator","imgs","variantSwatchImg","img","variantPrimaryImg","swatchImgName","getSwatchImagesForMasterProduct","_variant$Slave$Serial","_variant$Slave","_variant$Slave$Serial2","_variant$Slave$Serial3","imgFileName","SlaveSeoUrl","VariantDropdown","selectedVariantSeoUrl","onVariantSelected","formWidth","filteredListOfVariants","_x$Slave","_x$Slave$Serializable","_x$Slave$Serializable2","HideFromVariantSelect","borderRadius","RelatedProductMobileCard","RelatedProductsList","desktopContainerClassName","productSets","setProductSets","sets","thisSet","getAndSetFullProducts","ClothingProductDetailsTemplate","_props$reviewsForAver","_props$reviewsForAver2","_props$productVariant","_props$productVariant2","_props$productVariant3","_props$listOfVariants","_props$productVariant4","_props$productVariant5","productVariant","pagination","draggable","selectorTrigger","transitionEffect","zoomWidth","reviewsForAverage","average","Stock","UnitOfMeasure","productDetails","variantSwatches","updateProductVariant","variantDropdown","quoteCartBtnSeparated","TabContent","getTabClasses","onSwitch","tabContainerClasses","tabListClasses","tabToShow","setTabToShow","filteredChildren","singleTab","bsPrefix","ProductDetailsTabAttribute","IsMarkup","allowAttributes","allowElements","ProductDetailsTabsDefaultTabContent","fullTabSet","ft","fullTab","attr1","attr2","ReviewEntry","_errors$txtProductRev","_errors$txtProductRev2","setSubmitted","ratingAmount","setRatingAmount","txtProductReviewTitle","txtProductReviewComment","Approved","Comment","SubmittedByUserID","ReviewsMain","_productReviewData$Re","productReviewData","setProductReviewData","approvedReviews","ar","review","ProductDetailsTabs","setFullTabSet","collapse","setCollapse","HideFromProductDetailView","containsNoResults","generalAttributes","keysTabbedAndGrouped","thisTabKey","IsTab","getKeysTabbedAndGrouped","fullTabSetI","keyValArr","tabIdentifier","tabAttributesList","genAttr","_generalAttributes$fi","fullTab1","fullTab2","tab","httpResponse","_httpResponse$data","_httpResponse$data$Re","_fullTab$header3","_fullTab$header","_fullTab$header2","in","DefaultProductDetailsTemplate","_props$viewState","_props$masterProduct3","_props$productVariant6","_props$productVariant7","setDisplayStyle","_props$prices","handleResize","RecentlyViewedProductsList","_props$size","MoreFromCategoryList","searchDtoTemp","categorySearchString","productPromiserKey","result2","error2","error1","RecentlyViewedProductDetailsTemplate","getPrimaryCategorySearchString","string","depth","productCategory","StaticHeadphonesProductDetailsTemplate","getElementsByTagName","staticHeadphoneWrapper","headphone","jumbotron","slider","slide","subtitle","holder","backgroundImage","text","arrow","VariantsCustomProductDetailsTemplate","open","setOpen","relatedProducts","rp","fullscreen","centered","SlavePrimaryImageFileName","PacksWithPurchaseOptionsProductDetailsTemplate","_props$subVariant","subVariant","TemplatePicker","_props$masterProduct$","_props$masterProduct$2","Template","ProductDetailsComponent","setMasterProduct","setProductVariant","setSubVariant","setListOfVariants","reviewData","setReviewData","recommended","isFunnel","pathSegments","productValue","masterProductI","variantToSet","subVariantToSet","urlProduct","getProduct","_user$SerializableAtt","_user$SerializableAtt2","_user$SerializableAtt3","_masterProductI","_masterProductI$Categ","_filter$sort$","_variantToSet$Product","hasInitial","HasInitial","hasInitialForCategory","variantSeoUrl","RequiresInitial","_a$Slave","_b$Slave","_filteredOptions$","filteredOptions","_a$Slave2","_a$Slave2$Serializabl","_b$Slave2","_b$Slave2$Serializabl","aHasPurchaseOption","bHasPurchaseOption","_x$Slave2","_x$Slave2$Serializabl","_x$Slave2$Serializabl2","_filteredOptions$2","urlProductAssociations","ProductsAssociatedWith","masterAssociation","seoUrlForPush","MasterSeoUrl","purchaseOptionAsssociation","purchaseOptionSeoUrl","newRoute","loadReviews","_err$Message","initializeProduct","newListOfVariants","childProduct","variantOne","variantTwo","updateSubVariant","subVariantSeoUrl","_p$ProductAssociation","_filteredOptions$3","_a$Slave3","_a$Slave3$Serializabl","_b$Slave3","_b$Slave3$Serializabl","seoUrlI","promiserKey1","associations","pa","_pa$SerializableAttri","_pa$SerializableAttri2","getProductView","_reviewData$Reviews","pricingEnabled","inventoryEnabled","templateProps","ProductDetails","AuthGuard","canView","setCanView","isLoading","setIsLoading","requiresRole","requiresPermission","requiresAuth","requiresNoAuth","redirectPath","_props$delay","_props$delay2","DashboardTabHeadingContent","headingClassName","iconClassName","DashboardTabHeading","AddressBookCard","_selectedAccountConta","selectedAccountContact","setSelectedAccountContact","bodyClassName","handleEditAddressClicked","handleDefaultAddressChanged","headerClassName","setShowDeleteAddressConfirmationModalID","showDeleteAddressConfirmationModalID","showDropdown","findKey","newAccountContactID","getSalesOrderByIDPromiserPrefix","useSalesOrderFactory","salesOrderFactory","claimSalesOrder","salesOrderID","_res$data2$Messages","getAvailableSalesOrders","_res$data3","getCurrentAccountSalesOrders","getSalesOrder","getSalesOrderStatuses","selectedStatuses","status","reassignProductOnOrderAsDoctor","_res$data4","SalesOrderID","_res$data5","unclaimSalesOrder","_res$data6","_res$data7","_res$data7$Messages","ClaimButton","SalesOrder","getGeneralAttributes","getAttributesAsDictionary","predefinedAttrs","IsPredefined","predefinedResArr","AttributeID","PredefinedOptions","dictionary","useLotFactory","auctionFactory","setLotFactory","attributesFactory","useAttributesFactory","applyGeneralAttributesToEntity","attributesAsDictionary","entity","applyDefaultStatusToLot","openStatus","getLotStatuses","applyDefaultTypeToLot","getLotTypes","applyLotFormDataToExistingProduct","MasterKey","txtLotFormTitle","txtLotDescription","assignProductsToLots","lots","convertLotFormDataToLotModel","_lot$ID","_lot$Status","_lot$Status2","_lot$Type","_lot$Type2","intLotFormBuyItNowPrice","Fee","Hash","intLotFormReservePrice","parseFloat","intLotFormStartingBid","convertLotFormDataToProductModel","DocumentRequiredForPurchaseOverrideFeeIsPercent","DropShipOnly","FlatShippingCharge","HeightUnitOfMeasure","InCompareCart","InFavoritesList","InNotifyMeList","InWishList","IsEligibleForReturn","IsFreeShipping","IsShippingRestricted","IsTaxable","IsVisible","KitBaseQuantityPriceMultiplier","MasterPack","IsCustom","IsDummy","MasterPackID","MustPurchaseInMultiplesOfAmountOverrideFeeIsPercent","Package","DimensionalWeight","DimensionalWeightUnitOfMeasure","Height","PackageID","Pallet","PalletID","ProductCategories","ProductDownloads","ProductNotifications","ProductRestrictions","ProductSubscriptionTypes","ProductType","ProductTypeID","PurchaseableByCurrentUser","QuantityLayersPerPallet","QuantityMasterPackLayersPerPallet","QuantityMasterPackPerLayer","QuantityMasterPackPerPallet","QuantityPerLayer","QuantityPerMasterPack","QuantityPerPallet","RequiresRolesList","RequiresRolesListAlt","RestockingFeeAmount","RestockingFeePercent","SeoDescription","SeoKeywords","SeoMetaData","SeoPageTitle","ShippingLeadTimeIsCalendarDays","StockQuantity","StockQuantityAllocated","StoredFiles","createLot","_lotRes$data","productFromForm","getProductFromLotFormData","lotFromForm","lotDefaultsResArr","lotStatuses","lotTypes","lotRes","PriceBase","getCategoriesByLotIDs","lotIDs","LotIDs","categoryMap","categoriesData","getCategoriesForLot","getEndedLots","pagingToUse","productDefaultsResArr","productStatuses","productTypes","getLostLots","getLotByID","withProduct","getSellingLotsForCurrentUser","getSoldLots","getWonLots","updateLot","updatedProduct","useCategories","loadCategories","useCategoriesViewState","isDisplayableImage","filename","lastIndexOf","AuctionFileUploadWidget","limit","hideUploadedFilesList","inputContainerClasses","imageKind","inputKey","setInputKey","willBeUploadedFiles","temp","multiple","FilePath","pad","productImagesMatch","productImageOne","productImageTwo","internalTrackingGUID","LotForm","_lot$Product","uploadedImages","setUploadedImages","lotCanBeEdited","setLotCanBeEdited","duration","onValueChanged","assignFormValuesFromLot","_SerializableAttribut","_SerializableAttribut2","productPrices","AuctionDuration","_Categories$some","onImageUploaded","onFormSubmitted","_selected","_startWithKey","IDAsString","willRemove","hidden","atLeastOneSelected","selectedCats","_c$DisplayName","onOptionToggled","ckLotFormCategoriesHidden","ImageProduct","productImage","undoImageMarkedForRemoval","markImageForRemoval","EditLot","saveSuccessful","setSaveSuccessful","lotFactory","fetchLot","willBeLot","cats","productCatsArr","catString","relevantCategory","saveLotUpdates","genderOptions","MyProfilePatient","setUserName","showSavedMessage","setShowSavedMessage","setDoNotValidate","nameSegments","onValidation","controlId","onValueChange","formattedValue","txtProfilePhone1","dirtyFields","dateDateOfBirth","txtProfileDisplayName","txtProfileEmail","txtProfileFirstName","txtProfileLastName","txtProfilePasswordCurrent","txtProfilePasswordNew","_passwordValidationRe","_state","_state2","_state3","_state4","_state5","_state6","_state7","_state8","_state9","_state10","_state11","_state12","_state13","_emailValidationResul","emailValidationResult","passwordValidationResult","NewPassword","MyProfileContent","wasSent","setWasSent","dateInputRef","handleSaveButtonClicked","_formState$errors$txt","_formState$errors$txt2","_formState$errors$dat","showPicker","_formState$errors$txt3","fontSize","_formState$errors$txt4","_ref7","_formState$errors$txt5","InvoiceModalBillingContactSection","showNewAddressForm","setShowNewAddressForm","addressFactory","addressData","InvoiceModalWalletSection","initialWalletItem","showNewWalletForm","setShowNewWalletForm","cardData","newWalletItemID","newWalletItem","PayMultipleInvoicesModal","_cefConfig$featureSet7","_cefConfig$featureSet8","_cefConfig$featureSet9","_cefConfig$featureSet10","_cefConfig$featureSet11","_cefConfig$featureSet12","_cefConfig$featureSet13","_cefConfig$featureSet14","_cefConfig$featureSet15","_cefConfig$featureSet16","_cefConfig$featureSet17","selectedWalletItemCVV","setSelectedWalletItemCVV","selectedBillingContact","setSelectedBillingContact","unpaidInvoices","setUnpaidInvoices","selectedAmounts","setSelectedAmounts","surchargeAmount","setSurchargeAmount","defaultBilling","sendData","Sorts","dir","MinBalanceDue","invoicesWithReadableDate","toDateString","toLocaleTimeString","curInvoice","BalanceDue","toFixed","getInvoices","_selectedWalletItem$S","_selectedWalletItem$S2","surcharges","BIN","BillingContactID","InvoiceIDs","TotalAmount","getTotalPaymentAmount","getTotalFees","calcSurcharge","inv","sum","totalBalanceDue","totalPaymentAmount","amountsOverZero","Amounts","Payment","Amount","Zip","_err$data$Message","_err$data","salesInvoices","hasIntegratedKeys","wordBreak","FormGroup","FormControl","canPayViaUserDashboard","partial","uplifts","percent","Invoices","isDashboardMain","pageSizeOptions","showPayMultipleInvoicesModal","setShowPayMultipleInvoicesModal","showInvoicesPaidModal","setShowInvoicesPaidModal","rowData","SalesGroupID","_opt$DisplayName","Orders","correctedTotals","setCorrectedTotals","SalesGroupAsSubID","res2","_res2$data$SalesOrder","SalesOrderMasters","NoMasterOrder","HasSalesGroupAsSub","SalesGroupAsMasterID","ShoppingListsDetail","_shoppingListCart$Sal","setShoppingList","shoppingListCart","setShoppingListCart","setShoppingListItems","shoppingListProducts","setShoppingListProducts","shoppingListFetched","setShoppingListFetched","isEditingName","setIsEditingName","editedName","setEditedName","getShoppingList","_shoppingListCartRes$","shoppingListCartResPromiserKey","shoppingListCartRes","shoppingListRes","shoppingListSalesItems","productsMap","failMsg","_err$Messages2","auto","onChangeSalesItemQuantity","removeShoppingListItem","salesItemID","NewWalletModalAlt","WalletEntryCard","_deleteWalletItem$Exp","showAddACHModal","setShowAddACHModal","showAddCardAlt","setShowAddCardAlt","deleteWalletItem","isACH","convertWalletFormDataToWalletModel","deactiveUserWalletItem","PrivacyDataActionCard","isSubmitSuccessful","request","headerKey","headerIcon","bodyKey","Quotes","SalesGroupAsRequestMasterID","SalesGroupAsRequestSubID","SalesGroupContactBlock","OrderShippingTracker","TrackingNumber","SalesGroupDetailsBlock","salesObject","StatusTranslationKey","TypeDisplayName","PayInvoiceModal","chosenAmount","setChosenAmount","totalFees","MakeAPaymentButton","balanceIsPastDue","onPaymentConfirmed","showPayInvoiceModal","setShowPayInvoiceModal","InvoicePaymentsTable","setPayments","invoiceID","payments2","createdDateComp","_payment$UpdatedDate","_payment$TransactionI","TransactionID","TransactionNumber","SalesGroupDetailsAdditionalDetails","DueDate","SalesGroupItemsTable","ERX","ColumnRenderProductName","ColumnRenderPrice","ColumnRenderQuantity","ColumnRenderSubtotal","ColumnRenderAddToCart","itemProductIDAsString","_item$ID","_item$ID2","_item$Quantity","_item$QuantityPreSold","_item$ID3","_item$ID4","_item$ID5","itemProduct","SalesGroupQuoteModals","masterQuoteId","getSalesObject","showApprovedModal","showRejectedModal","setShowRejectedModal","showCancelledModal","setShowCancelledModal","setIsQuoteApproved","salesGroupId","rejectionReason","setRejectionReason","cancellationReason","setCancellationReason","rejectQuote","QuoteID","Note","handleRejectionReasonChange","cancelQuote","_res$data$Messages2","_err$data$Message2","_err$data2","handleCancellationReasonChange","SalesGroupDetails","_salesGroup$SalesQuot","_salesGroup$SalesOrde2","_salesGroup$SalesOrde3","salesGroup","onSelectedSalesTabChange","isQuoteApproved","setInvoiceID","typeId","setProductsMap","isMasterQuote","setIsMasterQuote","setShowApprovedModal","SalesQuoteRequestMasters","getProductsForSalesItems","productIds","productsMapI","_salesGroup$SalesOrde","_salesGroup$SubSalesO","_salesObject$SalesIte","SubSalesOrders","allOrders","salesItemsOfOrders","productIdsOfOrders","orderRes","curItem","salesOrderProducts","setItemsAndProductsForInvoice","itemsWithQuantity","productsOfSalesObject","setProductsForSalesObject","marginRight","approveQuoteAndShowModal","InvoiceID","SalesGroup","setSalesGroup","salesGroupFetched","setSalesGroupFetched","salesObjectFetched","setSalesObjectFetched","salesOrder","setSalesOrder","salesInvoice","setSalesInvoice","salesQuote","setSalesQuote","billingCollapseOpen","setBillingCollapseOpen","useRouteMatch","getSalesQuote","getSalesInvoice","refreshForSalesInvoice","SalesInvoices","SalesQuoteRequestSubs","salesObjectInSalesGroup","renderTabMainContent","RemoveFromSubscriptionsModal","Subscriptions","removeFromSubscriptionsModalInfo","setRemoveFromSubscriptionsModalInfo","errorDeactivatingSubscrtiptionMessage","setErrorDeactivatingSubscriptionMessage","subscription","CancelRenewButtons","subscriptionID","handleDeactivate","EditClaimedOrderButton","afterActionTaken","showPossibleEditsModal","setShowPossibleEditsModal","EditClaimedOrderModal","onOrderChangeSucceeded","actionDidSucceed","setActionDidSucceed","unclaimOrder","useSalesOrderStatuses","salesOrderStatuses","setSalesOrderStatuses","dict","stat","loadSalesOrderStatuses","useSalesOrderStatusesViewState","ClaimedOrders","ClaimedOrdersGrid","selectedStatusName","setSelectedStatusName","selectedVisitType","setSelectedVisitType","claimedSalesOrderStatus","setDto","UserContactFirstNameOrLastName","MinUpdatedOrCreatedDate","MaxUpdatedOrCreatedDate","SelectedVisitType","models","claimedOrders","forceReload","usePagedModels","modelName","setModels","setPageCount","fetchModels","asyncOrders","UserAvailability","syncOrders","diff","_order$UserStateOfRes","UserStateOfResidence","StatusCell","afterStatusChanged","visitType","UserContactFirstName","UserContactLastName","ClaimedOrderContext","patient","reloadOrder","reloadPatient","useClaimedOrderContext","_patient$Contact$Phon","_patient$Contact","_patient$Gender","_patient$StateOfResid","SchedulingModal","appointmentID","reloadConsultations","titleText","typeText","selectedStartTime","setSelectedStartTime","showErrorMessage","setShowErrorMessage","showSuccessMessage","setShowSuccessMessage","currentTime","currentHour","getHours","currentMinute","getMinutes","nextMinute","minTimeStart","setHours","maxTimeStart","minSelectableDate","handleScheduling","selectedEndTime","plus","toJSDate","PatientAccountID","StartTime","EndTime","scheduleInitialAppointment","AppointmentID","rescheduleAppointment","DatePicker","showTimeSelect","timeFormat","timeIntervals","inline","minDate","minTime","maxTime","showSchedulingModal","setShowSchedulingModal","ClaimedOrderPatientDetails","PatientDetailsTable","ContactPreferenceTable","ScheduleAConsultation","UnableToContactButton","afterIncrement","updateSuccessful","setUpdateSuccessful","ContactAttempts","attemptContactLimit","ContactAttemptTracker","_props$order","UpdateProductButtonContext","createContext","changeChosenProductID","_productID","currentProduct","hideUpdateProductModal","possibleProducts","selectedProductID","showUpdateProductModal","updateProductModalIsShowing","swapProduct","swapSucceeded","useUpdateProductButtonContext","UpdateProductButtonContextProvider","currentProductID","onProductSwapped","setUpdateProductModalIsShowing","setCurrentProduct","setPossibleProducts","selectedNewProductID","setSelectedNewProductID","setSwapSucceeded","alterSelectedNewProduct","swapCurrentProductForSelection","possibles","load","PossibleProductsTable","SelectButton","_Images$find","UpdateProductModalContent","UpdateProductModalHeader","_currentProduct$Seria","_currentProduct$Seria2","_currentProduct$Image","_currentProduct$Image2","_currentProduct$Image3","UpdateProductModal","UpdateProductButton","ApproveOrDenySalesOrderModal","approveOrDeny","ClaimedOrderOrderDetails","additionalTableDataClasses","_salesOrder$StatusNam","print","_o","_item","_salesOrder$StatusNam2","StatusDisplayName","ApproveAndDenyButtons","approveOrDenySalesOrderModalInfo","setApproveOrDenySalesOrderModalInfo","_results$data","_results$data2","_results$data3","handleApproveSalesOrder","_results$data4","_results$data5","handleDenySalesOrder","BloodWorkListItem","downloadUrl","fetch","ok","blob","blobUrl","URL","createObjectURL","toast","revokeObjectURL","BloodWorkList","bloodWorkFiles","setBloodworkFiles","pagedFiles","fetchBloodWorkFiles","f","PatientQuestionnaire","setQuestionnaireID","categoryFactory","useCategoryFactory","getCategoryByID","ExcludeProductCategories","_salesOrder$SalesItem","QuestionnaireID","fetchQuestionnaireID","NotesTable","notes","note","Note1","FormGroupErrors","_context$formState","_context$formState2","CreatePatientNoteWidget","accountID","afterNoteCreated","formMethods","getNoteType","pagedTypes","typeNameLowered","CreatedByUser","newPatientNote","handleAfterSaveSuccessful","PatientNotes","patientNotes","setPatientNotes","doctorNotes","setDoctorNotes","fetchPatientNotes","patientNotesRes","doctorNotesRes","isActive","ClaimedOrderTabs","_patientFiles$","patientFileOptions","imageSrc","setImageSrc","fileId","setFileId","imgIsLoading","setImgIsLoading","_patientFiles$2","fetchImage","DoseSpotContext","iFrameURL","populateIFrame","_user","_callback","useDoseSpotContext","DoseSpotContextProvider","setIFrameURL","doseSpotFactory","useDoseSpotFactory","setDoseSpotFactory","createPatient","getIFrameURL","doseSpotPatientID","patientId","doseSpotPatientId","doctorId","url","generateIFrameURL","_patient$Serializable","_patient$Serializable2","_patient$Serializable3","_patient$Serializable4","DoseSpotPatientID","OrderPrescriptionButton","ClaimedOrderDoseSpotContent","SizeMe","monitorHeight","allowFullScreen","ClaimedOrderDoseSpot","setPrescriptions","prescriptionProps","setPrescriptionProps","prescription","getPrescriptions","RequestRefillButton","setProductToUse","fetchProductVariant","RefillsRemaining","ExpirationDate","Questionnaires","permissionsBase","hasAnActionPermission","setHasAnActionPermission","useRecordContext","record","deactivateRecord","reactivateRecord","saveRecord","deleteRecord","permissionPromises","includeSavePermission","isValidating","newKindKey","existingKindKey","existingKindText","DetailBase","setRecord","collections","setCollections","loadRecord","loadRecordPreAction","r1","loadRecordCall","r2","loadRecordActionBeforeAssign","r3","loadRecordActionAfterSuccess","loadCollections","doUpdate","updateRecordPreAction","updateRecordCall","newID","updateRecordActionAfterSuccess","doCreate","createRecordPreAction","createRecordCall","createRecordActionAfterSuccess","feedbackConverter","constructorPreAction","newRecord","loadNewRecord","RecordContext","deactivateRecordPreAction","deactivateRecordCall","deactivateRecordActionAfterSuccess","reactivateRecordPreAction","reactivateRecordCall","reactivateRecordActionAfterSuccess","deleteRecordPreAction","deleteRecordCall","deleteRecordActionAfterSuccess","hideHeaderWidgets","listRoute","faAngleDoubleLeft","listReturnLabelKey","hideErrorModalBtn","faTriangleExclamation","hideFooterButtons","StandardDetailFooterButtonsWidget","StandardDetailHeaderWidget","QuestionnaireDetailBasicInformationCard","_controlNames$Name$pr","_controlNames$CustomK","controlNames","hasValidation","BS5SwitchFormGroup","trueStyle","falseStyle","trueText","falseText","fullFormGroupClasses","fullInputClasses","faQuestionCircle","QuestionDetailBasicInformationCard","_record","_record2","_record3","questionTypes","followUpToQuestions","_q$Options","_x$DisplayName","BS5TextInputFormGroup","ruleToNumberValueConverter","ruleObj","noRuleObj","QuestionDetailQuestionTypeCardChoiceTable","bordered","SortableList","newOptions","movedOption","shouldDirty","useDragHandle","minId","newOption","DragHandle","SortableHandle","_option$OptionTransla","_option$MessageIfSele","_option$FollowUpQuest","optionToUpdate","_formState$errors","_question$QuestionTra","stopPropagation","QuestionDetailQuestionTypeCard","QuestionDetailQuestionOptionFollowupCard","QuestionDetailContent","previewQuestionnaire","setPreviewQuestionnaire","showPreviewModal","setShowPreviewModal","newQuestionnaire","QuestionnaireKey","QuestionnaireName","saveCallback","standardDto","NextQuestionKey","NextQuestion","questionnaireId","fetchQuestionnaire","QuestionnaireDetailMainBodyCard","activeQuestion","setActiveQuestion","RenderQuestionGroup","_questionGroup$questi","_questionGroup$questi2","_questionGroup$questi3","_questionGroup$follow","questionGroup","isFollowup","followUp","tr","deleteQuestion","questionId","newQuestions","QuestionDetail","followupQuestions","followupQuestion","findAndMoveFollowupQuestion","questionGroups","_group$question$Optio","_group$followupQuesti","followupQuestionIndex","moved","newQuestion","QuestionnairePreviewModal","QuestionnaireDetailContent","anchor","alwaysOpen","AccordionHeader","AccordionBody","QuestionnaireDetail","_collections","requiredTypes","existingTypes","qt","newType","PhysicianLicenses","_currentAccount$State","NPINumber","DEANumber","StatesOfLicensure","ScheduledAppointments","_currentAccount$Type","pagedConsultations","setPagedConsultations","setappointmentID","consultationFactory","useConsultationFactory","getConsultations","fetchConsultations","AppointmentStart","isDoctor","appt","consultation","PatientState","convertedDate","dateTime","convertTimeFromUTCToUserLocal","isToday","hasSame","local","RescheduleButton","onRescheduleClicked","JoinConsultationButton","getCurrentAccountType","isPatient","_consultation$Patient","_consultation$Patient2","_consultation$Patient3","_consultation$Patient4","_consultation$Patient5","_consultation$Patient6","patientFirstName","PatientAccount","Users","patientLastName","patientName","_consultation$DoctorA","_consultation$DoctorA2","_consultation$DoctorA3","_consultation$DoctorA4","_consultation$DoctorA5","_consultation$DoctorA6","doctorFirstName","DoctorAccount","doctorLastName","doctorName","_regionInfo$Name","regionInfo","_consultation$Patient7","patientState","fetchOrder","productNamesToDisplay","pName","GoogleMeetURL","_currentAccount$Type2","PhysicianLibrary","showDocument","setShowDocument","downloadDocument","setDownloadDocument","availableDocuments","DateLastViewed","toLocaleDateString","dashboardTabComponents","AccountProfile","TaxExemptionNo","TaxEntityUseCode","txtAccountName","taAccountDescription","txtAccountCustomKey","txtTaxExemptionNo","txtTaxEntityUseCode","AccountSettings","_accountContactToEdit","hasDefaultBilling","setHasDefaultBilling","hasDefaultShipping","setHasDefaultShipping","showAddAddressModal","setShowAddAddressModal","accountContactToEdit","setAccountContactToEdit","showCannotDeleteDefaultBillingModal","setShowCannotDeleteDefaultBillingModal","markAccountContactAsDefaultBilling","contactID","defaultShipping","isBilling","accountContactToEditCopy","accessors","deepValue","accessor","editExistingAddress","markAccountContact","AvailableOrders","onClaimButtonClicked","queryWithOnlyTruthyValues","_rowData$Patient","_rowData$Patient2","_rowData$Patient3","Patient","AuctionsEnded","filterState","useAuctionsEndedViewState","initialSize","auctionsEnded","setAuctionsEnded","totalAuctionsEndedCount","setTotalAuctionsEndedCount","setFilterState","fetchAuctionsEnded","alterFilterState","useAuctionsEnded","tableRef","_tableRef$current","AuctionsLive","useAuctionsLiveViewState","auctionsLive","setAuctionsLive","totalAuctionsLiveCount","setTotalAuctionsLiveCount","fetchAuctionsLive","useAuctionsLive","AuctionID","AuctionsLost","useAuctionsLostViewState","auctionsLost","setAuctionsLost","totalAuctionsLostCount","setTotalAuctionsLostCount","fetchAuctionsLost","useAuctionsLost","AuctionsSold","useAuctionsSoldViewState","auctionsSold","setAuctionsSold","totalAuctionsSoldCount","setTotalAuctionsSoldCount","fetchAuctionsSold","useAuctionsSold","AuctionsWon","useAuctionsWonViewState","auctionsWon","setAuctionsWon","totalAuctionsWonCount","setTotalAuctionsWonCount","fetchAuctionsWon","useAuctionsWon","CurrentBids","useCurrentBidsViewState","sortDirection","sortField","currentBids","setCurrentBids","totalCurrentBidsCount","setTotalCurrentBidsCount","fetchCurrentBids","useCurrentBids","Favorites","_removeFromFLConfirma","favoritesListSalesItems","setFavoritesListSalesItems","favoritesListCart","favoritesListProducts","setFavoritesListProducts","removeFromFLConfirmationModalInfo","setRemoveFromFLConfirmationModalInfo","getFavoritesList","_favoritesListCart$Sa","flSalesItems","deleteFavoritesListItem","InStockAlerts","inStockAlertSalesItems","setInStockAlertSalesItems","inStockAlertProducts","setInStockAlertProducts","inStockAlertCart","getInStockAlerts","_inStockAlertCart$Sal","deleteInStockAlertItem","MyDashboard","ClaimedOrderDetail","_patient$Contact2","usePatientViewState","setPatient","fetchPatient","usePatient","userId","reloadSalesOrder","useSalesOrderViewState","fetchSalesOrder","useSalesOrder","claimedOrdersHref","_cefConfig$dashboard$","_cefConfig$dashboard","_cefConfig$dashboard$2","MyProfile","Privacy","faFileDownload","faFile","faTrash","faCoffee","ShoppingLists","showCreateListModal","setShowCreateListModal","getShoppingLists","ListItemCount","setItems","_rowData$CreatedDate","WishList","_removeFromWLConfirma","wishListSalesItems","setWishListSalesItems","wishListProducts","setWishListProducts","wishListCart","removeFromWLConfirmationModalInfo","setRemoveFromWLConfirmationModalInfo","getWishList","_wishListCart$SalesIt","wlSalesItems","deleteWishListItem","_red","WatchList","watchListSalesItems","setWatchListSalesItems","watchListProducts","setWatchListProducts","watchListCart","getWatchList","_watchListCart$SalesI","deleteWatchListItem","ChatButton","showChat","setShowChat","chatInputText","setChatInputText","msgID","setMsgId","chatMessages","setChatMessages","scrollTargetRef","toggleChatWindow","scrollDown","scrollIntoView","getDate","toLocaleString","day","hour","minute","second","tempMessage","From","allChatMessages","sendMessage","handleChange","storedData","_data$SalesItems","_data$Totals","_data$SalesItems2","_data$SalesItems3","_data$Totals2","_data$SalesItems4","Dashboard","breadCrumbs","bCrumbs","renderedDashboardPaths","linkOne","linkTwo","Navbar","bg","expand","Nav","_dashboardTabComponen3","_link$icon","_dashboardTabComponen4","_child$icon","textColor","getRouterRoutes","_dashboardTabComponen","_dashboardTabComponen2","detailName","detailHref","RegistrationStepsHeader","RegistrationBasicInfoStep","onCompleteBasicInfoStep","userNameIsEmailEnabled","usernameIsEmail","boundUserName","useWatch","emEmailRegistration","RegistrationAddressBookStep","_userBillingAddress$S","_userShippingAddress$","onCompleteAddressBookStep","basicInfoStepData","showAddBillingAddressModal","setShowAddBillingAddressModal","showAddShippingAddressModal","setShowAddShippingAddressModal","userBillingAddressComplete","setUserBillingAddressComplete","userShippingAddressComplete","setUserShippingAddressComplete","getInitialAccountContact","basicInfoFirstName","basicInfoLastName","basicInfoEmail","basicInfoPhone","firstNameRegistration","lastNameRegistration","telPhoneRegistration","userBillingAddress","setUserBillingAddress","userShippingAddress","setUserShippingAddress","IsShipping","RegistrationWalletStep","onCompleteWalletStep","RegistrationCustomStep","onCompleteCustomStep","RegistrationConfirmationStep","submitRegistrationForm","_data","RegistrationCompletedStep","emailRegisteredWith","RegistrationHeader","Registration","setAllSteps","setStepBasicInfoStepData","emUsername","pwPasswordRegistration","stepAddressBookBillingData","setStepAddressBookBillingData","stepAddressBookShippingData","setStepAddressBookShippingData","setStepWalletData","setStepCustomData","mapBillingOrShippingAddress","setMapBillingOrShippingAddress","billingAddress","shippingAddress","customData","stepsToShow","registrationStepConfig","registrationStepFactory","fullSteps","_stepsToShow$continue","_stepsToShow","setEmail","isFormValid","setIsFormValid","_params$get","emForcedResetUsername","pwForcedResetNewPassword","OldPassword","pwForcedResetPassword","forceTooltipWithFocus","showValidTooltip","weekDays","StoreLocatorCard","store","onStoreClicked","useSmallText","storeHours","setStoreHours","setCurrentUserCoords","currentUserFormattedAddress","setCurrentUserFormattedAddress","openInMilitary","decimalToMilitary","closeInMilitary","buildStoreHoursArray","navigator","permissions","geolocation","getCurrentPosition","locationData","lat","coords","latitude","lng","longitude","_resolve","google","maps","apiKey","getAddressFromLatLng","formatted_address","_err","Subtitle","getCollapsedDaysWithHours","dayObj","militaryToTwelveHour","getGetDirectionsLink","hoursAsString","existingArr","prevStoreHoursItem","StoreLocatorMarkerTip","onXButtonClicked","StoreLocatorMarker","onMarkerClicked","useTooltip","TooltipComponent","clearSelectedStore","transform","StoreLocator","zipCode","setZipCode","setStores","center","setCenter","IDOfselectedStore","setIDOfselectedStore","radius","setRadius","getAllStores","storesI","storesToAssign","Latitude","Longitude","latLngResult","getLatLngFromAddress","geometry","centerQuery","TooltipBody","readOnly","GoogleMapReact","bootstrapURLKeys","defaultCenter","defaultZoom","addressQueryString","createBrowserHistory","basename","process","App","authenticatedRoutes","unauthenticatedRoutes","forgotPassword","forgotUsername","forcedPasswordReset","Redirect","isLocalhost","hostname","registerValidSW","swUrl","serviceWorker","onupdatefound","installingWorker","installing","onstatechange","controller","LanguageDetector","use","initReactI18next","resourcesToBackend","namespace","resources","fallbackLng","supportedLngs","interpolation","escapeValue","configureStore","reducer","addressBookReducer","authReducer","brandReducer","cartReducer","cefConfigReducer","geographySliceReducer","signalRReducer","walletSliceReducer","CorsLink","spaMode","textKey","innerContent","ImportMapper","setKeys","keysSorted","setKeysSorted","importMap","setImportMap","importMapState","getKeys","_keys$defaultKey","defaultToAttributes","defaultKey","handleColumnChange","_keys$value","_importMap$column","selectedProperty","_keys$_$first","option3","faMinus","addItem","faPlus","RegistrationB2C","getSubDomain","matchOfHost","rootSegmentCount","useSubDomainForCookies","usePartialSubDomainForCookiesRootSegmentCount","array","getCookiesOptions","allowExpire","domain","in120","setMinutes","expires","MiniCartDiscountListItem","onRemoveDiscountClicked","limitWithEllipses","MiniCartB2C","checkoutRunning","setDiscountToRemove","orderDiscount","shippingDiscount","useCheckoutB2CFactory","checkoutB2CFactory","setCheckoutB2CFactory","contactTypes","useContactTypes","setContactTypes","getShippingContactFromCheckoutB2CShippingForm","txtFirstNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress","txtLastNameRegistrationAddressBookShipping_CheckoutB2CShippingAddress","emEmail1RegistrationAddressBookShipping_CheckoutB2CShippingAddress","telPhone1RegistrationAddressBookShipping_CheckoutB2CShippingAddress","txtStreet1RegistrationAddressBookShipping_CheckoutB2CShippingAddress","txtStreet2RegistrationAddressBookShipping_CheckoutB2CShippingAddress","txtStreet3RegistrationAddressBookShipping_CheckoutB2CShippingAddress","txtCityRegistrationAddressBookShipping_CheckoutB2CShippingAddress","txtZipRegistrationAddressBookShipping_CheckoutB2CShippingAddress","ddlRegionIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress","ddlCountryIDRegistrationAddressBookShipping_CheckoutB2CShippingAddress","shippingRegion","shippingCountry","matchingAccountContact","shippingContactType","getBillingContactFromCheckoutB2CShippingForm","txtFirstNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress","txtLastNameRegistrationAddressBookBilling_CheckoutB2CBillingAddress","emEmail1RegistrationAddressBookBilling_CheckoutB2CBillingAddress","telPhone1RegistrationAddressBookBilling_CheckoutB2CBillingAddress","txtStreet1RegistrationAddressBookBilling_CheckoutB2CBillingAddress","txtStreet2RegistrationAddressBookBilling_CheckoutB2CBillingAddress","txtStreet3RegistrationAddressBookBilling_CheckoutB2CBillingAddress","txtCityRegistrationAddressBookBilling_CheckoutB2CBillingAddress","txtZipRegistrationAddressBookBilling_CheckoutB2CBillingAddress","ddlRegionIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress","ddlCountryIDRegistrationAddressBookBilling_CheckoutB2CBillingAddress","billingRegion","billingCountry","billingContactType","copyShippingFieldsToBillingFields","processShippingStep","_setBillingContactRes","formDataCopy","shippingContact","billingContact","shippingAcctContact","billingAcctContact","updateRes","setBillingContactRes","CheckoutB2CShippingStep","_countries$find$ID","_countries$find","onComplete","setSameAsBilling","forcedCountryID","countryCode","fax","country","IDOfForcedCountry","forceSingleStreet","CheckoutB2CPaymentStep","existingPaymentData","CheckoutB2CCompletedStep","subOrderID","checkoutB2CReducer","componentMap","AddAuctionLink","_props$classes","AffiliateSelectorButton","_selectedAffiliate$Na","selectedAffiliate","setSelectedAffiliate","useAffiliateAccounts","affiliateKey","selectAccount","accountKey","affiliate","affiliates","CategoriesMenuBar","renderOnMount","CefConfigKeyEnabled","cefConfigKey","negated","childComponent","childComponentProps","getKeyEnabled","Component","CheckoutB2C","completedOrderID","setCompletedOrderID","onCompleteCheckoutShippingStep","curStepIsActiveStep","CreateLot","creationSuccessInfo","setCreationSuccessInfo","successful","showShowcaseModal","setShowShowcaseModal","onLotFormConfirmed","lotName","ShowcaseAuction","CSREmulationBanner","isCSR","setIsCSR","selectedAccount","setSelectedAccount","selectedUser","setSelectedUser","accountOptions","setAccountOptions","userOptions","setUserOptions","checkCSRRole","userEmulation","getUsersForAccount","EmulateUserAccountID","isEmulating","CSRUserID","onAccountSelected","onUserSelected","userID","startEmulation","EmulateAccountID","EmulateUserID","stopEmulation","_urlParams$get","_urlParams$get2","txtEmail","txtToken","txtPassword","Token","faKey","HeaderMid","languagesEnabled","languages","Icon","newIcon","require","getIcon","cleanedFileName","setCleanedFileName","setSuccess","messageOpen","setMessageOpen","File","SkipReadingData","ColumnNames","fileInput","ImportExcel","importPromise","Map","_message$Messages","boxShadow","MicroCart","PopularProducts","Days","getProductsAsync","TrackingSnippet","lastEventRef","cookieData","setCookieData","createPageViewModel","URI","VisitorID","createPageViewEventModel","EventID","PageViewID","visitorKeyCookie","newGUID","visitKeyCookie","setupCookies","PageView","PageViewEvent","Visitor","VisitID","Visit","Event","visitorIDFromRes","visitIDFromRes","createEvent","getComponentById","getFallback","hideSuspenseDNNComponents","componentId","hideSuspense","suspenseMessage","baseElement","rootElement","baseUrl","getAttribute","BrowserRouter","QueryParamProvider","ReactRouterRoute","Suspense","origin","unregister","checkValidServiceWorker","registerServiceWorker","roots","querySelectorAll","reactPortalAnchor","querySelector","dataset","reactComponent","JsonProps","parseJsonProps","reactProps","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","deferred","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","ns","def","getOwnPropertyNames","definition","defineProperty","enumerable","globalThis","prop","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}