{"version":3,"file":"static/js/221.097042f8.chunk.js","mappings":"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","sources":["components/popover/Popover.tsx","features/account-settings/components/coordinator-dashboard/sectionConstants.ts","features/search/components/NotAuthenticatedFilterView.tsx","features/search/components/AllBrandsFilterSection.tsx","media/images/cart-with-cards.svg","features/search/EmptyResults.tsx","features/search/components/SuggestionsBySearchTerm.tsx","features/search/ConstructorRefinedContent.tsx","features/search/SearchResults.tsx","features/product/components/BrandLogo.tsx","features/product/components/BrandTitleSection.tsx","features/product/components/Accordion.tsx","features/product/ProductDetailTerms.tsx","features/product/components/FieldContainer.tsx","features/product/components/styles/FieldStyles.ts","features/product/components/FieldTextArea.tsx","features/product/components/FieldNumber.tsx","features/product/components/FieldCombo.tsx","features/product/components/utils/fields.tsx","features/product/components/FieldText.tsx","features/product/components/FieldCurrency.tsx","features/product/components/FieldIncrement.tsx","features/product/components/utils/index.ts","features/product/components/utils/useUnavailableProductVariants.ts","features/product/components/ProductInfoBonusExpiration.tsx","features/product/components/ProductAmountInput.tsx","../../common/utils/utils.ts","features/product/components/GiftDetails.tsx","features/product/components/GiftDetailsEditForm.tsx","features/product/components/ProductGiftDetails.tsx","features/product/components/InMyWallet.tsx","../../common/api/misc/index.ts","utils/promiseHelpers.ts","features/bulk-order/Footer.tsx","features/bulk-order/Header.tsx","features/bulk-order/BulkOrderContext.tsx","features/bulk-order/add-to-cart.ts","features/bulk-order/CustomRadioSelector.tsx","features/bulk-order/CustomTextInput.tsx","features/bulk-order/Modal.tsx","features/bulk-order/styles.ts","features/bulk-order/ReviewOrderStep.tsx","features/bulk-order/csv-file-to-recipients.ts","features/bulk-order/FileUploadSuccess.tsx","features/bulk-order/FileUpload.tsx","features/bulk-order/Step4.tsx","features/bulk-order/BulkOrderForm.tsx","features/bulk-order/BulkOrderLoading.tsx","features/bulk-order/RecipientListModal.tsx","features/bulk-order/brand-images.fixture.ts","features/bulk-order/BulkOrder.tsx","media/images/TryBuyNowImg.svg","features/product/components/TryBuyNow/TryBuyNow.tsx","media/images/warning-triangle-filled.svg","media/images/warning-triangle-filled-orange.svg","features/product/components/buynow/BuyNowDetails.tsx","../../common/features/store/duck/ui/buy-now-flow/errors.ts","features/product/components/buynow/BuyNowLoadingAnimation.tsx","features/product/components/buynow/BuyNowSucccess.tsx","features/product/components/buynow/BuyNowModal.tsx","features/product/components/buynow/index.ts","../../common/api/e-comm/orders/service.ts","features/product/components/SendAsGiftUnavailable.tsx","features/product/components/ToShopInfo.tsx","features/product/components/EGiftTabPanel.tsx","features/product/components/PhysicalTabPanel.tsx","../../common/api/models/UniversalBrand.ts","../../common/api/utils/getCardName.ts","../../common/api/utils/hasServerError.ts","features/product/components/RegisterCardDialog.tsx","../../common/hooks/useCardBalance.ts","utils/apiResponseMessages.ts","features/wallet/components/ModalTrackDialog.tsx","features/wallet/components/CardBalance.tsx","features/product/components/ReloadTabPanel.tsx","features/product/components/ProductDetailScreenTab.tsx","../../common/api/e-comm/utils/potentialCartItemMatches.ts","../../common/api/e-comm/models/CartItem.ts","../../common/utils/amountInput.ts","../../common/utils/sortCurrency.ts","hooks/useProductRebate.ts","../../common/api/e-comm/utils/getCartItemRebate.ts","../../common/api/e-comm/utils/getCartItemBonus.ts","../../common/api/crm/affiliates/service.ts","../../common/hooks/useGetAffiliateActivationUrl.ts","media/images/warning-sign.svg","features/product/components/Banners.tsx","../../common/api/crm/enums/Affiliate.ts","../../common/utils/confirmationDrawer.ts","features/product/components/AffiliateConfirmationModal.tsx","features/wallet/components/ShopOnlineBanner.tsx","features/product/components/AffiliateTabPanel.tsx","features/product/ProductDetailMainTab.tsx","features/product/views/UnAuthProductDetailsView.tsx","hooks/useAddProductToCart.ts","features/product/ProductDetailScreenStyles.ts","features/product/components/BrandFavorite.tsx","features/product/components/FirstRow.tsx","features/product/views/ProductDetailScreenContentConstructor.tsx","features/product/views/ProductDetailScreenContentCognitive.tsx","../../common/api/constructor/useConstructorBrandById.tsx","features/product/ProductDetailScreen.tsx","features/order-summary/components/Breadcrumb.tsx","hooks/useCartLineQuantityControls.ts","features/order-summary/components/summary/QuantityRenderer.tsx","features/order-summary/components/summary/OrderSummaryItems.tsx","../../common/hooks/useShippingMethods.tsx","../../common/api/crm/family/address/index.ts","../../common/hooks/useDefaultAddress.ts","../../common/api/crm/family/address/models/FamilyAddress.ts","../../common/hooks/useAddresses.ts","hooks/useEffectUntilDone.ts","features/order-summary/utils/useCartShipping.ts","features/order-summary/utils/useCartPayment.ts","../../common/hooks/useEstimatedShipDates.ts","../../common/api/fulfillment/shipping/service.ts","features/order-summary/utils/useCartDetails.tsx","hooks/useWindowSize.ts","features/order-summary/components/summary/OrderSummaryOptions.tsx","features/order-summary/components/summary/OrderSummaryGrid.tsx","features/order-summary/components/OrderSummaryDetails.tsx","hooks/useFocusMonitor.ts","features/order-summary/components/OrderSummaryDetailsMobile.tsx","features/order-summary/components/fincen/types.ts","features/order-summary/components/fincen/context.ts","features/order-summary/components/fincen/RequiresInformationSubmissionView.tsx","features/order-summary/components/fincen/RequiresInformationVerificationView.tsx","features/order-summary/components/fincen/ChangingYourOrderView.tsx","features/order-summary/components/fincen/FincenFlowView.tsx","features/wallet/components/ShopOnlineWalletCardMarker.tsx","features/wallet/components/WalletCard.tsx","features/order-summary/components/BrandCardTiles.tsx","features/order-summary/components/PaymentIframe.tsx","features/order-summary/OrderScreen.tsx","features/cart/utils/useSubmitOrder.ts","features/order-summary/utils/useCart.ts","../../common/utils/creditCardValidators.ts","features/cart/utils/cartCheck.ts","features/order-summary/utils/useCartPlaceOrder.tsx","features/order-summary/screens/OrderReviewScreen.tsx","media/images/empty-cart.svg","features/order-summary/screens/OrderSummaryScreen.tsx","features/product/components/RadioItem.tsx","features/order-summary/components/payment/OrderPaymentOptions.tsx","features/order-summary/components/payment/OrderPaymentOptionsWithDebit.tsx","features/order-summary/components/payment/CreditDebitCardForm.tsx","features/order-summary/components/payment/OrderAddresses.tsx","features/product/components/FieldPhone.tsx","features/order-summary/components/shipping/SuggestedAddress.tsx","../../common/api/fulfillment/service.ts","features/order-summary/components/shipping/OrderEditAddressForm.tsx","features/order-summary/components/payment/CreditCardForm.tsx","features/order-summary/screens/OrderPaymentScreen.tsx","features/order-summary/components/shipping/OrderShippingGrid.tsx","features/order-summary/screens/OrderShippingScreen.tsx","features/order-summary/CartInfoState.ts","features/order-summary/components/success/OrderSuccessGrid.tsx","media/images/confetti.svg","features/wallet/screens/sortAndFilter/types.ts","features/wallet/screens/sortAndFilter/util.ts","features/wallet/screens/sortAndFilter/context.tsx","features/wallet/screens/sortAndFilter/MobileFilterView.tsx","features/wallet/screens/sortAndFilter/MobileSortView.tsx","features/wallet/screens/sortAndFilter/MobileSortAndFilterView.tsx","features/wallet/screens/sortAndFilter/TabsSection.tsx","features/wallet/screens/sortAndFilter/CardTypeTab.tsx","features/wallet/screens/sortAndFilter/BrandTab.tsx","features/wallet/screens/sortAndFilter/SelectionPills.tsx","features/wallet/screens/sortAndFilter/FilterAndSortSection.tsx","features/wallet/screens/sortAndFilter/WalletSortAndFilter.tsx","features/wallet/components/UnArchiveCardModal.tsx","features/wallet/screens/ArchivedView.tsx","../../common/hooks/useArchivedCards.ts","hooks/useScrollRestorer.tsx","features/wallet/screens/CardsView.tsx","../../common/api/search/models/SupportedType.ts","features/wallet/components/AddCardModal.tsx","features/wallet/components/MainLayout.tsx","features/wallet/screens/MyCards.tsx","features/order-summary/screens/OrderSuccessScreen.tsx","third-party-integrations/rokt/getRoktAttributes.tsx","features/order-summary/components/useIframeHeight.tsx","features/order-summary/screens/CheckoutScreen.tsx","features/account-settings/screens/context.tsx","features/account-settings/components/AccountSettingsHeader.tsx","../../common/api/contentful/organization/index.ts","features/account-settings/components/Tabs.tsx","features/account-settings/utils/months.ts","features/account-settings/components/RecentPurchaseDetail.tsx","../../common/api/e-comm/products/index.ts","features/account-settings/components/RecentPurchase.tsx","features/account-settings/components/RecentPurchases.tsx","features/account-settings/components/AdSidebarComponent.tsx","../../common/api/users/dashboard/index.ts","features/account-settings/components/Dashboard.tsx","features/account-settings/components/CustomRangeDatePicker.tsx","features/account-settings/components/HorizontalPills.tsx","features/account-settings/components/OrderHistoryDateRangeSelector.tsx","features/account-settings/components/PurchaseHistory.tsx","features/account-settings/components/LocalDiningHistoryItem.tsx","../../common/api/clo-history/mock-api/__fixtures__/mockLocalDiningHistoryResponses.ts","../../common/api/clo-history/mock-api/useLocalDiningHistory.ts","features/account-settings/components/LocalDiningHistory.tsx","media/images/dollar-circle.svg","../../common/modules/online-shopping-faqs/index.ts","features/account-settings/components/OnlineHistoryFAQ.tsx","features/account-settings/components/OrderHistory.tsx","features/account-settings/components/SettingsTab/PersonalSettings/utils.tsx","features/account-settings/components/SettingsTab/PersonalSettings/NameField.tsx","features/account-settings/components/SettingsTab/PersonalSettings/EmailField.tsx","features/account-settings/components/SettingsTab/PersonalSettings/AddressField.tsx","features/account-settings/components/SettingsTab/PersonalSettings/FundRaisingField.tsx","features/account-settings/components/SuccessMessage.tsx","features/account-settings/components/JoinAnotherOrganization.tsx","features/account-settings/components/LeaveOrganization.tsx","features/account-settings/components/SettingsTab/PersonalSettings/DefaultOrgField.tsx","features/account-settings/components/SettingsTab/PersonalSettings/CreateOrganizationField.tsx","features/account-settings/components/SettingsTab/PersonalSettings/UserNameField.tsx","features/account-settings/components/SettingsTab/PersonalSettings/PersonalSettingsContent.tsx","features/account-settings/components/SettingsTab/SecuritySettingsContent.tsx","media/images/success-check-mark.svg","features/account-settings/components/SettingsTab/PaymentOptions/CreditCardField.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/context.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/AddressList.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/BaseAddBankAccountFlow.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/AddBankAccountPromptSection.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/AddBankAccountPromptText.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/AutomatedVerificationFlow.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/MicroTransactionsFlow.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/OAuthFlow.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/useAchControls.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/components/VerificationExpiredFlow.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/BankFieldDisplay.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/BankFieldEdit.tsx","features/account-settings/components/SettingsTab/PaymentOptions/ach/AddAchSection.tsx","features/account-settings/components/SettingsTab/PaymentOptions/PaymentSettingsContent.tsx","../../common/api/contentful/notifications/utils.ts","features/account-settings/components/SettingsTab/Notifications/index.tsx","features/account-settings/components/SettingsTab/context.tsx","features/account-settings/components/SettingsTab/HeaderAndMenu.tsx","../../common/hooks/useHackReRenderForFeatureFlags.ts","features/account-settings/components/SettingsTab/Settings.tsx","features/account-settings/components/coordinator-dashboard/SideMenu.tsx","features/account-settings/components/coordinator-dashboard/context.ts","features/account-settings/components/coordinator-dashboard/sections.tsx","components/alerts/notifications/BaseNotification.tsx","components/alerts/notifications/Notification.tsx","features/account-settings/components/coordinator-dashboard/DashboardNotifications.tsx","features/account-settings/components/coordinator-dashboard/DashboardContent.tsx","features/account-settings/components/coordinator-dashboard/CoordinatorDashboard.tsx","features/account-settings/components/AccountSettingsContent.tsx","features/account-settings/screens/AccountSettingsScreen.tsx","features/wallet/screens/ArchivedCards.tsx","features/wallet/components/ArchiveCardModal.tsx","features/wallet/components/EditCardModal.tsx","features/wallet/screens/BarcodeViewer.tsx","features/wallet/screens/MyCardDetails.tsx","../../common/hooks/useThirdPartyViewerUrl.ts","features/wallet/WalletRoutes.tsx","features/homepage/HomePageRenderer.tsx","features/homepage/HomepageScreen.tsx","features/landing-pages/brands-on-bonus/BrandsOnBonus.tsx","features/landing-pages/favorites/FavoritesGrid.tsx","features/landing-pages/favorites/Favorites.tsx","features/landing-pages/featured-brands/FeaturedBrands.tsx","../../common/api/e-comm/models/ECommBrand.ts","features/product/LocalProductScreen.tsx","features/shop-base/ByEarnTypePage.tsx","features/shop-base/ShopRoutes.tsx"],"sourcesContent":["import React from 'react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport classNames from 'classnames';\nimport { keyframes } from 'glamor';\n\nimport { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\nimport { ModalStyles } from 'styles/modals';\nimport { EASE_OUT_QUART } from 'styles/easing';\n\nconst slideDownOpen = keyframes({\n '0%': { opacity: 0, transform: 'translateY(-10px)' },\n '100%': { opacity: 1, transform: 'translateY(0)' },\n});\n\nconst slideUpOpen = keyframes({\n '0%': { opacity: 0, transform: 'translateY(10px)' },\n '100%': { opacity: 1, transform: 'translateY(0)' },\n});\n\nconst slideDownClosed = keyframes({\n '0%': { opacity: 1, transform: 'translateY(0)' },\n '100%': { opacity: 0, transform: 'translateY(10px)' },\n});\n\nconst slideUpClosed = keyframes({\n '0%': { opacity: 1, transform: 'translateY(0)' },\n '100%': { opacity: 0, transform: 'translateY(-10px)' },\n});\n\nconst styles = createStyles({\n close: `${ModalStyles.closeButton} text-brand float-right`,\n content: [\n 'rounded-xl bg-white p-4 max-w-xs sm:max-w-sm',\n {\n boxShadow: '0 4px 15px rgba(0, 0, 0, 0.25)',\n animationDuration: '150ms',\n animationTimingFunction: EASE_OUT_QUART,\n '&[data-side=\"top\"]': { animationName: slideUpOpen },\n '&[data-side=\"top\"][data-state=\"closed\"]': { animationName: slideDownClosed },\n '&[data-side=\"bottom\"]': { animationName: slideDownOpen },\n '&[data-side=\"bottom\"][data-state=\"closed\"]': { animationName: slideUpClosed },\n },\n ],\n arrow: { fill: colors.white, marginTop: -1 },\n});\n\nexport const Root = RadixPopover.Root;\nexport const Trigger = RadixPopover.Trigger;\nexport const Close = RadixPopover.Close;\n\nexport const Content = (props: React.ComponentProps) => {\n return (\n \n \n \n {props.children}\n \n \n );\n};\n","import { AccountRoles } from 'common/api/users/service';\nimport { Routes } from 'routes';\nexport interface ISection {\n title: string;\n id?: string;\n entries: T[];\n}\nimport { FeaturesState } from 'common/features/featuresReducer';\nimport { selectCoordinatorMetaData } from 'common/features/store/duck/coordinator/duck';\nimport { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\n\nexport interface ISectionEntries extends Pick, 'title' | 'id'> {\n description: string;\n link: string;\n forScripWare: boolean;\n hideForRoles?: AccountRoles[];\n checkNotifications?: (s: FeaturesState) => boolean;\n featureFlags?: string[];\n internalLink?: boolean;\n}\n\n// NOTE: Do not change these ids unless explicitly told so in a ticket.\n// NOTE: These ids are utilized for appcues to select specific regions to implement their tutorial\n// walkthrough of the site. This specifically targets the Coordinator-Dashboard page.\nexport const appcuesSelectors = {\n ordersSection: 'coord_dash_orders',\n reportsSection: 'coord_dash_reports',\n participantSection: 'coord_dash_participants',\n inviteFamilySubSection: 'coord_dash_invite_participants',\n organizationSection: 'coord_dash_organization',\n paymentsSection: 'coord_dash_payments',\n resourcesSection: 'coord_dash_resources',\n inventoryMngmntSection: 'coord_dash_inventory_mgt',\n sideMenu: 'coord_dash_org_info',\n};\n\nexport const commonSections: ISection[] = [\n {\n title: 'Orders',\n id: appcuesSelectors.ordersSection,\n entries: [\n {\n forScripWare: false,\n title: 'Enter Orders',\n description:\n 'Place physical gift card orders for inventory or on behalf of a family.',\n link: `/c/Org/Order/ProxyOrder`,\n },\n {\n forScripWare: false,\n title: 'Order Queue',\n description: 'See all open orders for your program.',\n link: `/c/Org/Order/OrderQueue`,\n checkNotifications: (state: FeaturesState) => {\n return selectCoordinatorMetaData(state).pendingOrders > 0;\n },\n },\n {\n forScripWare: false,\n title: 'PO Manager',\n description:\n 'Submit organization purchase orders, and access shipment tracking info.',\n link: `/c/Org/Order/POManager`,\n hideForRoles: [AccountRoles.ASSISTANT_COORDINATOR],\n checkNotifications: (state: FeaturesState) => {\n return selectCoordinatorMetaData(state).pendingPurchaseOrderCount > 0;\n },\n },\n {\n forScripWare: false,\n title: 'Family Order Form',\n description: 'Create a custom order form for families that don’t order online.',\n link: `/c/Org/Order/FamilyOrder`,\n },\n ],\n },\n {\n title: 'Reports',\n id: appcuesSelectors.reportsSection,\n entries: [\n {\n title: 'Order History',\n description: 'View your past orders based on date range, supplier, and order type.',\n link: `/c/Org/Order/POManager`,\n forScripWare: true,\n },\n {\n title: 'Packing Slips',\n description:\n 'Printable report to include in your gift card distribution to families.',\n link: `/c/Org/Manage/Report/Selection?rpt=FamilyOrderPackingSlipRebate`,\n forScripWare: false,\n },\n {\n title: 'All Reports',\n description:\n 'Run customizable reports for order history, family earnings, and more.',\n link: `/c/Org/Manage/Report`,\n forScripWare: false,\n },\n ],\n },\n {\n title: 'Families',\n id: appcuesSelectors.participantSection,\n entries: [\n {\n forScripWare: false,\n title: 'Family Accounts',\n description: 'View and manage all families in your program.',\n link: `/c/Org/Manage/FamilyAccount`,\n },\n {\n forScripWare: true,\n title: 'Invite Families',\n id: appcuesSelectors.inviteFamilySubSection,\n description: 'Use this email invitation for new families to easily sign up.',\n link: `/c/Org/Manage/FamilyInvite`,\n },\n ],\n },\n {\n title: 'Organization',\n id: appcuesSelectors.organizationSection,\n entries: [\n {\n forScripWare: true,\n title: 'Organization Profile',\n description: 'View and update your organization’s contact and payment information.',\n link: `/c/Org/Manage/OrgProfile`,\n },\n {\n forScripWare: true,\n title: 'Organization Settings',\n description:\n \"Adjust the organization's options for ordering, shipping, and inviting.\",\n link: Routes.ShopAccountSettingsCoordinatorOrganizationSettings,\n featureFlags: [\n FeatureFlagTypes.coordinator_toggles,\n FeatureFlagTypes.enable_invite_friends_family,\n ],\n internalLink: true,\n },\n {\n forScripWare: true,\n title: 'Coordinator Roles',\n description:\n 'Change your coordinator or assign assistants to help you run your program.',\n link: `/c/Org/Manage/Role`,\n hideForRoles: [AccountRoles.ASSISTANT_COORDINATOR],\n },\n {\n title: 'Organization PIN Reset',\n description: 'Update your security PIN.',\n link: `/c/Org/Manage/OrgSecurity/PinResetVerify`,\n forScripWare: true,\n },\n {\n forScripWare: false,\n title: 'Local Products',\n description: 'Add gift card product information for Local Suppliers.',\n link: `/c/Org/Manage/Product`,\n },\n {\n forScripWare: false,\n title: 'Local Suppliers',\n description: 'Set up a local retailer/brand to add to your program.',\n link: `/c/Org/Manage/Supplier`,\n },\n {\n forScripWare: false,\n title: 'Organization Email Notifications',\n description: 'Manage email alerts for organization orders.',\n link: `/c/Org/Manage/OrgNotification`,\n },\n ],\n },\n {\n title: 'Payments',\n id: appcuesSelectors.paymentsSection,\n entries: [\n {\n forScripWare: true,\n title: 'Payment Change Form',\n description: 'Update your organizations’ online banking account information.',\n link: `/c/Org/Manage/PaymentChange`,\n hideForRoles: [AccountRoles.ASSISTANT_COORDINATOR],\n },\n {\n forScripWare: true,\n title: 'Payment Types',\n description: 'View and manage how you allow families to pay.',\n link: `/c/Org/Manage/PrestoPay`,\n hideForRoles: [AccountRoles.ASSISTANT_COORDINATOR],\n },\n ],\n },\n {\n title: 'Resources',\n id: appcuesSelectors.resourcesSection,\n entries: [\n {\n forScripWare: true,\n title: 'Coordinator Resource Center',\n description:\n 'Your one-stop resource for program news, promos, and marketing materials.',\n link: `/resources/organization/`,\n },\n ],\n },\n {\n title: 'Inventory Management & Custom Rebates',\n id: appcuesSelectors.inventoryMngmntSection,\n entries: [\n {\n forScripWare: false,\n title: 'Scripware',\n description:\n 'Add this service to manage gift card inventory and customize family earnings.',\n link: Routes.Scripware,\n hideForRoles: [AccountRoles.ASSISTANT_COORDINATOR],\n },\n ],\n },\n];\n","import React, { useCallback, useState, useMemo, useEffect } from 'react';\nimport {\n SortAndFilterProps,\n BaseSortAndHeaderSection,\n DesktopSortAndHeaderSection,\n} from './SortAndHeaderSection';\n\nimport ResponsiveContainer, {\n ContainerType,\n} from 'components/responsive-containers/ResponsiveContainer';\n\nimport { useRootSelector, FeaturesState } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { UserAuthState } from 'common/features/store/duck/account/duck';\n\nimport {\n brandsSearchByPrefix,\n filterByPrefix,\n IFilterByPrefix,\n} from 'common/features/store/duck/search-generic/duck';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MobileDialog } from './MobileDialog';\nimport { createStyle } from 'utils/createStyle';\nimport { sortOptions } from './variables';\nimport { useSearchSortOptions } from './hooks';\nimport { MobileSortDialog } from './MobileSortDialog';\n\nimport {\n AlphabetFilter,\n getSearchTerm,\n AThroughZMobileFilterCategory,\n} from './AlphabetFilterUtils';\n\nexport const NotAuthenticatedFilterView = ({ visible }: { visible: boolean }) => {\n const dispatch = useDispatch();\n const authicatedState = useRootSelector(\n (state: RootState) => state.store.account.userAuthState\n );\n const [currentFilter, setCurrentFilterTo] = useState('All');\n const { sortedBy, setSortedBy, sortOptions } = useSearchSortOptions();\n const appliedTerm = useSelector((state: FeaturesState) => state.store.search.appliedTerm);\n\n useEffect(() => {\n setCurrentFilterTo(appliedTerm);\n }, [appliedTerm]);\n\n useEffect(() => {\n const getBrands = (currentFilter: string, sortBy: string) => {\n const [term, prefix_to_filter_by] = getSearchTerm(currentFilter);\n return brandsSearchByPrefix.requestData({\n prefix: prefix_to_filter_by,\n search: term,\n queryType: 'full',\n filter: '((OrganizationId eq null))',\n searchFields: 'Name',\n orderby: sortBy,\n count: true,\n })(dispatch);\n };\n\n getBrands(currentFilter, sortedBy.value);\n }, [dispatch, currentFilter, sortedBy]);\n\n // do not show the not-authenticated view if user is logged in\n if (authicatedState === UserAuthState.AUTHENTICATED || !visible) {\n return null;\n }\n\n return (\n
\n \n \n \n \n
\n );\n};\n\ninterface NotAuthedSortAndHeaderSectionProps\n extends Pick {\n currentFilter: string;\n setFilters: (_: string) => void;\n}\n\nconst NotAuthenticatedSortAndHeaderSection = ({\n // props for filter\n currentFilter,\n setFilters,\n\n // props for sort\n sortOptions,\n sortedBy,\n setSortedBy,\n}: NotAuthedSortAndHeaderSectionProps) => {\n return (\n \n \n \n \n \n \n );\n};\n\nconst footerBtnStyle = createStyle(\n 'mt-5 w-full py-1 px-10 py-3 rounded-3xl bg-brand text-white font-semibold',\n {\n maxWidth: 280,\n }\n);\n\nconst fetchBrandsCount = async (opts: IFilterByPrefix) => {\n const response = await filterByPrefix(opts);\n return response.data?.brands.length ?? 0;\n};\n\nconst NotAuthenticatedMobileFilterSection = ({\n currentFilter,\n sortedBy,\n setFilters,\n setSortedBy,\n}: NotAuthedSortAndHeaderSectionProps) => {\n const [filterData, setFilterData] = useState(currentFilter);\n const [resultsCount, setResultsCount] = useState(0);\n\n const onFilterClicked = (option: string) => {\n setFilterData(option);\n };\n\n useEffect(() => {\n (async () => {\n const [term, prefix_to_filter_by] = getSearchTerm(filterData);\n const count = await fetchBrandsCount({\n prefix: prefix_to_filter_by,\n search: term,\n queryType: 'full',\n filter: '((OrganizationId eq null))',\n searchFields: 'Name',\n orderby: sortedBy.value,\n count: true,\n });\n setResultsCount(count);\n })();\n }, [filterData, sortedBy]);\n\n const clearAll = useCallback(() => {\n setFilterData('All');\n }, []);\n\n const Header = useMemo(\n () => (\n
\n \n Clear All\n \n
\n ),\n [clearAll]\n );\n\n const onApplyClicked = () => {\n setFilters(filterData);\n };\n\n const onDialogToggle = (value: boolean) => {\n // CASE: user changed filter but didn't apply it and closed the slide out\n // We should revert to the previous applied filter\n if (value) {\n setFilterData(currentFilter);\n }\n };\n\n return (\n
\n
\n (\n \n )}\n header={Header}\n styles={{ container: 'border-1 border-l-0' }}\n onApply={onApplyClicked}\n onToggle={onDialogToggle}\n >\n \n \n \n
\n
\n );\n};\n","import React from 'react';\nimport { NotAuthenticatedFilterView } from './NotAuthenticatedFilterView';\nimport FilterSection from './FilterSection';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { UserAuthState } from 'common/features/store/duck/account/duck';\nimport { EarnTypeConstructorFilter } from 'common/api/constructor/util';\n\ninterface AllBrandsFilterSectionProps {\n visible: boolean;\n earnType?: EarnTypeConstructorFilter;\n}\n\nexport const AllBrandsFilterSection = ({ visible, earnType }: AllBrandsFilterSectionProps) => {\n const isAuthenticated = useRootSelector(\n (state: RootState) => state.store.account.userAuthState === UserAuthState.AUTHENTICATED\n );\n return (\n
\n {isAuthenticated ? (\n \n ) : (\n \n )}\n
\n );\n};\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgCartWithCards(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 136,\n height: 136,\n viewBox: \"0 0 136 136\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_18650_6669)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n opacity: 0.5,\n d: \"M135.555 67.57C135.555 49.6493 128.436 32.4626 115.764 19.7908C103.092 7.11897 85.9058 0 67.9851 0C50.0662 0.00265191 32.882 7.1228 20.2123 19.7943C7.54261 32.4659 0.425049 49.6511 0.425049 67.57C0.425049 85.488 7.54293 102.672 20.2129 115.342C32.8829 128.012 50.0671 135.13 67.9851 135.13C85.9041 135.13 103.089 128.012 115.761 115.343C128.432 102.673 135.552 85.489 135.555 67.57Z\",\n fill: \"#A5DDF3\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.265 13.0901L105.495 32.0201C106.131 32.4659 106.565 33.1451 106.701 33.9095C106.838 34.6739 106.667 35.4614 106.225 36.1L76.8051 78.3901C76.587 78.7067 76.3083 78.977 75.9851 79.1853C75.662 79.3936 75.3007 79.5358 74.9223 79.6037C74.5438 79.6716 74.1557 79.6638 73.7803 79.5808C73.4049 79.4978 73.0497 79.3412 72.7351 79.1201L45.5551 60.19C44.9199 59.7461 44.4864 59.0686 44.3496 58.3058C44.2128 57.543 44.3838 56.7571 44.8251 56.1201L74.245 13.8201C74.689 13.1849 75.3665 12.7515 76.1293 12.6146C76.8921 12.4778 77.678 12.6488 78.3151 13.0901\",\n fill: \"#40B4E2\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M85.7551 14.44L109.555 37.49C110.113 38.03 110.433 38.7693 110.447 39.5455C110.46 40.3218 110.164 41.0714 109.625 41.63L73.8151 78.63C73.5486 78.9059 73.2303 79.1265 72.8785 79.2794C72.5266 79.4322 72.1481 79.5142 71.7646 79.5207C71.381 79.5272 71.0001 79.458 70.6432 79.3172C70.2864 79.1764 69.9608 78.9667 69.6851 78.7L45.8751 55.7C45.5992 55.4335 45.3786 55.1152 45.2258 54.7634C45.0729 54.4115 44.9909 54.033 44.9844 53.6495C44.9779 53.266 45.0471 52.8849 45.1879 52.5281C45.3287 52.1713 45.5384 51.8457 45.8051 51.57L81.6152 14.52C82.1552 13.9623 82.8944 13.6416 83.6706 13.6285C84.4468 13.6153 85.1965 13.9108 85.7551 14.45\",\n fill: \"#143961\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M97.6751 19.47L117.005 46.41C117.231 46.722 117.393 47.0757 117.482 47.4506C117.57 47.8255 117.584 48.2143 117.522 48.5945C117.459 48.9746 117.322 49.3387 117.119 49.6658C116.915 49.9928 116.649 50.2763 116.335 50.5L74.4851 80.5C74.172 80.7241 73.8177 80.8843 73.4427 80.9715C73.0676 81.0586 72.679 81.0709 72.2991 81.0078C71.9193 80.9446 71.5556 80.8072 71.2289 80.6034C70.9022 80.3996 70.6188 80.1334 70.3951 79.82L51.0651 52.88C50.6146 52.2495 50.4321 51.4663 50.5577 50.7017C50.6832 49.937 51.1067 49.2533 51.7351 48.8L93.5951 18.8C94.2256 18.3495 95.0088 18.167 95.7735 18.2926C96.5381 18.4181 97.2218 18.8415 97.6751 19.47Z\",\n fill: \"#005E9E\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M97.675 19.47L117.005 46.41C117.231 46.722 117.393 47.0757 117.482 47.4506C117.57 47.8255 117.584 48.2143 117.521 48.5945C117.459 48.9746 117.322 49.3387 117.119 49.6658C116.915 49.9928 116.649 50.2763 116.335 50.5L74.4851 80.5C74.172 80.7241 73.8177 80.8843 73.4426 80.9715C73.0675 81.0586 72.6789 81.0709 72.2991 81.0078C71.9192 80.9446 71.5556 80.8072 71.2289 80.6034C70.9022 80.3996 70.6188 80.1334 70.395 79.82L93.5551 18.8C94.1855 18.3495 94.9688 18.167 95.7334 18.2926C96.498 18.4181 97.1818 18.8415 97.635 19.47\",\n fill: \"#00538C\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M106.925 48.99L107.925 50.39M100.785 40.3L101.525 41.3L100.785 40.3Z\",\n stroke: \"#40B4E2\",\n strokeWidth: 1.56,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M104.645 41.77C103.135 39.63 99.645 42.24 101.015 44.26C102.815 46.82 105.565 42.65 107.645 45.6C109.365 48.04 105.375 50.91 103.645 48.45\",\n stroke: \"#40B4E2\",\n strokeWidth: 1.56,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.9751 65.72H99.1151L94.5751 94.06L49.5651 97.78L44.9751 65.72Z\",\n fill: \"white\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25.3551 59H39.9851L48.1051 112.93H86.8351M90.645 69.42L86.1051 97.76L90.645 69.42ZM91.505 117.98C91.505 119.327 90.9699 120.619 90.0172 121.572C89.0645 122.525 87.7723 123.06 86.425 123.06C85.0777 123.06 83.7857 122.525 82.833 121.572C81.8803 120.619 81.3451 119.327 81.3451 117.98C81.3477 116.634 81.884 115.345 82.8364 114.394C83.7888 113.444 85.0795 112.91 86.425 112.91C87.0955 112.903 87.7606 113.03 88.3821 113.281C89.0035 113.533 89.5691 113.905 90.046 114.377C90.5229 114.848 90.9018 115.409 91.1608 116.027C91.4198 116.646 91.5538 117.31 91.5551 117.98H91.505ZM53.1851 117.98C53.1851 119.327 52.6498 120.619 51.6971 121.572C50.7445 122.525 49.4524 123.06 48.1051 123.06C47.4376 123.061 46.7764 122.931 46.1594 122.676C45.5425 122.421 44.982 122.047 44.51 121.575C44.038 121.103 43.6639 120.543 43.4091 119.926C43.1542 119.309 43.0237 118.647 43.025 117.98C43.025 117.313 43.1566 116.653 43.412 116.038C43.6674 115.422 44.0417 114.862 44.5135 114.391C44.9854 113.921 45.5455 113.547 46.1617 113.293C46.778 113.039 47.4385 112.909 48.1051 112.91C49.4507 112.91 50.7412 113.444 51.6936 114.394C52.646 115.345 53.1824 116.634 53.1851 117.98V117.98ZM41.795 69.42H95.9351L91.395 97.76L52.135 101L41.795 69.42Z\",\n stroke: \"#143961\",\n strokeWidth: 1.56,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M35.885 90.5H24.3451M33.775 79.92H22.2351H33.775ZM34.8251 85.21H18.005H34.8251Z\",\n stroke: \"#143961\",\n strokeWidth: 1.56,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.0551 49.73L32.6351 46.57L29.4751 45.15L32.6351 43.74L34.0551 40.58L35.4651 43.74L38.6251 45.15L35.4651 46.57L34.0551 49.73Z\",\n fill: \"#F15A29\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.175 14.7999L11.075 10.0999L6.375 7.98994L11.075 5.87994L13.175 1.18994L15.285 5.87994L19.985 7.98994L15.285 10.0999L13.175 14.7999Z\",\n fill: \"#40B4E2\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.3351 32.01L35.7351 23.97L27.6951 20.36L35.7351 16.76L39.3351 8.71997L42.9451 16.76L50.9851 20.36L42.9451 23.97L39.3351 32.01Z\",\n fill: \"#EE2A7B\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_18650_6669\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 135.13,\n height: 135.13,\n fill: \"white\",\n transform: \"translate(0.435059)\"\n })))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgCartWithCards);\nexport default __webpack_public_path__ + \"static/media/cart-with-cards.108ee9d24bad702bf1cdb2611b216daf.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState, useMemo, useEffect, useCallback } from 'react';\n\nimport { ReactComponent as CartWithCards } from '../../media/images/cart-with-cards.svg';\nimport useMediaQueries from '../../hooks/useMediaQueries';\n\nimport { createStyles } from 'utils/createStyle';\nimport { Btn } from 'components/btn/Btn';\nimport { BrandCardSlim } from 'components/brand-card/BrandCardSlim';\nimport { CardPropsEarns, convertBrandToCardProps } from 'components/bonus/CardProps';\nimport { useHistory } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { useDispatch } from 'react-redux';\nimport { applyTerm, updateSearch } from 'common/features/store/duck/search/duck';\nimport { constructorClient } from 'third-party-integrations/constructor';\nimport { constructorDataToBrandData } from 'common/utils/constructor';\nimport { useConstructorDefaultParameters } from 'common/api/constructor/useConstructorDefaultParameters';\n\ninterface Conf {\n [key: string]: { [key: string]: string };\n}\n\ninterface IConfig {\n styles: Conf;\n}\n\ndeclare global {\n interface Window {\n clearSearchBar: (() => void) | undefined;\n }\n}\n\nconst configs: IConfig = {\n styles: {\n mobile: createStyles({\n mainMessage: [\n 'text-center text-dark-blue font-light',\n { fontSize: 24, lineHeight: '36px' },\n ],\n subMessage: ['mb-6 text-center text-grey-1', { fontSize: 16, lineHeight: '24px' }],\n cardContainer: { width: 150 },\n }),\n desktop: createStyles({\n mainMessage: [\n 'text-center text-dark-blue font-light',\n { fontSize: 28, lineHeight: '42px' },\n ],\n subMessage: [\n 'mb-9 text-center text-darkest mt-1 font-light',\n { fontSize: 20, lineHeight: '30px' },\n ],\n cardContainer: { width: 180 },\n }),\n },\n};\n\nconst EmptyResults = ({\n term,\n isConstructorEnabled,\n}: {\n term: string;\n isConstructorEnabled: boolean;\n}) => {\n const [type, setType] = useState<'desktop' | 'mobile'>('desktop');\n const queries = useMemo(\n () => ({\n '(max-width: 640px)': () => {\n setType('mobile');\n },\n '(min-width: 641px)': () => {\n setType('desktop');\n },\n }),\n []\n );\n\n const [data, setData] = useState([]);\n\n useMediaQueries(queries);\n const baseFilters = useConstructorDefaultParameters({ numResults: 5, term });\n baseFilters.current.numResults = type === 'desktop' ? 5 : 4;\n\n // load suggested alternatives\n useEffect(() => {\n // NOTE: We _wait_ for initial render to happen in order for the\n // screen `type` detection to happen(defaults to desktop).\n // Otherwise, API call happens with `numResults = 5` instead of `numResults = 4`\n // when we're in mobile view\n if (isConstructorEnabled) {\n window.requestAnimationFrame(() => {\n constructorClient.recommendations\n .getRecommendations('zero-results', baseFilters.current)\n .then((results) => {\n if (\n results.response &&\n results.response.results &&\n results.response.total_num_results\n ) {\n const constructorBrands = results.response.results;\n for (let i = 0; i < constructorBrands.length; i++) {\n constructorBrands[i] = convertBrandToCardProps(\n constructorDataToBrandData(constructorBrands[i])\n );\n }\n setData(constructorBrands as CardPropsEarns[]);\n }\n })\n .catch((e) => {\n console.error('Unable to fetch recommendations.');\n });\n });\n }\n }, [term, isConstructorEnabled]);\n\n const styles = configs.styles[type];\n const history = useHistory();\n const dispatch = useDispatch();\n\n const backToShopAllBrands = useCallback(() => {\n // NOTE: utilize the `clear` functionality that react-select provides\n // Exposed in `ConstructorSearchBar.tsx`\n if (window.clearSearchBar) {\n window.clearSearchBar();\n }\n dispatch(updateSearch({ term: '' }));\n dispatch(applyTerm(''));\n // Just navigate to /brands to make sure the user will see the brands page.\n history.push(Routes.Brands);\n }, [history, dispatch]);\n\n return (\n
\n
\n
\n
\n
\n \n
\n
\n

\n Sorry, we couldn’t find a match for{' '}\n \"{term}\"\n

\n

\n Try searching for another brand, or shop all brands.\n

\n
\n Shop All Brands\n
\n
\n {data.length ? (\n
\n

\n Recommended for You\n

\n\n
\n {data.map((brand) => (\n \n ))}\n
\n
\n ) : null}\n
\n
\n );\n};\n\nexport default EmptyResults;\n","import { APIResponse } from 'common/api/models';\nimport { SUGGEST_API_URL } from 'common/api/search/config';\nimport { apiFetch } from 'common/api/utils';\nimport { Brand } from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\nimport { SearchGrid } from 'components/search-grid/SearchGrid';\nimport React, { useState, useEffect, useMemo } from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport EmptyResults from '../EmptyResults';\nimport { CardContext } from './contexts';\nimport { useSearchGridStyles } from './hooks';\nimport { TopPicksCard } from './TopPicksCard';\n\ninterface Suggestion {\n '@search.text': string;\n OrganizationId: string;\n Name: string;\n NormalizedName: string;\n Categories: string[];\n Price: number[];\n Rebate: number[];\n MaxRebate: number;\n IsOnBonus: boolean;\n SupportedTypes: string[];\n IsFeatured: boolean;\n Lists: string[];\n KeyWords: string[];\n PopularityRank: number;\n ProductIds: number[];\n ImageUrl: string;\n BlacklistedStates: string[];\n IsLocalProduct: boolean;\n Suggestions: string[];\n IsShipToHomeEligible: boolean;\n UrlSlug: string;\n NewBannerExpiration: Date | null;\n Id: string;\n}\n\nexport const suggestionsToBrands = (suggestions: Suggestion[]): Brand[] => {\n return suggestions.map((suggestion) => {\n return {\n id: suggestion.Id,\n name: suggestion.Name,\n rebate: suggestion.MaxRebate,\n isOnBonus: suggestion.IsOnBonus,\n isFeatured: suggestion.IsFeatured,\n imageUrl: suggestion.ImageUrl,\n keyWords: suggestion.KeyWords,\n categories: suggestion.Categories,\n productIds: suggestion.ProductIds,\n supportedTypes: suggestion.SupportedTypes,\n suggestions: suggestion.Suggestions,\n urlSlug: suggestion.UrlSlug,\n newBannerExpiration: suggestion.NewBannerExpiration\n ? new Date(suggestion.NewBannerExpiration)\n : null,\n isLocalProduct: false,\n isNew: suggestion.NewBannerExpiration\n ? new Date() < suggestion.NewBannerExpiration\n : false,\n } as Brand;\n });\n};\n\ninterface Props {\n searchTerm: string;\n}\n\nconst cache: { [key: string]: Suggestion[] } = {};\nconst cacheSize = 10;\n\nconst SuggestionsBySearchTerm = ({ searchTerm }: Props) => {\n const [suggestions, setSuggestions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [, width] = useSearchGridStyles<'150', '180'>('150', '180');\n\n const memoizedSuggestions = useMemo(() => suggestionsToBrands(suggestions), [suggestions]);\n\n useEffect(() => {\n if (searchTerm in cache) {\n setSuggestions(cache[searchTerm]);\n } else {\n const getSuggestions = async () => {\n setLoading(true);\n const url = SUGGEST_API_URL;\n const payload = {\n fuzzy: true,\n suggesterName: 'BrandSuggester',\n select: '*',\n search: searchTerm,\n top: 10,\n searchFields: 'Name,KeyWords,Suggestions',\n filter: '(OrganizationId eq null)',\n };\n\n try {\n const { data } = await apiFetch>(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n\n setSuggestions(data?.data || []);\n cache[searchTerm] = data?.data || [];\n if (Object.keys(cache).length > cacheSize) {\n delete cache[Object.keys(cache)[0]];\n }\n } finally {\n setLoading(false);\n }\n };\n\n if (searchTerm) {\n getSuggestions();\n }\n }\n }, [searchTerm]);\n\n if (loading) {\n ;\n }\n\n if (!suggestions.length) {\n return ;\n }\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport default SuggestionsBySearchTerm;\n","import { Refined_Content, tempStorage } from 'common/api/constructor';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport React, { useEffect, useState, memo } from 'react';\nimport { NavLink } from 'react-router-dom';\nimport { getPath, Routes } from 'routes';\n\nexport const ConstructorRefinedContent = memo(() => {\n const [banner, setBanner] = useState();\n const [imgWidth, setImgWidth] = useState();\n useEffect(() => {\n tempStorage.listen((value) => {\n setBanner(value);\n });\n }, []);\n\n useMediaQueries({\n '(max-width: 648px)': () => {\n setImgWidth(undefined);\n },\n '(min-width: 647px)': () => {\n setImgWidth(560);\n },\n });\n\n const url = getUrl(banner?.ctaLink);\n\n return (\n
\n {url ? (\n \n \n \n ) : (\n \n )}\n
\n );\n});\n\nconst getUrl = (url?: string): string | undefined => {\n if (url) {\n const match = url.match(/\\d+-\\w+/g);\n\n if (match?.length) {\n return getPath(Routes.BrandsDetails, { id: match[0] });\n }\n }\n return undefined;\n};\n","import React from 'react';\nimport { faArrowCircleUp } from '@fortawesome/pro-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { AllBrandsFilterSection } from './components/AllBrandsFilterSection';\nimport TopPicksSection from './components/TopPicksSection';\nimport { ContentfulView } from './components/ContentfulView';\n\nimport { FeaturesState } from 'common/features/featuresReducer';\nimport { useRootSelector } from 'rootStore';\nimport { createStyles } from 'utils/createStyle';\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { HomepageContext, HomepageViewProps } from 'features/homepage/contexts/contentful';\nimport { HeroSection } from 'features/homepage/sections';\nimport Skeleton from 'react-loading-skeleton';\nimport { useRemoteContent } from 'hooks/useRemoteContent';\nimport { selectLoginState } from 'common/features/store/duck/account/duck';\nimport { SearchBar } from 'components/search/SearchBar';\nimport { updateSearch, applyTerm } from 'common/features/store/duck/search/duck';\nimport { Routes, getPath } from 'routes';\nimport { matchPath, useHistory, useLocation } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { Brand } from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\nimport SuggestionsBySearchTerm from './components/SuggestionsBySearchTerm';\nimport EmptyResults from './EmptyResults';\nimport { ConstructorRefinedContent } from './ConstructorRefinedContent';\nimport { EarnTypeConstructorFilter } from 'common/api/constructor/util';\nimport { firebaseValueAsString, useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport { selectIsConstructorBrowseEnabledWeb } from 'common/features/store/duck/ffs';\nimport { defaultConfigKeys } from 'common/modules/remote-config/defaultConfigKeys';\n\nconst styles = createStyles({\n main: [\n '',\n {\n gridTemplateColumns: '18rem auto',\n },\n ],\n sectionStyles: ['mx-4 lg:mx-16 2xl:mx-28'],\n filterSection: ['', { margin: '0 !important' }],\n gridCommandsContainer: [\n 'grid w-full mb-4',\n {\n gridTemplateColumns: 'auto max-content',\n },\n ],\n bonusSection: [\n 'grid',\n {\n gridTemplateColumns: 'auto max-content',\n marginBottom: '50px',\n },\n ],\n featuredSection: [\n 'bg-pale-blue',\n {\n height: '437px',\n marginBottom: '50px',\n },\n ],\n topPicksSection: [\n 'mb-12',\n {\n marginBottom: '50px',\n },\n ],\n scrollToTop: [\n 'cursor-pointer flex flex-col items-center justify-evenly bg-grey-accent text-brand font-semibold text-center',\n {\n width: '42px',\n height: '60px',\n borderRadius: '5px 0px 0px 5px',\n boxShadow: '0px 2px 4px -1px rgb(0 0 0 / 6%), 0px 4px 6px -1px rgb(0 0 0 / 10%)',\n position: 'fixed',\n bottom: '10%',\n fontSize: 12,\n right: 0,\n },\n ],\n searchBackgroundStyle: [\n 'w-full bg-white mb-6 shadow-inner',\n {\n minHeight: 150,\n },\n ],\n});\n\nconst HeroId: { [key: string]: string } = {\n [Routes.ShopGiftCards]: 'auth_giftcards_page_hero_id',\n [Routes.ShopOnline]: 'auth_shoponline_page_hero_id',\n [Routes.Brands]: 'auth_brands_page_hero_id',\n};\n\nexport interface SearchResultsScreenProps {\n earnType?: EarnTypeConstructorFilter;\n singleTypeView?: boolean;\n}\n\nexport const SearchResultsScreen = ({ earnType, singleTypeView }: SearchResultsScreenProps) => {\n const isConstructorEnabled = useRootSelector(selectIsConstructorBrowseEnabledWeb);\n const total = useRootSelector((s: FeaturesState) => s.store.searchGrid.total);\n const isUserLoggedIn = useRootSelector(selectLoginState);\n const history = useHistory();\n const dispatch = useDispatch();\n const { pathname } = useLocation();\n const matchedPath = matchPath(pathname, Object.keys(HeroId));\n const headerId = (\n !isUserLoggedIn ? 'unauth_brands_page_hero_id' : matchedPath ? HeroId[matchedPath.path] : ''\n ) as keyof typeof defaultConfigKeys;\n const { heroes, loading: isRemoteContentLoading, heroId } = useRemoteContent(headerId);\n\n const affiliateErrorMessage = useFirebaseConfigValues(\n 'affiliate_error_message_web',\n null,\n firebaseValueAsString\n );\n const hideFilter = earnType === 'Online' && singleTypeView && affiliateErrorMessage;\n\n const searchTerm = useRootSelector((s: FeaturesState) => s.store.search.appliedTerm);\n\n const headerContext: HomepageViewProps = {\n isAuthenticated: false,\n layout: [],\n heroes: heroes,\n componentMap: {},\n isLoading: isRemoteContentLoading,\n };\n\n /**\n * prerender override documented here\n * https://docs.prerender.io/docs/25-empty-or-partially-rendered-pages\n *\n * We're setting prerenderReady as false at the document level\n * And in order for prerender to capture the /brands page\n * we need to manually set it to true here (along with the unauthed PDP)\n */\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).prerenderReady = true;\n }, 5000);\n\n const scrollToTop = () =>\n window.scrollTo({\n top: 0,\n left: 0,\n behavior: 'smooth',\n });\n\n const showResultsPage = Boolean(\n total === null || (total as number) > 0 || (!searchTerm && !total)\n );\n\n const showFilters: boolean = showResultsPage || Boolean(total);\n\n const applySearchTerm = (term: string) => {\n dispatch(applyTerm(term));\n };\n\n const navigateToProductDetailPage = (item: Brand) => {\n if (item.id) {\n dispatch(updateSearch({ term: item.name }));\n if (item.isLocalProduct) {\n const [, , id] = item.id.split('-');\n history.push(getPath(Routes.ShopLocalProductDetails, { productId: id }));\n } else {\n const idWithSlug = item.urlSlug\n ? `${item.id}-${item.urlSlug.replace(/\\//g, '')}`\n : item.id;\n history.push(getPath(Routes.BrandsDetails, { id: idWithSlug }));\n }\n }\n };\n\n const SearchBarBrands = () => (\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n );\n\n return (\n \n \n \n {isRemoteContentLoading || !heroes[heroId] ? (\n \n ) : (\n showResultsPage && \n )}\n \n\n {!isUserLoggedIn ? : null}\n\n {isUserLoggedIn && showResultsPage ? : null}\n
\n <>\n \n \n \n \n\n {showResultsPage ? (\n <>\n \n\n
\n \n Top\n
\n \n ) : (\n
\n {isConstructorEnabled ? (\n \n ) : (\n \n )}\n
\n )}\n
\n
\n
\n );\n};\n","import React, { useMemo, useState } from 'react';\nimport { createStyles } from 'utils/createStyle';\nimport { ECommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { useSpring, animated, SpringValue } from 'react-spring';\nimport useMediaQueries from 'hooks/useMediaQueries';\n\ninterface BrandLogoProps {\n brand?: ECommBrand;\n renderers?: {\n logo: React.ElementType;\n };\n}\n\nconst DefaultLogoRenderer = ({ brand }: Pick) => {\n return brand ? : null;\n};\n\nexport const BrandLogo = ({ brand, renderers = { logo: DefaultLogoRenderer } }: BrandLogoProps) => {\n const [logoLoadAnimation, styles] = useStyles({ brand: brand });\n return (\n
\n
\n \n \n \n
\n
\n );\n};\n\nconst useStyles = ({\n brand,\n}: {\n brand?: ECommBrand;\n}): [{ opacity: SpringValue }, { logoContainer: string; logoImage: string }] => {\n const logoStyles = useSpring({\n opacity: brand?.imageUrl ? 1 : 0,\n delay: 500,\n });\n const [dimension, setDimensionTo] = useState('140px');\n const query = useMemo(\n () => ({\n '(max-width: 648px)': () => {\n setDimensionTo('80px');\n },\n '(min-width: 649px)': () => {\n setDimensionTo('140px');\n },\n }),\n []\n );\n\n useMediaQueries(query);\n\n const styles = useMemo(() => {\n return createStyles({\n logoContainer: [\n 'inline-block',\n {\n width: dimension,\n height: dimension,\n },\n ],\n logoImage: [\n 'relative border w-full rounded border-grey-3',\n {\n paddingTop: '100%',\n },\n ],\n });\n }, [dimension]);\n\n return [logoStyles, styles];\n};\n","import React, { useMemo, useState } from 'react';\nimport { ECommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { createStyles } from 'utils/createStyle';\nimport useMediaQueries from 'hooks/useMediaQueries';\n\ninterface BrandTitleSectionProps {\n brand?: ECommBrand;\n rebate: number;\n bonusRebate?: number;\n children?: React.ReactNode;\n}\n\ninterface IFontSizes {\n activeRebate: number;\n oldRebate: number;\n header: number;\n}\n\nconst useFontSizes = () => {\n const [font, setStyles] = useState({\n activeRebate: 29,\n oldRebate: 22,\n header: 42,\n });\n\n const queries = useMemo(\n () => ({\n '(min-width: 648px)': () => {\n // desktop view\n setStyles({\n activeRebate: 29,\n oldRebate: 22,\n header: 42,\n });\n },\n '(max-width: 647px)': () => {\n // mobile view\n setStyles({\n activeRebate: 20,\n oldRebate: 16,\n header: 28,\n });\n },\n }),\n []\n );\n useMediaQueries(queries);\n return font;\n};\n\ninterface IStyles {\n header: string;\n bonusRebate: string;\n oldRebate: string;\n normalRebate: string;\n}\n\nconst useStyles = (): IStyles => {\n const fonts = useFontSizes();\n return createStyles({\n header: ['font-semibold text-brand-dark text-3xl lg:text-5xl', { fontSize: fonts.header }],\n bonusRebate: [\n 'font-semibold text-bonus-pink mr-1 sm:mr-2',\n { fontSize: fonts.activeRebate },\n ],\n oldRebate: ['line-through text-grey-2', { fontSize: fonts.oldRebate }],\n normalRebate: ['text-grey-2', { fontSize: fonts.activeRebate }],\n });\n};\n\nconst formatBrandName = (brandName: string) => {\n return brandName\n .split('/')\n .map((word) => (word.charAt(0) === ' ' ? `${word}/` : ` ${word}/`))\n .join('')\n .slice(0, -1);\n};\n\nexport const BrandTitleSection = ({\n brand,\n rebate,\n bonusRebate,\n children,\n}: BrandTitleSectionProps) => {\n const classes = useStyles();\n\n const brandName = formatBrandName(brand?.name || '');\n return (\n
\n {brand &&

{brandName}

}\n {bonusRebate ? (\n \n ) : (\n \n )}\n {children}\n
\n );\n};\n\nconst RenderBonusRebate = ({\n oldRebate,\n newRebate,\n classes,\n}: {\n oldRebate: number;\n newRebate: number;\n classes: IStyles;\n}) => {\n return isFinite(oldRebate) ? (\n

\n Earn up to {newRebate.toPrecision()}%\n was {oldRebate.toPrecision()}%\n

\n ) : null;\n};\n\nconst Rebate = ({ rebate, classes }: { rebate: number; classes: IStyles }) => {\n return isFinite(rebate) ? (\n

\n Earn up to {rebate.toPrecision()}%\n

\n ) : null;\n};\n","import React, { ReactNode, useEffect, useState } from 'react';\nimport * as RuiAccordion from '@radix-ui/react-accordion';\nimport { ChevronDown, ChevronUp } from 'react-feather';\nimport classNames from 'classnames';\n\nimport { createStyles } from '../../../utils/createStyle';\n\nconst styles = createStyles({\n accordionGroupHeader: 'text-grey-1',\n accordionGroupButton: [\n 'p-3 block w-full text-left hover:text-brand flex justify-between items-center',\n ],\n root: 'max-w-full',\n title: 'inline-block align-top mr-2',\n content: ['border-b border-solid border-grey-light', { paddingBottom: '20px' }],\n});\n\nexport interface AccordionItem {\n value: string;\n title: ReactNode;\n content: ReactNode;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n defaultExpandedItemValue?: string;\n multipleEntriesOpen?: boolean;\n}\n\nexport const Accordion = ({\n items,\n defaultExpandedItemValue,\n multipleEntriesOpen = false,\n}: AccordionProps) => {\n const [expandedItem, setExpandedItem] = useState(defaultExpandedItemValue);\n const [multiSelectExpandedItems, setMultiSelectExpandedItems] = useState([]);\n\n // effect for keeping expandedItem up\n // to date as the user change tabs\n useEffect(() => {\n setExpandedItem(defaultExpandedItemValue);\n }, [defaultExpandedItemValue]);\n\n return (\n {\n if (Array.isArray(value)) {\n setMultiSelectExpandedItems(value);\n } else {\n setExpandedItem(value);\n }\n }}\n className={styles.root}\n >\n {items.map(({ title, value, content }) => (\n \n \n \n {title}\n \n {(\n multipleEntriesOpen\n ? multiSelectExpandedItems.includes(value)\n : expandedItem === value\n ) ? (\n \n ) : (\n \n )}\n \n \n\n \n {content}\n \n \n \n ))}\n \n );\n};\n","import React, { useEffect, useMemo } from 'react';\nimport { EntryFields } from 'contentful';\nimport TextareaAutosize from 'react-textarea-autosize';\n\nimport { Accordion, AccordionItem } from './components/Accordion';\n\nimport { ContentfulBrand } from 'common/api/contentful/models/ContentfulBrand';\nimport { createStyles } from 'utils/createStyle';\nimport { getContentfulBrandApi } from 'common/api/contentful/brands';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport Skeleton from 'react-loading-skeleton';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport classNames from 'classnames';\n\nexport interface ProductDetailTermsProps {\n brandId: number;\n productType: ProductType;\n defaultExpandedFilter?: Function;\n showAffiliateTerms?: boolean;\n}\n\nconst styles = createStyles({\n termsContent: [\n 'w-full text-sm mt-1 text-grey-1 font-normal resize-none',\n { lineHeight: '22px' },\n ],\n});\n\nconst getContent = (entry: EntryFields.RichText) => {\n return (\n entry &&\n entry.content &&\n entry.content.length > 0 &&\n entry.content[0] &&\n entry.content[0].content &&\n entry.content[0].content.length > 0 &&\n entry.content[0].content[0].value\n );\n};\n\nconst termsAndInfoTitles: { [key: string]: string } = {\n generalInformation: 'General Information',\n giftCardRedemptionInstructions: 'Gift Card Redemption Instructions',\n eGiftCardRedemptionInstructions: 'eGift Card Redemption Instructions',\n giftCardTermsAndConditions: 'Gift Card Terms and Conditions',\n eGiftCardTermsAndConditions: 'eGift Card Terms And Conditions',\n};\n\nconst sortedItemValue: { [key: string]: number } = {\n generalInformation: 0,\n eGiftCardRedemptionInstructions: 1,\n giftCardRedemptionInstructions: 2,\n eGiftCardTermsAndConditions: 3,\n giftCardTermsAndConditions: 4,\n};\n\nconst convertToAccordionItems = (entry: ContentfulBrand): AccordionItem[] => {\n return Object.entries(entry)\n .map((item) => ({ key: item[0], value: getContent(item[1]) }))\n .map((item) => ({\n value: item.key,\n title: (\n \n {termsAndInfoTitles[item.key]}\n \n ),\n content: item.value ? (\n
\n \n
\n ) : (\n ''\n ),\n }))\n .filter((item) => item.content);\n};\n\nconst filterTermsForCurrentTab = (\n items: AccordionItem[],\n currentTabName: ProductType\n): AccordionItem[] => {\n if (currentTabName === ProductType.EGiftCard) {\n return items.filter(\n (item) =>\n item.value.toLowerCase().startsWith('egiftcard') ||\n item.value === 'generalInformation'\n );\n }\n\n return items.filter(\n (item) =>\n item.value.toLowerCase().startsWith('giftcard') || item.value === 'generalInformation'\n );\n};\n\n/**\n * The following *Filter functions are exported and should be\n * passed in to the ProductDetailTerms component to select which\n * accordion section should be expanded by default.\n */\nexport const getTermsAndConditionsFilter = (productType: ProductType) => {\n if (productType === ProductType.EGiftCard) {\n return 'eGiftCardTermsAndConditions';\n }\n\n return 'giftCardTermsAndConditions';\n};\n\nexport const getDetailsAndExclusionsFilter = () => 'details-and-exclusions';\n\n//disabling linting so that this function will match the function signature of other filters\n//even though this filter doesn't depend on the productType\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getGeneralInformationFilter = (_: ProductType) => {\n return 'generalInformation';\n};\n\nexport const ProductDetailTerms = ({\n brandId,\n productType,\n defaultExpandedFilter,\n showAffiliateTerms = false,\n}: ProductDetailTermsProps) => {\n const [loadContentfulBrand, loadContentfulBrandAsyncState, loadContentfulBrandResponse] =\n useApi(getContentfulBrandApi);\n\n useEffect(() => {\n if (brandId > 0) {\n loadContentfulBrand(brandId);\n }\n }, [brandId, loadContentfulBrand]);\n\n const terms = useMemo(\n () => loadContentfulBrandResponse?.data || undefined,\n [loadContentfulBrandResponse]\n );\n\n const brandTerms = useMemo(\n () => (terms?.items?.length && terms.items[0].fields) || undefined,\n [terms]\n );\n\n const productTypeTermsAndInfos = useMemo(() => {\n if (!brandTerms) {\n return [];\n }\n return [\n ...filterTermsForCurrentTab(convertToAccordionItems(brandTerms), productType)\n .map((item) => ({ ...item, position: sortedItemValue[item.value] }))\n .sort((a, b) => a.position - b.position),\n showAffiliateTerms\n ? {\n title: (\n \n Details & Exclusions\n \n ),\n value: 'details-and-exclusions',\n content: (\n When you buy through the link on RaiseRight, we may earn a commission.

`,\n }}\n >\n ),\n }\n : null,\n ].filter(Boolean) as AccordionItem[];\n }, [brandTerms, productType, showAffiliateTerms]);\n\n const defaultItemValue = useMemo(() => {\n if (defaultExpandedFilter) {\n return defaultExpandedFilter(productType);\n }\n return null;\n }, [productType, defaultExpandedFilter]);\n\n // if it is loading show the animation to the user\n if (loadContentfulBrandAsyncState.loading) {\n return ;\n }\n\n // if the brandId is invalid just don't render anything\n if (!productTypeTermsAndInfos) {\n return null;\n }\n\n // render the brand terms/infos for the product type\n return (\n \n );\n};\n","import classNames from 'classnames';\nimport React, { ReactNode } from 'react';\n\nimport { createStyles } from '../../../utils/createStyle';\n\nexport interface FieldContainerProps {\n label: ReactNode;\n footer?: ReactNode;\n error?: string;\n id?: string;\n className?: string;\n controlClassName?: string;\n required?: boolean;\n}\n\nconst styles = createStyles({\n container: [\n 'w-full rounded-t',\n {\n backgroundColor: '#F7F7F7',\n },\n ],\n title: ['text-xs px-2 font-bold'],\n control: ['border-b border-grey-2'],\n footer: [\n 'grid text-center text-xs gap-2',\n {\n gridTemplateColumns: 'max-content max-content max-content',\n },\n ],\n});\n\nexport const FieldContainer = ({\n label,\n footer,\n error,\n children,\n className,\n controlClassName,\n required,\n}: React.PropsWithChildren) => {\n return (\n
\n
\n
\n {required && * }\n {label}\n
\n
{children}
\n
\n {footer &&
{footer}
}\n {error &&
{error}
}\n
\n );\n};\n","import { colors } from '../../../../styles/settings';\nimport { createStyle, createStyles } from '../../../../utils/createStyle';\n\nexport const FieldStyles = createStyles({\n inputWrapper: 'relative',\n showHide: 'text-brand-dark absolute right-2 top-1/2 cursor-pointer transform -translate-y-1/2',\n label: 'text-brand-dark mb-1 block',\n field: [\n 'rounded-sm w-full text-brand-dark p-1 px-2',\n {\n background: 'transparent',\n outline: 'none',\n appearance: 'none',\n // boxShadow: `inset 0 0 0 transparent, 0 0 0 0 ${colors.brandDark}`,\n // transition: '100ms box-shadow ease-out, 100ms border-color ease-out',\n ':focus': {\n borderColor: colors.brandHighlight,\n // boxShadow: `inset 0 0 5px 0 #ADC5DB, 0 0 0 1px ${colors.brandHighlight}`,\n },\n '&.error': {\n borderColor: colors.error,\n // boxShadow: `inset 0 0 0 transparent, 0 0 0 1px ${colors.error}`,\n },\n '&.error:focus': {\n // boxShadow: `inset 0 0 5px 0 rgba(214, 0, 0, 0.4), 0 0 0 1px ${colors.error}`,\n },\n '&.toggle-space': {\n paddingRight: '60px',\n },\n // Removes MS Edge's password input clear and reveal buttons.\n '::-ms-reveal': { display: 'none' },\n '::-ms-clear': { display: 'none' },\n },\n ],\n});\n\nexport const TextInput = createStyles({\n footer: createStyle('grid text-center text-xs text-grey-3 gap-2', {\n gridTemplateColumns: 'max-content max-content max-content',\n }),\n});\n","import React from 'react';\nimport classNames from 'classnames';\n\nimport { FieldContainer, FieldContainerProps } from './FieldContainer';\nimport { FieldStyles } from './styles/FieldStyles';\n\nimport { FieldWrapperProps } from 'components/fields/FieldWrapper';\nimport { createStyle, createStyles } from 'utils/createStyle';\n\nexport type TextAreaFieldProps = FieldContainerProps &\n FieldWrapperProps &\n React.InputHTMLAttributes & {\n inputRef?: React.Ref;\n };\n\nconst styles = createStyles({\n charCounter: createStyle('text-xs text-grey-3 text-right'),\n});\n\nexport const TextAreaField = (props: TextAreaFieldProps) => {\n const { label, error, className, inputRef, value, maxLength, ...inputProps } = props;\n const length = value != null ? value.toString().length : 0;\n\n return (\n \n
\n \n {maxLength && maxLength > 0 && (\n
\n {length}/{maxLength}\n
\n )}\n
\n
\n );\n};\n","import React, { ChangeEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport MaskedInput from 'react-text-mask';\nimport createNumberMask from 'text-mask-addons/dist/createNumberMask';\nimport { useFormikContext } from 'formik';\n\nimport { createStyle, createStyles } from '../../../utils/createStyle';\n\nimport { FieldContainer, FieldContainerProps } from './FieldContainer';\n\nimport { FieldWrapperProps } from 'components/fields/FieldWrapper';\nimport { demonetize, monetizeWithDecimal } from 'common/utils/strings';\n\nexport type NumberFieldProps = FieldContainerProps &\n FieldWrapperProps &\n React.InputHTMLAttributes & {\n inputRef?: React.Ref;\n min: number;\n max: number;\n increment: number;\n placeholder?: string;\n disabled?: boolean;\n prefix?: string;\n hideFieldDescription?: boolean;\n allowDecimal?: boolean;\n includeThousandsSeparator?: boolean;\n customValidator?: (_: number) => string;\n };\n\nconst styles = createStyles({\n input: [\n 'w-full px-2 text-xl font-normal text-center',\n {\n background: 'transparent',\n MozAppearance: 'textfield',\n '::-webkit-outer-spin-button': {\n WebkitAppearance: 'none',\n margin: 0,\n },\n '::-webkit-inner-spin-button': {\n WebkitAppearance: 'none',\n margin: 0,\n },\n height: '2rem',\n },\n ],\n footer: createStyle('grid text-center text-xs text-grey-3 gap-2', {\n gridTemplateColumns: 'max-content max-content max-content',\n }),\n ctrlButton: createStyle('text-xl inline-block px-4'),\n ctrlContainer: createStyle('grid', {\n gridTemplateColumns: 'min-content auto min-content ',\n }),\n});\n\n// Helper to get the correct remainder for divisors up to two decimal places.\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript\nconst getRemainder = (number: number, divisor: number) => {\n return (Math.round(number * 100) % Math.round(divisor * 100)) / 100;\n};\n\nexport const FieldNumber = ({\n label,\n increment,\n placeholder,\n min,\n max,\n name,\n value,\n prefix,\n hideFieldDescription,\n required,\n allowDecimal = false,\n includeThousandsSeparator = false,\n customValidator,\n ...props\n}: NumberFieldProps) => {\n const mask = createNumberMask({ prefix, allowDecimal, includeThousandsSeparator });\n const inputText = useRef(null);\n const getSafeValue = useCallback(() => {\n return demonetize((value || '0').toString()) || 0;\n }, [value]);\n\n const ctx = useFormikContext();\n\n const onInternalChange = (e: ChangeEvent) => {\n let verifiedValue = e.target.value;\n if (value === 0) {\n verifiedValue = verifiedValue.slice(0, -1);\n }\n const newValue = demonetize(verifiedValue) || 0;\n if (name) {\n ctx.setFieldValue(name, newValue, true);\n }\n };\n\n const setInputValidationMsg = (msg: string) => {\n if (inputText.current) {\n (inputText.current.inputElement as HTMLInputElement).setCustomValidity(msg);\n }\n };\n\n const getPrefix = useCallback(() => prefix || '', [prefix]);\n\n const [error, setError] = useState('');\n\n // validations\n useEffect(() => {\n const newValue = getSafeValue();\n\n if (newValue < min) {\n setError(`Minimum is ${getPrefix()}${min}`);\n return setInputValidationMsg(\n `Value must be greater than or equal to ${getPrefix()}${min}`\n );\n }\n\n if (newValue > max) {\n setError(`Maximum is ${getPrefix()}${max}`);\n return setInputValidationMsg(\n `Value must be lower than or equal to ${getPrefix()}${max}`\n );\n }\n\n if (getRemainder(newValue, increment) !== 0) {\n const previous = newValue - getRemainder(newValue, increment);\n const next = newValue + increment - getRemainder(newValue + increment, increment);\n\n setError(`Increments of ${getPrefix()}${min}`);\n return setInputValidationMsg(\n `Please enter a valid value. The two nearest valid values are ${getPrefix()}${previous} and ${getPrefix()}${next}`\n );\n }\n\n const customErrors = customValidator ? customValidator(newValue) : null;\n if (customErrors) {\n setError(customErrors);\n return setInputValidationMsg(customErrors);\n }\n\n setError('');\n return setInputValidationMsg('');\n }, [value, getSafeValue, increment, min, max, getPrefix, customValidator]);\n\n const _onIncrement = (direction: number) => {\n if (name) {\n const actualValue = getSafeValue();\n let newValue = actualValue + (direction > 0 ? increment : -increment);\n\n if (actualValue > max) {\n newValue = max;\n } else if (actualValue < min) {\n newValue = min;\n } else if (!(getRemainder(actualValue, increment) === 0)) {\n const previous = actualValue - getRemainder(actualValue, increment);\n const next =\n actualValue + increment - getRemainder(actualValue + increment, increment);\n newValue = direction > 0 ? next : previous;\n }\n\n if (newValue >= min && newValue <= max) {\n ctx.setFieldValue(name, newValue, true);\n }\n }\n };\n\n const footer = (\n
\n
\n {getPrefix()}\n {min} - {getPrefix()}\n {max}\n
\n
\n Increments of {getPrefix()}\n {increment}\n
\n
\n );\n\n const inputValue = useMemo(() => {\n if (allowDecimal) {\n return monetizeWithDecimal(getSafeValue());\n }\n\n return getSafeValue();\n }, [allowDecimal, getSafeValue]);\n\n return (\n \n
\n _onIncrement(-1)}\n >\n –\n \n {\n const KEY_ARROW_UP = 'ArrowUp';\n const KEY_ARROW_DOWN = 'ArrowDown';\n\n if (e.key === KEY_ARROW_UP) {\n e.preventDefault();\n _onIncrement(1);\n return;\n }\n\n if (e.key === KEY_ARROW_DOWN) {\n e.preventDefault();\n _onIncrement(-1);\n return;\n }\n }}\n render={(ref, _props) => (\n \n )}\n />\n \n
\n \n );\n};\n","import React from 'react';\n\nimport { createStyle, createStyles } from '../../../utils/createStyle';\n\nimport { FieldContainer, FieldContainerProps } from './FieldContainer';\n\nimport { FieldWrapperProps } from 'components/fields/FieldWrapper';\n\nexport interface FieldOptionProps {\n text: string;\n value: string;\n disabled?: boolean;\n}\n\nexport type ComboFieldProps = FieldContainerProps &\n FieldWrapperProps &\n React.InputHTMLAttributes & {\n inputRef?: React.Ref;\n options: FieldOptionProps[];\n } & {\n containerClassName?: string;\n };\n\nconst styles = createStyles({\n container: createStyle('', {\n backgroundColor: '#F7F7F7',\n }),\n titleHeader: createStyle('text-xs px-2 text-grey-2'),\n titleBody: createStyle(''),\n titleInput: createStyle('w-full p-1 px-2', {\n // Changed from 'transparent' to rgba to avoid\n // issue on (iOS Safari).\n // It was hiding the select indicator arrows.\n background: 'rgba(255, 255, 255, .01)',\n height: '2rem',\n }),\n titleFooter: createStyle('grid text-center text-xs text-grey-3 gap-2 px-2', {\n gridTemplateColumns: 'max-content max-content max-content',\n }),\n});\n\nexport const FieldCombo = ({\n label,\n name,\n options,\n value,\n error,\n onChange,\n required,\n containerClassName,\n controlClassName,\n ...props\n}: ComboFieldProps) => {\n return (\n \n \n {options.map((option) => (\n \n {option.text}\n \n ))}\n \n \n );\n};\n","import { createFormikField } from '../../../../components/fields/utils/createFormikField';\nimport { TextField } from '../FieldText';\nimport { TextAreaField } from '../FieldTextArea';\nimport { FieldCurrency } from '../FieldCurrency';\nimport { FieldCombo } from '../FieldCombo';\nimport { FieldIncrement } from '../FieldIncrement';\n\nexport const FormikTextField = createFormikField(TextField);\nexport const FormikTextAreaField = createFormikField(TextAreaField);\nexport const FormikCurrencyField = createFormikField(FieldCurrency);\nexport const FormikComboField = createFormikField(FieldCombo);\nexport const FormikIncrementField = createFormikField(FieldIncrement);\n","import React, { useState, Fragment } from 'react';\nimport classNames from 'classnames';\n\nimport { FieldContainer, FieldContainerProps } from './FieldContainer';\nimport { FieldStyles } from './styles/FieldStyles';\n\nimport { FieldWrapperProps } from 'components/fields/FieldWrapper';\n\nexport type TextFieldProps = FieldContainerProps &\n FieldWrapperProps &\n React.InputHTMLAttributes & {\n inputRef?: React.Ref;\n };\n\nexport const TextField = (props: TextFieldProps) => {\n const { label, error, className, inputRef, required, footer, ...inputProps } = props;\n\n return (\n \n \n \n );\n};\n\nexport interface TextFieldSecuredProps extends TextFieldProps {}\n\nexport const TextFieldSecured = (props: TextFieldSecuredProps) => {\n const { label, error, className, inputRef, ...inputProps } = props;\n const [isSecure, setIsSecure] = useState(true);\n\n return (\n \n \n \n setIsSecure(!isSecure)}\n className={FieldStyles.showHide}\n type=\"button\"\n >\n {isSecure ? 'SHOW' : 'HIDE'}\n \n \n \n );\n};\n","import React from 'react';\n\nimport { NumberFieldProps, FieldNumber } from './FieldNumber';\n\nexport type CurrencyFieldProps = Omit;\n\nexport const FieldCurrency = ({ ...props }: CurrencyFieldProps) => (\n \n);\n","import React from 'react';\n\nimport { NumberFieldProps, FieldNumber } from './FieldNumber';\n\nexport type IncrementFieldProps = Omit & {\n increment: number;\n};\n\nexport const FieldIncrement = ({ ...props }: IncrementFieldProps) => (\n \n);\n","import { demonetize } from 'common/utils/strings';\n\nexport const sortOptionValuesAscending = (values: string[]) => {\n return [...values]\n .sort((opt1, opt2) => (demonetize(opt1) || 0) - (demonetize(opt2) || 0))\n .map((value) => ({ text: value, value }));\n};\n\nexport const sortOptionValuesAscendingWithDisabled = (\n values: string[],\n disabled: string[] = []\n) => {\n return values\n .concat(disabled)\n .sort((opt1, opt2) => (demonetize(opt1) || 0) - (demonetize(opt2) || 0))\n .map((value) => ({ text: value, value, disabled: disabled.includes(value) }));\n};\n","import { Product, ProductVariant } from 'common/api/e-comm/models/Product';\nimport { monetize, conjunct, monetizeWithDecimal } from 'common/utils/strings';\n\nconst productToPriceVariantsMap = (product: Product) =>\n product.variants.reduce>((total, next) => {\n const variants = total.get(next.price) || [];\n variants.push(next);\n total.set(next.price, variants);\n return total;\n }, new Map());\n\nconst emptyVariants = {\n text: '',\n variants: [],\n};\n\nexport const useUnavailableProductVariants = (product?: Product) => {\n if (!product) {\n return emptyVariants;\n }\n\n const unavailableVariants = Array.from(productToPriceVariantsMap(product))\n .filter(([, variants]) => variants.every(({ isAvailable }) => !isAvailable))\n .map(([price]) => price);\n\n if (!unavailableVariants.length) {\n return emptyVariants;\n }\n\n const variantsMonetized = unavailableVariants.map((n) => monetizeWithDecimal(n));\n\n if (unavailableVariants.length === product.variants.length) {\n return {\n text: 'This card is temporarily unavailable.',\n variants: variantsMonetized,\n };\n }\n\n return {\n text: `This card is temporarily unavailable in amounts of ${conjunct(\n unavailableVariants.map((n) => monetize(n))\n )}`,\n variants: variantsMonetized,\n };\n};\n\nexport default useUnavailableProductVariants;\n","import React from 'react';\n\nimport { formatDuration, msUntil, msToDays } from 'common/utils/time';\n\nexport interface ProductInfoBonusExpirationProps {\n expiration?: string | null;\n showQuantity?: boolean;\n}\n\nexport const ProductInfoBonusExpiration = ({\n expiration,\n showQuantity,\n}: ProductInfoBonusExpirationProps) => {\n if (!expiration) {\n return null;\n }\n\n const timeRemaining = msUntil(expiration);\n\n if (msToDays(timeRemaining) > 7) {\n return null;\n }\n\n return (\n
\n \n {formatDuration(timeRemaining)} left\n \n
\n );\n};\n\nexport const AffiliateBonusExpiration = ({ expiration }: { expiration: string }) => {\n if (!expiration) {\n return null;\n }\n\n const timeRemaining = msUntil(expiration);\n\n if (msToDays(timeRemaining) > 7) {\n return null;\n }\n\n return (\n \n {formatDuration(timeRemaining)} left\n \n );\n};\n","import React, { ReactNode, useCallback, useEffect, useState } from 'react';\nimport _ from 'lodash';\nimport { Field, useFormikContext } from 'formik';\n\nimport { createStyles } from '../../../utils/createStyle';\n\nimport {\n FormikComboField,\n FormikCurrencyField,\n FormikIncrementField,\n FormikTextField,\n} from './utils/fields';\nimport { sortOptionValuesAscendingWithDisabled } from './utils';\n\nimport { Product, ProductVariant } from 'common/api/e-comm/models/Product';\nimport { monetize, demonetize, monetizeWithDecimal } from 'common/utils/strings';\nimport useUnavailableProductVariants from './utils/useUnavailableProductVariants';\nimport { ProductInfoBonusExpiration } from './ProductInfoBonusExpiration';\n\nconst styles = createStyles({\n fieldContainer: ['w-full', { maxWidth: '14rem' }],\n container: [\n 'block lg:grid mt-4',\n {\n gridTemplateColumns: 'auto auto',\n },\n ],\n ctrlIncrement: [\n 'inline-block',\n {\n maxWidth: '140px',\n },\n ],\n incrementAndTotal: [\n 'grid mt-4 lg:mt-0',\n {\n gridTemplateColumns: 'auto auto',\n },\n ],\n listShipToHome: [\n 'mb-8 mt-2 text-xs text-grey-1',\n {\n listStyleType: 'disc',\n paddingLeft: '20px',\n },\n ],\n listComboContainer: ['w-full', { maxWidth: '220px' }],\n row: ['grid gap-4', { height: 'auto' }],\n mainField: [\n 'sm:grid gap-3',\n {\n maxWidth: '12rem',\n },\n ],\n fieldValue: ['mb-5 sm:mt-0', { width: '12rem' }],\n fieldQuantity: ['', { maxWidth: '9rem' }],\n fieldEarning: [\n 'w-auto h-12 max-h-14 bg-grey-7 mb-1 sm:mb-5 px-2 mt-5 sm:mt-0 text-brand rounded-sm flex flex-col justify-between',\n { maxHeight: '3.15rem', maxWidth: '12rem' },\n ],\n});\n\nexport interface ProductAmountInputProps {\n product: Product;\n label?: ReactNode;\n hideQuantityField?: boolean;\n hideTotal?: boolean;\n customLabel?: (label: string) => ReactNode;\n uiSettings?: UiSettings;\n cardBalance?: number | null;\n setVariant?: Function;\n}\n\nexport interface UiSettings {\n totalMargin?: string;\n}\n\nexport interface ProductAmountInputFormData {\n cardId?: string;\n priceOverride: number | null;\n selectedOptions: { [key: string]: string };\n quantity: number;\n hideAddedToCartAnimation?: boolean;\n}\n\nconst calculateTotal = (\n product: Product,\n data: ProductAmountInputFormData,\n showQuantity: boolean\n) => {\n const hasOptions = product.options && product.options.length;\n const quantity = !showQuantity ? 1 : data.quantity;\n\n if (hasOptions) {\n const options = Object.values(data.selectedOptions).map(demonetize);\n return _.sum(options) * quantity;\n }\n\n return (data?.priceOverride || 0) * quantity;\n};\n\nconst defaultUiSettings: UiSettings = {\n totalMargin: 'mb-0 mt-auto sm:mb-auto sm:mt-0',\n};\n\nexport const ProductAmountInput = ({\n product,\n hideQuantityField,\n label,\n hideTotal,\n customLabel,\n uiSettings,\n cardBalance,\n setVariant,\n}: ProductAmountInputProps) => {\n const { totalMargin: totalVerticalMargin } = uiSettings || defaultUiSettings;\n const [selectedVariant, setSelectedVariant] = useState();\n\n const formCtx = useFormikContext();\n\n const showQuantity = !hideQuantityField;\n const total = calculateTotal(product, formCtx.values, showQuantity);\n\n const { variants } = useUnavailableProductVariants(product);\n\n const gridTemplateColumns = `11.5rem ${showQuantity ? '9rem' : '0rem'} ${\n selectedVariant?.bonus ? 'max-content max-content' : 'max-content'\n }`;\n const gridTemplateColumnsContainer = `max-content ${!hideTotal ? 'auto' : ''}`;\n\n const productMinValue = product.minValue;\n const productMaxValue = product.maxValue;\n const productValueIncrement = product.unitPrice;\n const productMaxBalance = product.maxBalance;\n\n const customValidator = (value: number) => {\n if (productMaxBalance && cardBalance && value + cardBalance > productMaxBalance) {\n return `Enter an amount so your total card balance is $${productMaxBalance} or less.`;\n } else if (productMinValue && value < productMinValue) {\n return `Value must be greater than $${productMinValue}`;\n } else if (productMaxValue && value > productMaxValue) {\n return `Value must be less than $${productMaxValue}`;\n }\n\n return undefined;\n };\n\n const getQuantityFieldLabel = useCallback(\n () => (customLabel ? customLabel('Quantity') : 'Quantity'),\n [customLabel]\n );\n\n const renderTotal = () => {\n return (\n <>\n {!hideTotal && (\n
\n
Total
\n
\n {monetizeWithDecimal(total)}\n
\n
\n )}\n \n );\n };\n\n useEffect(() => {\n const value = Object.values(formCtx.values.selectedOptions)[0];\n const realValue = value ? demonetize(value) : value;\n setSelectedVariant(\n product.variants.find((prd) => prd.price === realValue) || product.variants[0]\n );\n if (setVariant) {\n setVariant(\n product.variants.find((prd) => prd.price === realValue) || product.variants[0]\n );\n }\n }, [product, formCtx.values.selectedOptions, setVariant]);\n\n return (\n \n
\n
\n {product.canOverridePrice && (\n \n )}\n {!product.canOverridePrice && !product.options.length && (\n
\n \n
\n )}\n {product.options.map((option) => (\n
\n \n
\n ))}\n
\n
\n {showQuantity && (\n \n )}\n
\n
\n \n Earnings\n

\n \n {!selectedVariant?.bonus ? '' : `${selectedVariant.rebate}%`}\n {' '}\n {selectedVariant?.bonus?.rebate\n ? `${selectedVariant?.bonus?.rebate}%`\n : `${selectedVariant?.rebate}%`}\n

\n
\n \n
\n \n {renderTotal()}\n \n );\n};\n","import { OrganizationState } from 'common/features/store/duck/organization/duck';\nimport { PaymentType } from 'common/api/e-comm/payment-types';\n\nexport const orgSupportsShipToHome = (org: OrganizationState): null | boolean => {\n if (!org.paymentTypes) {\n return null;\n }\n return org.paymentTypes.some((allowedType) => {\n return allowedType === PaymentType.BankAccount || allowedType === PaymentType.CreditCard;\n });\n};\n\nexport const getDaysInMonth = (month: number, year: number) => {\n return new Date(year, month, 0).getDate();\n};\n\nexport const scrollToElement = (el: Element) => {\n const { top } = el.getBoundingClientRect();\n window.scrollBy({\n left: 0,\n top,\n behavior: 'smooth',\n });\n};\n\nexport const formatSize = (bytes: number): string => {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n if (bytes == 0) {\n return '0 Byte';\n }\n const i = Math.trunc(Math.floor(Math.log(bytes) / Math.log(1024)));\n return Math.round(bytes / Math.pow(1024, i)) + ' ' + sizes[i];\n};\n\ninterface Rect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport const intersects = (rectA: Rect, rectB: Rect) => {\n return (\n rectA.left < rectB.right &&\n rectA.right > rectB.left &&\n rectA.top < rectB.bottom &&\n rectA.bottom > rectB.top\n );\n};\n\nexport const round = (number: number, precision: number) => {\n precision =\n precision == null\n ? 0\n : precision >= 0\n ? Math.min(precision, 292)\n : Math.max(precision, -292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n let pair = `${number}e`.split('e');\n const value = Math.round(+`${pair[0]}e${+pair[1] + precision}`);\n\n pair = `${value}e`.split('e');\n return +`${pair[0]}e${+pair[1] - precision}`;\n }\n return Math.round(number);\n};\n","import { faGiftCard } from '@fortawesome/pro-light-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { LinkBtn } from 'components/link-btn';\nimport React, { useContext } from 'react';\nimport { createStyles } from 'utils/createStyle';\nimport GiftCardImg from '../../../media/images/gift-card.png';\nimport { ProductGiftDetailsContext } from './ProductGiftDetails';\n\nconst styles = createStyles({\n gridGiftDetails: 'block md:flex gap-2 flex-row pt-5',\n dataGrid: [\n 'text-sm grid gap-x-2',\n {\n gridTemplateColumns: 'min-content auto',\n },\n ],\n group: 'text-grey-1 text-right font-semibold',\n subGroup: 'text-grey-2 text-right truncate',\n value: 'text-left text-grey-2 text-brand',\n editBtn: ['mr-2 flex items-center justify-end md:justify-start', { marginLeft: '1.4rem' }],\n});\n\nexport const GiftDetails = () => {\n const { formData, selectedDate, setIsEditing, giftCardImageUrl } =\n useContext(ProductGiftDetailsContext);\n\n const giftDetailsValues = [\n {\n name: 'Delivery',\n fields: [\n {\n name: 'Date',\n value: (selectedDate || new Date()).toLocaleDateString(),\n },\n ],\n },\n {\n name: 'Recipient',\n fields: [\n { name: 'Name', value: formData.RecipientName },\n { name: 'E-mail', value: formData.RecipientEmail },\n ],\n },\n {\n name: 'Sender',\n fields: [\n { name: 'Name', value: formData.SenderName },\n { name: 'Phone Number', value: formData.SenderPhone },\n ],\n },\n ];\n\n return (\n
\n
\n
Gift Details
\n
\n setIsEditing(true)}\n className=\"text-brand text-sm block underline hover:no-underline\"\n >\n \n Edit\n \n
\n
\n
\n
\n \n
\n
\n
\n {giftDetailsValues.map((group) => (\n <>\n
{group.name}
\n
\n {group.fields.map((field) => (\n <>\n
{field.name}
\n
{field.value}
\n \n ))}\n
\n \n ))}\n
\n
\n
\n
\n );\n};\n","import React, { useCallback, useContext, useMemo, useState, useEffect } from 'react';\nimport { Form, Formik, useFormikContext } from 'formik';\nimport MaskedInput from 'react-text-mask';\nimport { ArrowUpRight } from 'react-feather';\n\nimport { FormikComboField, FormikTextAreaField, FormikTextField } from './utils/fields';\n\nimport { MASK_PHONE_US } from 'common/modules/mask-text/masks';\nimport { createStyles } from 'utils/createStyle';\nimport { Btn } from 'components/btn/Btn';\nimport { emailValidator, phoneNumberValidator } from 'common/modules/form-validation/validators';\nimport classNames from 'classnames';\nimport { DatePicker } from 'components/date-picker';\nimport {\n emptyGiftDetailsRequest,\n GiftDetailsRequest,\n ProductGiftDetailsContext,\n} from './ProductGiftDetails';\nimport { getGiftCardImgSrc } from './EGiftTabPanel';\nimport { useHistory } from 'react-router-dom';\nimport { Root, Trigger, Content } from 'components/popover/Popover';\nimport { colors } from 'styles/settings';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faInfoCircle, faExclamationTriangle } from '@fortawesome/pro-solid-svg-icons';\nimport { faTimes } from '@fortawesome/pro-light-svg-icons';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport { Modal } from 'components/modal/Modal';\nimport { useModalControls } from 'hooks/useModalControls';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectCartHasGiftingItems } from 'common/features/store/duck/cart/duck';\nimport { Routes } from 'routes';\nimport useFeatureFlags from 'common/hooks/useFeatureFlags';\n\nconst styles = createStyles({\n btns: ['w-80 md:w-max'],\n sendersInfo: ['grid grid-cols-2 gap-4'],\n formContent: ['grid grid-cols-2 gap-x-4 max-w-xl text-left'],\n title: 'col-span-1 md:col-span-2 text-lg text-left text-brand-dark font-bold mt-6',\n fieldValues: 'col-span-2 grid grid-cols-1 md:grid-cols-2 gap-y-2 md:gap-x-2',\n pillBtn: [\n 'rounded-full text-brand inline-block truncate align-middle cursor-pointer text-base font-semibold border border-brand',\n { padding: '14px 21px' },\n ],\n});\n\nexport const GiftDetailsEditForm = () => {\n const { formData, setFormData, setHasFormData, setIsEditing } =\n useContext(ProductGiftDetailsContext);\n\n const onSubmit = (data: GiftDetailsRequest) => {\n setFormData(data);\n setHasFormData(true);\n setIsEditing(false);\n };\n\n const validateFormData = (formValues: GiftDetailsRequest) => {\n const errors: { [key: string]: string } = {};\n\n if (!formValues.RecipientEmail) {\n errors.RecipientEmail = 'required';\n }\n if (!formValues.SenderName) {\n errors.SenderName = 'required';\n }\n if (!formValues.SenderPhone) {\n errors.SenderPhone = 'required';\n }\n if (!formValues.SelectedCardCoverImage || Number(formValues.SelectedCardCoverImage) <= 0) {\n errors.SelectedCardCoverImage = 'required';\n }\n\n return errors;\n };\n\n return (\n \n \n \n );\n};\n\nconst tomorrow = () => {\n const d = new Date();\n d.setHours(0);\n d.setMinutes(0);\n d.setSeconds(0);\n d.setDate(d.getDate() + 1);\n return d;\n};\n\nconst addMonthsFromNow = (months: number) => {\n const date = new Date();\n date.setMonth(date.getMonth() + months);\n return date;\n};\n\nconst DateSelector = () => {\n const ctx = useFormikContext();\n\n const selectedDate = ctx.values.SelectedDate;\n const setSelectedDate = useCallback(\n (date: Date) => {\n ctx.setFieldValue('SelectedDate', date);\n },\n [ctx]\n );\n\n const [isDatePickerOpen, setIsDatePickerOpen] = useState(false);\n\n return (\n
\n
\n setSelectedDate(new Date())}\n >\n Now\n \n
\n
\n setIsDatePickerOpen(true)}\n onCalendarClose={() => setIsDatePickerOpen(false)}\n selected={selectedDate}\n onChange={(dt) => setSelectedDate(dt as Date)}\n minDate={tomorrow()}\n maxDate={addMonthsFromNow(6)}\n customInput={\n \n Select a Date\n \n }\n />\n {selectedDate?.toLocaleDateString()}\n
\n
\n );\n};\n\nconst EditForm = () => {\n const {\n formData,\n setFormData,\n setHasFormData,\n setIsEditing,\n setSendAsGift,\n hasFormData,\n giftCardImages,\n showEditForm,\n } = useContext(ProductGiftDetailsContext);\n const { values, errors, setFieldValue, submitForm } = useFormikContext();\n\n const onClose = () => {\n setIsEditing(false);\n if (!hasFormData) {\n setSendAsGift(false);\n }\n };\n\n const { SelectedCardCoverImage } = formData;\n\n useEffect(() => {\n setFieldValue('SelectedCardCoverImage', SelectedCardCoverImage);\n }, [SelectedCardCoverImage, setFieldValue]);\n\n const cardCoverImages = useMemo(() => {\n return giftCardImages.map((img, index) => ({\n value: img.ImageName,\n text: `Option ${index + 1}`,\n }));\n }, [giftCardImages]);\n\n const submit = () => submitForm();\n\n return (\n
\n
\n
\n
Gift Details
\n
\n {\n setFormData(emptyGiftDetailsRequest);\n setHasFormData(false);\n setSendAsGift(false);\n }}\n className=\"text-brand text-sm block no-underline outline-none focus:outline-none\"\n >\n \n Cancel\n \n
\n
\n
\n \n
\n
Select Delivery Date
\n
\n \n
\n
\n
\n
\n {values.SelectedDate && (\n <>\n
\n
To
\n
\n \n name=\"RecipientName\"\n title={'Recipient’s Name'}\n label={'Recipient’s Name'}\n placeholder=\"Enter recipient’s full name\"\n error={errors.RecipientName}\n maxLength={200}\n />\n
\n
\n \n name=\"RecipientEmail\"\n title={\"Recipient's Email\"}\n label={\"Recipient's Email\"}\n placeholder=\"example@email.com\"\n error={errors.RecipientEmail}\n type=\"email\"\n validate={emailValidator}\n maxLength={200}\n />\n
\n
\n\n
\n
From
\n \n name=\"SenderName\"\n title={\"Sender's Name\"}\n label={\"Sender's Name\"}\n placeholder=\"Enter sender’s full name\"\n error={errors.SenderName}\n maxLength={200}\n />\n\n (\n \n )}\n />\n
\n\n
Optional Message
\n
\n \n
\n\n
\n
Gift Card Image
\n
\n \n
\n
\n \n
\n
\n \n )}\n
\n
\n
\n \n Cancel\n \n
\n
\n \n Save\n \n
\n
\n
\n
\n
\n
\n
\n
\n );\n};\n\nlet ModalContent: React.ElementType = React.Fragment;\n\nconst GiftType = () => {\n const history = useHistory();\n const [giftingType, setGiftingType] = useState<'Single' | 'Bulk'>('Single');\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n\n const flags = useFeatureFlags();\n const enableBulkGifting = flags.isEnabled('enable_bulk_egifting') || false;\n\n const isMobileView = useDetectMobileView();\n const modal = useModalControls();\n const cartHasGiftingItems = useRootSelector(selectCartHasGiftingItems);\n\n const chooseSingleGift = () => setGiftingType('Single');\n const goToBulkGiftingScreen = () => {\n if (isMobileView) {\n ModalContent = BulkOrderDisabledOnMobileWarning;\n modal.toggleModalVisibility();\n } else {\n if (cartHasGiftingItems) {\n ModalContent = BulkOrderDisabledGiftItemsWarning;\n modal.toggleModalVisibility();\n } else {\n history.push(history.location.pathname + '/gifting');\n }\n }\n };\n\n const onPopoverOpenChange = () => {\n setIsTooltipOpen((s: boolean) => !s);\n };\n\n return (\n
\n
\n Gift Type\n \n \n \n
Single Gift
\n

\n This option is recommended if you are sending a single gift to one\n recipient.\n

\n New!\n
Bulk Order
\n

\n This option is recommended if you are sending 5+ gifts to multiple\n recipients (125 maximum). From there, you can download a template and\n enter your recipient details.\n

\n
\n
\n
\n
\n \n Single Gift\n \n {enableBulkGifting && (\n \n Bulk Order\n \n \n )}\n
\n \n
\n \n {ModalContent ? : null}\n
\n \n
\n );\n};\n\nconst BulkOrderDisabledOnMobileWarning = ({ onClose }: { onClose: () => void }) => (\n <>\n

\n Bulk Order Information\n

\n

\n This option is available on desktop versions of RaiseRight only. It is recommended if\n you are sending 5+ gifts to multiple recipients. From there, you can download a template\n and enter your recipient details.\n

\n Okay\n \n);\n\n// NOTE: This content will render in the modal when user has at least 1 line item in their cart\n// that is a gift.\nconst BulkOrderDisabledGiftItemsWarning = ({ onClose }: { onClose: () => void }) => {\n const history = useHistory();\n const goToCart = () => history.push(Routes.ShopOrderSummary);\n\n return (\n <>\n

\n Gift Items in Cart\n

\n

\n To continue, first checkout or remove gift items currently in your cart, then return\n to place a Bulk Order.\n

\n
\n \n Go to Cart\n \n \n Close\n \n
\n \n );\n};\n\nconst useDetectMobileView = (value = false) => {\n const [isMobile, setIsMobile] = useState(value);\n useMediaQueries({\n '(max-width: 640px)': () => {\n setIsMobile(true);\n },\n '(min-width: 640px)': () => {\n setIsMobile(false);\n },\n });\n\n return isMobile;\n};\n","import { Faceplate } from 'common/api/misc';\nimport { emptyProduct, Product } from 'common/api/e-comm/models/Product';\nimport { noop } from 'common/utils';\nimport { scrollToElement } from 'common/utils/utils';\nimport React, { useContext, useEffect, useRef } from 'react';\nimport { GiftDetails } from './GiftDetails';\nimport { GiftDetailsEditForm } from './GiftDetailsEditForm';\n\ninterface ProductGiftDetailsProps {\n selectedDate: Date | undefined;\n setSelectedDate: (date: Date | undefined) => void;\n formData: GiftDetailsRequest;\n setFormData: (formData: GiftDetailsRequest) => void;\n hasFormData: boolean;\n setHasFormData: (state: boolean) => unknown;\n isEditing: boolean;\n setIsEditing: (state: boolean) => unknown;\n product: Product;\n sendAsGift: boolean;\n setSendAsGift: (state: boolean) => unknown;\n showEditForm: boolean;\n showGiftDetails: boolean;\n giftCardImages: Faceplate[];\n giftCardImageUrl: string;\n}\n\nexport interface GiftDetailsRequest {\n SelectedDate: Date | undefined;\n RecipientName: string;\n RecipientEmail: string;\n GiftMessage: string;\n SelectedCardCoverImage: string;\n SenderName: string;\n SenderPhone: string;\n}\n\nexport const emptyGiftDetailsRequest: GiftDetailsRequest = {\n SelectedDate: new Date(),\n RecipientName: '',\n RecipientEmail: '',\n GiftMessage: '',\n SelectedCardCoverImage: '',\n SenderName: '',\n SenderPhone: '',\n};\n\nexport const ProductGiftDetailsContext = React.createContext({\n selectedDate: undefined,\n setSelectedDate: noop,\n giftCardImages: [],\n formData: emptyGiftDetailsRequest,\n hasFormData: false,\n setHasFormData: noop,\n setFormData: noop,\n isEditing: false,\n setIsEditing: noop,\n product: emptyProduct,\n sendAsGift: false,\n setSendAsGift: noop,\n showEditForm: false,\n showGiftDetails: false,\n giftCardImageUrl: '',\n});\n\nexport const ProductGiftDetails = () => {\n const { showEditForm, showGiftDetails, sendAsGift } = useContext(ProductGiftDetailsContext);\n const refContainer = useRef(null);\n\n useEffect(() => {\n if (!refContainer.current) {\n return;\n }\n\n if (showEditForm || showGiftDetails) {\n scrollToElement(refContainer.current);\n }\n }, [showEditForm, showGiftDetails]);\n\n useEffect(() => {\n if (!sendAsGift) {\n scrollToElement(document.body);\n }\n }, [sendAsGift]);\n\n return (\n
\n {showEditForm && }\n {showGiftDetails && }\n
\n );\n};\n","import React from 'react';\nimport _round from 'lodash/round';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faWallet } from '@fortawesome/pro-light-svg-icons';\n\nimport { Card, getLastBalanceAddedDate } from 'common/api/e-comm/models/Card';\nimport { createStyle, createStyles } from 'utils/createStyle';\nimport { LinkBtn } from 'components/link-btn';\nimport { colors } from 'styles/settings';\n\nconst style = createStyles({\n title: createStyle('font-bold text-brand-dark ml-2 align-middle', { lineHeight: '3rem' }),\n});\n\nexport interface InMyWalletProps {\n items: Card[];\n brandName: string;\n onClick: (card: Card) => void;\n}\nconst renderCard = (card: Card, brandName: string, onClick: (card: Card) => void) => {\n const balance = card.cardBalance ? _round(card.cardBalance || 0, 2).toFixed(2) : '--.--';\n return (\n
  • \n onClick(card)}>\n {card.name || brandName} - ${balance}\n {' '}\n
  • \n );\n};\n\nexport const InMyWallet = ({ items, brandName, onClick }: InMyWalletProps) => {\n const itemsSorted = items\n .sort((a, b) => getLastBalanceAddedDate(b).getTime() - getLastBalanceAddedDate(a).getTime())\n .slice(0, 10);\n\n return (\n
    \n {itemsSorted.length > 0 && (\n <>\n
    \n
    \n \n In my wallet\n
    \n
      \n {itemsSorted.map((item) => renderCard(item, brandName, onClick))}\n
    \n
    \n \n )}\n
    \n );\n};\n","import { apiFetch } from '../utils';\nimport { PRODUCT_IMAGES_URL } from 'common/env';\n\nexport interface Faceplate {\n ImageId: number;\n ImageName: string;\n ImageUrl: string;\n}\n\nexport const getProductFaceplates = async (productSku: string) => {\n return await apiFetch(PRODUCT_IMAGES_URL, {\n method: 'POST',\n cache: 'no-cache',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ productId: productSku }),\n });\n};\n\nexport const getProductFaceplatesBff = async (productSku: string) => {\n const url = '/c/shop/product/getproductgiftimages';\n\n return await apiFetch(url, {\n method: 'POST',\n cache: 'no-cache',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ productId: productSku }),\n });\n};\n","export const waitPromise = async (promise: Promise, set: (loading: boolean) => unknown) => {\n set(true);\n\n try {\n return await promise;\n } finally {\n set(false);\n }\n};\n","import React from 'react';\nimport imgBBB from '../../media/images/bbbDark.png';\nimport { Routes } from 'routes';\n\nexport const Footer = () => {\n return (\n
    \n
    \n
    \n \n \n \n
    \n\n
    \n
    \n

    © 1999 - {new Date().getFullYear()} RaiseRight. All Rights Reserved.

    \n \n RaiseRight Privacy Policy\n \n |\n \n Terms of Use{' '}\n \n\n |\n\n \n \n Need help? Call our Customer Support Team at{' '}\n \n \n 800-727-4715\n {' '}\n (Option 3)\n \n
    \n\n

    \n The merchants represented are not sponsors of RaiseRight or otherwise\n affiliated with RaiseRight. The Logos and other identifying marks on this\n website are trademarks of and owned by each represented company and/or its\n affiliates. Please visit each company’s website for additional terms and\n conditions.\n

    \n
    \n
    \n
    \n );\n};\n","// Header.tsx\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faHeadset } from '@fortawesome/pro-regular-svg-icons';\nimport { ReactComponent as RaiseRightLogo } from '../../media/images/RaiseRightLogo.svg';\nimport { createStyles } from 'utils/createStyle';\nimport { Routes } from 'routes';\n\ninterface HeaderProps {\n onExit: (location?: string) => void;\n}\n\nconst Header = ({ onExit }: HeaderProps) => {\n const headerStyles = createStyles({\n header: [\n 'relative w-full sm:flex bg-white border border-b-1 border-grey-line',\n { height: '68px' },\n ],\n headerLink: [\n ` no-underline brand px-5 py-1 -mt-0.5 mx-5 text-sm font-semibold rounded-full hover:border-1 hover:bg-pale-blue focus:outline-pale-blue active:bg-pale-blue`,\n { fontSize: '14px', height: 40 },\n ],\n headerExit: [\n 'text-brand rounded-full leading-snug border font-semibold text-sm border-grey-light hover:border-brand focus:outline-pale-blue active:bg-pale-blue tracking-wider',\n { width: 80, height: 40 },\n ],\n supportIcon: ['mr-2', { fontSize: '24px', position: 'relative', top: '4px' }],\n seperator: ['h-6 w-1 border-r ml-4 mr-6', { height: '40px', borderColor: '#E9E9E9' }],\n leftHeader: 'flex items-center justify-start w-1/2 pl-8',\n rightHeader: 'flex items-center justify-end w-1/2 pr-6',\n });\n\n return (\n
    \n
    \n onExit(Routes.Shop)}\n >\n \n \n
    \n\n
    \n \n \n Customer Support\n \n\n
    \n\n \n
    \n
    \n );\n};\n\nexport default Header;\n","import React, { createContext, useReducer, Reducer } from 'react';\nimport { noop } from 'common/utils';\nimport type { Faceplate } from 'common/api/misc';\nimport { addToCart } from './add-to-cart';\nimport { useNavMenu } from 'components/nav/context';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { updateCart } from 'common/features/store/duck/cart/duck';\nimport { useFormikContext } from 'formik';\nimport { ProductAmountInputFormData } from 'features/product/components/ProductAmountInput';\nimport { ModalControls } from 'hooks/useModalControls';\n\nconst initialState = {\n step: 1,\n selectedCardDesign: null,\n deliveryDate: new Date(),\n senderName: undefined,\n message: '',\n recipients: [],\n giftImageOptions: [],\n productId: null,\n addingToCartLoading: false,\n};\n\nexport interface Recipient {\n name: string;\n email: string;\n}\n\nexport interface FileDetails {\n name: string;\n size: number;\n}\n\nexport interface BulkOrderState {\n step: number;\n selectedCardDesign: Faceplate | null;\n deliveryDate: Date | null;\n senderName: string | undefined;\n message: string;\n recipients: Recipient[];\n giftImageOptions: Faceplate[];\n productId: number | null;\n addingToCartLoading: boolean;\n fileDetails?: FileDetails;\n}\n\nexport const actions = {\n SET_STEP: 'SET_STEP',\n SET_SELECTED_CARD_DESIGN: 'SET_SELECTED_CARD_DESIGN',\n SET_DELIVERY_DATE: 'SET_DELIVERY_DATE',\n SET_SENDER_NAME: 'SET_SENDER_NAME',\n SET_MESSAGE: 'SET_MESSAGE',\n SET_RECIPIENTS: 'SET_RECIPIENTS',\n DELETE_RECIPIENTS: 'DELETE_RECIPIENTS',\n SET_GIFT_IMAGE_OPTIONS: 'SET_GIFT_IMAGE_OPTIONS',\n SET_PRODUCT_ID: 'SET_PRODUCT_ID',\n SET_ADDING_TO_CART_LOADING: 'SET_ADDING_TO_CART_LOADING',\n SET_FILE_DETAILS: 'SET_FILE_DETAILS',\n};\n\ntype Payloads =\n | Faceplate\n | Date\n | string\n | Recipient[]\n | Faceplate[]\n | number\n | boolean\n | FileDetails\n | undefined;\ntype Action = {\n type: string;\n payload?: T;\n};\nexport const createAction =\n (type: string) =>\n (payload: T): Action => ({ type, payload });\n\nexport const setStep = createAction(actions.SET_STEP);\nexport const setSelectedCardDesign = createAction(actions.SET_SELECTED_CARD_DESIGN);\nexport const setDeliveryDate = createAction(actions.SET_DELIVERY_DATE);\nexport const setSenderName = createAction(actions.SET_SENDER_NAME);\nexport const setMessage = createAction(actions.SET_MESSAGE);\nexport const setRecipients = createAction(actions.SET_RECIPIENTS);\nexport const setGiftImageOptions = createAction(actions.SET_GIFT_IMAGE_OPTIONS);\nexport const deleteRecipients = () => ({ type: actions.DELETE_RECIPIENTS });\nexport const setProductId = createAction(actions.SET_PRODUCT_ID);\nexport const setAddingToCartLoading = createAction(actions.SET_ADDING_TO_CART_LOADING);\nexport const setFileDetails = createAction(actions.SET_FILE_DETAILS);\n\nexport const reducer = (state: BulkOrderState, action: Action): BulkOrderState => {\n switch (action.type) {\n case actions.SET_STEP:\n return { ...state, step: action.payload as number };\n case actions.SET_SELECTED_CARD_DESIGN:\n return { ...state, selectedCardDesign: action.payload as Faceplate };\n case actions.SET_DELIVERY_DATE:\n return { ...state, deliveryDate: action.payload as Date };\n case actions.SET_SENDER_NAME:\n return { ...state, senderName: action.payload as string };\n case actions.SET_MESSAGE:\n return { ...state, message: action.payload as string };\n case actions.SET_RECIPIENTS:\n return { ...state, recipients: action.payload as Recipient[] };\n case actions.SET_GIFT_IMAGE_OPTIONS:\n return { ...state, giftImageOptions: action.payload as Faceplate[] };\n case actions.DELETE_RECIPIENTS:\n return { ...state, recipients: [] };\n case actions.SET_PRODUCT_ID:\n return { ...state, productId: action.payload as number };\n case actions.SET_ADDING_TO_CART_LOADING:\n return { ...state, addingToCartLoading: action.payload as boolean };\n case actions.SET_FILE_DETAILS:\n return { ...state, fileDetails: action.payload as FileDetails };\n default:\n return state;\n }\n};\n\n/* eslint-disable */\ntype ContextType = {\n state: BulkOrderState;\n setStep: (step: number) => any;\n setSelectedCardDesign: (design: Faceplate) => any;\n setDeliveryDate: (date: Date) => any;\n setSenderName: (name: string) => any;\n setMessage: (message: string) => any;\n setRecipients: (recipients: Recipient[]) => any;\n setGiftImageOptions: (options: Faceplate[]) => any;\n deleteRecipients: () => any;\n setProductId: (id: number) => any;\n addToCart: () => Promise;\n setFileDetails: (fileDetails: FileDetails | undefined) => void;\n};\n/* eslint-enable */\nexport const BulkOrderContext = createContext({\n state: initialState,\n setStep: noop,\n setSelectedCardDesign: noop,\n setDeliveryDate: noop,\n setSenderName: noop,\n setMessage: noop,\n setRecipients: noop,\n setGiftImageOptions: noop,\n deleteRecipients: noop,\n setProductId: noop,\n addToCart: () => Promise.resolve(),\n setFileDetails: noop,\n});\n\ntype BulkOrderProviderProps = {\n children: React.ReactNode;\n closeGiftDetails: () => void;\n errorModalControls: ModalControls;\n};\n\nexport const BulkOrderProvider = ({\n children,\n closeGiftDetails,\n errorModalControls,\n}: BulkOrderProviderProps) => {\n const [state, dispatch] = useReducer>>(\n reducer,\n initialState\n );\n const history = useHistory();\n const { setOpenMenu } = useNavMenu();\n const formikCtx = useFormikContext();\n\n const dispatchRedux = useDispatch();\n\n const amount = {\n priceOverride: formikCtx.values.priceOverride || null,\n selectedOptions: formikCtx.values.selectedOptions,\n };\n\n const boundActions = {\n setStep: (step: number) => dispatch(setStep(step)),\n setSelectedCardDesign: (design: Faceplate) => dispatch(setSelectedCardDesign(design)),\n setDeliveryDate: (date: Date) => dispatch(setDeliveryDate(date)),\n setSenderName: (name: string) => dispatch(setSenderName(name)),\n setMessage: (message: string) => dispatch(setMessage(message)),\n setRecipients: (recipients: Recipient[]) => dispatch(setRecipients(recipients)),\n setFileDetails: (fileDetails: FileDetails | undefined) =>\n dispatch(setFileDetails(fileDetails)),\n setGiftImageOptions: (options: Faceplate[]) => dispatch(setGiftImageOptions(options)),\n deleteRecipients: () => dispatch(deleteRecipients()),\n setProductId: (id: number) => dispatch(setProductId(id)),\n addToCart: async () => {\n dispatch(setAddingToCartLoading(true));\n\n if (state.productId) {\n const response = await addToCart(state, state?.productId, amount);\n if (response.data) {\n dispatchRedux(updateCart({ cart: response.data }));\n dispatch(setAddingToCartLoading(false));\n setOpenMenu('cart');\n closeGiftDetails();\n history.goBack();\n } else {\n errorModalControls.toggleModalVisibility();\n }\n }\n },\n };\n\n const value = {\n state: state,\n ...boundActions,\n };\n\n return {children};\n};\n","import { CartLineItemGiftDetails } from 'common/api/e-comm/models/CartLineItem';\nimport { BulkOrderState, Recipient } from './BulkOrderContext';\nimport { BulkOrderCartItem } from 'common/api/e-comm/models/CartItem';\nimport { addItemsToCart } from 'common/api/e-comm/cart/lineitem';\n\nexport const convertBulkOrderStateToCartItem = (\n state: BulkOrderState,\n productId: number,\n amount: Pick\n): BulkOrderCartItem => {\n const giftDetails: CartLineItemGiftDetails[] = state.recipients.map((recipient: Recipient) => ({\n fromName: state.senderName || '',\n fromPhone: null,\n toName: recipient.name,\n toEmail: recipient.email,\n deliveryDate: state.deliveryDate?.toISOString() || '',\n message: state.message,\n productImageName: state.selectedCardDesign?.ImageName || '',\n }));\n\n const cartItem: BulkOrderCartItem = {\n ...amount,\n productId,\n quantity: 1,\n giftDetails: giftDetails,\n };\n\n return cartItem;\n};\n\nexport async function addToCart(\n state: BulkOrderState,\n productId: number,\n amount: Pick\n) {\n const formattedPayload = convertBulkOrderStateToCartItem(state, productId, amount);\n return await addItemsToCart(formattedPayload);\n}\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCheckCircle } from '@fortawesome/free-solid-svg-icons';\nimport { createStyles } from 'utils/createStyle';\n\nexport const styles = createStyles({\n radioList: ['flex flex-col space-y-5', { width: '280px' }],\n radioOption: [\n 'flex items-center text-lg py-1 px-5 bg-white border border-grey-light rounded-full',\n { height: '72px' },\n ],\n radioOptionSelected: [\n 'flex items-center text-lg py-1 px-5 bg-white border-2 border-brand rounded-full',\n { height: '72px' },\n ],\n checkIcon: ['text-brand', { fontSize: '32px', width: '32px', height: '32px' }],\n unselectedCircle: [\n 'text-grey-2 rounded-full border-2 border-grey-light',\n { width: '32px', height: '32px' },\n ],\n optionLabel: 'm-4 ml-3 text-grey-medium',\n optionLabelSelected: 'm-4 ml-3 text-grey-darkest font-semibold',\n});\n\ninterface CustomRadioSelectorProps {\n options: string[];\n onSelectionChange: (selectedValue: string) => void;\n value: string;\n}\n\nexport const CustomRadioSelector = ({\n options,\n value,\n onSelectionChange,\n}: CustomRadioSelectorProps) => {\n // const [selectedValue, setSelectedValue] = useState('');\n\n // useEffect(() => {\n // if (options.length > 0) {\n // setSelectedValue(options.find((option) => option === value) || options[0]);\n // }\n // }, [value]);\n\n // const handleSelection = (value: string) => {\n // setSelectedValue(value);\n // onSelectionChange(value);\n // };\n\n return (\n
    \n {options.map((option, index) => (\n onSelectionChange(option)}\n >\n {value === option ? (\n \n ) : (\n
    \n )}\n \n {option}\n \n \n ))}\n
    \n );\n};\nexport default CustomRadioSelector;\n","import React, {\n useState,\n InputHTMLAttributes,\n useEffect,\n TextareaHTMLAttributes,\n useMemo,\n useCallback,\n useRef,\n MutableRefObject,\n useLayoutEffect,\n} from 'react';\nimport { createStyle } from 'utils/createStyle';\n\ninterface CustomInputProps extends InputHTMLAttributes {}\ninterface CustomTextareaProps\n extends Omit, 'className'> {\n className?: string;\n showCounter?: boolean;\n counterLimit?: number;\n}\n\ntype CustomTextInputProps = CustomInputProps &\n CustomTextareaProps & {\n label: string;\n errorMessage?: string;\n textarea?: boolean;\n onHasValueChange?: (hasValue: boolean) => void;\n };\n\nconst inputWrapperStyle = createStyle(`relative`, { width: '380px' });\n\nexport const CustomTextInput = ({\n label,\n errorMessage,\n textarea,\n showCounter,\n counterLimit = 150,\n value,\n onHasValueChange,\n ...props\n}: CustomTextInputProps) => {\n const [focused, setFocused] = useState(false);\n const [hasValue, setHasValue] = useState(true);\n const [touched, setTouched] = useState(false);\n const inputRef = useRef();\n\n const hasError = touched && !hasValue && Boolean(errorMessage);\n\n useEffect(() => {\n if (onHasValueChange) {\n onHasValueChange(hasValue);\n }\n }, [hasValue, onHasValueChange]);\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.value = value?.toString() || '';\n }\n }, [value]);\n\n const handleFocus = () => {\n setTouched(true);\n setFocused(true);\n };\n const handleBlur = (e: React.FocusEvent) => {\n props.onBlur?.(e as any);\n setFocused(false);\n setHasValue(!!value && value.toString().length > 0);\n props.onChange?.(e as any);\n };\n\n const handleChange = (e: React.ChangeEvent) => {\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\n if (target.value && target.value.toString().length > counterLimit) {\n return;\n }\n setHasValue(target.value.length > 0);\n };\n\n const getTopValue = useCallback(() => {\n // focused || hasValue ? '0.75rem' : textarea ? '18px' : '50%'\n if (focused || hasValue) {\n return '0.75rem';\n }\n if (hasError) {\n return '35%';\n }\n if (textarea) {\n return '18px';\n }\n return '50%';\n }, [focused, hasValue, hasError, textarea]);\n\n const labelStyle = useMemo(\n () =>\n createStyle(\n `\n absolute left-4 \n ${focused ? 'text-xs text-midnight-black' : 'text-grey-2'}\n ${focused || hasValue ? 'text-xs' : ''} \n transition-all duration-200 bg-white w-11/12\n `,\n {\n top: getTopValue(),\n transform: focused || hasValue || textarea ? 'none' : 'translateY(-50%)',\n fontSize: focused || hasValue ? '14px' : '18px',\n marginBottom: focused || hasValue ? '0.5rem' : '0',\n }\n ),\n [focused, hasValue, textarea, getTopValue]\n );\n\n const inputStyle = useMemo(\n () =>\n createStyle(\n `\n w-full px-4 py-5 border rounded-lg border-grey-light\n ${props.className}\n focus:outline-none\n text-base text-grey-darkest\n ${hasError && !focused ? 'border-error' : 'focus:border-brand'}\n `,\n {\n fontSize: '18px',\n paddingTop: '33px',\n paddingBottom: '15px',\n minHeight: textarea ? '144px' : 'auto',\n height: 'auto',\n ...(textarea ? { resize: 'none' } : {}),\n }\n ),\n [props.className, hasError, textarea]\n );\n\n const InputElement = textarea ? 'textarea' : 'input';\n\n useEffect(() => {\n value !== '' && value !== undefined ? setHasValue(true) : setHasValue(false);\n }, [value]);\n\n return (\n
    \n \n\n ) => handleChange(e)}\n ref={inputRef}\n defaultValue={value?.toString() || ''}\n maxLength={counterLimit}\n />\n {hasError && !focused && (\n
    {errorMessage}
    \n )}\n {showCounter ? : null}\n
    \n );\n};\n\nconst Counter = ({\n inputEl,\n counterLimit,\n}: {\n inputEl?: MutableRefObject;\n counterLimit: number;\n}) => {\n const value = inputEl?.current?.value || '';\n const [, setTriggerRender] = useState(false);\n\n useLayoutEffect(() => {\n const listener = () => {\n setTriggerRender((v) => !v);\n };\n\n inputEl?.current.addEventListener('input', listener);\n return () => window.removeEventListener('input', listener);\n }, [inputEl?.current]);\n\n const getCharCount = () => {\n const stringValue = value?.toString();\n return stringValue?.length ? `${stringValue.length}/${counterLimit}` : null;\n };\n\n return (\n \n {getCharCount()}\n \n );\n};\n\nexport default CustomTextInput;\n","import React, { FC } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTimes } from '@fortawesome/pro-light-svg-icons';\n\nexport interface ModalProps {\n onClose: () => void;\n children: React.ReactNode;\n}\n\nexport const Modal: FC = ({ onClose, children }) => {\n return (\n
    \n
    \n\n
    \n
    \n {children}\n\n \n \n \n
    \n
    \n
    \n );\n};\n\nexport default Modal;\n","import { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\n\nexport const styles = createStyles({\n formHeader: ['text-4xl font-semibold text-center text-brand-dark', { marginBottom: 40 }],\n stepperButton: [\n 'bg-brand text-white font-semibold text-lg leading-7 py-3.5 px-11 rounded-full inline-flex items-center justify-center disabled:bg-grey-2',\n {\n '&:disabled': {\n backgroundColor: colors.lineGrey,\n color: colors.grey3,\n cursor: 'default',\n },\n },\n ],\n stepperButtonClear:\n 'bg-white text-brand font-semibold text-lg leading-7 py-3.5 px-8 rounded-full inline-flex items-center justify-center focus:outline-none',\n dateMarginContainer: ['flex flex-col space-y-5'],\n dateMarginRow: ['flex items-center space-y-5', { height: '100%' }],\n dateMarginEntry: ['absolute no-wrap ml-4 text-lg text-grey-darkest', { whiteSpace: 'nowrap' }],\n stepContentWrapper: ['', { marginBottom: 84, minHeight: 448 }],\n});\n","import React, { useContext } from 'react';\nimport _round from 'lodash/round';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faGiftCard } from '@fortawesome/pro-light-svg-icons';\n\nimport { BulkOrderContext } from './BulkOrderContext';\nimport { formatDateObject } from 'common/utils/time';\nimport { ReactComponent as Stars } from 'media/images/today-bonus-stars.svg';\nimport { styles } from './styles';\n\ninterface ReviewOrderStepProps {\n showRecipientModal?: () => void;\n brandName: string;\n amount: string;\n goBack: () => void;\n rebate: number;\n}\n\nexport const ReviewOrderStep = (props: ReviewOrderStepProps) => {\n const { state, addToCart } = useContext(BulkOrderContext);\n const amountValue = props.amount ? parseFloat(props.amount.substr(1)) : 0;\n const subTotal = state.recipients.length * amountValue;\n const earnings = subTotal * props.rebate;\n\n // NOTE: width 490 is what the specs are on figma\n return (\n
    \n

    \n Review Order\n

    \n \n
    \n Delivery Date\n \n {state.deliveryDate && formatDateObject(state.deliveryDate)}\n \n
    \n
    \n Recipients\n \n View Details\n \n
    \n
    \n Sender Name\n {state.senderName}\n
    \n\n {state.message && (\n
    \n Message\n

    {state?.message}

    \n
    \n )}\n\n
    \n \n \n {props.brandName}\n \n \n Qty {`${state.recipients.length} x ${props.amount}`}\n \n
    \n
    \n Subtotal\n ${_round(subTotal, 2).toFixed(2)}\n
    \n
    \n
    \n \n
    \n

    Your Earnings

    \n

    \n ${ _round(earnings, 2).toFixed(2) }\n

    \n
    \n
    \n
    \n\n
    \n
    \n addToCart()}\n >\n Add to Cart\n \n
    \n\n
    \n \n
    \n
    \n
    \n );\n};\n","export interface Recipient {\n name: string;\n email: string;\n}\n\nconst parseCSV = (csv: string): string[][] => {\n const lines = csv.trim().split('\\n');\n return lines.map((line) => line.split(',').map((cell) => cell.trim()));\n};\n\nexport const csvFileToRecipients = async (file: File): Promise => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (event) => {\n try {\n const csv = event?.target?.result as string;\n const rows = parseCSV(csv);\n const header = rows[0];\n const data = rows.slice(1);\n\n // TODO(ParkingLot): Do we really need this validation?\n // If yes... Clearer messages about the error reason?\n if (\n header.length < 2 ||\n header[0] !== 'Recipient Name' ||\n header[1] !== 'Recipient Email'\n ) {\n reject(\n 'There was an error uploading your file. Please use the template provided.'\n );\n return;\n }\n\n const recipients: Recipient[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const name = data[i][0];\n const email = data[i][1];\n\n if (name && email) {\n recipients.push({ name, email });\n }\n }\n\n resolve(recipients);\n } catch (error) {\n reject(error);\n }\n };\n\n reader.onerror = (error) => {\n reject(error);\n };\n\n reader.readAsText(file);\n });\n};\n","import React, { useState, useEffect } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faFileCsv } from '@fortawesome/pro-light-svg-icons';\n\ninterface FileUploadSuccessProps {\n fileName: string;\n fileSize: number;\n completed: boolean;\n}\n\nconst PROGRESSBAR_ANIMATION_DURATION_MS = 3000;\n\nexport const FileUploadSuccess = ({ fileName, fileSize, completed }: FileUploadSuccessProps) => {\n const [progress, setProgress] = useState(0);\n const [progressColor, setProgressColor] = useState('bg-gradient-to-r from-white to-brand');\n\n useEffect(() => {\n if (completed) {\n setProgress(100);\n setProgressColor('bg-success');\n return;\n }\n\n const timer = setInterval(() => {\n setProgress((prevProgress) => {\n if (prevProgress >= 100) {\n clearInterval(timer);\n setProgressColor('bg-success');\n return 100;\n }\n return prevProgress + 1;\n });\n }, PROGRESSBAR_ANIMATION_DURATION_MS / 100);\n\n return () => {\n clearInterval(timer);\n };\n }, [completed]);\n\n const formatFileSize = (size: number) => {\n return size < 1000000\n ? `${(size / 1000).toFixed(1)} KB`\n : `${(size / 1000000).toFixed(1)} MB`;\n };\n\n return (\n
    \n
    \n
    \n \n
    \n\n
    \n

    {fileName}

    \n

    {formatFileSize(fileSize)}

    \n
    \n\n
    \n {progress}%\n
    \n
    \n\n
    \n 0 ? 100 : 0}%`,\n transitionDuration: completed || progress > 99 ? '0.5s' : '3s',\n }}\n >
    \n
    \n
    \n );\n};\n\nexport default FileUploadSuccess;\n","import React, { useRef, useState } from 'react';\nimport { FileDetails, Recipient } from './BulkOrderContext';\nimport { csvFileToRecipients } from './csv-file-to-recipients';\nimport FileUploadSuccess from './FileUploadSuccess';\nimport { formatSize } from 'common/utils/utils';\n\ninterface FileUploadProps {\n fileDetails: FileDetails;\n setRecipients: (recipients: Recipient[]) => void;\n setError: (error: string) => void;\n setFileDetails: (fileDetails: FileDetails) => void;\n maxRecipients?: number;\n maxFileSize?: number;\n}\n\nexport const FileUpload = ({\n fileDetails,\n setFileDetails,\n setRecipients,\n setError,\n maxRecipients = 125,\n maxFileSize = 0,\n}: FileUploadProps) => {\n const [isDragging, setIsDragging] = useState(false);\n const [uploadedFile, setUploadedFile] = useState(null);\n const fileInputRef = useRef(null);\n\n const handleFileInputChange = (event: React.ChangeEvent) => {\n if (event.target.files) {\n handleFileUpload(event.target.files[0]);\n }\n };\n\n const handleClick = () => {\n fileInputRef.current?.click();\n };\n\n const handleDragOver = (event: React.DragEvent) => {\n event.preventDefault();\n setIsDragging(true);\n };\n\n const handleDragLeave = () => {\n setIsDragging(false);\n };\n\n const handleFileUpload = async (file: File) => {\n try {\n setError('');\n\n if (file.size > maxFileSize && maxFileSize > 0) {\n setError(\n `The maximum file size is ${formatSize(\n maxFileSize\n )}. Please upload a smaller file.`\n );\n return;\n }\n\n if (!file.name.toLowerCase().endsWith('.csv')) {\n setError(\n 'Unfortunately that file type is not supported. Please try uploading a .csv file.'\n );\n return;\n }\n\n const recipients = await csvFileToRecipients(file);\n\n if (recipients.length > maxRecipients && maxRecipients > 0) {\n setError(\n `Each bulk order is limited to ${maxRecipients} gifts. Please adjust your file accordingly and re-upload.`\n );\n return;\n }\n\n // TODO(ParkingLot): Empty CSV files?\n if (recipients.length <= 0) {\n setError(\n `Your file seems to be empty. Please adjust your file accordingly and re-upload.`\n );\n return;\n }\n\n setRecipients(recipients);\n setUploadedFile(file);\n setFileDetails({ name: file.name, size: file.size });\n } catch (error) {\n const errorMsg =\n typeof error === 'string'\n ? error\n : 'There was an error trying to upload your file. If the issue persists, please reach out to customer support at 800-727-4715 (Option 3).';\n setError(errorMsg);\n }\n };\n\n const handleDrop = (event: React.DragEvent) => {\n event.preventDefault();\n setIsDragging(false);\n\n if (event.dataTransfer.files) {\n handleFileUpload(event.dataTransfer.files[0]);\n }\n };\n\n return fileDetails ? (\n \n ) : (\n \n \n
    \n

    \n Drag & drop a file or{' '}\n choose file\n

    \n
    \n \n );\n};\n\nexport default FileUpload;\n","import React, { useState, useContext, useEffect, useMemo, useCallback } from 'react';\nimport { BulkOrderContext, FileDetails } from './BulkOrderContext';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faArrowRight, faDownload, faEye, faTrash } from '@fortawesome/pro-regular-svg-icons';\nimport { faCheckCircle } from '@fortawesome/pro-duotone-svg-icons';\nimport FileUpload from './FileUpload';\nimport type { ModalControls } from 'hooks/useModalControls';\nimport { useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport { Btn } from 'components/btn/Btn';\nimport { LinkBtn } from 'components/link-btn';\nimport { Value } from 'firebase/remote-config';\nimport { styles } from './styles';\nimport { delay } from 'common/utils';\nimport { colors } from 'styles/settings';\nimport { faTimes } from '@fortawesome/pro-light-svg-icons';\n\nconst getNumber = (v: Value) => v.asNumber();\nconst MAX_FILE_SIZE = 100 * 1024;\n\nexport const Step4 = ({ recipientsListModal }: { recipientsListModal: ModalControls }) => {\n const { state, setStep, setRecipients, setFileDetails } = useContext(BulkOrderContext);\n\n const [error, setError] = useState('');\n\n const step = state.step;\n\n const max_cart_line_items = useFirebaseConfigValues('max_cart_line_items', 0, getNumber);\n const [uploadAnimationRunning, setUploadAnimationRunning] = useState(false);\n const fileDetails = state.fileDetails as FileDetails;\n\n const onReviewOrder = () => {\n if (!fileDetails || fileDetails.size <= 0) {\n setError('You must upload a file before proceeding to the next step.');\n return;\n }\n\n if (error) {\n return;\n }\n\n setStep(step + 1);\n };\n\n // Clear error state when user navigate to other step.\n useEffect(() => {\n setError('');\n }, [step]);\n\n const reviewOrderEnabled = useMemo(() => {\n return !uploadAnimationRunning;\n }, [uploadAnimationRunning]);\n\n const openRecipientsTable = () => {\n recipientsListModal.toggleModalVisibility();\n };\n\n const downloadTemplate = useCallback(() => {\n const demoCSV = `Recipient Name,Recipient Email`;\n\n const file = new Blob([demoCSV], { type: 'text/plain' });\n const downloadLink = document.createElement('a');\n downloadLink.download = 'RaiseRight_eGift_Recipients.csv';\n downloadLink.href = window.URL.createObjectURL(file);\n downloadLink.style.display = 'none';\n document.body.appendChild(downloadLink);\n downloadLink.click();\n }, []);\n\n const uploadStatusMessage = useMemo(() => {\n if (uploadAnimationRunning) {\n return 'Uploading your file...';\n }\n\n if (fileDetails && !error) {\n return (\n \n Upload Complete\n \n \n \n \n );\n }\n\n return 'Upload';\n }, [uploadAnimationRunning, fileDetails, error]);\n\n return (\n <>\n
    \n
    \n

    Add Recipient Details

    \n\n
    \n
    \n Use our template to upload a file with your\n
    recipients’ information ({max_cart_line_items} maximum).\n
    \n
    \n
    \n
    \n
    \n
    \n {uploadStatusMessage}\n
    \n {!state.fileDetails ? (\n \n Download Template\n \n ) : (\n {\n setFileDetails(undefined);\n setRecipients([]);\n }}\n className=\"ml-auto font-semibold text-base leading-160 text-center text-error no-underline\"\n >\n {!uploadAnimationRunning ? (\n <>\n Remove\n \n ) : (\n \n \n Cancel\n \n )}\n \n )}\n
    \n\n {\n setUploadAnimationRunning(true);\n setFileDetails(value);\n await delay(3000);\n setUploadAnimationRunning(false);\n }}\n setRecipients={setRecipients}\n setError={setError}\n maxFileSize={MAX_FILE_SIZE}\n />\n\n
    \n {error}\n
    \n\n {fileDetails && !uploadAnimationRunning && !error ? (\n
    \n \n View Details\n \n
    \n ) : null}\n
    \n
    \n\n
    \n
    \n \n Review Order\n \n
    \n
    \n \n
    \n
    \n \n );\n};\n","import React, { useState, useContext, useCallback } from 'react';\nimport { BulkOrderContext } from './BulkOrderContext';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faArrowRight, faCheck } from '@fortawesome/pro-regular-svg-icons';\nimport { CustomRadioSelector } from './CustomRadioSelector';\nimport { CustomTextInput } from './CustomTextInput';\nimport { Modal } from './Modal';\nimport { DatePicker } from 'components/date-picker';\nimport { formatDateObject } from 'common/utils/time';\nimport { Faceplate } from 'common/api/misc';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { ReviewOrderStep } from './ReviewOrderStep';\nimport { Product } from 'common/api/e-comm/models/Product';\nimport { useFormikContext } from 'formik';\nimport { ProductAmountInputFormData } from 'features/product/components/ProductAmountInput';\nimport type { ModalControls } from 'hooks/useModalControls';\nimport { Step4 } from './Step4';\nimport { styles } from './styles';\nimport { colors } from 'styles/settings';\nimport { Btn } from 'components/btn/Btn';\n\nfunction addMonthsFromNow(months: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + months);\n return date;\n}\n\ninterface BulkOrderFormProps {\n onCancel: (location?: string) => void;\n brandName: string;\n amount: string;\n product: Product;\n recipientsListModal: ModalControls;\n}\n\nconst getRebate = (\n priceOverride: number,\n selectedOptions: { [key: string]: string },\n product: Product\n) => {\n let rebate = 0;\n if (priceOverride) {\n rebate = product.bonus?.rebate || product.rebate;\n } else {\n const selectedValues = Object.values(selectedOptions);\n\n if (selectedValues.length > 0) {\n const value = parseInt(selectedValues[0].substr(1) || '0.00');\n\n for (let i = 0; i < product.variants.length; i++) {\n const variant = product.variants[i];\n if (variant.price === value) {\n rebate = variant.bonus?.rebate || variant.rebate;\n break;\n }\n }\n }\n }\n\n return rebate / 100;\n};\n\nconst BulkOrderForm = ({\n onCancel,\n brandName,\n amount,\n product,\n recipientsListModal,\n}: BulkOrderFormProps) => {\n const [showModal, setShowModal] = useState(false);\n const [deliveryOption, setDeliveryOption] = useState('Now');\n const today = new Date();\n const tomorrow = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);\n\n const { state, setStep, setSelectedCardDesign, setDeliveryDate, setSenderName, setMessage } =\n useContext(BulkOrderContext);\n\n const handleInputChange = useCallback(\n debounce(\n (value: string, updateFn: (_: string) => void) => {\n updateFn(value);\n },\n 100,\n { leading: true }\n ),\n []\n );\n\n const formikCtx = useFormikContext();\n const rebate = getRebate(\n formikCtx.values.priceOverride || 0,\n formikCtx.values.selectedOptions,\n product\n );\n\n const step = state.step;\n\n const [senderNameHasValue, setSenderNameHasValue] = useState(false);\n\n switch (step) {\n case 1:\n return (\n <>\n
    \n

    Choose Your Design

    \n\n
    \n {state.giftImageOptions &&\n state.giftImageOptions.map((option: Faceplate, index: number) => (\n {\n setSelectedCardDesign(option);\n }}\n className={classNames(\n 'cursor-pointer p-1 focus:outline-none rounded-lg border-2 hover:border-brand-pale-blue',\n state.selectedCardDesign?.ImageId === option.ImageId\n ? 'border-brand-2'\n : 'border-white'\n )}\n >\n \n \n ))}\n
    \n
    \n
    \n
    \n setStep(state.step + 1)}\n >\n Next\n \n \n
    \n\n
    \n onCancel()}\n >\n Cancel\n \n
    \n
    \n \n );\n case 2:\n return (\n <>\n {showModal && (\n setShowModal(false)}>\n

    Schedule Delivery

    \n\n
    \n\n
    \n setDeliveryDate(dt as Date)}\n minDate={tomorrow}\n maxDate={addMonthsFromNow(12)}\n />\n\n
    \n setShowModal(false)}\n >\n Apply\n \n
    \n\n
    \n {\n setDeliveryDate(today);\n setShowModal(false);\n setDeliveryOption('Now');\n }}\n >\n Cancel\n \n
    \n
    \n
    \n )}\n\n
    \n

    Select a Delivery Date

    \n\n
    \n {\n setDeliveryOption(option);\n\n if (option === 'Now') {\n setDeliveryDate(today);\n } else if (option === 'Schedule Delivery') {\n setShowModal(true);\n setDeliveryDate(tomorrow);\n }\n }}\n />\n
    \n
    \n
    \n {deliveryOption === 'Now' && !showModal ? (\n <>\n \n {state.deliveryDate && (\n \n {formatDateObject(state?.deliveryDate)}\n \n )}\n \n ) : (\n \n )}\n
    \n
    \n\n
    \n {deliveryOption === 'Schedule Delivery' && !showModal && (\n
    \n \n {state.deliveryDate && (\n \n {formatDateObject(state?.deliveryDate)}\n \n )}\n\n {\n setShowModal(true);\n }}\n >\n Change\n \n
    \n )}\n
    \n
    \n
    \n
    \n\n
    \n
    \n setStep(step + 1)}>\n Next\n \n \n
    \n\n
    \n {state.giftImageOptions && state.giftImageOptions.length === 1 ? (\n onCancel()}\n >\n Cancel\n \n ) : (\n setStep(step - 1)}\n >\n Back\n \n )}\n
    \n
    \n \n );\n case 3:\n return (\n <>\n
    \n
    \n

    Make it Memorable

    \n\n

    \n Brighten their day with a custom message.\n

    \n
    \n
    \n {\n handleInputChange(target.value, setSenderName);\n }}\n onHasValueChange={setSenderNameHasValue}\n value={state.senderName}\n errorMessage=\"Sender's Name is required.\"\n />\n\n
    \n\n \n handleInputChange(target.value, setMessage)\n }\n value={state.message}\n showCounter\n />\n
    \n
    \n\n
    \n
    \n setStep(step + 1)}\n disabled={!senderNameHasValue}\n >\n Next\n \n \n
    \n
    \n setStep(step - 1)}\n >\n Back\n \n
    \n
    \n \n );\n case 4:\n return ;\n case 5:\n return (\n setStep(step - 1)}\n rebate={rebate}\n showRecipientModal={recipientsListModal.toggleModalVisibility}\n />\n );\n default:\n return null;\n }\n};\n\nexport default BulkOrderForm;\n","import React from 'react';\nimport RaiseRightLogo from '../../media/images/LogoIconLightBg.svg';\nimport { createStyles } from 'utils/createStyle';\n\nconst Loading = () => {\n const loadingStyles = createStyles({\n loadingContainer:\n 'flex flex-col h-screen w-full mx-auto bg-white fixed top-0 bottom-0 left-0 right-0 items-center justify-center',\n loadingContent: 'text-center',\n loadingLogo: [\n 'w-48 h-48 mx-auto opacity-85 animate-pulse',\n { animationDuration: '3s', marginBottom: '40px' },\n ],\n loadingTitle: 'text-4xl font-semibold mb-3 text-brand-dark',\n loadingText: ['text-base text-grey-medium leading-8', { fontSize: '20px' }],\n });\n\n return (\n
    \n
    \n
    \n \n
    \n\n

    We're preparing your gifts

    \n\n

    \n In a few moments this window will close and\n

    \n\n

    \n your gifts will be added into your cart.\n

    \n
    \n
    \n );\n};\n\nexport default Loading;\n","import React from 'react';\n\nimport { createStyles } from 'utils/createStyle';\nimport { Recipient } from './BulkOrderContext';\nimport { Modal, ModalSize } from 'components/modal/Modal';\n\nimport type { ModalControls } from 'hooks/useModalControls';\n\nconst styles = createStyles({\n recipientListScrollContent: [\n 'grid overflow-y-scroll',\n {\n gridColumn: '1 / -1',\n maxHeight: '45vh',\n gridTemplateColumns: 'auto 1fr 1fr',\n scrollbarWidth: 'thin' /* For Firefox */,\n scrollbarColor: 'transparent transparent' /* For Firefox */,\n '::-webkit-scrollbar': {\n width: '8px' /* For Chrome, Safari, and Opera */,\n },\n '::-webkit-scrollbar-thumb': {\n backgroundColor: 'rgba(0, 0, 0, 0.2)' /* For Chrome, Safari, and Opera */,\n borderRadius: '20px',\n },\n '::-webkit-scrollbar-track': {\n backgroundColor: 'transparent' /* For Chrome, Safari, and Opera */,\n },\n },\n ],\n recipientListContainer: [\n 'border rounded ounded-lg border-grey-line mt-8 mx-auto',\n { boxShadow: '0px 18px 32px rgba(208, 210, 218, 0.15)' },\n ],\n recipientListData: ['grid text-align-left', { gridTemplateColumns: 'auto 1fr 1fr' }],\n recipientListFooter: [\n '',\n {\n boxShadow:\n '0px 0px 16px -4px rgba(16, 24, 40, 0.08), 0px -2px 6px -2px rgba(16, 24, 40, 0.03)',\n },\n ],\n});\n\nexport const RecipientListModal = ({\n modalControls,\n recipients,\n fileName,\n}: {\n modalControls: ModalControls;\n recipients: Recipient[];\n fileName?: string;\n}) => {\n const headerStyles =\n 'text-left text-xs font-semibold text-grey-medium bg-grey-50 inline px-6 py-3.5';\n const dataStyles =\n 'border-b border-grey-line text-left text-grey-medium text-base inline px-6 py-3.5';\n return (\n \n
    \n

    Recipient Details

    \n

    \n File: {fileName}\n

    \n
    \n
    \n

    \n

    Recipient Name

    \n

    Recipient Email

    \n
    \n {recipients.map((recipient: Recipient, index: number) => (\n \n {index + 1}\n {recipient.name}\n {recipient.email}\n \n ))}\n
    \n
    \n
    \n

    \n {recipients.length} Recipients\n

    \n
    \n
    \n \n Close\n \n
    \n \n );\n};\n","export default [\n {\n ImageUrl:\n 'https://ne1.wac.edgecastcdn.net/8026C7/ShopWithScrip.com/images/dynamic/vcert/STAB002_Small_A.jpg',\n ImageName: 'STAB002_Small_A.jpg',\n ImageId: 5190,\n FaceplateId: 'DQRPNZE4',\n },\n {\n ImageUrl:\n 'https://ne1.wac.edgecastcdn.net/8026C7/ShopWithScrip.com/images/dynamic/vcert/STAB002_Small_D.jpg',\n ImageName: 'STAB002_Small_D.jpg',\n ImageId: 5191,\n FaceplateId: 'DBB4DTYD',\n },\n {\n ImageUrl:\n 'https://ne1.wac.edgecastcdn.net/8026C7/ShopWithScrip.com/images/dynamic/vcert/STAB002_Small_E.jpg',\n ImageName: 'STAB002_Small_E.jpg',\n ImageId: 5192,\n FaceplateId: 'DBFH5EBD',\n },\n {\n ImageUrl:\n 'https://ne1.wac.edgecastcdn.net/8026C7/ShopWithScrip.com/images/dynamic/vcert/STAB002_Small_I.jpg',\n ImageName: 'STAB002_Small_I.jpg',\n ImageId: 5193,\n FaceplateId: 'D3UPPJQRP',\n },\n {\n ImageUrl:\n 'https://ne1.wac.edgecastcdn.net/8026C7/ShopWithScrip.com/images/dynamic/vcert/STAB002_Small_J.jpg',\n ImageName: 'STAB002_Small_J.jpg',\n ImageId: 5194,\n FaceplateId: 'DQRPNZEH',\n },\n {\n ImageUrl:\n 'https://ne1.wac.edgecastcdn.net/8026C7/ShopWithScrip.com/images/dynamic/vcert/STAB002_Small_L.jpg',\n ImageName: 'STAB002_Small_L.jpg',\n ImageId: 5195,\n FaceplateId: 'DS9KWYVY',\n },\n {\n ImageUrl:\n 'https://ne1.wac.edgecastcdn.net/8026C7/ShopWithScrip.com/images/dynamic/vcert/STAB002_Small_R.jpg',\n ImageName: 'STAB002_Small_R.jpg',\n ImageId: 5196,\n FaceplateId: 'DDFESPSTH',\n },\n];\n","import React, { useEffect, useContext, useState, useLayoutEffect } from 'react';\nimport _round from 'lodash/round';\nimport { useHistory } from 'react-router-dom';\nimport { useFormikContext } from 'formik';\nimport { createStyles } from 'utils/createStyle';\nimport { Footer } from './Footer';\nimport Header from './Header';\nimport BulkOrderForm from './BulkOrderForm';\nimport BulkOrderLoading from './BulkOrderLoading';\nimport { BulkOrderContext, BulkOrderProvider } from './BulkOrderContext';\nimport Modal2 from './Modal';\nimport { FadeIn } from 'components/loading-screen/FadeIn';\nimport { Faceplate } from 'common/api/misc';\nimport { ProductAmountInputFormData } from 'features/product/components/ProductAmountInput';\nimport { useModalControls, ModalControls } from 'hooks/useModalControls';\nimport { RecipientListModal } from './RecipientListModal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { Product } from 'common/api/e-comm/models/Product';\nimport { Btn } from 'components/btn/Btn';\nimport { Modal } from 'components/modal/Modal';\nimport { useFirebaseConfigValues, firebaseValueAsNumber } from 'hooks/useFirebaseConfigValues';\n\n// temporary devcode\nimport mockCardDesigns from './brand-images.fixture';\nimport { useRootSelector } from 'rootStore';\nimport { selectIsBulkEgiftingEnabled } from 'common/features/store/duck/ffs';\n\nconst styles = createStyles({\n wrapper: 'overflow-y-scroll w-full mx-auto bg-white absolute top-0 bottom-0 left-0 right-0',\n body: ['flex flex-col sm:flex-row flex-grow min-h-0'],\n leftPreview: ['w-full sm:w-1/3 md:w-2/5 flex items-center justify-center bg-grey-accent'],\n cardPreview: [\n 'w-full h-full object-cover mb-4 rounded-xl',\n { width: '346px', height: '230px' },\n ],\n rightSteppingForm: ['w-full sm:w-2/3 md:w-3/5', { minHeight: 950 }],\n formContainer: ['flex flex-col sm:h-auto p-4 mx-auto w-max sm:p-0', { minHeight: '548px' }],\n formStepper: ['text-center text-grey-medium', { marginTop: 165 }],\n footer: ['w-full text-white', { height: '100px', background: '#143860' }],\n recipientListScrollContent: [\n 'grid overflow-y-scroll',\n {\n gridColumn: '1 / -1',\n maxHeight: '50vh',\n gridTemplateColumns: 'auto 1fr 1fr',\n scrollbarWidth: 'thin' /* For Firefox */,\n scrollbarColor: 'transparent transparent' /* For Firefox */,\n '::-webkit-scrollbar': {\n width: '8px' /* For Chrome, Safari, and Opera */,\n },\n '::-webkit-scrollbar-thumb': {\n backgroundColor: 'rgba(0, 0, 0, 0.2)' /* For Chrome, Safari, and Opera */,\n borderRadius: '20px',\n },\n '::-webkit-scrollbar-track': {\n backgroundColor: 'transparent' /* For Chrome, Safari, and Opera */,\n },\n },\n ],\n recipientListContainer: [\n 'border rounded ounded-lg border-grey-line mt-8 mx-auto',\n { boxShadow: '0px 18px 32px rgba(208, 210, 218, 0.15)' },\n ],\n recipientListData: ['grid text-align-left', { gridTemplateColumns: 'auto 1fr 1fr' }],\n recipientListFooter: [\n '',\n {\n boxShadow:\n '0px 0px 16px -4px rgba(16, 24, 40, 0.08), 0px -2px 6px -2px rgba(16, 24, 40, 0.03)',\n },\n ],\n info: [\n 'text-brand text-sm font-semibold border-l-4 border-primary-blue-light px-5 py-4 outline-none focus:outline-none',\n { boxShadow: '0px 8px 32px rgba(44, 45, 46, 0.12)', width: 335 },\n ],\n});\n\ntype BulkOrderScreenProps = {\n facePlates: Faceplate[];\n brandName: string;\n brandImageUrl: string;\n product: Product;\n closeGiftDetails: () => void;\n};\n\nconst getAmount = (selectedOption: { [key: string]: string }, priceOverride: number) => {\n let amount = '$0.00';\n const selectedOption_ = Object.values(selectedOption);\n if (priceOverride) {\n amount = `$${_round(priceOverride, 2).toFixed(2)}`;\n } else if (selectedOption_.length > 0) {\n amount = selectedOption_[0];\n }\n return amount;\n};\n\nconst useRemoveDocumentBodyScroll = () => {\n useLayoutEffect(() => {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }, []);\n};\n\nexport const BulkOrderScreen = ({\n brandImageUrl,\n brandName,\n facePlates,\n product,\n}: Omit) => {\n const { state, setGiftImageOptions, setSelectedCardDesign, setStep, setProductId } =\n useContext(BulkOrderContext);\n const history = useHistory();\n const [modalVisible, setModalVisible] = useState(false);\n\n const formikCtx = useFormikContext();\n const amount = getAmount(formikCtx.values.selectedOptions, formikCtx.values.priceOverride || 0);\n const [exitLocation, setExitLocation] = useState();\n const enable_bulk_egifting = useRootSelector(selectIsBulkEgiftingEnabled);\n\n useRemoveDocumentBodyScroll();\n\n // modals\n const recipientsListModal = useModalControls();\n const recipientsInfoModal = useModalControls();\n\n useEffect(() => {\n setProductId(Number(product.id));\n }, [product, product.id]);\n\n useEffect(() => {\n const designs = facePlates || mockCardDesigns;\n\n // NOTE: We skip step 1 and automagically select the first card design.\n if (designs.length === 1) {\n setStep(2);\n }\n setGiftImageOptions(designs);\n setSelectedCardDesign(designs[0]);\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (!enable_bulk_egifting) {\n history.goBack();\n }\n }, [enable_bulk_egifting, history]);\n\n const toggleModal = () => {\n setModalVisible(!modalVisible);\n };\n\n const handleExit = (location?: string) => {\n const earlyExitAllowed =\n (state.step === 1 && state.giftImageOptions.length > 1) ||\n (state.step === 2 && state.giftImageOptions.length === 1);\n if (earlyExitAllowed) {\n if (location) {\n history.replace(location);\n } else {\n history.goBack();\n }\n } else {\n toggleModal();\n setExitLocation(location);\n }\n };\n\n if (state.addingToCartLoading) {\n return ;\n } else if (!enable_bulk_egifting) {\n return null;\n }\n\n return (\n
    \n
    \n\n \n {state.step !== 5 && (\n
    \n
    \n \n
    \n
    \n \n
    \n \n {brandName}\n \n \n {amount}\n \n
    \n
    \n
    \n )}\n\n \n
    \n {state.step !== 5 && (\n
    \n Step{' '}\n {state.giftImageOptions.length === 1 ? state.step - 1 : state.step}/\n {state.giftImageOptions.length === 1 ? 3 : 4}\n
    \n )}\n\n \n
    \n {state.step === 4 && (\n
    \n \n What if I have more than 125 recipients?\n \n
    \n )}\n
    \n \n
    \n
    \n
    \n\n \n\n {modalVisible && (\n \n
    \n \n\n

    \n Are you sure?\n

    \n\n

    \n By exiting this window, all of the order progress you've\n

    \n

    \n made so far will not be saved.\n

    \n\n
    \n
    \n setModalVisible(false)}\n >\n Continue Editing\n \n
    \n\n
    \n {\n if (exitLocation) {\n history.replace(exitLocation);\n } else {\n history.goBack();\n }\n }}\n >\n Yes, I want to leave\n \n
    \n
    \n
    \n
    \n )}\n\n \n \n );\n};\n\nconst NumberRecipientsInfoModal = ({ modalControls }: { modalControls: ModalControls }) => {\n const max_cart_line_items = useFirebaseConfigValues(\n 'max_cart_line_items',\n 0,\n firebaseValueAsNumber\n );\n return (\n \n

    \n {max_cart_line_items}+ Gifts\n

    \n

    \n You can send gifts to more than {max_cart_line_items} recipients by placing multiple\n orders.\n

    \n \n OK\n \n \n );\n};\n\nconst WrappedBulkOrderScreen = ({ closeGiftDetails, ...props }: BulkOrderScreenProps) => {\n const modal = useModalControls();\n return (\n \n \n \n \n );\n};\n\nconst BulkGiftingErrorModal = ({ modalControls }: { modalControls: ModalControls }) => {\n const history = useHistory();\n const closeModal = () => {\n modalControls.toggleModalVisibility();\n history.goBack();\n };\n\n return (\n \n \n

    \n Unexpected Error\n

    \n

    \n Something went wrong while adding the items to your cart. Please call Customer\n Support at 800-727-4715 (option 3) for assistance.\n

    \n \n Ok\n \n
    \n );\n};\n\nexport default WrappedBulkOrderScreen;\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17, _path18;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgTryBuyNowImg(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 95,\n height: 91,\n viewBox: \"0 0 95 91\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M90.0367 46.3965C90.038 37.573 87.4226 28.9472 82.5213 21.6102C77.6201 14.2732 70.6531 8.55448 62.5014 5.17727C54.3498 1.80005 45.3798 0.916069 36.7257 2.63713C28.0717 4.35819 20.1224 8.60697 13.8833 14.8461C7.64412 21.0853 3.3953 29.0346 1.67424 37.6886C-0.0468213 46.3426 0.837162 55.3127 4.21438 63.4643C7.59159 71.6159 13.3103 78.5829 20.6474 83.4841C27.9844 88.3854 36.6101 91.0009 45.4336 90.9995C57.2626 90.9978 68.6065 86.2979 76.9708 77.9336C85.3351 69.5693 90.0349 58.2254 90.0367 46.3965Z\",\n fill: \"#AEDAEA\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M56.558 8.85254H15.4805V82.9598H56.558V8.85254Z\",\n fill: \"white\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.8345 42.5156H15.2822V65.3255H20.8345V42.5156Z\",\n fill: \"#C5E9F5\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M94.4066 20.5509V55.1717C94.4066 55.9824 94.0846 56.7599 93.5114 57.3332C92.9381 57.9064 92.1606 58.2284 91.3499 58.2284H37.5636C36.7529 58.2284 35.9754 57.9064 35.4021 57.3332C34.8289 56.7599 34.5068 55.9824 34.5068 55.1717V20.5509C34.5068 20.1494 34.5859 19.7519 34.7395 19.3811C34.8931 19.0102 35.1183 18.6733 35.4021 18.3894C35.686 18.1056 36.0229 17.8804 36.3938 17.7268C36.7646 17.5732 37.1621 17.4941 37.5636 17.4941H91.3499C91.7513 17.4941 92.1488 17.5732 92.5197 17.7268C92.8906 17.8804 93.2275 18.1056 93.5114 18.3894C93.7952 18.6733 94.0204 19.0102 94.174 19.3811C94.3276 19.7519 94.4066 20.1494 94.4066 20.5509Z\",\n fill: \"#005E9E\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M94.4066 20.5509V55.1717C94.4066 55.9824 94.0846 56.7599 93.5114 57.3332C92.9381 57.9064 92.1606 58.2284 91.3499 58.2284H37.5636C36.7529 58.2284 35.9754 57.9064 35.4021 57.3332C34.8289 56.7599 34.5068 55.9824 34.5068 55.1717L91.3499 17.4941C92.1606 17.4941 92.9381 17.8162 93.5114 18.3894C94.0846 18.9627 94.4066 19.7402 94.4066 20.5509Z\",\n fill: \"#00538C\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M81.1703 10.3569L79.2953 16.3779C79.2742 16.4478 79.2395 16.5128 79.1932 16.5692C79.1469 16.6256 79.0899 16.6723 79.0255 16.7067C78.9611 16.741 78.8906 16.7623 78.8179 16.7694C78.7453 16.7764 78.6719 16.769 78.6021 16.7476L69.2405 13.8296C69.1006 13.7855 68.9839 13.6878 68.9158 13.5579C68.8478 13.428 68.834 13.2764 68.8774 13.1363L70.7524 7.10872C70.7964 6.96884 70.8941 6.85207 71.024 6.78402C71.1539 6.71597 71.3055 6.70215 71.4456 6.74558L80.8072 9.65708C80.9476 9.70256 81.0644 9.80148 81.1324 9.93246C81.2003 10.0634 81.214 10.216 81.1703 10.3569Z\",\n fill: \"#EE2A7B\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M84.5238 15.658L86.6826 24.6169C86.7082 24.7201 86.7131 24.8273 86.697 24.9324C86.681 25.0375 86.6443 25.1384 86.5891 25.2292C86.5338 25.3201 86.4611 25.3991 86.3752 25.4617C86.2893 25.5243 86.1918 25.5692 86.0885 25.594L72.1715 28.9544C71.9622 29.004 71.7419 28.9687 71.5587 28.8561C71.3755 28.7434 71.2445 28.5628 71.1944 28.3537L69.0289 19.4013C68.9791 19.1913 69.0143 18.9701 69.1268 18.7859C69.2393 18.6016 69.4201 18.4693 69.6297 18.4176L83.5401 15.0639C83.6437 15.0382 83.7513 15.0332 83.8569 15.0492C83.9624 15.0652 84.0637 15.1018 84.1551 15.157C84.2465 15.2122 84.3261 15.2849 84.3893 15.3708C84.4526 15.4568 84.4983 15.5543 84.5238 15.658Z\",\n fill: \"#40B4E2\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M94.4066 24.6573V59.2782C94.4066 60.0889 94.0846 60.8664 93.5114 61.4396C92.9381 62.0129 92.1606 62.3349 91.3499 62.3349H37.5636C36.7529 62.3349 35.9754 62.0129 35.4021 61.4396C34.8289 60.8664 34.5068 60.0889 34.5068 59.2782V24.6573C34.5068 23.8466 34.8289 23.0692 35.4021 22.4959C35.9754 21.9227 36.7529 21.6006 37.5636 21.6006H91.3499C92.1606 21.6006 92.9381 21.9227 93.5114 22.4959C94.0846 23.0692 94.4066 23.8466 94.4066 24.6573Z\",\n fill: \"#005E9E\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M94.4066 24.6573V59.2782C94.4066 60.0889 94.0846 60.8664 93.5114 61.4396C92.9381 62.0129 92.1606 62.3349 91.3499 62.3349H37.5636C36.7529 62.3349 35.9754 62.0129 35.4021 61.4396C34.8289 60.8664 34.5068 60.0889 34.5068 59.2782L91.3499 21.6006C91.7513 21.6006 92.1488 21.6797 92.5197 21.8333C92.8906 21.9869 93.2275 22.2121 93.5114 22.4959C93.7952 22.7798 94.0204 23.1168 94.174 23.4876C94.3276 23.8585 94.4066 24.2559 94.4066 24.6573Z\",\n fill: \"#00538C\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.5773 76.3898H17.4932V6.71899H58.5773V76.3898ZM33.7076 4.63274H42.3628H33.7076ZM55.0189 80.2585H21.0516C20.1079 80.2585 19.2027 79.8836 18.5354 79.2163C17.8681 78.5489 17.4932 77.6438 17.4932 76.7V5.70887C17.4949 4.76564 17.8704 3.86157 18.5373 3.1946C19.2043 2.52764 20.1084 2.15214 21.0516 2.15039H55.0189C55.9621 2.15214 56.8662 2.52764 57.5331 3.1946C58.2001 3.86157 58.5756 4.76564 58.5773 5.70887V76.7C58.5773 77.6438 58.2024 78.5489 57.5351 79.2163C56.8677 79.8836 55.9626 80.2585 55.0189 80.2585V80.2585Z\",\n stroke: \"#143961\",\n strokeWidth: 1.56,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.8919 53.4941C27.2884 53.4941 26.6984 53.6732 26.1967 54.0086C25.6949 54.3441 25.304 54.8209 25.0733 55.3786C24.8427 55.9363 24.7827 56.5499 24.9009 57.1418C25.0191 57.7336 25.3102 58.2771 25.7375 58.7034C26.1647 59.1297 26.7088 59.4197 27.3009 59.5366C27.893 59.6535 28.5065 59.5922 29.0637 59.3603C29.6209 59.1285 30.0968 58.7365 30.4312 58.234C30.7655 57.7315 30.9433 57.1412 30.942 56.5377C30.942 56.1374 30.8631 55.7411 30.7097 55.3714C30.5563 55.0017 30.3316 54.6659 30.0483 54.3832C29.7649 54.1005 29.4286 53.8765 29.0586 53.7239C28.6886 53.5713 28.2921 53.4933 27.8919 53.4941Z\",\n fill: \"#143961\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.8919 45.6573C27.2884 45.6573 26.6984 45.8363 26.1967 46.1717C25.6949 46.5072 25.304 46.984 25.0733 47.5417C24.8427 48.0994 24.7827 48.713 24.9009 49.3049C25.0191 49.8967 25.3102 50.4402 25.7375 50.8665C26.1647 51.2928 26.7088 51.5828 27.3009 51.6997C27.893 51.8166 28.5065 51.7553 29.0637 51.5234C29.6209 51.2916 30.0968 50.8996 30.4312 50.3971C30.7655 49.8947 30.9433 49.3043 30.942 48.7008C30.9429 48.3003 30.8645 47.9036 30.7115 47.5335C30.5584 47.1634 30.3337 46.8273 30.0502 46.5444C29.7667 46.2615 29.4301 46.0375 29.0597 45.8852C28.6892 45.733 28.2924 45.6555 27.8919 45.6573Z\",\n fill: \"#143961\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.376 37.8145C37.7725 37.8132 37.1822 37.991 36.6797 38.3253C36.1772 38.6597 35.7853 39.1356 35.5534 39.6928C35.3215 40.25 35.2602 40.8634 35.3771 41.4555C35.4941 42.0476 35.784 42.5918 36.2103 43.019C36.6366 43.4462 37.1801 43.7374 37.772 43.8556C38.3638 43.9738 38.9774 43.9138 39.5351 43.6832C40.0929 43.4525 40.5696 43.0615 40.9051 42.5598C41.2405 42.0581 41.4195 41.4681 41.4196 40.8646C41.4196 40.0568 41.0991 39.282 40.5285 38.7101C39.958 38.1383 39.1838 37.8162 38.376 37.8145Z\",\n fill: \"#143961\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.9944 43.9081H38.4023V37.8145H0.592773V67.2725H27.892C28.4259 67.2688 28.9497 67.1265 29.4122 66.8596C29.8746 66.5926 30.2597 66.2102 30.5299 65.7497C30.8001 65.2891 30.9461 64.7663 30.9536 64.2324C30.961 63.6985 30.8296 63.1718 30.5724 62.7039C30.322 62.2168 29.9352 61.8132 29.4592 61.5424C28.9832 61.2715 28.4386 61.1453 27.892 61.1789H11.968C11.7695 61.1608 11.5849 61.0692 11.4506 60.922C11.3162 60.7748 11.2417 60.5827 11.2417 60.3834C11.2417 60.1841 11.3162 59.9919 11.4506 59.8447C11.5849 59.6975 11.7695 59.6059 11.968 59.5878H27.892V53.4942H11.9944C11.7719 53.4979 11.5557 53.42 11.3866 53.2753C11.2175 53.1306 11.1073 52.929 11.0767 52.7086C11.0637 52.5875 11.0764 52.465 11.114 52.3491C11.1516 52.2333 11.2132 52.1267 11.2949 52.0363C11.3765 51.9459 11.4763 51.8739 11.5878 51.8247C11.6992 51.7756 11.8198 51.7505 11.9416 51.7512H27.892V45.6576H11.9416C11.8195 45.6574 11.6988 45.6315 11.5874 45.5816C11.4759 45.5318 11.3761 45.459 11.2946 45.3681C11.2131 45.2773 11.1515 45.1703 11.114 45.0541C11.0765 44.9379 11.0638 44.8152 11.0767 44.6938C11.1073 44.4733 11.2175 44.2717 11.3866 44.127C11.5557 43.9822 11.7719 43.9043 11.9944 43.9081Z\",\n fill: \"#143961\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.5938 35.4042L42.4093 31.3242M44.885 40.1312L49.6121 39.471L44.885 40.1312ZM43.7363 37.1537L48.5557 32.9218L43.7363 37.1537Z\",\n stroke: \"#C5E9F5\",\n strokeWidth: 1.59,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M87.6994 0.335327L88.419 4.8181C88.4345 4.92287 88.4087 5.02954 88.3472 5.11572C88.2856 5.2019 88.193 5.26084 88.0889 5.28021L81.1238 6.39599C81.0189 6.41115 80.9121 6.38432 80.8269 6.32128C80.7416 6.25824 80.6846 6.16408 80.6683 6.05928L79.9487 1.5765C79.9393 1.52479 79.9404 1.47173 79.9521 1.42048C79.9637 1.36923 79.9857 1.32088 80.0165 1.27832C80.0474 1.23576 80.0865 1.19986 80.1316 1.17282C80.1766 1.14579 80.2267 1.12818 80.2788 1.12101L87.2439 0.0052276C87.2955 -0.00323732 87.3482 -0.00141112 87.3991 0.0106272C87.45 0.0226655 87.4981 0.0446522 87.5404 0.0753415C87.5828 0.106031 87.6186 0.14484 87.6459 0.189458C87.6732 0.234076 87.6914 0.283645 87.6994 0.335327Z\",\n fill: \"#F15A29\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M84.1807 54.8348V56.4853M84.1807 44.5488V45.7769V44.5488Z\",\n stroke: \"#40B4E2\",\n strokeWidth: 1.56,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path18 || (_path18 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86.4054 47.8495C86.4054 45.3209 82.1603 45.42 82.1603 47.8033C82.1603 50.8138 86.6496 49.0511 86.6496 52.5303C86.6496 55.4022 81.916 55.4484 81.916 52.5303\",\n stroke: \"#40B4E2\",\n strokeWidth: 1.56,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgTryBuyNowImg);\nexport default __webpack_public_path__ + \"static/media/TryBuyNowImg.95e888b499cd99ba061ab7dc4a521fe1.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useEffect } from 'react';\nimport { Btn } from 'components/btn/Btn';\nimport { LinkBtn } from 'components/link-btn';\nimport { Modal } from 'components/modal/Modal';\nimport cellCardImg from 'media/images/cellCard.png';\nimport { useFormikContext } from 'formik';\nimport { ProductAmountInputFormData } from '../ProductAmountInput';\nimport { useHistory } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { ReactComponent as TryBuyNowImg } from '../../../../media/images/TryBuyNowImg.svg';\n\nexport interface TryBuyNowModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const TryBuyNowModal = ({ isOpen, onClose }: TryBuyNowModalProps) => {\n const formikCtx = useFormikContext();\n const history = useHistory();\n const [isBusy, setIsBusy] = React.useState(false);\n\n const beginCheckout = async () => {\n // check if form is valid\n if (!formikCtx.isValid) {\n return;\n }\n try {\n setIsBusy(true);\n formikCtx.setFieldValue('hideAddedToCartAnimation', true);\n await formikCtx.submitForm();\n } finally {\n setIsBusy(false);\n }\n history.push(Routes.ShopOrderScreen);\n };\n\n return (\n \n
    \n \n
    \n
    \n
    Try Buy Now
    \n
    \n

    \n Introducing Buy Now, a faster and easier way to purchase your eGift Cards!\n

    \n
    \n

    \n To start using Buy Now for future purchases, add a payment method during\n Checkout and complete your first order.\n

    \n
    \n
    \n
    \n \n
    \n {isBusy ? : null}\n Begin Checkout\n
    \n
    \n
    \n
    \n Close\n
    \n
    \n
    \n
    \n );\n};\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgWarningTriangleFilled(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 48,\n height: 41,\n viewBox: \"0 0 48 41\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45.9727 35.2754L27.252 3.2832C25.7578 0.822266 22.1543 0.822266 20.748 3.2832L1.93945 35.2754C0.533203 37.7363 2.29102 40.8125 5.19141 40.8125H42.7207C45.6211 40.8125 47.3789 37.7363 45.9727 35.2754ZM21.8906 13.3906C21.8906 12.248 22.7695 11.2812 24 11.2812C25.1426 11.2812 26.1094 12.248 26.1094 13.3906V24.6406C26.1094 25.8711 25.1426 26.75 24 26.75C22.9453 26.75 21.8906 25.8711 21.8906 24.6406V13.3906ZM24 35.1875C22.418 35.1875 21.1875 33.957 21.1875 32.4629C21.1875 30.9688 22.418 29.7383 24 29.7383C25.4941 29.7383 26.7246 30.9688 26.7246 32.4629C26.7246 33.957 25.4941 35.1875 24 35.1875Z\",\n fill: \"#D60000\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgWarningTriangleFilled);\nexport default __webpack_public_path__ + \"static/media/warning-triangle-filled.c297dffe054ca694af1917b4371f1258.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgWarningTriangleFilledOrange(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 42,\n height: 37,\n viewBox: \"0 0 42 37\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.5312 31.5781C41.7812 33.7656 40.2188 36.5 37.6406 36.5H4.28125C1.70312 36.5 0.140625 33.7656 1.39062 31.5781L18.1094 3.14062C19.3594 0.953125 22.5625 0.953125 23.8906 3.14062L40.5312 31.5781ZM19.125 12.125V22.125C19.125 23.2188 20.0625 24 21 24C22.0156 24 22.875 23.2188 22.875 22.125V12.125C22.875 11.1094 22.0156 10.25 21 10.25C19.9062 10.25 19.125 11.1094 19.125 12.125ZM21 31.5C22.3281 31.5 23.4219 30.4062 23.4219 29.0781C23.4219 27.75 22.3281 26.6562 21 26.6562C19.5938 26.6562 18.5 27.75 18.5 29.0781C18.5 30.4062 19.5938 31.5 21 31.5Z\",\n fill: \"#DC6803\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgWarningTriangleFilledOrange);\nexport default __webpack_public_path__ + \"static/media/warning-triangle-filled-orange.c664d571a71702fc84f6060b73afa837.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport { ProductAmountInputFormData } from '../ProductAmountInput';\nimport { Product, ProductVariant } from 'common/api/e-comm/models/Product';\nimport { useRootSelector } from 'rootStore';\nimport { selectPaymentType } from 'common/features/store/duck/ui/buy-now-flow';\nimport {\n PaymentMethod,\n PaymentType,\n PaymentTypeFee,\n getFeeForPaymentMethod,\n} from 'common/api/e-comm/payment-types';\nimport { PartialRecord } from 'common/definitions/PartialRecord';\nimport { useStateRebateAdjustment } from 'common/hooks/useStateRebateAdjustment';\nimport { Btn } from 'components/btn/Btn';\nimport { Routes } from 'routes';\nimport { Link } from 'react-router-dom';\nimport { FormikProps, useFormikContext } from 'formik';\nimport { round } from 'common/utils/utils';\nimport Skeleton from 'react-loading-skeleton';\n\ntype BuyNowModalProps = {\n brandName: string;\n imageUrl: string;\n isOpen: boolean;\n itemDetails: ProductAmountInputFormData;\n onClose: () => void;\n onConfirmPurchase: (\n formikProps: FormikProps,\n subtotal: number,\n fee: number,\n total: number\n ) => void;\n product: Product;\n paymentMethod?: PaymentMethod;\n};\n\nconst getRebate = (\n itemDetails: BuyNowModalProps['itemDetails'],\n product: BuyNowModalProps['product'],\n adjustment: number,\n itemPrice: number\n): [number, string] => {\n let percent = 0;\n\n if (product.options.length > 0) {\n const variant = product.variants.find(\n (variant: ProductVariant) => variant.price === itemPrice\n );\n percent = variant ? (variant?.bonus?.rebate || variant?.rebate) - adjustment : 0;\n } else {\n percent = (product.bonus?.rebate || product.rebate) - adjustment;\n }\n\n return [percent, `${round(itemPrice * itemDetails.quantity * (percent / 100), 2).toFixed(2)}`];\n};\n\nexport interface BrandImageProps extends Pick {\n isOnBonus: boolean;\n}\n\nexport const BrandImage = ({ imageUrl, isOnBonus }: BrandImageProps) => {\n return (\n
    \n {imageUrl && }\n {isOnBonus ? (\n

    \n BONUS\n

    \n ) : null}\n
    \n );\n};\n\n// Calculates is a product is on bonus or not\nexport const isProductOnBonus = (product: BuyNowModalProps['product'], value: number) => {\n if (product.options.length) {\n const variant = product.variants.find((variant) => variant.price === value);\n return Boolean(variant?.bonus?.rebate);\n } else {\n return Boolean(product.bonus?.rebate);\n }\n};\n\nconst OrderDetails = (props: {\n brandName: string;\n subTotal: number;\n pricePerCard: number;\n itemDetails: BuyNowModalProps['itemDetails'];\n product: BuyNowModalProps['product'];\n}) => {\n const {\n stateRebateAdjustment: { adjustment },\n } = useStateRebateAdjustment(props.product.isLocalProduct);\n const [earningPercent, rebate] = getRebate(\n props.itemDetails,\n props.product,\n adjustment,\n props.pricePerCard\n );\n const quantityText = `Qty ${props.itemDetails.quantity} x $${props.pricePerCard} per card`;\n const earningsText = `Earn ${earningPercent}% = `;\n\n return (\n
    \n
    \n \n {props.brandName}\n \n ${round(props.subTotal, 2).toFixed(2)}\n
    \n

    eGift Card

    \n

    {quantityText}

    \n

    \n {earningsText}\n ${rebate}\n

    \n
    \n );\n};\n\ninterface PaymentDetailsProps extends Pick {\n fee: number;\n}\n\nconst PaymentDetails = ({ paymentMethod, fee }: PaymentDetailsProps) => {\n const [label, accountLastFour] = useRootSelector((s) => selectPaymentType(s, paymentMethod));\n\n return (\n
    \n

    Payment Details

    \n
    \n {accountLastFour ? (\n <>\n \n {label} •••• {accountLastFour}\n \n ${round(fee, 2).toFixed(2)}\n \n ) : (\n \n \n \n )}\n
    \n
    \n );\n};\n\nconst Total = ({ children }: { children: React.ReactNode }) => {\n return (\n
    \n

    Total

    \n

    {children}

    \n
    \n );\n};\n\nexport const getPrice = (\n itemDetails: BuyNowModalProps['itemDetails'],\n product: BuyNowModalProps['product']\n) => {\n if (product.options.length) {\n const selectedOption = itemDetails.selectedOptions[product.options[0].id];\n return parseInt(selectedOption.substr(1));\n } else {\n return itemDetails.priceOverride!;\n }\n};\n\nconst getTotal = (\n itemDetails: BuyNowModalProps['itemDetails'],\n price: number,\n paymentTypeFee?: PaymentTypeFee | null\n): [number, number, number] => {\n // NOTE: Error handling\n if (paymentTypeFee === null) {\n return [0, 0.0, 0];\n }\n\n const value = price * itemDetails.quantity;\n const fee =\n (paymentTypeFee?.isPercentage\n ? value * (paymentTypeFee.amount / 100)\n : paymentTypeFee?.amount) || 0;\n return [value, round(value + fee, 2), fee];\n};\n\nexport const getPaymentTypeFee = (\n paymentTypeFees: PartialRecord | null,\n paymentMethod?: PaymentMethod | null\n) => {\n if (!paymentMethod || paymentTypeFees === null) {\n return {\n paymentType: PaymentType.CreditCard,\n paymentSubType: null,\n amount: 0,\n isPercentage: false,\n } as PaymentTypeFee;\n }\n\n return getFeeForPaymentMethod(paymentTypeFees, paymentMethod);\n};\n\ntype PickDetailProps =\n | 'itemDetails'\n | 'product'\n | 'paymentMethod'\n | 'onConfirmPurchase'\n | 'brandName';\ninterface DetailsProps extends Pick {\n price: number;\n}\n\nconst Details = ({\n itemDetails,\n product,\n paymentMethod,\n onConfirmPurchase,\n price,\n brandName,\n}: DetailsProps) => {\n const paymentTypeFees = useRootSelector((s) => s.store.organization.paymentTypeFees);\n const paymentTypeFee = getPaymentTypeFee(paymentTypeFees, paymentMethod);\n const [subTotal, total, fee] = getTotal(itemDetails, price, paymentTypeFee);\n const formikProps = useFormikContext();\n\n const onPurchaseClick = () => {\n onConfirmPurchase(formikProps, subTotal, fee, total);\n };\n\n const formattedTotal = `$${total.toFixed(2)}`;\n\n return (\n
    \n \n
    \n \n
    \n {formattedTotal}\n
    \n \n Confirm Purchase\n \n
    \n );\n};\n\ninterface NonBuyNowDetailsProps extends Omit {\n price: number;\n isOnBonus: boolean;\n}\n\nexport const BuyNowDetails = (props: NonBuyNowDetailsProps) => {\n const price = props.price;\n const isOnBonus = props.isOnBonus;\n\n return (\n <>\n \n \n \n \n );\n};\n\nconst Disclaimer = () => {\n return (\n
    \n

    \n By completing this order, I agree to the{' '}\n Terms of Use\n {'. '}\n

    \n

    Gift cards are not returnable or refundable after purchase.

    \n
    \n );\n};\n","import { BuyNowOrderResponse } from 'common/api/e-comm/orders/service';\n\nexport enum Codes {\n ECOMM_0006 = 'ecomm-0006',\n ECOMM_0011 = 'ecomm-0011',\n ECOMM_0017 = 'ecomm-0017',\n ECOMM_0018 = 'ecomm-0018',\n ECOMM_0020 = 'ecomm-0020',\n ECOMM_0022 = 'ecomm-0022',\n ECOMM_CATCH_ALL = '',\n}\n\nexport interface BuyNowError {\n title: string;\n message: string;\n isWarning: boolean;\n code: Codes;\n}\n\nexport const handleError = (result: BuyNowOrderResponse): BuyNowError => {\n let title = '';\n let message = '';\n let isWarning = false;\n const code = result.errorCode;\n switch (code) {\n case Codes.ECOMM_0011: {\n title = 'Product Unavailable';\n message =\n 'Unfortunately the product you tried to purchase is unavailable. To learn more, call Customer Support at 800-727-4715 (option 3).';\n break;\n }\n case Codes.ECOMM_0017: {\n title = 'Transaction Could Not Be Completed';\n message = 'There was an error from the card issuer. Please try again later.';\n break;\n }\n case Codes.ECOMM_0018: {\n title = 'Earnings Amount\\nHas Changed';\n message = `This order now earns $${Math.round(result.earnings || 0).toFixed(2)}`;\n isWarning = true;\n break;\n }\n case Codes.ECOMM_0020: {\n title = 'Order Pending Review';\n message = 'You’ll receive an email with more information after we complete the review.';\n isWarning = true;\n break;\n }\n case Codes.ECOMM_0022: {\n title = 'Unable to Process Payment';\n message =\n 'Sorry, we were unable to process your payment method. Please try again, or choose a different default form of payment by continuing your purchase through Add to Cart > Checkout.';\n break;\n }\n default: {\n const codeNumber = code ? code.split('-')[1] : '';\n const errorCodeText = codeNumber ? ` (Error ${codeNumber}.)` : '';\n title = 'Something Went Wrong';\n message = `Unfortunately your transaction could not be completed.${errorCodeText} Please try again, or select Add to Cart as an alternative to Buy Now.`;\n break;\n }\n }\n\n return { title, message, isWarning, code } as BuyNowError;\n};\n","import React, { useEffect, useState } from 'react';\nimport Lottie from 'lottie-react';\nimport OrderProcessingAnimation from './order-processing-image.json';\nimport { FadeIn } from 'components/loading-screen/FadeIn';\n\ninterface AnimatedStep {\n doStep: () => void;\n delay: number;\n}\n\ntype AnimatedSteps = AnimatedStep[];\n\ntype AnimatedStepsConfig = {\n // Number of times to repeat the animation (<=Zero = Infinite)\n loops: number;\n};\n\nexport const useStepDelay = (steps: AnimatedSteps, configs: AnimatedStepsConfig = { loops: 0 }) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isRunning, setIsRunning] = useState(false);\n const [loopsCounter, setLoopsCounter] = useState(1);\n\n useEffect(() => {\n let timerId: NodeJS.Timeout;\n\n const executeStep = () => {\n const currentStep = steps[currentIndex];\n if (currentStep) {\n currentStep.doStep();\n timerId = setTimeout(() => {\n const isLastStep = currentIndex === steps.length - 1;\n\n if (isLastStep && configs.loops > 0 && loopsCounter >= configs.loops) {\n return;\n }\n\n if (isLastStep) {\n setLoopsCounter(loopsCounter + 1);\n }\n\n setCurrentIndex((prevIndex) => (prevIndex + 1) % steps.length);\n }, currentStep.delay);\n }\n };\n\n if (isRunning) {\n executeStep();\n }\n\n return () => clearTimeout(timerId); // Cleanup function to clear timeout\n }, [currentIndex, isRunning, steps, loopsCounter]);\n\n const start = () => setIsRunning(true);\n const stop = () => setIsRunning(false);\n\n return { start, stop };\n};\n\nconst STATUS_MESSAGE_SCREEN_TIME = 3000;\n\nexport const BuyNowLoadingAnimation = () => {\n const [animationStatus, setAnimationStatus] = React.useState('');\n const { start, stop } = useStepDelay(\n [\n {\n doStep: () => setAnimationStatus('Sending your order...'),\n delay: STATUS_MESSAGE_SCREEN_TIME,\n },\n {\n doStep: () => setAnimationStatus('Preparing your earnings'),\n delay: STATUS_MESSAGE_SCREEN_TIME,\n },\n {\n doStep: () => setAnimationStatus('Adding final touches'),\n delay: STATUS_MESSAGE_SCREEN_TIME,\n },\n ],\n { loops: 1 }\n );\n\n useEffect(() => {\n start();\n return () => {\n stop();\n };\n }, []);\n\n return (\n \n \n
    \n {animationStatus}\n
    \n
    \n );\n};\n","import React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { BrandImage, BrandImageProps } from './BuyNowDetails';\nimport { Btn } from 'components/btn/Btn';\nimport { Routes } from 'routes';\nimport { useRootSelector } from 'rootStore';\nimport {\n buyNowFlow,\n selectBuyNowPurchaseSuccessData,\n} from 'common/features/store/duck/ui/buy-now-flow';\nimport { round } from 'common/utils/utils';\nimport { useDispatch } from 'react-redux';\n\ninterface BuyNowSuccessScreenProps extends BrandImageProps {}\n\nexport const BuyNowSuccessScreen = (props: BuyNowSuccessScreenProps) => {\n const { subtotal = 0, earnings = 0 } = useRootSelector(selectBuyNowPurchaseSuccessData) || {};\n const history = useHistory();\n const dispatch = useDispatch();\n\n const goToWallet = () => {\n history.push(Routes.WalletMyCards);\n dispatch(buyNowFlow.resetState(null));\n };\n\n return (\n
    \n \n

    \n Your ${round(subtotal, 2).toFixed(2)} eGift Card is Ready\n

    \n

    \n You earned ${round(earnings, 2).toFixed(2)}\n

    \n

    \n An order confirmation has been sent to your email.\n

    \n
    \n \n Go to Wallet\n \n
    \n );\n};\n","import React, { useEffect } from 'react';\nimport { ReactComponent as ErrorTriangleIcon } from 'media/images/warning-triangle-filled.svg';\nimport { ReactComponent as WarningTriangleIcon } from 'media/images/warning-triangle-filled-orange.svg';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { ProductAmountInputFormData } from '../ProductAmountInput';\nimport { Product } from 'common/api/e-comm/models/Product';\nimport { useRootSelector } from 'rootStore';\nimport {\n selectBuyNowDrawerView,\n selectBuyNowErrorData,\n} from 'common/features/store/duck/ui/buy-now-flow';\nimport { PaymentMethod } from 'common/api/e-comm/payment-types';\nimport { FormikProps, useFormikContext } from 'formik';\nimport { BuyNowDetails, getPrice, isProductOnBonus } from './BuyNowDetails';\nimport { useDispatch } from 'react-redux';\nimport { buyNowFlow } from 'common/features/store/duck/ui/buy-now-flow';\nimport { FadeIn } from 'components/loading-screen/FadeIn';\nimport { BuyNowError, Codes } from 'common/features/store/duck/ui/buy-now-flow/errors';\nimport { Btn } from 'components/btn/Btn';\nimport { BuyNowLoadingAnimation } from './BuyNowLoadingAnimation';\nimport { BuyNowSuccessScreen } from './BuyNowSucccess';\n\ntype BuyNowModalProps = {\n brandName: string;\n imageUrl: string;\n isOpen: boolean;\n itemDetails: ProductAmountInputFormData;\n onClose: () => void;\n onConfirmPurchase: (\n formikProps: FormikProps,\n subtotal: number,\n fee: number,\n total: number\n ) => void;\n product: Product;\n paymentMethod?: PaymentMethod;\n};\n\nconst modalSize = [ModalSize.CONTENT_WIDTH, ModalSize.MEDIUM] as [ModalSize, ModalSize];\n\nconst NoValidViewFound = () =>

    Something went wrong.

    ;\n\nexport const BuyNowModal = ({ isOpen, onClose, ...props }: BuyNowModalProps) => {\n const dispatch = useDispatch();\n const formikCtx = useFormikContext();\n const view = useRootSelector(selectBuyNowDrawerView);\n\n const onCloseModal = () => {\n onClose();\n // Only reset form if a successful purchase happened\n if (view === 'Success') {\n formikCtx.resetForm();\n }\n // If we close we should reset the state for next use\n dispatch(buyNowFlow.resetState(null));\n };\n const price = getPrice(props.itemDetails, props.product);\n const isOnBonus = isProductOnBonus(props.product, price);\n\n let Content = ;\n switch (view) {\n case 'Error': {\n Content = (\n \n \n \n );\n break;\n }\n case 'Details': {\n Content = (\n \n \n \n );\n break;\n }\n case 'Loading': {\n Content = ;\n break;\n }\n case 'Success': {\n Content = (\n \n \n \n );\n break;\n }\n }\n\n const disableClosingModal = view !== 'Loading';\n\n return (\n \n {Content}\n \n );\n};\n\ntype BuyNowErrorViewType = {\n closeModal: BuyNowModalProps['onClose'];\n};\n\nconst BuyNowErrorView = ({ closeModal }: BuyNowErrorViewType) => {\n const errorData = useRootSelector(selectBuyNowErrorData);\n const formikCtx = useFormikContext();\n\n const addToCart = () => {\n formikCtx.submitForm();\n closeModal();\n };\n\n // Case: ECOMM_0022 - unable to process payment allow user to try again\n if (errorData?.code === Codes.ECOMM_0022) {\n return (\n \n
    \n Add To Cart\n \n Try Again\n \n
    \n
    \n );\n }\n return (\n \n \n OK\n \n \n );\n};\n\ninterface BasicErrorProps {\n errorData: BuyNowError | null;\n children: React.ReactNode;\n}\nconst BasicError = ({ errorData, children }: BasicErrorProps) => {\n return (\n
    \n {errorData?.isWarning ? (\n \n ) : (\n \n )}\n

    \n {errorData?.title}\n

    \n

    {errorData?.message}

    \n {children}\n
    \n );\n};\n","import { useState, useEffect, useRef } from 'react';\n\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { selectIsEnabled } from 'common/features/store/duck/ffs';\nimport { selectBuyNowPaymentMethod, buyNowFlow } from 'common/features/store/duck/ui/buy-now-flow';\nimport { getPaymentTypesForBuyNow, PaymentMethod } from 'common/api/e-comm/payment-types';\nimport { useDispatch } from 'react-redux';\nimport { BuyNowModal } from './BuyNowModal';\nimport { usePaymentOptions } from 'common/hooks/usePaymentOptions';\nimport useQueryParams from 'hooks/useQueryParams';\nimport { Product, ProductQueryParam, ProductVariant } from 'common/api/e-comm/models/Product';\n\ntype IUseBuyNowHookResult = {\n isBuyNowEnabled: boolean;\n fetching: boolean;\n paymentMethod?: PaymentMethod;\n};\n\nconst result: IUseBuyNowHookResult = {\n isBuyNowEnabled: false,\n paymentMethod: undefined,\n fetching: false,\n};\n\nconst useBuyNowPaymentMethod = () => {\n const [fetching, setFetching] = useState(true);\n const paymentMethod = useRootSelector(selectBuyNowPaymentMethod);\n const { loadPaymentOptionsData } = usePaymentOptions();\n const dispatch = useDispatch();\n\n useEffect(() => {\n (async () => {\n try {\n const result = await getPaymentTypesForBuyNow();\n await loadPaymentOptionsData();\n if (result.error) {\n // error handling\n } else {\n dispatch(buyNowFlow.update({ paymentMethod: result.data[0] }));\n }\n } catch (e) {\n // unable to load result\n }\n setFetching(false);\n })();\n }, []);\n\n return {\n paymentMethod,\n fetching,\n };\n};\n\nconst useBuyNow = () => {\n result.isBuyNowEnabled = useRootSelector((s) =>\n selectIsEnabled(s, FeatureFlagTypes.enable_buy_now_web)\n );\n const { paymentMethod, fetching } = useBuyNowPaymentMethod();\n result.paymentMethod = paymentMethod;\n result.fetching = fetching;\n return result;\n};\n\n/* FEC-1702 - Open Buy Now Automatically from query params.\n *\n * This hook will parse the query parameters when the user lands on the PDP.\n *\n * Buy Now Params:\n * - denom=\n * - utm_source=extension_web :: no validation needed\n * - utm_medium=extension :: no validation needed\n * - utm_campaign=buy_now :: no validation needed\n *\n *\n * Remarks:\n * - `denom` must be validated against the product's `variants`. IFF found\n * we must check the variant's `isAvailable` && `isVisible` options.\n */\nconst useBuyNowParseQueryParams = (\n product?: Product\n): { priceOverride?: number; selectedVariant?: string; shouldOpenBuyNow: boolean } => {\n const params = useQueryParams();\n const tab = params.get('type');\n const denom = params.get('denom');\n\n // Controls for configuring the selected input value\n const priceOverride = useRef();\n const selectedVariant = useRef();\n const shouldOpenBuyNow = useRef(false);\n\n useEffect(() => {\n if (product) {\n // Step 1. Make sure all the params line up\n if (product && tab === ProductQueryParam.EGiftCard && denom) {\n // Step 2. Parse Denom & Validate against eGiftCard product variants.\n // 3 possible results\n // - null\n // - ['50', '00'] when denom is '50.00'\n // - ['50'] when denom is '50'\n // Note: We'll use the first value of the array as the denom -- we don't care about floating point values\n const matched_denom = denom.match(/\\d+/g);\n\n if (matched_denom?.length && product) {\n const parsed_denom = parseInt(matched_denom[0]);\n let valid = false;\n // Handle 2 cases -- Product With Variant & Product Without Variant\n if (\n product.canOverridePrice &&\n product.minValue &&\n product.maxValue &&\n product.unitPrice\n ) {\n valid =\n product.minValue <= parsed_denom &&\n parsed_denom <= product?.maxValue &&\n parsed_denom % product.unitPrice === 0; // must be divisible by the unit price!\n } else if (product.options.length) {\n valid = Boolean(\n product.variants.find(\n (variant: ProductVariant) =>\n variant.price === parsed_denom &&\n variant.isAvailable &&\n variant.isVisible\n )\n );\n }\n\n // Denomination passed validation & was found in an active variant\n if (valid) {\n priceOverride.current = product.canOverridePrice ? parsed_denom : undefined;\n selectedVariant.current = !product.canOverridePrice\n ? `$${parsed_denom}.00`\n : undefined;\n shouldOpenBuyNow.current = true;\n }\n }\n }\n }\n }, [product]);\n\n return {\n priceOverride: priceOverride.current,\n selectedVariant: selectedVariant.current,\n shouldOpenBuyNow: shouldOpenBuyNow.current,\n };\n};\n\nexport { useBuyNow, BuyNowModal, useBuyNowParseQueryParams };\n","import { PaymentMethod } from '../payment-types';\nimport { OrderSource } from '../models/OrderSource';\nimport { Order } from '../models/Order';\n\nimport { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\nimport { ORDERS_URL } from 'common/api/config';\nimport { toQueryString } from 'common/utils/queryString';\nimport { ThreeDSResponse, ThreeDSTransactionError } from 'common/modules/3dsecure';\nimport { Address } from 'common/api/models/Address';\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\n\nexport enum TokenType {\n Unknown = 'Unknown',\n NewSingleUse = 'NewSingleUse',\n NewRecurring = 'NewRecurring',\n Saved = 'Saved',\n}\n\nexport interface PaymentProviderResponse {\n cardToken: string | null;\n convergeResponse: string | null;\n expectedChargeAmount: number;\n transactionToken3DSecure: string | null;\n billingAddress: FamilyAddress | Address | { zipCode: string } | null;\n tokenType: TokenType;\n}\n\nexport interface PlaceOrderRequest {\n blackBoxValue: string;\n secondaryBlackBoxValue?: string;\n cartId: string;\n expectedEarnings: number;\n paymentMethod: PaymentMethod;\n orderSource: OrderSource;\n paymentProviderResponse: PaymentProviderResponse | null;\n payment3DSecureResponse: ThreeDSTransactionError | ThreeDSResponse | null;\n clientVersion: string | null;\n firstName: string;\n lastName: string;\n email: string;\n savePaymentDetails?: boolean;\n}\n\nexport enum PlaceOrderResult {\n Success = 'Success',\n EarningsMismatch = 'EarningsMismatch',\n Hold = 'Hold',\n ExceedsFinCenLimit = 'ExceedsFinCenLimit',\n ContainsUnavailableItems = 'ContainsUnavailableItems',\n CreditCardPaymentRejected = 'CreditCardPaymentRejected',\n}\n\nexport interface PlaceOrderResponse {\n result: PlaceOrderResult;\n newCreditCardId: number | null;\n orderId: number | null;\n actualEarnings: number | null;\n}\n\nexport const placeOrder = (order: PlaceOrderRequest, apiVersion = '1.1') =>\n withTokensIfNeeded(\n `${ORDERS_URL}?api-version=${apiVersion}`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(order),\n }\n );\n\nexport interface Item {\n productId: number;\n quantity: number;\n priceOverride: number | null;\n selectedOptions: { [optionId: number]: string };\n cardId?: string;\n}\n\nexport interface BuyNowOrderRequest\n extends Omit<\n PlaceOrderRequest,\n | 'cartId'\n | 'firstName'\n | 'lastName'\n | 'email'\n | 'expectedEarnings'\n > {\n cartId?: string, // Make cartId optional, not required for normal buy-now flow\n item: Item;\n}\n\nexport interface BuyNowOrderResponse {\n earnings: null | number;\n errorCode: null | string;\n errorMessage: null | string;\n orderId: null | number;\n}\n\nexport const buyNowPlaceOrder = (order: BuyNowOrderRequest) => {\n return withTokensIfNeeded(`${ORDERS_URL}/buy-now`.toLowerCase(), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(order),\n });\n};\n\nexport const getOrders = (startDate: string, endDate?: string) =>\n withTokensIfNeeded(`${ORDERS_URL}?${toQueryString({ startDate, endDate })}`);\n\nexport const getOrdersV2 = (startDate: string, endDate?: string) =>\n withTokensIfNeeded(\n `${ORDERS_URL}?api-version=2&${toQueryString({ StartDate: startDate, EndDate: endDate })}`\n );\n\nexport interface AddBillingInfoRequest {\n cartId: string;\n firstName: string;\n lastName: string;\n email: string;\n paymentMethod: PaymentMethod;\n}\n\nexport const addBillingInfo = (billingInfo: AddBillingInfoRequest) =>\n withTokensIfNeeded(`${ORDERS_URL}/billing`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(billingInfo),\n });\n\ninterface ShippingSelection {\n consignmentId: string;\n shippingOptionId: string;\n}\nexport interface SetShippingOptionsRequest {\n cartId: string;\n shipToHomeSelection: ShippingSelection | null;\n shipToCoordinatorSelection: ShippingSelection | null;\n paymentMethod: PaymentMethod;\n}\nexport const setShippingOptions = (shippingOptions: SetShippingOptionsRequest) =>\n withTokensIfNeeded(`${ORDERS_URL}/shipping`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(shippingOptions),\n });\n\nexport interface ShippingMethodsRequest {\n cartId: string;\n customerLastName: string;\n customerEmail: string;\n customerFirstName?: string;\n shipToHomeLineItemIds?: string[];\n shippingAddress?: {\n address1: string;\n address2?: string;\n city: string;\n state: string;\n zipCode: string;\n firstName: string;\n lastName: string;\n phoneNumber: string | null;\n email: string;\n };\n}\nexport interface ShippingOption {\n id: string;\n name: string;\n cost: number;\n}\n\nexport interface ShippingMethodsResponse {\n shipToHomeConsignment: {\n id: string;\n shippingOptions: ShippingOption[];\n };\n shipToCoordinatorConsignment: {\n id: string;\n shippingOptions: ShippingOption[];\n };\n}\n\nexport const getShippingMethods = (request: ShippingMethodsRequest) => {\n const sanitizedRequest: ShippingMethodsRequest = {\n ...request,\n shippingAddress: request.shippingAddress && {\n ...request.shippingAddress,\n phoneNumber: null,\n },\n };\n return withTokensIfNeeded(\n `${ORDERS_URL}/shipping?api-version=1`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(sanitizedRequest),\n }\n );\n};\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faGiftCard } from '@fortawesome/pro-regular-svg-icons';\n\nexport const SendAsGiftUnavailable = () => {\n return (\n \n \n
    \n Gifting is temporarily unavailable for this product.\n
    \n \n );\n};\n","import React from 'react';\n\nexport const ToShopInfo = () => {\n return (\n
    \n
      \n
    • \n To Shop Online:This eGift Card balance must be\n equal to or greater than the purchase total.\n
    • \n
    • \n To Shop In-Store:This eGift Card must be added\n to a mobile device’s digital wallet (Apple, Google, Samsung).\n
    • \n
    \n
    \n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport * as Tabs from '@radix-ui/react-tabs';\nimport { Field, Form, Formik, FormikHelpers, FormikProps } from 'formik';\nimport classNames from 'classnames';\nimport type { History } from 'history';\n\nimport { ProductAmountInput, ProductAmountInputFormData } from './ProductAmountInput';\nimport { CartProductTabPanelProps } from './types';\nimport { sortOptionValuesAscending } from './utils';\n\nimport { Btn } from 'components/btn/Btn';\nimport {\n emptyGiftDetailsRequest,\n GiftDetailsRequest,\n ProductGiftDetails,\n ProductGiftDetailsContext,\n} from './ProductGiftDetails';\nimport { scrollToElement } from 'common/utils/utils';\nimport { InMyWallet } from './InMyWallet';\nimport { useHistory, Switch, Route } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { isCardReloadable } from 'common/api/e-comm/models/Card';\nimport { useCardsFromWallet } from 'hooks/useCardsFromWallet';\nimport { Faceplate, getProductFaceplatesBff } from 'common/api/misc';\nimport { waitPromise } from 'utils/promiseHelpers';\nimport { FormBtn } from 'components/form-btn';\nimport { CartLineItemGiftDetails, emptyLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport {\n useFirebaseConfigValues,\n firebaseValueAsNumber,\n firebaseValueAsBoolean,\n firebaseValueAsString,\n} from 'hooks/useFirebaseConfigValues';\nimport { ProductVariant } from 'common/api/e-comm/models/Product';\nimport useUnavailableProductVariants from './utils/useUnavailableProductVariants';\nimport { Alert, AlertType } from 'components/alerts/sticky/Alert';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faGiftCard, faTimes } from '@fortawesome/pro-light-svg-icons';\nimport { faExclamationTriangle } from '@fortawesome/pro-solid-svg-icons';\nimport { useModalControls } from 'hooks/useModalControls';\nimport type { ModalControls } from 'hooks/useModalControls';\nimport { Modal } from 'components/modal/Modal';\nimport BulkOrderScreen from 'features/bulk-order/BulkOrder';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectCartNumberGiftLineItems } from 'common/features/store/duck/cart/duck';\nimport { colors } from 'styles/settings';\nimport { gaLogClickBuyNow, gaLogPurchase } from 'config/analytics';\nimport { TryBuyNowModal } from './TryBuyNow/TryBuyNow';\nimport { useBuyNow, BuyNowModal, useBuyNowParseQueryParams } from './buynow';\nimport { useBlackBoxValues } from 'modules/fraud-force/fraudForce';\nimport { OrderSource } from 'common/api/e-comm/models/OrderSource';\nimport { createTemporaryCartForBuyNow } from 'common/api/e-comm/cart';\nimport { buyNowPlaceOrder } from 'common/api/e-comm/orders/service';\nimport { useDispatch } from 'react-redux';\nimport { buyNowFlow } from 'common/features/store/duck/ui/buy-now-flow';\nimport { constructorClient } from 'third-party-integrations/constructor';\nimport { Codes, handleError } from 'common/features/store/duck/ui/buy-now-flow/errors';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { SendAsGiftUnavailable } from './SendAsGiftUnavailable';\nimport { ToShopInfo } from './ToShopInfo';\n\nexport interface ProductDetailsPanelProps extends CartProductTabPanelProps {\n value: string;\n brandId: number;\n brandName: string;\n brandImageUrl: string;\n resetKey?: number;\n}\n\nexport const getGiftCardImgSrc = (imgs: Faceplate[], imageName: string) => {\n const img = imgs.find((img) => img.ImageName === imageName);\n\n if (img != null) {\n return img.ImageUrl;\n }\n\n return '';\n};\n\nconst onlyNumbers = (phone: string) => {\n return (phone || '').replace(/[^0-9]/gi, '');\n};\n\nexport const EGiftTabPanel = ({\n resetKey,\n value,\n product,\n brandName,\n brandId,\n brandImageUrl,\n addToCart,\n canCheckout,\n}: ProductDetailsPanelProps) => {\n const buyNowControls = useBuyNow();\n const {\n selectedVariant: defaultVariant,\n priceOverride,\n shouldOpenBuyNow,\n } = useBuyNowParseQueryParams(product);\n const [showTryBuyNow, setShowTryBuyNow] = useState(false);\n const modalCtrls = useModalControls();\n const { retrieveBlackBox } = useBlackBoxValues();\n const dispatch = useDispatch();\n const { isEnabled } = useFeatureFlags();\n\n const initialValues: ProductAmountInputFormData = {\n selectedOptions: Object.fromEntries(\n product.options.map((opt) => [\n opt.id,\n defaultVariant || sortOptionValuesAscending(opt.values)[0].value,\n ])\n ),\n priceOverride: priceOverride || product.minValue || null,\n quantity: 1,\n hideAddedToCartAnimation: false,\n };\n\n const [faceplates, setFaceplates] = useState([]);\n const [selectedVariant, setSelectedVariant] = useState(undefined);\n\n const [sendAsGift, setSendAsGift] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n const [formData, setFormData] = useState(emptyGiftDetailsRequest);\n const [hasFormData, setHasFormData] = useState(false);\n const showEditForm = sendAsGift && (isEditing || !hasFormData);\n const showGiftDetails = sendAsGift && !isEditing && hasFormData;\n const [giftCardImageUrl, setGiftCardImageUrl] = useState('');\n const allowGiftingEgift = useFirebaseConfigValues(\n 'allow_gifting_egift',\n false,\n firebaseValueAsBoolean\n );\n const Max_Number_Gift_Line_Items = useFirebaseConfigValues(\n 'max_cart_line_items',\n 125,\n firebaseValueAsNumber\n );\n const numberOfGiftLineItems = useRootSelector(selectCartNumberGiftLineItems);\n\n const modal = useModalControls();\n const maxCapcityWarningModal = useModalControls();\n\n const history = useHistory();\n const { text, variants: unavailableVariants } = useUnavailableProductVariants(product);\n const allVariantsUnavailable = unavailableVariants.length === product.variants.length;\n\n const isFetchingBuyNowPaymentMethod = buyNowControls.fetching;\n const buyNowPaymentMethod = buyNowControls.paymentMethod;\n\n useEffect(() => {\n if (shouldOpenBuyNow && buyNowPaymentMethod && !isFetchingBuyNowPaymentMethod) {\n modalCtrls.toggleModalVisibility();\n } else if (shouldOpenBuyNow && !buyNowPaymentMethod && !isFetchingBuyNowPaymentMethod) {\n // CASE: User linked from browser-extension but doesn't have\n // a valid payment-method\n setShowTryBuyNow(true);\n }\n }, [shouldOpenBuyNow, isFetchingBuyNowPaymentMethod, buyNowPaymentMethod]);\n\n const userCards = useCardsFromWallet().filter(\n (c) => c.brandId === product.brandId && !isCardReloadable(c)\n );\n\n const thirdPartyViewerFlowIds = useFirebaseConfigValues(\n 'thirdparty_viewer_flow_ids',\n '',\n firebaseValueAsString\n );\n\n const shouldHideSendAsGift = useMemo(\n () =>\n isEnabled(FeatureFlagTypes.enable_amex_egift_web) &&\n thirdPartyViewerFlowIds?.split(',').includes(`${product.id}`),\n [product, isEnabled, thirdPartyViewerFlowIds]\n );\n\n const giftDetail = useMemo(() => {\n if (!hasFormData) {\n return;\n }\n\n return {\n fromName: formData.SenderName,\n fromPhone: onlyNumbers(formData.SenderPhone),\n toName: formData.RecipientName,\n toEmail: formData.RecipientEmail,\n message: formData.GiftMessage,\n deliveryDate: formData.SelectedDate?.toISOString(),\n productImageName: formData.SelectedCardCoverImage.toString(),\n } as CartLineItemGiftDetails;\n }, [hasFormData, formData]);\n\n const [addingToCart, setAddingToCart] = useState(false);\n\n const onSubmit = async (\n data: ProductAmountInputFormData,\n formikHelpers: FormikHelpers\n ) => {\n // CASE: if you're not part of the organization anymore -- you shouldn't\n // be able to add items to cart\n if (!canCheckout) {\n return;\n }\n\n const apiResponse = await waitPromise(\n addToCart(product, data, giftDetail),\n setAddingToCart\n );\n\n // clear gift data after adding to cart + reset the form to the initial state\n if (apiResponse?.response?.ok) {\n resetFormData();\n setSendAsGift(false);\n\n formikHelpers.resetForm();\n }\n };\n\n useEffect(() => {\n discardGiftDetails();\n }, [resetKey]);\n\n useEffect(() => {\n const giftCardUrl = getGiftCardImgSrc(faceplates, formData?.SelectedCardCoverImage || '');\n setGiftCardImageUrl(giftCardUrl);\n }, [faceplates, formData?.SelectedCardCoverImage]);\n\n const sku = product.sku || selectedVariant?.sku;\n\n useEffect(() => {\n (async () => {\n if (sku) {\n const faceplates = await getProductFaceplatesBff(sku);\n\n if (faceplates?.response?.ok) {\n const facePlates_ = faceplates?.data || [];\n setFaceplates(facePlates_);\n\n // NOTE: Special case -- we have loaded faceplates\n // meaning that our form-data __should__ be updated\n // with the new faceplate selection.\n if (facePlates_.length) {\n setFormData((formData) => ({\n ...formData,\n SelectedCardCoverImage: facePlates_[0].ImageName,\n }));\n }\n } else {\n setFaceplates([]);\n }\n }\n })();\n }, [sku]);\n\n useEffect(() => {\n if (!formData.SelectedCardCoverImage && faceplates.length > 0) {\n setFormData({ ...formData, SelectedCardCoverImage: faceplates[0].ImageName });\n }\n }, [faceplates, formData]);\n\n const goToCardPage = (cardId: string) =>\n history.push(Routes.WalletMyCardDetails.replace(':cardId', cardId));\n\n const resetFormData = useCallback(() => {\n setFormData(emptyGiftDetailsRequest);\n setHasFormData(false);\n }, [setFormData, setHasFormData]);\n\n const setSelectedDate = useCallback(\n (selectedDate: Date | undefined) => {\n setFormData({\n ...formData,\n SelectedDate: selectedDate,\n });\n },\n [formData, setFormData]\n );\n\n const toggleSendAsGift = () => {\n if (numberOfGiftLineItems === Max_Number_Gift_Line_Items) {\n maxCapcityWarningModal.toggleModalVisibility();\n } else {\n setSendAsGift((_) => !_);\n }\n };\n\n const discardGiftDetails = () => {\n setFormData(emptyGiftDetailsRequest);\n setHasFormData(false);\n setSendAsGift(false);\n scrollToElement(document.body);\n };\n\n const discardGiftDetailsAndCloseModal = () => {\n discardGiftDetails();\n modal.toggleModalVisibility();\n };\n\n const onBuyNowClick = (formData: ProductAmountInputFormData) => {\n const selectedOption = Object.values(formData.selectedOptions)[0];\n let price = formData.priceOverride || 0;\n\n if (selectedOption) {\n const matches = selectedOption.match(/\\d+\\.\\d+/g);\n if (matches && matches.length) {\n price = parseFloat(matches[0]);\n }\n }\n\n gaLogClickBuyNow(product.id, price, formData.quantity);\n\n if (buyNowControls.paymentMethod) {\n modalCtrls.toggleModalVisibility();\n } else {\n setShowTryBuyNow(true);\n }\n };\n\n const onConfirmPurchase = async (\n formikProps: FormikProps,\n subtotal: number,\n fee: number,\n total: number\n ) => {\n if (formikProps.isValid) {\n const bbValues = await retrieveBlackBox();\n const tempCart = await createTemporaryCartForBuyNow();\n if (tempCart.data && bbValues.blackBoxValue && buyNowControls.paymentMethod) {\n dispatch(buyNowFlow.update({ buyNowDrawerView: 'Loading' }));\n const purchaseRequest = {\n item: { ...formikProps.values, productId: product.id },\n blackBoxValue: bbValues.blackBoxValue,\n orderSource: OrderSource.Web,\n clientVersion: '2.0.0',\n paymentMethod: buyNowControls.paymentMethod,\n paymentProviderResponse: null,\n payment3DSecureResponse: null,\n cartId: tempCart.data.id,\n };\n\n const result = await buyNowPlaceOrder(purchaseRequest);\n if (result.data) {\n if (result.data.errorCode) {\n const errorData = handleError(result.data);\n dispatch(\n buyNowFlow.update({\n errorData,\n buyNowDrawerView: 'Error',\n })\n );\n } else {\n const createdTime = new Date().toISOString();\n const logData = {\n cart: {\n id: 'buy-now',\n earnings: result.data.earnings || 0,\n lineItems: [\n {\n ...emptyLineItem,\n id: 'buy-now',\n productId: product.id,\n price: formikProps.values.priceOverride || product.price,\n quantity: formikProps.values.quantity,\n earnings: result.data.earnings || 0,\n },\n ],\n productCount: 1,\n subtotal: subtotal,\n createdTime: createdTime,\n updatedTime: createdTime,\n },\n total,\n shippingCost: fee,\n orderId: result.data.orderId ? String(result.data.orderId) : '',\n isBuyNow: true,\n };\n gaLogPurchase(logData);\n constructorClient.tracker.trackPurchase({\n items: [{ itemId: brandId.toString(), itemName: brandName }] as any[],\n revenue: total!,\n orderId: result.data.orderId ? String(result.data.orderId) : '',\n section: 'Products',\n });\n dispatch(\n buyNowFlow.update({\n buyNowDrawerView: 'Success',\n purchaseSuccessData: {\n subtotal: subtotal,\n earnings: result.data.earnings || 0,\n },\n })\n );\n }\n } else {\n // NOTE: Error Handling Code Goes Here\n const errorData = handleError({\n earnings: null,\n errorCode: Codes.ECOMM_CATCH_ALL,\n errorMessage: null,\n orderId: null,\n });\n dispatch(\n buyNowFlow.update({\n errorData,\n buyNowDrawerView: 'Error',\n })\n );\n }\n } else {\n // NOTE: We should render the `service unavailable message here`\n const errorData = handleError({\n earnings: null,\n errorCode: Codes.ECOMM_CATCH_ALL,\n errorMessage: null,\n orderId: null,\n });\n dispatch(\n buyNowFlow.update({\n errorData,\n buyNowDrawerView: 'Error',\n })\n );\n }\n }\n };\n\n return (\n \n \n \n {(formikProps) => (\n \n \n
    \n {text ? (\n \n

    {text}

    \n \n ) : null}\n
    \n Digital gift cards that are delivered electronically and\n automatically saved to your Wallet.\n
    \n {shouldHideSendAsGift ? : null}\n
    \n {!allVariantsUnavailable && (\n eGift Value\n }\n hideQuantityField={product?.canOverridePrice}\n setVariant={setSelectedVariant}\n />\n )}\n
    \n
    \n
    \n {!showEditForm && (\n <>\n {!allVariantsUnavailable && (\n
    \n {!buyNowControls.isBuyNowEnabled ? (\n <>\n \n Add to Cart\n \n {allowGiftingEgift &&\n !showGiftDetails &&\n (!shouldHideSendAsGift ? (\n \n \n Send as Gift by\n Email\n \n ) : (\n \n ))}\n \n ) : (\n <>\n \n onBuyNowClick(\n formikProps.values\n )\n }\n disabled={\n buyNowControls.fetching ||\n showGiftDetails\n }\n >\n Buy Now\n \n \n Add to Cart\n \n {allowGiftingEgift &&\n !showGiftDetails &&\n (!shouldHideSendAsGift ? (\n \n \n Send as Gift by\n Email\n \n ) : (\n \n ))}\n \n )}\n {showGiftDetails && (\n \n \n \n Cancel\n \n \n )}\n
    \n )}\n \n )}\n {!showEditForm && (\n <>\n {!allVariantsUnavailable && (\n
    \n
    \n {!buyNowControls.isBuyNowEnabled ? (\n <>\n \n Add to Cart\n \n {allowGiftingEgift &&\n !showGiftDetails &&\n (!shouldHideSendAsGift ? (\n \n \n Send as Gift by\n Email\n \n ) : (\n \n ))}\n \n ) : (\n <>\n \n onBuyNowClick(\n formikProps.values\n )\n }\n disabled={\n buyNowControls.fetching ||\n showGiftDetails\n }\n >\n Buy Now\n \n \n Add to Cart\n \n {allowGiftingEgift &&\n !showGiftDetails &&\n (!shouldHideSendAsGift ? (\n \n \n Send as Gift by\n Email\n \n ) : (\n \n ))}\n \n )}\n {showGiftDetails && (\n \n \n Cancel\n \n \n )}\n
    \n
    \n )}\n \n )}\n \n \n setShowTryBuyNow(false)}\n />\n \n
    \n
    \n \n \n \n \n \n
    \n \n \n \n
    \n )}\n \n \n
    \n goToCardPage(card.id)}\n />\n
    \n
    \n );\n};\n\nconst CartMaxCapacityGiftWarningModal = ({\n modal,\n history,\n}: {\n modal: ModalControls;\n history: History;\n}) => {\n const goToCart = () => history.push(Routes.ShopOrderSummary);\n return (\n \n
    \n \n

    \n Your Cart is Full\n

    \n

    \n Please checkout with your current cart before placing additional orders.\n

    \n
    \n \n Go to Cart\n \n \n Close\n \n
    \n
    \n
    \n );\n};\n\nconst DiscardGiftDetailsWarningModal = ({\n modal,\n discardGiftDetails,\n}: {\n modal: ModalControls;\n discardGiftDetails: () => void;\n}) => {\n return (\n \n

    \n By canceling your order, all gifting details will be removed and you will need to\n enter them again to send as an eGift.\n

    \n
    \n \n Keep Gift Details\n \n \n Delete Gift Details\n \n
    \n \n );\n};\n","import React, { useState } from 'react';\nimport * as Tabs from '@radix-ui/react-tabs';\nimport { Form, Formik, FormikHelpers } from 'formik';\n\nimport { Reload, ShipToHome } from 'components/custom-icons';\n\nimport { ProductAmountInput, ProductAmountInputFormData } from './ProductAmountInput';\nimport { CartProductTabPanelProps } from './types';\nimport { sortOptionValuesAscending } from './utils';\n\nimport { createStyle, createStyles } from 'utils/createStyle';\nimport useUnavailableProductVariants from './utils/useUnavailableProductVariants';\nimport { waitPromise } from 'utils/promiseHelpers';\nimport { FormBtn } from 'components/form-btn';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectOrganizationOptionsFinishedLoading } from 'common/features/store/duck/organization/duck';\nimport { FadeIn } from 'components/loading-screen/FadeIn';\nimport { Render } from 'components/loading-screen/Render';\nimport { SkeletonProps } from 'react-loading-skeleton';\nimport { Product, ProductVariant } from 'common/api/e-comm/models/Product';\nimport { Alert, AlertType } from 'components/alerts/sticky/Alert';\n\nexport interface ProductDetailsPanelProps extends CartProductTabPanelProps {\n value: string;\n isShipToCoordinatorEnabled?: boolean;\n brandName: string;\n}\n\nconst styles = createStyles({\n ctrlIncrement: createStyle('inline-block', {\n maxWidth: '140px',\n }),\n incrementAndTotal: createStyle('grid mt-4 lg:mt-0', {\n gridTemplateColumns: 'auto auto',\n }),\n listShipToHome: createStyle('mt-2 text-xs text-grey-darkest', {\n listStyleType: 'disc',\n paddingLeft: '20px',\n }),\n listComboContainer: createStyle('w-full', { maxWidth: '220px' }),\n});\n\nexport const PhysicalTabPanel = ({\n value,\n product,\n addToCart,\n canCheckout,\n isShipToCoordinatorEnabled,\n brandName,\n}: ProductDetailsPanelProps) => {\n const { text, variants: unavailableVariants } = useUnavailableProductVariants(product);\n const orgOptionsHaveLoaded = useRootSelector(selectOrganizationOptionsFinishedLoading);\n const [selectedVariant, setSelectedVariant] = useState(undefined);\n\n const initialValues: ProductAmountInputFormData = {\n selectedOptions: Object.fromEntries(\n product.options.map((opt) => [opt.id, sortOptionValuesAscending(opt.values)[0].value])\n ),\n priceOverride: 0,\n quantity: 1,\n };\n\n const [addingToCart, setAddingToCart] = useState(false);\n\n const allVariantsUnavailable = unavailableVariants.length === product.variants.length;\n\n const onSubmit = async (\n data: ProductAmountInputFormData,\n formikHelpers: FormikHelpers\n ) => {\n // CASE: if you're not part of the organization anymore -- you shouldn't\n // be able to add items to cart\n if (!canCheckout) {\n return;\n }\n\n const apiResponse = await waitPromise(addToCart(product, data), setAddingToCart);\n\n // reset the form to the initial state\n if (apiResponse?.response?.ok) {\n formikHelpers.resetForm();\n }\n };\n const productDisabled =\n !product.isShipToHomeEligible && !isShipToCoordinatorEnabled && orgOptionsHaveLoaded;\n const productEnabled =\n (isShipToCoordinatorEnabled && orgOptionsHaveLoaded) || product.isShipToHomeEligible;\n\n return (\n \n \n {text ? (\n \n

    {text}

    \n \n ) : null}\n \n when={orgOptionsHaveLoaded}\n loadingComponentProps={{ className: 'h-36 sm:h-56' }}\n >\n \n
    \n

    \n This card is not available because your organization only allows\n Ship to Home eligible physical gift cards. If you would like to\n place an order for this card, please contact your coordinator.\n

    \n
    \n
    \n \n \n
    \n
    \n Gift cards that are shipped to your organization, or mailed\n directly to you if ship-to-home eligible.\n
    \n \n
    \n {!allVariantsUnavailable && (\n (\n {label}\n )}\n hideQuantityField={false}\n uiSettings={{\n totalMargin: 'mt-auto sm:mt-0 sm:mb-auto',\n }}\n setVariant={setSelectedVariant}\n />\n )}\n
    \n
    \n {!allVariantsUnavailable && (\n \n Add to Cart\n \n )}\n
    \n \n
    \n
    \n \n \n
    \n );\n};\n\nconst ProductInfoList = ({ product }: { product: Product }) => {\n if (!(product.isShipToHomeEligible || product.isReloadable)) {\n // NOTE: Don't render the list if none of the items can be renderable\n return null;\n }\n return (\n
      \n {product.isShipToHomeEligible && (\n
    • \n Ship to home eligible\n
    • \n )}\n {product.isReloadable && (\n
    • \n Reloadable card\n
    • \n )}\n
    \n );\n};\n","import { ECommBrand } from '../e-comm/models/ECommBrand';\nimport { SearchResultBrand } from '../search/models/SearchResultBrand';\n\nimport { Overlap } from 'common/definitions/Overlap';\n\nexport type UniversalBrand = Overlap;\n\nexport const emptyUniversalBrand: UniversalBrand = {\n id: 0,\n name: '',\n imageUrl: '',\n};\n","import { Card } from 'common/api/e-comm/models/Card';\nimport { emptyUniversalBrand, UniversalBrand } from 'common/api/models/UniversalBrand';\n\nexport const getCardName = (card: Card, brand: UniversalBrand = emptyUniversalBrand) => {\n return card.name || brand.name;\n};\n","import { StatusCode } from '../config';\nimport { APIResponse } from '../models';\n\nexport const hasServerError = (response: APIResponse) => {\n if (!response || !response.response) {\n return false;\n }\n\n return response.response.status >= StatusCode.ServerError;\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Formik, Form } from 'formik';\n\nimport { FormikTextField } from './utils/fields';\n\nimport { getReloadProductThunk, upsertCard } from 'common/features/store/duck/wallet/duck';\nimport {\n isPinRequiredForReloadOrBalance,\n registerCard,\n RegisterCardRequest,\n} from 'common/api/wallet/cards';\nimport { useAlert } from 'modules/alerts';\nimport { LoadingOverlay, openLoader, closeLoader } from 'components/loading-overlay/LoadingOverlay';\nimport { getCardName } from 'common/api/utils/getCardName';\nimport { emptyUniversalBrand } from 'common/api/models/UniversalBrand';\nimport { getBrandThunk } from 'common/features/store/duck/brands/duck';\nimport { hasServerError } from 'common/api/utils/hasServerError';\nimport { useRootSelector } from 'rootStore';\nimport { createStyles } from 'utils/createStyle';\nimport { walletCardPinValidator } from 'common/modules/form-validation/validators';\n\ninterface RegisterCardDialogProps {\n brandId: number;\n supplierCode: string;\n children: React.ReactNode;\n}\n\nconst styles = createStyles({\n content: ['relative', { width: '380px' }],\n});\n\nexport const RegisterCardDialog = ({\n children,\n brandId,\n supplierCode,\n}: RegisterCardDialogProps) => {\n const initialFormValues: RegisterCardRequest = {\n cardNumber: '',\n pin: '',\n productSku: '',\n brandId,\n name: '',\n supplierCode: '',\n };\n const [isRequired, setIsRequired] = useState(false);\n\n const { userId } = useRootSelector((s) => s.store.account);\n const dispatch = useDispatch();\n\n const alert = useAlert();\n const loader = useRef(null);\n\n const doRegisterCard = useCallback(\n async (_registerCardRequest: RegisterCardRequest) => {\n if (!userId) {\n return;\n }\n\n openLoader(loader.current);\n\n try {\n const reload = await getReloadProductThunk(_registerCardRequest.brandId)(dispatch);\n\n if (reload == null || reload.data == null) {\n return;\n }\n\n const [result, brandResult] = await Promise.all([\n registerCard({\n ..._registerCardRequest,\n productSku: reload.data.sku,\n supplierCode: reload.data.supplierCode,\n }),\n getBrandThunk(_registerCardRequest.brandId)(dispatch),\n ]);\n\n if (result.data) {\n dispatch(upsertCard({ userId, card: result.data }));\n\n const name = getCardName(result.data, brandResult.data || emptyUniversalBrand);\n\n alert({\n title: 'Card registered successfully!',\n message: `You've successfully added ${name || 'the card'} to your Wallet`,\n });\n\n return;\n }\n\n if (!hasServerError(result)) {\n const invalidCardNumberMessage = `Invalid Card Number\nPlease note, you can only add reloadable Gift Cards purchased from us. eGift Cards are automatically added.`;\n alert({ title: 'Invalid Card Number', message: invalidCardNumberMessage });\n return;\n }\n } finally {\n await closeLoader(loader.current);\n }\n\n return null;\n },\n [dispatch, userId, alert]\n );\n\n const onSubmit = async (request: RegisterCardRequest) => {\n await doRegisterCard(request);\n };\n\n const validateFormData = (formValues: RegisterCardRequest) => {\n const errors: { [key: string]: string } = {};\n\n if (!formValues.cardNumber) {\n errors.cardNumber = 'Card Number is required';\n }\n\n return errors;\n };\n\n useEffect(() => {\n isPinRequiredForReloadOrBalance(supplierCode).then((result) => {\n setIsRequired(result.data?.isPinRequired || false);\n });\n }, []);\n\n const validatePin = useCallback(\n (value: string) => {\n if (value.length) {\n return walletCardPinValidator(value);\n } else if (isRequired) {\n return 'Pin is required.';\n }\n },\n [isRequired]\n );\n\n return (\n
    \n \n \n {(formikProps) => (\n
    \n
    \n
    \n \n name=\"cardNumber\"\n title=\"Card Number\"\n label=\"Card Number\"\n placeholder=\"Card Number\"\n error={formikProps.errors.cardNumber}\n />\n
    \n
    \n \n name=\"pin\"\n title=\"PIN\"\n label=\"PIN\"\n placeholder=\"PIN\"\n error={formikProps.errors.pin}\n validate={validatePin}\n />\n
    \n
    \n {children}\n
    \n )}\n \n
    \n );\n};\n","import { getCardBalance } from 'common/api/wallet/cards';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { useEffect } from 'react';\nimport { Card } from 'common/api/e-comm/models/Card';\n\nexport const useCardBalance = (card?: Card | null) => {\n const [doGetCardBalance, getCardBalanceAsyncState, getCardBalanceResult] =\n useApi(getCardBalance);\n\n useEffect(() => {\n if (card?.id && card?.settings?.canCheckBalance) {\n (async () => {\n await doGetCardBalance(card.id as string);\n })();\n }\n }, [card, doGetCardBalance]);\n\n return {\n isLoading: getCardBalanceAsyncState.loading,\n error: getCardBalanceAsyncState.error,\n data: getCardBalanceResult?.data,\n };\n};\n","export const defaultApiErrorMessage = () => {\n const isConnected = navigator.onLine;\n const title = isConnected ? 'Service Temporarily Unavailable' : 'No Internet Connection';\n const message = isConnected\n ? \"There seems to have been a hiccup. We've reported the issue. Please try again later.\"\n : 'Please check your connection settings and try again.';\n\n return {\n title,\n message,\n };\n};\n","import React, { useCallback } from 'react';\n\nimport { updateBalance } from 'common/api/wallet/cards';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { Form, Formik } from 'formik';\nimport { Btn } from 'components/btn/Btn';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { FormikTextField } from 'features/product/components/utils/fields';\nimport { CARD_AMOUNT_MAX } from 'common/api/config';\nimport { useAlert } from 'modules/alerts';\nimport { defaultApiErrorMessage } from 'utils/apiResponseMessages';\nimport { isEmpty } from 'common/modules/form-validation';\nimport { LinkBtn } from 'components/link-btn';\n\nexport const ModalTrackDialog = ({\n cardId,\n currentBalance,\n isOpen,\n setIsOpen,\n onBalanceUpdated,\n}: {\n cardId: string;\n currentBalance: number;\n isOpen: boolean;\n setIsOpen: (value: boolean) => unknown;\n onBalanceUpdated?: (value: number) => unknown;\n}) => (\n <>\n setIsOpen(false)}\n size={[ModalSize.CONTENT_WIDTH, ModalSize.CONTENT_WIDTH]}\n >\n \n \n \n);\n\ninterface FormValues {\n value?: string;\n}\n\nconst TrackDialog = ({\n cardId,\n currentBalance,\n setIsOpen,\n onBalanceUpdated,\n}: {\n cardId: string;\n currentBalance: number;\n setIsOpen: (value: boolean) => unknown;\n onBalanceUpdated?: (value: number) => unknown;\n}) => {\n const [doUpdateBalance, doUpdateBalanceAsyncState] = useApi(updateBalance);\n\n const validate = useCallback(({ value }: FormValues) => {\n const valueStr = (value ?? '').toString();\n const valueNumeric = Number(value);\n\n if (isEmpty(valueStr) || valueStr.endsWith('.')) {\n return { value: 'Invalid value' };\n }\n\n if (valueNumeric < 0 || valueNumeric > CARD_AMOUNT_MAX) {\n return {\n value: `Card balance must be between 0 and ${CARD_AMOUNT_MAX}.`,\n };\n }\n }, []);\n\n const alert = useAlert();\n\n const onSubmit = useCallback(\n async ({ value }: FormValues) => {\n const valueNumeric = Number(value);\n const response = await doUpdateBalance(cardId, valueNumeric || 0);\n\n if (response.error) {\n alert({\n title: 'Error updating balance',\n message: defaultApiErrorMessage().message,\n });\n return;\n }\n\n setIsOpen(false);\n\n if (onBalanceUpdated) {\n onBalanceUpdated(valueNumeric || 0);\n }\n },\n [alert, cardId, doUpdateBalance, onBalanceUpdated, setIsOpen]\n );\n\n return (\n \n initialValues={{ value: undefined }}\n validate={validate}\n onSubmit={onSubmit}\n >\n {(formikProps) => (\n
    \n
    \n This card requires that you manually track your balance. Your Balance:{' '}\n {monetizeWithDecimal(currentBalance)}\n
    \n
    \n \n
    \n
    \n \n Update Balance\n \n
    \n
    \n setIsOpen(false)}>\n Cancel\n \n
    \n
    \n
    \n
    \n )}\n \n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faRedo } from '@fortawesome/pro-solid-svg-icons';\nimport { getFuzzyDate } from 'utils';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport Skeleton from 'react-loading-skeleton';\nimport { ModalTrackDialog } from './ModalTrackDialog';\nimport { Card, CardBalance as ICardBalance } from 'common/api/e-comm/models/Card';\nimport { APIResponse, APIError } from 'common/api/models';\nimport { LinkBtn } from 'components/link-btn';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { Modal, ModalPrimaryBtn, ModalSecondaryBtn } from 'components/modal/Modal';\nimport { colors } from 'styles/settings';\nimport { faExclamationTriangle } from '@fortawesome/pro-solid-svg-icons';\nimport { ReactComponent as WarningTriangleFilled } from '../../../media/images/warning-triangle-filled.svg';\n\nexport type CardBalanceErrorType = 'IncorrectPin' | 'MissingPin' | 'GenericApiError';\n\nexport const SmallWarningTriangle = () => (\n \n);\n\nconst GenericPinError = ({ refreshBalance }: { refreshBalance: () => void }) => {\n return (\n
    \n Error updating card balance, please try again.{' '}\n Retry\n
    \n );\n};\n\nconst MissingPinError = ({ onEditCardDetails }: { onEditCardDetails: () => void }) => {\n return (\n
    \n This card's PIN is missing. To view your current balance or add\n money to this card, Edit Card Details.\n
    \n );\n};\n\nconst IncorrectPinError = ({ onEditCardDetails }: { onEditCardDetails: () => void }) => {\n return (\n
    \n This card's PIN is incorrect. To view your current balance or\n add money to this card,{' '}\n Edit Card Details.\n
    \n );\n};\n\nexport const CardBalance = ({\n card,\n loadCard,\n onAddMoneyClick,\n isLoading,\n balance,\n cardBalanceError,\n shouldHideCardBalance,\n onEditCardDetails,\n cardBalanceErrorType,\n setCardBalanceErrorType,\n}: {\n card: Card | null;\n loadCard: (_: string) => Promise>;\n onAddMoneyClick: () => void;\n isLoading: boolean;\n balance?: ICardBalance | null;\n cardBalanceError: APIError | null;\n shouldHideCardBalance: boolean;\n onEditCardDetails: () => void;\n cardBalanceErrorType?: CardBalanceErrorType;\n setCardBalanceErrorType: (value: CardBalanceErrorType | undefined) => void;\n}) => {\n const [lastUpdate, setLastUpdate] = useState();\n\n useEffect(() => {\n if (!cardBalanceError) {\n setCardBalanceErrorType(undefined);\n return;\n }\n\n const statusError = cardBalanceError?.response?.status || 0;\n const failedWith403 = statusError === 403;\n const isPinRequiredError = failedWith403 && !card?.pin;\n const isPinIncorrectError = failedWith403 && card?.pin;\n\n if (isPinRequiredError) {\n setCardBalanceErrorType('MissingPin');\n return;\n }\n\n if (isPinIncorrectError) {\n setCardBalanceErrorType('IncorrectPin');\n return;\n }\n\n if (!cardBalanceError.response?.ok) {\n setCardBalanceErrorType('GenericApiError');\n return;\n }\n }, [cardBalanceError, setCardBalanceErrorType, card?.pin]);\n\n const [showTrackBalanceDialog, setShowTrackBalanceDialog] = useState(false);\n const cardId = card?.id || null;\n\n const [ticker, setTicker] = useState(0);\n const balanceUpdated = card?.balanceUpdated;\n\n useEffect(() => {\n if (cardId) {\n setLastUpdate(balanceUpdated ? new Date(balanceUpdated) : undefined);\n }\n }, [cardId, balanceUpdated]);\n\n const refreshBalance = useCallback(async () => {\n if (!cardId) {\n return;\n }\n\n const response = await loadCard(cardId);\n\n if (!response.error && !response.data.settings?.canCheckBalance) {\n setLastUpdate(new Date());\n return;\n }\n }, [cardId, loadCard, setLastUpdate]);\n\n useEffect(() => {\n if (card && card.settings?.canCheckBalance && balance?.balanceUpdated) {\n setLastUpdate(new Date(balance?.balanceUpdated));\n }\n }, [card, balance, setLastUpdate]);\n\n // Following the same logic from native/src/features/store/features/wallet/hooks/useCardBalance.ts on line 31...\n // The implemented logic is:\n // If we canCheckBalance then it means that the card balance should be retrieved from the getBalance API call,\n // otherwise it should be the balance retrieved from the card object itself (getWalletCardById API call.)\n const cardBalance = useMemo(() => {\n if (!card) {\n return 0;\n }\n // CASE: canCheckBalance is false\n if (!card.settings?.canCheckBalance) {\n return card.cardBalance || 0;\n }\n\n // CASE: canCheckBalance is true\n return balance?.cardBalance || 0;\n }, [card, balance]);\n\n useEffect(() => {\n const t = setInterval(() => {\n setTicker((_) => _ + 1);\n }, 60000);\n return () => clearInterval(t);\n }, [setTicker]);\n\n const canCheckBalance = useMemo(() => card?.settings?.canCheckBalance, [card]);\n\n const lastUpdateDateFormatted = useMemo(\n () => {\n if (!lastUpdate) {\n return '';\n }\n\n return !canCheckBalance\n ? `As of ${lastUpdate.toLocaleDateString()}`\n : `Updated ${getFuzzyDate(lastUpdate) || ''}`;\n },\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n [lastUpdate, ticker]\n );\n\n const cardBalanceFormatted = useMemo(\n () => monetizeWithDecimal(cardBalance || 0),\n [cardBalance]\n );\n\n if (shouldHideCardBalance) {\n return <>;\n }\n\n return (\n
    \n
    \n
    \n
    \n {cardBalanceErrorType ? '$--.--' : cardBalanceFormatted}\n
    \n {renderRefreshButton(\n Boolean(canCheckBalance),\n isLoading,\n lastUpdateDateFormatted,\n refreshBalance\n )}\n
    \n {!isLoading && card?.type !== ProductType.EGiftCard && (\n \n Add money\n \n )}\n
    \n {cardBalanceErrorType === 'MissingPin' ? (\n \n ) : null}\n {cardBalanceErrorType === 'IncorrectPin' ? (\n \n ) : null}\n {cardBalanceErrorType === 'GenericApiError' ? (\n \n ) : null}\n {!isLoading && !card?.settings?.canCheckBalance && (\n
    \n setShowTrackBalanceDialog(true)}>\n Track Balance\n \n
    \n )}\n {card && (\n \n )}\n {/* TBD (Check With Reema): Commenting this error modal message for now because it's the same as FEC-1714. */}\n {/* setHasErrorRefreshingBalance(null)}\n refreshBalance={refreshBalance}\n /> */}\n
    \n );\n};\n\nconst ErrorModal = ({\n isOpen,\n closeModal,\n error,\n refreshBalance,\n}: {\n isOpen: boolean;\n closeModal: () => void;\n error: null | APIError;\n refreshBalance: () => void;\n}) => {\n // TBD/TODO: check if this still works\n const isPinRequiredError = error?.response?.statusText === 'RequiresPinForBalanceAndReload';\n\n return (\n \n
    \n \n
    \n

    \n {!isPinRequiredError ? 'Could Not Update Balance' : 'PIN Error'}\n

    \n

    \n {!isPinRequiredError\n ? 'We’re having trouble updating your balance.'\n : \"This card's PIN is missing or incorrect. To view your current balance or add money to this card, Edit Card Details.\"}\n

    \n {!isPinRequiredError ? (\n

    Please try again.

    \n ) : null}\n
    \n {!isPinRequiredError ? (\n
    \n \n Retry\n \n
    \n ) : (\n \n Close\n \n )}\n
    \n
    \n );\n};\n\nconst renderRefreshButton = (\n canCheckBalance: boolean,\n isLoading: boolean,\n lastUpdateFormatted: string | undefined,\n refreshBalance: () => void\n) => (\n
    \n {!isLoading && (\n
    \n {canCheckBalance && (\n \n )}{' '}\n {lastUpdateFormatted}\n
    \n )}\n
    {isLoading && }
    \n
    \n);\n","import React, { useEffect, useMemo, useState } from 'react';\nimport * as Tabs from '@radix-ui/react-tabs';\nimport { Formik, Form, useFormikContext } from 'formik';\n\nimport { useCardsFromWallet } from '../../../hooks/useCardsFromWallet';\n\nimport { RegisterCardDialog } from './RegisterCardDialog';\nimport {\n ProductAmountInput,\n ProductAmountInputFormData as ProductAmountFormData,\n} from './ProductAmountInput';\nimport { CartProductTabPanelProps } from './types';\nimport { sortOptionValuesAscending } from './utils';\n\nimport { createStyle, createStyles } from 'utils/createStyle';\nimport { Btn } from 'components/btn/Btn';\nimport { GiftCard, isCardReloadable, Card, EGiftCard } from 'common/api/e-comm/models/Card';\nimport { isDefined } from 'common/utils';\nimport {\n Modal,\n ModalPrimaryBtn,\n ModalSecondaryBtn,\n ModalFooter,\n ModalSize,\n} from 'components/modal/Modal';\nimport { FormikComboField } from './utils/fields';\nimport { Product } from 'common/api/e-comm/models/Product';\nimport { useCardBalance } from 'common/hooks/useCardBalance';\nimport { InMyWallet } from './InMyWallet';\nimport { useHistory } from 'react-router';\nimport { Routes } from 'routes';\nimport { FormBtn } from 'components/form-btn';\nimport { waitPromise } from 'utils/promiseHelpers';\nimport { hasErrorWithStatus } from 'common/api/utils/hasErrorWithStatus';\nimport { getCardBalance } from 'common/api/wallet/cards';\nimport { StatusCode } from 'common/api/config';\nimport { useAlert } from 'modules/alerts';\nimport { selectReloadProducts } from 'common/features/store/duck/brands/duck';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport _ from 'lodash';\nimport { LinkBtn } from 'components/link-btn';\nimport { APIError } from 'common/api/models';\nimport { SmallWarningTriangle } from 'features/wallet/components/CardBalance';\n\nexport interface ProductDetailsPanelProps extends CartProductTabPanelProps {\n value: string;\n brandId: number;\n brandName: string;\n}\n\nconst styles = createStyles({\n offer: 'text-2xl px-0 lg:px-32 py-12 lg:pt-24 text-brand-dark font-bold',\n fieldContainer: ['w-full', { maxWidth: '14rem' }],\n container: [\n 'block lg:grid mt-4',\n {\n gridTemplateColumns: 'auto auto',\n },\n ],\n ctrlIncrement: [\n 'inline-block',\n {\n maxWidth: '140px',\n },\n ],\n incrementAndTotal: [\n 'grid mt-4 lg:mt-0',\n {\n gridTemplateColumns: 'auto auto',\n },\n ],\n listShipToHome: [\n 'mb-8 mt-2 text-xs text-grey-1',\n {\n listStyleType: 'disc',\n paddingLeft: '20px',\n },\n ],\n listComboContainer: ['w-full', { maxWidth: '220px' }],\n row: ['grid gap-4 mt-5'],\n registerCard: ['sm:grid gap-4', { gridTemplateColumns: 'minmax(8rem, 14rem) auto' }],\n contentWrapper: createStyle('flex flex-col', {\n minHeight: '320px',\n }),\n});\n\nexport type ReloadableProductAmountFormData = ProductAmountFormData & { cardId: string };\n\nconst getLastFourDigits = (card: GiftCard) => {\n return card.formattedCardNumber ? card.formattedCardNumber.split(' ').pop() : '';\n};\n\nconst getCardDisplayName = (card: GiftCard) => {\n return card.name ? `${card.name} (${getLastFourDigits(card)})` : card.formattedCardNumber || '';\n};\n\nexport interface AmountInputProps {\n product: Product;\n cards: Card[];\n onCardBalanceLoading: (loading: boolean) => void;\n onCardBalanceError?: (error: APIError | null) => void;\n}\n\nconst AmountInput = ({\n product,\n cards,\n onCardBalanceError,\n onCardBalanceLoading,\n}: AmountInputProps) => {\n const { values } = useFormikContext();\n const cardId = values.cardId;\n const card = cards.find(({ id }: Card) => id === cardId);\n const { data: balance, error: balanceError, isLoading: balanceLoading } = useCardBalance(card);\n\n useEffect(() => {\n if (onCardBalanceLoading) {\n onCardBalanceLoading(balanceLoading);\n }\n }, [balanceLoading]);\n\n // call onCardBalanceError handler with balance error\n useEffect(() => {\n if (onCardBalanceError) {\n if (balanceLoading) {\n onCardBalanceError(null);\n return;\n }\n\n onCardBalanceError(balanceError);\n }\n }, [onCardBalanceError, balanceLoading, balanceError]);\n\n const cardBalance =\n card && card.settings?.canCheckBalance ? balance?.cardBalance : card && card?.cardBalance;\n return (\n Reload amount}\n hideQuantityField={true}\n cardBalance={cardBalance || 0}\n />\n );\n};\n\nconst canReloadCard = async (cardId?: string) => {\n if (!cardId) {\n return false;\n }\n\n const resp = await getCardBalance(cardId);\n return !(\n hasErrorWithStatus(resp, StatusCode.Gone) || hasErrorWithStatus(resp, StatusCode.NotFound)\n );\n};\n\nexport const ReloadTabPanel = ({\n value,\n brandId,\n brandName,\n addToCart,\n product,\n canCheckout,\n}: ProductDetailsPanelProps) => {\n const [showRegisterCard, setShowRegisterCard] = useState(false);\n\n const history = useHistory();\n const alert = useAlert();\n\n const reloadProducts = _.values(useRootSelector(selectReloadProducts));\n const walletCards = useCardsFromWallet();\n\n const {\n cards,\n relatedReloadableProducts,\n hasReloadableCards,\n reloadableCardsList,\n reloadableCards,\n } = useMemo(() => {\n const filteredCards = walletCards.filter((c) => c.brandId === brandId);\n /**\n * This related brands logic is somewhat complex.\n * We need to display any brands on the reload tab of a PDP that share the same supplierCode,\n * and allow users to purchase those other brands from the currently viewed PDP.\n * See test cases in ReloadTabPanel.test.tsx for additional context.\n */\n\n // fetch all products that share the SAME supplier code as the currently viewed product\n // but have a DIFFERENT brandID (to avoid duplicates) from our reloadProductsById portion of redux.\n const relatedReloadableProducts = reloadProducts.filter(\n (p) => p?.supplierCode === product.supplierCode && p?.brandId !== product.brandId\n );\n\n // fetch all cards in user's wallet that match a brand from the relatedReloadableProducts list.\n const relatedCards = walletCards.filter((c) =>\n relatedReloadableProducts.find(\n (reloadableProduct) => reloadableProduct?.brandId === c?.brandId\n )\n );\n\n // add any found related cards to the list of reloadable cards displayed on the PDP.\n filteredCards.push(...relatedCards);\n // end related brands logic\n\n const reloadableCards = filteredCards.filter(isDefined).filter(isCardReloadable) || [];\n\n const hasReloadableCards = reloadableCards.length > 0;\n const reloadableCardsList = reloadableCards.map((card) => ({\n value: card.id,\n text: getCardDisplayName(card),\n }));\n\n return {\n cards: filteredCards,\n relatedReloadableProducts,\n hasReloadableCards,\n reloadableCardsList,\n reloadableCards,\n };\n }, [walletCards, reloadProducts, product, brandId]);\n\n const goToCardPage = (cardId: string) =>\n history.push(Routes.WalletMyCardDetails.replace(':cardId', cardId));\n\n const [addingToCart, setAddingToCart] = useState(false);\n\n const onSubmit = async (formData: ProductAmountFormData) => {\n const canReload = await canReloadCard(formData.cardId);\n\n /**\n * due to the above related reloads logic, we might be adding a product\n * to a cart that is different from the product displayed on the PDP\n * for example reloading a safeway card from the albertsons PDP since they are\n * related brands.\n */\n\n // find card id of reload being purchased\n const reloadCard = cards.find((c) => c.id === formData.cardId);\n\n // find product of card being reloaded\n const cardProduct = relatedReloadableProducts.find(\n (p) => p?.brandId === reloadCard?.brandId\n );\n\n // cardProduct is defined, that means we're attempting to reload a card that is DIFFERENT\n // from the currently displayed PDP. Otherwise we're just reloading the actual product\n // being displayed.\n const reloadProduct = cardProduct ? cardProduct : product;\n if (reloadProduct && canCheckout && canReload) {\n waitPromise(addToCart(reloadProduct, formData), setAddingToCart);\n }\n\n // CASE: We cannot reload due to reload card not being active\n if (!canReload) {\n // NOTE: show a modal telling user they cannot add to this reload card\n alert({\n title: 'Inactive Reload',\n message: 'This reload card is inactive and cannot be added to cart.',\n showCloseButton: true,\n });\n }\n };\n\n const initialValues: ReloadableProductAmountFormData = {\n cardId: hasReloadableCards ? reloadableCardsList[0].value : '',\n selectedOptions: Object.fromEntries(\n product.options.map((opt) => [opt.id, sortOptionValuesAscending(opt.values)[0].value])\n ),\n priceOverride: product.minValue || 0,\n quantity: 1,\n };\n\n return (\n \n
    \n {product && (\n
    \n
    \n Add funds to physical gift cards you’ve already purchased.\n
    \n setShowRegisterCard(false)}\n size={[ModalSize.CONTENT_WIDTH, ModalSize.CONTENT_WIDTH]}\n >\n \n \n \n Register This Card\n \n setShowRegisterCard(false)}\n >\n Close\n \n \n \n \n {!hasReloadableCards && (\n
    \n Register a card so you can reload funds when needed.\n
    \n setShowRegisterCard(true)}\n >\n Register a Card\n \n
    \n
    \n )}\n {hasReloadableCards && (\n \n \n \n )}\n
    \n )}\n goToCardPage(card.id)}\n />\n
    \n
    \n );\n};\n\ninterface ReloadTabPanelFormProps {\n cards: (GiftCard | EGiftCard)[];\n product: Product;\n reloadableCardsList: {\n value: string;\n text: string;\n }[];\n setShowRegisterCard: Function;\n addingToCart: boolean;\n canCheckout: boolean;\n reloadableProducts: (Product | undefined)[];\n brandName: string;\n}\n\nconst ReloadTabPanelForm = ({\n cards,\n product,\n reloadableCardsList,\n setShowRegisterCard,\n addingToCart,\n canCheckout,\n reloadableProducts,\n brandName,\n}: ReloadTabPanelFormProps) => {\n const [reloadProduct, setReloadProduct] = useState(product);\n const formCtx = useFormikContext();\n const history = useHistory();\n\n useEffect(() => {\n // Because we are displaying multiple different brands on this PDP due to related reloads\n // we also need to make sure we're adjusting the reload min/max amounts to reflect\n // the brand of the selected reload card.\n const selectedCard = cards.find((c) => c?.id === formCtx?.values?.cardId);\n const selectedProduct = reloadableProducts.find(\n (p) => p?.brandId === selectedCard?.brandId\n );\n\n if (selectedProduct) {\n setReloadProduct(selectedProduct);\n }\n }, [formCtx, cards, reloadableProducts]);\n\n const onEditCardDetails = () => {\n // redirect to wallet page\n if (!formCtx.values.cardId) {\n return;\n }\n\n history.push(Routes.WalletMyCardDetails.replace(':cardId', formCtx.values.cardId));\n };\n\n const [selectedCardError, setSelectedCardError] = useState | null>();\n const [selectedCardLoading, setSelectedCardLoading] = useState(false);\n\n return (\n
    \n \n
    \n
    \n
    \n \n Your registered card\n \n }\n options={reloadableCardsList}\n />\n {\n setShowRegisterCard(true);\n e.preventDefault();\n }}\n >\n + Register another card\n \n {selectedCardError ? (\n
    \n This card's PIN is missing or\n incorrect. To view your current balance or add money to this\n card,{' '}\n \n Edit Card Details.\n \n
    \n ) : null}\n
    \n \n
    \n
    \n
    \n \n Add to Cart\n \n {product.isOvernightReload && (\n

    \n Funds will be available the next business day.\n

    \n )}\n
    \n \n \n );\n};\n","import React from 'react';\nimport * as Tabs from '@radix-ui/react-tabs';\nimport classNames from 'classnames';\n\nimport { createStyle, createStyles } from '../../../utils/createStyle';\nimport { colors } from '../../../styles/settings';\n\nconst styles = createStyles({\n tab: createStyle(\n 'relative font-bold text-center cursor-pointer text-dark-blue bg-pale-blue-50',\n {\n border: '1px solid transparent',\n '&:hover': { color: 'black' },\n\n '&[data-state=\"active\"]': {\n color: colors.brandDark,\n border: `1px solid ${colors.brand}`,\n borderBottom: 'none',\n marginBottom: '-1px',\n background: colors.white,\n },\n }\n ),\n tabOfferContent: createStyle('rounded-t', {\n '&[data-state=\"active\"]': {\n border: `1px solid ${colors.bonusPink}`,\n borderBottom: 'none',\n },\n }),\n tabOffer: createStyle(\n 'absolute left-0 right-0 top-0 text-base lg:text-sm bg-green min-w-full rounded-t',\n {\n color: 'white',\n height: 3,\n }\n ),\n tabTitle: createStyle(\n 'relative p-2 sm:px-4 text-sm sm:text-base flex items-center justify-center'\n ),\n tabPill: createStyle(\n 'flex relative px-2 font-bold text-center cursor-pointer rounded-3xl border border-solid text-grey-1',\n {\n marginRight: '10px',\n color: colors.brandDark,\n\n '&[data-state=\"active\"]': {\n color: colors.brand,\n borderWidth: '2px',\n },\n '&[data-state=\"active\"] > div': {\n paddingBottom: '7px',\n paddingTop: '7px',\n },\n }\n ),\n});\n\nexport interface TabProps {\n offer?: string;\n title: string;\n icon?: React.ReactNode;\n tabId: string;\n selected: boolean;\n className?: string;\n noUnderline?: boolean;\n noUpperBorder?: boolean;\n}\n\nexport const Tab = ({\n offer,\n title,\n icon,\n tabId,\n selected,\n className,\n noUnderline = false,\n noUpperBorder = false,\n}: TabProps) => {\n return (\n \n \n {!noUpperBorder || selected ? (\n \n ) : null}\n {icon}\n \n {title}\n \n \n \n );\n};\n\nexport const TabPill = ({ offer, title, icon, tabId, selected, className }: TabProps) => {\n return (\n \n \n {icon}\n {title}\n \n \n );\n};\n","import { CartItem } from 'common/api/e-comm/models/CartItem';\nimport { Product } from 'common/api/e-comm/models/Product';\n\nexport const potentialCartItemMatches = (cartItem: CartItem, product: Product) => {\n return product.variants.filter((variant) =>\n variant.options.every((o) => {\n const selectedOption = cartItem.selectedOptions[o.optionId];\n\n return !selectedOption || selectedOption === o.value;\n })\n );\n};\n","import { CartLineItemGiftDetails } from './CartLineItem';\n\nexport interface CartItem {\n productId: number;\n selectedOptions: { [optionId: number]: string };\n quantity: number;\n priceOverride: number | null;\n giftDetail?: CartLineItemGiftDetails;\n}\n\nexport interface BulkOrderCartItem extends Omit {\n giftDetails: CartLineItemGiftDetails[];\n}\n\nexport const emptyCartItem: CartItem = {\n productId: 0,\n selectedOptions: {},\n quantity: 1,\n priceOverride: null,\n};\n\nexport interface GiftDetail {\n fromName: string;\n fromPhone: string;\n toName: string;\n toEmail: string;\n deliveryDate: string;\n message: string;\n productImageName: string;\n}\n","import { Product } from 'common/api/e-comm/models/Product';\nimport { sortCurrency } from './sortCurrency';\n\nexport const selectedProductOptions = (product?: Product | null) => {\n const options = product ? product.options : [];\n\n return options.reduce(\n (initialProductOptions, o) => ({\n ...initialProductOptions,\n [o.id]: sortCurrency(o.values)[0],\n }),\n {}\n );\n};\n","export function sortCurrency(values: string[]) {\n return values.slice().sort((a, b) => {\n // Remove the dollar sign and commas, then convert to a number\n const numA = parseFloat(a.replace(/[$,]/g, ''));\n const numB = parseFloat(b.replace(/[$,]/g, ''));\n\n return numA - numB;\n });\n}\n","import { Product } from 'common/api/e-comm/models/Product';\nimport { getCartItemRebate } from 'common/api/e-comm/utils/getCartItemRebate';\nimport { getCartItemBonus } from 'common/api/e-comm/utils/getCartItemBonus';\nimport { CartItem, emptyCartItem } from 'common/api/e-comm/models/CartItem';\nimport { selectedProductOptions } from 'common/utils/amountInput';\nimport { useStateRebateAdjustment } from 'common/hooks/useStateRebateAdjustment';\nimport { useCallback } from 'react';\n\nexport const useProductRebate = () => {\n const {\n stateRebateAdjustment: { adjustment: adjustLocalProduct },\n } = useStateRebateAdjustment(true);\n\n const {\n stateRebateAdjustment: { adjustment: adjustNonLocalProduct },\n } = useStateRebateAdjustment(false);\n\n const calculateProductRebate = useCallback(\n (product: Product) => {\n const adjustment = product.isLocalProduct ? adjustLocalProduct : adjustNonLocalProduct;\n\n const cartItem: CartItem = {\n ...emptyCartItem,\n selectedOptions: selectedProductOptions(product),\n };\n\n const rebate = getCartItemRebate(cartItem, product);\n const bonus = getCartItemBonus(cartItem, product);\n\n const isOnBonus = product.variants.some((v) => v.bonus);\n\n const activeRebate = bonus?.rebate || rebate;\n\n return {\n rebate: activeRebate - adjustment,\n isOnBonus,\n };\n },\n [adjustLocalProduct, adjustNonLocalProduct]\n );\n\n return { calculateProductRebate };\n};\n","import { CartItem } from '../models/CartItem';\nimport { Product } from '../models/Product';\n\nimport { potentialCartItemMatches } from 'common/api/e-comm/utils/potentialCartItemMatches';\n\nexport const getCartItemRebate = (cartItem: CartItem, product: Product): number => {\n const [firstMatch, ...matches] = potentialCartItemMatches(cartItem, product);\n if (!firstMatch || matches.some((variant) => variant.rebate !== firstMatch.rebate)) {\n return product.rebate;\n }\n return firstMatch.rebate;\n};\n","import { CartItem } from '../models/CartItem';\nimport { Product } from '../models/Product';\n\nimport { potentialCartItemMatches } from 'common/api/e-comm/utils/potentialCartItemMatches';\nimport { ProductBonus } from 'common/api/models/ProductBonus';\n\nexport const getCartItemBonus = (cartItem: CartItem, product: Product): ProductBonus | null => {\n const [firstMatch, ...matches] = potentialCartItemMatches(cartItem, product);\n if (!firstMatch || matches.some((variant) => variant.bonus !== firstMatch.bonus)) {\n return product.bonus;\n }\n return firstMatch.bonus;\n};\n","import { CRM_AFFILIATES_URL } from 'common/api/config';\nimport { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\n\nexport interface FlipgiveToken {\n token: string;\n}\n\nexport const getFlipgiveToken = async () => {\n const result = await withTokensIfNeeded(\n `${CRM_AFFILIATES_URL}/flipgive-token?api-version=1`\n );\n return result;\n};\n","import { useState, useEffect } from 'react';\nimport { getFlipgiveToken } from 'common/api/crm/affiliates/service';\n\nexport const useConfigureUrlWithAffiliateToken = (\n pattern: string,\n url?: string,\n queryParams?: string\n): [string, boolean] => {\n const [token, setToken] = useState('');\n const [isLoading, setIsLoading] = useState(true);\n useEffect(() => {\n getFlipgiveToken()\n .then((result) => {\n if (result.data?.token) {\n setToken(result.data.token);\n }\n setIsLoading(false);\n })\n .catch((_) => setIsLoading(false));\n }, []);\n const activationUrl = token && url ? `${url?.replace(pattern, token)}${queryParams ?? ''}` : '';\n return [activationUrl, isLoading];\n};\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgWarningSign(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 0C15.5078 0 20 4.49219 20 10C20 15.5469 15.5078 20 10 20C4.45312 20 0 15.5469 0 10C0 4.49219 4.45312 0 10 0ZM10 18.125C14.4531 18.125 18.125 14.4922 18.125 10C18.125 5.54688 14.4531 1.875 10 1.875C5.50781 1.875 1.875 5.54688 1.875 10C1.875 14.4922 5.50781 18.125 10 18.125ZM11.5625 13.125C12.0703 13.125 12.5 13.5547 12.5 14.0625C12.5 14.6094 12.0703 15 11.5625 15H8.4375C7.89062 15 7.5 14.6094 7.5 14.0625C7.5 13.5547 7.89062 13.125 8.4375 13.125H9.0625V10.625H8.75C8.20312 10.625 7.8125 10.2344 7.8125 9.6875C7.8125 9.17969 8.20312 8.75 8.75 8.75H10C10.5078 8.75 10.9375 9.17969 10.9375 9.6875V13.125H11.5625ZM10 7.5C9.29688 7.5 8.75 6.95312 8.75 6.25C8.75 5.58594 9.29688 5 10 5C10.6641 5 11.25 5.58594 11.25 6.25C11.25 6.95312 10.6641 7.5 10 7.5Z\",\n fill: \"#B54708\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgWarningSign);\nexport default __webpack_public_path__ + \"static/media/warning-sign.ece7d594ec2db2eb727ece67f3cffcd2.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport { createStyles } from 'utils/createStyle';\n\nimport { ReactComponent as WarningIcon } from '../../../media/images/warning-sign.svg';\n\nconst styles = createStyles({\n warningIcon: [\n {\n minWidth: '1.25rem',\n },\n ],\n warningBannerContainer: [\n 'flex items-center gap-4',\n {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: '#B5470840',\n background: '#FFFAEB',\n color: '#B54708',\n fontSize: 14,\n fontWeight: 600,\n },\n ],\n});\n\nexport const WarningBanner = () => (\n
    \n \n For this brand, both gift card and online earnings cannot be combined.\n
    \n);\n","export enum AffiliateQueryParams {\n ChannelWeb = '&utm_channel=Web&utm_source={source}',\n ChannelApp = '&utm_channel=App&utm_source={source}',\n}\n","const getTextToReturn = (amount: number, amountType: string) =>\n `confirming your online earnings in ${amount} ${amountType}.`;\n\nexport const getConfirmationDrawerText = (hours: number) => {\n switch (true) {\n case hours <= 0:\n return `confirmation typically within 24 hours.`;\n case hours <= 24:\n return getTextToReturn(24, 'hours');\n case hours <= 48:\n return getTextToReturn(48, 'hours');\n case hours <= 72:\n return getTextToReturn(72, 'hours');\n case hours <= 168:\n return getTextToReturn(7, 'days');\n case hours <= 672:\n return getTextToReturn(30, 'days');\n case hours > 672:\n return getTextToReturn(60, 'days');\n default:\n return `confirmation typically within 24 hours.`;\n }\n};\n","import { Modal, ModalSize } from 'components/modal/Modal';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport React, { useState } from 'react';\n\ninterface Props {\n brandName: string;\n timeframeMessage: string;\n earningsPercentage: string; // e.g., \"10%\"\n brandLogo: string; // URL or import of the logo image\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst AffiliateConfirmationModal = ({\n brandName,\n timeframeMessage,\n earningsPercentage,\n brandLogo,\n isOpen,\n onClose,\n}: Props) => {\n const [isMobile, setIsMobile] = useState(false);\n\n useMediaQueries({\n '(max-width: 500px)': () => setIsMobile(true),\n '(min-width: 501px)': () => setIsMobile(false),\n });\n\n return (\n \n
    \n {/* Brand Logo */}\n \n {/* Earnings Title */}\n

    \n {earningsPercentage} Shop Online Earnings\n

    \n {/* Message */}\n

    \n If you made a purchase at {brandName}, you’ll receive an email{' '}\n {timeframeMessage}\n

    \n {/* Close Link */}\n \n Close\n \n
    \n \n );\n};\n\nexport default AffiliateConfirmationModal;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { createStyles } from 'utils/createStyle';\nimport { selectSelectedOrgId } from 'common/features/store/duck/home/duck';\nimport { useConfigureUrlWithAffiliateToken } from 'common/hooks/useGetAffiliateActivationUrl';\nimport { AffiliateQueryParams } from 'common/api/crm/enums/Affiliate';\nimport { logAffiliateClick } from 'config/analytics';\nimport {\n selectIsFlipgiveEnabledWeb,\n selectIsAffiliateConfirmationWebEnabled,\n} from 'common/features/store/duck/ffs';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { getConfirmationDrawerText } from 'common/utils/confirmationDrawer';\nimport AffiliateConfirmationModal from 'features/product/components/AffiliateConfirmationModal';\nimport { getBrand } from 'common/api/e-comm/brands';\nimport { AffiliateOffer } from 'common/features/store/duck/wallet/duck';\n\nconst styles = createStyles({\n shopOnlineBanner: [\n 'flex flex-col text-brand-dark bg-pale-blue font-semibold mt-6 pt-6 gap-4 px-5 items-center justify-center text-center',\n {\n borderRadius: '10px',\n fontSize: '18px',\n lineHeight: '25px',\n '@media (min-width: 640px)': {\n fontSize: '20px',\n lineHeight: '28px',\n },\n },\n ],\n shopNowButton: [\n 'mt-0 md:px-16 sm:px-24 py-2.5 w-full sm:w-auto flex items-center justify-center rounded-3xl font-semibold no-underline',\n { fontSize: '16px' },\n ],\n errorMessage: ['text-error font-normal', { fontSize: '12px', lineHeight: '18px' }],\n message: [{ whiteSpace: 'normal', wordWrap: 'break-word', wordBreak: 'break-word' }],\n});\n\nexport const ShopOnlineBanner = ({\n brandId,\n affiliateOffer,\n atRaiseRight,\n}: {\n brandId: number;\n affiliateOffer: AffiliateOffer;\n atRaiseRight: boolean;\n}) => {\n const showAffiliateOffersForWallet = useRootSelector(selectIsFlipgiveEnabledWeb);\n\n const [activationUrl, isLoadingUrl] = useConfigureUrlWithAffiliateToken(\n '{{token}}',\n affiliateOffer?.url,\n AffiliateQueryParams.ChannelWeb.replace('{source}', 'wallet')\n );\n\n const isFetchingOrError = isLoadingUrl || !activationUrl || !showAffiliateOffersForWallet;\n\n const isAffiliateConfirmationEnabled = useSelector(selectIsAffiliateConfirmationWebEnabled);\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n const orgId = useSelector(selectSelectedOrgId);\n\n const [brandLogo, setBrandLogo] = useState();\n\n useEffect(() => {\n (async () => {\n const _brand = await getBrand(brandId);\n setBrandLogo(_brand.data?.imageUrl);\n })();\n }, [brandId]);\n\n const rebateMessage = `${affiliateOffer.variable ? 'up to' : ''} ${\n affiliateOffer.bestRebate\n }% more`;\n\n const onClickShopNow = useCallback(() => {\n logAffiliateClick({\n affiliateChannel: process.env.REACT_APP_RAISE_RIGHT_APP_TYPE || 'web',\n affiliateMobilePlatform: navigator.userAgent.match(/iPhone/i)\n ? 'ios'\n : navigator.userAgent.match(/Android/i)\n ? 'android'\n : '',\n version: `react-web-${process.env.REACT_APP_VERSION}`,\n location: atRaiseRight ? 'wallet' : 'order summary',\n brandId,\n brandName: affiliateOffer!.name,\n orgId,\n });\n\n if (isAffiliateConfirmationEnabled) {\n setIsDrawerOpen(true);\n }\n }, [affiliateOffer, atRaiseRight, brandId, isAffiliateConfirmationEnabled, orgId]);\n\n const timeframeMessage = getConfirmationDrawerText(\n affiliateOffer?.averagePurchaseDelayHours ?? 0\n );\n\n if (!affiliateOffer?.canDoubleDip) {\n return null;\n }\n\n return (\n \n {atRaiseRight ? (\n {`Shop online through RaiseRight and earn ${rebateMessage}`}\n ) : (\n \n {`Shop online at `}\n {affiliateOffer.name}\n {` and earn ${rebateMessage}`}\n \n )}\n \n Shop Now{' '}\n \n \n {!showAffiliateOffersForWallet || (!activationUrl && !isLoadingUrl) ? (\n \n We’re sorry, shopping online is currently unavailable. Please try again later.\n \n ) : null}\n {isAffiliateConfirmationEnabled && (\n setIsDrawerOpen(false)}\n />\n )}\n \n );\n};\n\nexport const ExternalLinkArrow = (props: any) => (\n \n \n \n);\n","import React, { useCallback, useState } from 'react';\nimport * as Tabs from '@radix-ui/react-tabs';\n\nimport { Brand } from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\n\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport {\n selectIsAffiliateConfirmationWebEnabled,\n selectIsFlipgiveEnabledWeb,\n} from 'common/features/store/duck/ffs';\n\nimport { InMyWallet } from './InMyWallet';\nimport { useCardsFromWallet } from 'hooks/useCardsFromWallet';\nimport { Routes } from 'routes';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { Accordion, AccordionItem } from './Accordion';\nimport { useConfigureUrlWithAffiliateToken } from 'common/hooks/useGetAffiliateActivationUrl';\nimport { selectSelectedOrgId } from 'common/features/store/duck/home/duck';\nimport { logAffiliateClick } from 'config/analytics';\nimport { WarningBanner } from './Banners';\nimport { AffiliateQueryParams } from 'common/api/crm/enums/Affiliate';\nimport { AffiliateBonusExpiration } from './ProductInfoBonusExpiration';\nimport { ExternalLinkArrow } from 'features/wallet/components/ShopOnlineBanner';\nimport AffiliateConfirmationModal from './AffiliateConfirmationModal';\nimport { getConfirmationDrawerText } from 'common/utils/confirmationDrawer';\n\nexport interface AffiliateTabPanelProps {\n value: string;\n brand: Brand;\n contentStyle: string;\n brandId: number | null;\n}\n\nconst DetailsAndExclusions = ({ brand }: { brand: Brand }) => (\n
    \n {brand.affiliateVariablePricingText ? (\n <>\n
    Earnings Categories
    \n
    \n \n ) : null}\n\n <>\n
    \n Exclusions\n
    \n

    \n Using loyalty or rewards points on your purchase will void your online earnings.\n

    \n

    When you buy through the link on RaiseRight, we may earn a commission.

    `,\n }}\n >\n \n \n);\n\nconst TermsAndConditions = ({ brand }: { brand: Brand }) =>\n brand.affiliateOfferTerms ? (\n
    \n
    \n
    \n ) : null;\n\nconst termsStyles = 'text-xs font-semibold';\n\nexport const AffiliateTabPanel = ({\n value,\n brand,\n contentStyle,\n brandId,\n}: AffiliateTabPanelProps) => {\n const history = useHistory();\n const orgId = useSelector(selectSelectedOrgId);\n const isFlipgiveEnabled = useRootSelector(selectIsFlipgiveEnabledWeb);\n const [activationUrl, isLoadingUrl] = useConfigureUrlWithAffiliateToken(\n '{{token}}',\n isFlipgiveEnabled ? brand?.affiliateOfferUrl : undefined,\n AffiliateQueryParams.ChannelWeb.replace('{source}', 'pdp')\n );\n\n const errorFetchingActivationUrl = !isLoadingUrl && !activationUrl;\n const isFetchingOrError = isLoadingUrl || !activationUrl;\n\n const accordionItems = [\n {\n title: Details & Exclusions,\n content: ,\n value: 'details-and-exclusions',\n },\n brand.affiliateOfferTerms\n ? {\n title: Terms and Conditions,\n content: ,\n value: 'terms-and-conditions',\n }\n : undefined,\n ].filter((value) => value !== undefined) as AccordionItem[];\n\n const userCards = useCardsFromWallet().filter(\n (c) => c.brandId === brandId && c.cardBalance !== null && c.cardBalance > 0\n );\n const goToCardPage = (cardId: string) =>\n history.push(Routes.WalletMyCardDetails.replace(':cardId', cardId));\n\n const isAffiliateConfirmationEnabled = useSelector(selectIsAffiliateConfirmationWebEnabled);\n const timeframeMessage = getConfirmationDrawerText(brand?.averagePurchaseDelayHours ?? 0);\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n\n const onClickShopNow = useCallback(() => {\n logAffiliateClick({\n affiliateChannel: process.env.REACT_APP_RAISE_RIGHT_APP_TYPE || 'web',\n affiliateMobilePlatform: navigator.userAgent.match(/iPhone/i)\n ? 'ios'\n : navigator.userAgent.match(/Android/i)\n ? 'android'\n : '',\n version: `react-web-${process.env.REACT_APP_VERSION}`,\n location: 'PDP',\n brandId,\n brandName: brand.name,\n orgId,\n });\n\n // Show modal if the feature flag is enabled\n if (isAffiliateConfirmationEnabled) {\n setIsDrawerOpen(true);\n }\n }, [brand.name, brandId, orgId, isAffiliateConfirmationEnabled]);\n\n return (\n \n \n {`Earn for your organization by making a purchase on the ${brand.name} website. `}\n \n How it Works\n \n {brand.canDoubleDip === false && brand.isRaiseRightBrand === true && (\n \n )}\n
    \n
    \n
    \n
    \n \n {brand.affiliateVariablePricingText ? 'Earn up to' : 'Earn'}\n \n  \n\n {brand.isAffiliateOfferOnBonus && brand.affiliateBonus && (\n \n {' '}\n {brand.affiliateRebate}%\n \n )}\n\n \n {brand.isAffiliateOfferOnBonus && brand.affiliateBonus\n ? `${brand.affiliateBonus}%`\n : `${brand.affiliateRebate}%`}\n \n
    \n {brand.isAffiliateOfferOnBonus &&\n brand.affiliateBonus &&\n brand.affiliateBonusEnd ? (\n \n ) : null}\n
    \n \n Shop Now{' '}\n \n \n
    \n {isAffiliateConfirmationEnabled ? (\n setIsDrawerOpen(false)}\n />\n ) : null}\n {!isFlipgiveEnabled || errorFetchingActivationUrl ? (\n \n We’re sorry, Shop Online is currently unavailable.\n
    \n Please try again later.\n
    \n ) : null}\n
    \n {brandId && (\n
    \n goToCardPage(card.id)}\n />\n
    \n )}\n
    \n
    \n \n
    \n
    \n
    \n );\n};\n","import React, { useMemo, useEffect, useState } from 'react';\nimport * as Tabs from '@radix-ui/react-tabs';\n\nimport { BarCode, PhysicalCard } from '../../components/custom-icons';\n\nimport { EGiftTabPanel } from './components/EGiftTabPanel';\nimport { PhysicalTabPanel } from './components/PhysicalTabPanel';\nimport { ReloadTabPanel } from './components/ReloadTabPanel';\nimport { Tab, TabProps, TabPill } from './components/ProductDetailScreenTab';\nimport { ProductAmountInputFormData } from './components/ProductAmountInput';\n\nimport { Product, ProductType } from 'common/api/e-comm/models/Product';\nimport { createStyle, createStyles } from 'utils/createStyle';\nimport { ReloadIcon } from '@radix-ui/react-icons';\nimport { useProductRebate } from 'hooks/useProductRebate';\nimport { CartResponse } from 'common/api/e-comm/cart/lineitem/models/CartItems';\nimport { APIResponse } from 'common/api/models';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectIsShipToCoordinatorEnabled } from 'common/features/store/duck/organization/duck';\nimport { EarnTypeConstructorFilter } from 'common/api/constructor/util';\nimport { Brand } from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\nimport { AffiliateTabPanel } from './components/AffiliateTabPanel';\nimport {\n Route,\n Switch,\n generatePath,\n useHistory,\n useParams,\n matchPath,\n useLocation,\n} from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { ProductDetailsScreenParams } from './components/utils/types';\nimport { selectAffiliateEnabledWeb } from 'common/features/store/duck/ffs';\nimport { Helmet } from 'react-helmet-async';\nimport { colors } from 'styles/settings';\n\nexport interface ProductDetailMainTabProps {\n products: Product[];\n selectedTab: ProductType;\n onSelectedTabChange: (tabId: ProductType) => void;\n handleAddItemToCart: (\n product: Product,\n amount: ProductAmountInputFormData\n ) => Promise>;\n brandId: number;\n brandRebate: number;\n brandName: string;\n hidePhysicalTab?: boolean;\n brandImageUrl: string;\n}\n\nexport interface ProductDetailMainAffiliateTabProps {\n products: Product[];\n selectedTab?: ProductType;\n onSelectedTabChange: (tabId: ProductType) => void;\n handleAddItemToCart: (\n product: Product,\n amount: ProductAmountInputFormData\n ) => Promise>;\n brandId: number;\n brandRebate: number;\n brandName: string;\n hidePhysicalTab?: boolean;\n brandImageUrl: string;\n selectedEarnTypeTab: EarnTypeConstructorFilter;\n onSelectedEarnTypeTabChange: (tabId: EarnTypeConstructorFilter) => void;\n constructorBrand: Brand;\n isAffiliateOnlyBrand?: boolean;\n isGiftCardOnlyBrand: boolean;\n}\n\nconst styles = createStyles({\n tabs: createStyle('flex flex-col w-full mt-3', {\n maxWidth: '780px',\n }),\n tabList: createStyle('flex flex-shrink-0 border-b border-solid border-grey-light gap-2', {\n marginBottom: '10px',\n }),\n tabsContent: createStyle('text-darkest-grey text-sm lg:text-base', {\n minHeight: '180px',\n }),\n tabListPill: createStyle('flex flex-shrink-0', {\n marginBottom: '10px',\n gap: '1px',\n }),\n tabsContentShopOnline: createStyle('text-grey-darkest pt-1.5 text-sm lg:text-base', {\n minHeight: '180px',\n }),\n newBadge: [\n 'relative',\n {\n '&::after': {\n marginBottom: -8,\n background: colors.orange,\n height: 24,\n width: 56,\n content: 'New!',\n display: 'block',\n right: '50%',\n bottom: '100%',\n transform: 'translateX(50%)',\n position: 'absolute',\n fontSize: '13px',\n lineHeight: '24px',\n fontWeight: 600,\n color: colors.white,\n },\n },\n ],\n});\n\nexport const ProductDetailMainTab = ({\n products,\n brandId,\n brandName,\n brandImageUrl,\n selectedTab,\n onSelectedTabChange,\n handleAddItemToCart,\n hidePhysicalTab,\n}: ProductDetailMainTabProps) => {\n const [resetKey, setResetKey] = React.useState(0);\n const rawBrandId = useParams().id;\n const history = useHistory();\n const { pathname } = useLocation();\n\n const defaultOrg = useRootSelector((s) => {\n const homeDetails = s.store.home.homeDetails;\n\n if (homeDetails?.organizations && homeDetails?.defaultOrganization) {\n return homeDetails?.organizations[homeDetails?.defaultOrganization?.id];\n }\n });\n\n const isShipToCoordinatorEnabled = useRootSelector(selectIsShipToCoordinatorEnabled);\n\n const canCheckout = Boolean(defaultOrg?.isActive && defaultOrg?.organization?.isActive);\n const eGiftCardProduct =\n products && products.find((prod) => prod.type === ProductType.EGiftCard);\n const physicalCardProduct =\n products && products.find((prod) => prod.type === ProductType.GiftCard);\n const reloadCardProduct = products && products.find((prod) => prod.type === ProductType.Reload);\n\n const onValueChangeHandler = (name: string) => {\n setResetKey((prev) => prev + 1);\n onSelectedTabChange(name as ProductType);\n };\n\n useEffect(() => {\n if (matchPath(pathname, { path: Routes.BrandsDetails, exact: true })) {\n const searchParams = new URLSearchParams(location.search);\n history.replace({\n pathname: generatePath(Routes.BrandsGiftCardDetails, { id: `${rawBrandId}` }),\n search: searchParams.toString(),\n });\n }\n }, [pathname, rawBrandId, history, location.search]);\n\n return (\n \n

    Available as:

    \n \n {physicalCardProduct && !hidePhysicalTab && (\n }\n />\n )}\n {eGiftCardProduct && (\n }\n />\n )}\n {reloadCardProduct && (\n }\n />\n )}\n \n
    \n {eGiftCardProduct && (\n \n )}\n {physicalCardProduct && !hidePhysicalTab && (\n \n )}\n {reloadCardProduct && (\n \n )}\n
    \n
    \n );\n};\n\nexport const ProductDetailMainTabAffiliate = ({\n products,\n brandId,\n brandName,\n brandImageUrl,\n selectedTab,\n onSelectedTabChange,\n handleAddItemToCart,\n hidePhysicalTab,\n selectedEarnTypeTab,\n onSelectedEarnTypeTabChange,\n constructorBrand,\n isAffiliateOnlyBrand,\n isGiftCardOnlyBrand,\n}: ProductDetailMainAffiliateTabProps) => {\n const [resetKey, setResetKey] = React.useState(0);\n const { isAffiliateOfferOnBonus, isOnBonus } = constructorBrand;\n const rawBrandId = useParams().id;\n const { pathname } = useLocation();\n\n const defaultOrg = useRootSelector((s) => {\n const homeDetails = s.store.home.homeDetails;\n\n if (homeDetails?.organizations && homeDetails?.defaultOrganization) {\n return homeDetails?.organizations[homeDetails?.defaultOrganization?.id];\n }\n });\n\n const isShipToCoordinatorEnabled = useRootSelector(selectIsShipToCoordinatorEnabled);\n const isAffiliateEnabled = useRootSelector(selectAffiliateEnabledWeb);\n\n const canCheckout = Boolean(defaultOrg?.isActive && defaultOrg?.organization?.isActive);\n\n const eGiftCardProduct =\n products && products.find((prod) => prod.type === ProductType.EGiftCard);\n const eGiftCardOnBonus =\n eGiftCardProduct?.bonus || eGiftCardProduct?.variants?.some((item) => item.bonus);\n const physicalCardProduct =\n products && products.find((prod) => prod.type === ProductType.GiftCard);\n const physicalCardOnBonus =\n physicalCardProduct?.bonus || physicalCardProduct?.variants?.some((item) => item.bonus);\n const reloadCardProduct = products && products.find((prod) => prod.type === ProductType.Reload);\n const reloadCardOnBonus =\n reloadCardProduct?.bonus || reloadCardProduct?.variants?.some((item) => item.bonus);\n const productBrandId = eGiftCardProduct?.brandId || reloadCardProduct?.brandId || null;\n const onValueChangeHandler = (name: string) => {\n setResetKey((prev) => prev + 1);\n onSelectedTabChange(name as ProductType);\n };\n\n const [scrollPosition, setScrollPosition] = useState(0);\n const handleScroll = () => {\n const position = window.scrollY;\n setScrollPosition(position);\n };\n\n const history = useHistory();\n const onChangeEarnTypeTab = (earnType: string) => {\n const brandName = history.location.state?.brandName || '';\n const backRoute = history.location.state?.backRoute || '';\n onSelectedEarnTypeTabChange(earnType as EarnTypeConstructorFilter);\n\n handleScroll();\n\n if (earnType === EarnTypeConstructorFilter.GiftCards) {\n history.replace(generatePath(Routes.BrandsGiftCardDetails, { id: `${rawBrandId}` }), {\n brandName,\n backRoute,\n });\n } else {\n history.replace(generatePath(Routes.BrandsShopOnlineDetails, { id: `${rawBrandId}` }), {\n brandName,\n backRoute,\n });\n }\n };\n const redirectPath = useMemo(\n () =>\n generatePath(\n isAffiliateOnlyBrand\n ? Routes.BrandsShopOnlineDetails\n : Routes.BrandsGiftCardDetails,\n { id: `${rawBrandId}` }\n ),\n [rawBrandId, isAffiliateOnlyBrand]\n );\n\n useEffect(() => {\n window.scrollTo(0, scrollPosition);\n }, [scrollPosition, pathname]);\n\n useEffect(() => {\n if (matchPath(pathname, { path: Routes.BrandsDetails, exact: true })) {\n history.replace(redirectPath);\n }\n }, [pathname, redirectPath, history]);\n\n let canonicalUrl = '';\n if (EarnTypeConstructorFilter.GiftCards === selectedEarnTypeTab) {\n canonicalUrl =\n window.location.href.replace('/gift-cards', '').split('?')[0] + '/gift-cards';\n }\n\n return (\n \n

    Ways to Earn

    \n\n \n {!isAffiliateOnlyBrand ? (\n \n ) : null}\n {isAffiliateEnabled && !isGiftCardOnlyBrand ? (\n \n ) : null}\n \n \n \n \n

    Gift Card Types

    \n \n \n \n \n {physicalCardProduct && !hidePhysicalTab && (\n \n }\n />\n )}\n {eGiftCardProduct && (\n }\n />\n )}\n {reloadCardProduct && (\n \n }\n />\n )}\n \n {eGiftCardProduct && (\n \n )}\n {physicalCardProduct && !hidePhysicalTab && (\n \n )}\n {reloadCardProduct && (\n \n )}\n \n
    \n \n \n \n
    \n \n );\n};\n\nexport interface OfferTabProps extends Omit {\n product: Product;\n}\n\nexport const OfferTab = ({ product, ...props }: OfferTabProps) => {\n const { calculateProductRebate } = useProductRebate();\n const { rebate, isOnBonus } = useMemo(\n () => calculateProductRebate(product),\n [product, calculateProductRebate]\n );\n\n const uiRebate = useMemo(() => rebate.toPrecision(), [rebate]);\n\n // TODO: offer is used to style the tab with a different color if it's on bonus\n // nothing else. There's no need for the `earn` text be made.\n const offer = useMemo(() => (isOnBonus ? `Earn ${uiRebate}%` : ''), [isOnBonus, uiRebate]);\n\n return ;\n};\n","import React, { useMemo, useCallback, useState, useContext, useEffect } from 'react';\nimport { BrandLogo } from '../components/BrandLogo';\nimport { BrandTitleSection } from '../components/BrandTitleSection';\nimport { ECommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { Link } from 'react-router-dom';\nimport { Product, ProductVariant, ProductType } from 'common/api/e-comm/models/Product';\nimport { ProductDetailTerms, getGeneralInformationFilter } from '../ProductDetailTerms';\nimport { BarCode, PhysicalCard } from '../../../components/custom-icons';\nimport { ReloadIcon } from '@radix-ui/react-icons';\nimport { Btn } from 'components/btn/Btn';\nimport { getUrlToLoginPage, sendToLoginPage } from 'features/auth/components/withAuth';\nimport { Routes } from 'routes';\nimport { useStateRebateAdjustment } from 'common/hooks/useStateRebateAdjustment';\nimport { useContentfulGlobalContent } from 'common/api/contentful/global';\nimport { EntryFields } from 'contentful';\nimport { UserContent } from 'components/user-content/UserContent';\nimport Skeleton from 'react-loading-skeleton';\nimport * as Tabs from '@radix-ui/react-tabs';\nimport { FadeIn } from 'components/loading-screen/FadeIn';\nimport { OfferTab } from 'features/product/ProductDetailMainTab';\nimport { Helmet } from 'react-helmet-async';\nimport { useRootSelector } from 'rootStore';\nimport { selectIsAuthenticated } from 'common/features/store/duck/account/duck';\n\ninterface UnAuthProductDetailsViewProps {\n brand?: ECommBrand;\n products?: Product[];\n}\n\nconst UnAuthPDPContext = React.createContext>({\n products: [],\n});\n\nconst useAffiliateUrlProtection = () => {\n const isAffiliateRoute =\n window.location.pathname.includes('affiliate-') ||\n window.location.pathname.includes('/shop-online');\n const isLoggedIn = useRootSelector(selectIsAuthenticated);\n\n useEffect(() => {\n if (isAffiliateRoute && !isLoggedIn) {\n sendToLoginPage(window.location.pathname);\n }\n }, [isAffiliateRoute, isLoggedIn]);\n};\n\nexport const UnAuthProductDetailsView = ({\n brand,\n products = [],\n}: UnAuthProductDetailsViewProps) => {\n useAffiliateUrlProtection();\n const content = useContentfulGlobalContent();\n\n const canonicalUrl =\n window.location.href.replace('/gift-cards', '').split('?')[0] + '/gift-cards';\n\n // CASE: Brand is not loaded yet -- show loading screen\n if (!brand) {\n return ;\n }\n\n /**\n * prerender override documented here\n * https://docs.prerender.io/docs/25-empty-or-partially-rendered-pages\n */\n if (brand && products.length > 0 && content) {\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).prerenderReady = true;\n }, 2000);\n }\n\n return (\n
    \n \n \n \n
    \n \n \n
    \n
    \n
    \n );\n};\n\nexport const useMaxProductRebate = () => {\n const {\n stateRebateAdjustment: { adjustment: adjustLocalProduct },\n } = useStateRebateAdjustment(true);\n\n const {\n stateRebateAdjustment: { adjustment: adjustNonLocalProduct },\n } = useStateRebateAdjustment(false);\n\n const calculateProductRebate = useCallback(\n (product: Product) => {\n const adjustment = product.isLocalProduct ? adjustLocalProduct : adjustNonLocalProduct;\n\n let max_rebate = 0;\n let isOnBonus = false;\n\n if (product.type !== ProductType.Reload) {\n // NOTE: canculates the __max_rebate__ for this product\n product.variants.forEach((variant: ProductVariant) => {\n // skip the variant if it's not available or visible\n if (variant.isAvailable && variant.isVisible) {\n // NOTE: Default the rebate to be the variant's rebate\n let variant_rebate = variant.rebate;\n\n // CASE: variant is on bonus -- set that to be the variant_rebate\n if (variant.bonus) {\n isOnBonus = true;\n variant_rebate = variant.bonus.rebate;\n }\n\n // CASE: we shoud see if the max_rebate less than variant_rebate\n if (max_rebate < variant_rebate) {\n max_rebate = variant_rebate;\n }\n }\n });\n }\n\n return {\n rebate: max_rebate - adjustment,\n isOnBonus,\n };\n },\n [adjustLocalProduct, adjustNonLocalProduct]\n );\n\n return { calculateProductRebate };\n};\n\nexport const productWithHighestRebate = (\n products: Product[],\n calcProductRebate: (_: Product) => { rebate: number; isOnBonus: boolean }\n) => {\n let bestProduct: Product | undefined;\n let bestRebate = 0;\n let onBonus = false;\n\n products.forEach((product: Product) => {\n const { rebate, isOnBonus } = calcProductRebate(product);\n\n if (bestRebate <= rebate) {\n bestRebate = rebate;\n bestProduct = product;\n onBonus = isOnBonus;\n }\n });\n return {\n bonusRebate: onBonus ? bestRebate : undefined,\n rebate: Math.max(\n ...(bestProduct?.variants || []).map((variant: ProductVariant) => variant.rebate)\n ),\n product: bestProduct,\n };\n};\n\ntype HeaderSectionProps = { description?: EntryFields.RichText } & UnAuthProductDetailsViewProps;\nconst HeaderSection = (props: HeaderSectionProps) => {\n const { calculateProductRebate } = useMaxProductRebate();\n const { rebate, bonusRebate } = useMemo(() => {\n return productWithHighestRebate(props.products || [], calculateProductRebate);\n }, [props.products, calculateProductRebate]);\n\n return (\n
    \n \n \n {props.description && (\n
    \n \n
    \n )}\n
    \n
    \n );\n};\n\nconst Content = ({ products, brand }: { products?: Product[]; brand?: ECommBrand }) => (\n \n
    \n

    Available Card Types:

    \n \n \n
    \n
    \n);\n\nconst ControlButtons = () => {\n const returnUrl = window.location.pathname;\n const url = getUrlToLoginPage(returnUrl);\n\n const goToLogin = () => {\n sendToLoginPage(returnUrl);\n };\n\n return (\n
    \n
    \n \n Sign In to Add to Cart\n \n \n login\n \n
    \n
    \n

    Don't have account?

    \n \n Enroll Here\n \n
    \n
    \n );\n};\n\nconst ProductNav = ({ brand }: { brand?: ECommBrand }) => {\n const { products } = useContext(UnAuthPDPContext);\n const products_ = products ?? [];\n const [selectedTab, setSelectedTab] = useState(ProductType.GiftCard);\n const eGiftProduct = hasProductType(products_, ProductType.EGiftCard);\n const physicalProduct = hasProductType(products_, ProductType.GiftCard);\n const reloadProduct = hasProductType(products_, ProductType.Reload);\n\n const onTabSelection = (tab: string) => {\n setSelectedTab(tab as unknown as ProductType);\n };\n\n // Side-Effect: compute what the initial selected tab should be\n useEffect(() => {\n if (products && products.length > 0) {\n if (products.find((p) => p.type === ProductType.GiftCard)) {\n return setSelectedTab(ProductType.GiftCard);\n }\n if (products.find((p) => p.type === ProductType.EGiftCard)) {\n return setSelectedTab(ProductType.EGiftCard);\n }\n if (products.find((p) => p.type === ProductType.Reload)) {\n return setSelectedTab(ProductType.Reload);\n }\n }\n }, [products]);\n\n return (\n \n \n {physicalProduct && (\n }\n />\n )}\n {eGiftProduct && (\n }\n tabId={ProductType.EGiftCard}\n selected={selectedTab === ProductType.EGiftCard}\n className=\"\"\n />\n )}\n {reloadProduct && (\n }\n />\n )}\n \n \n \n );\n};\n\nconst TabsContent = ({ selectedTab, brand }: { selectedTab: ProductType; brand?: ECommBrand }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst hasProductType = (products: Product[], productType: ProductType): Product | undefined => {\n return products.find((p: Product) => p.type === productType);\n};\n\nconst EGiftContent = () => {\n const { products } = useContext(UnAuthPDPContext);\n const eGiftProduct = hasProductType(products ?? [], ProductType.EGiftCard);\n\n if (!eGiftProduct) {\n return null;\n }\n\n return (\n
    \n
      \n
    • \n Available in amounts between ${eGiftProduct.minValue}-${eGiftProduct.maxValue}\n
    • \n\n
    • \n Digital gift cards that are delivered electronically and automatically saved to\n your Wallet.\n
    • \n\n
    • \n Accessible right from your phone — most can easily be scanned by the retailer\n for quick check-out.\n
    • \n\n
    • \n Can be sent electronically to be used for gifting. Schedule for planned\n occasions you don’t want to forget or send immediately as an eGift at time of\n purchase.\n
    • \n
    \n
    \n );\n};\n\nconst getPhysicalProductMinMax = (product: Product): [null | boolean, number[]] => {\n // CASE: for some reason product-variants are not filled in\n if (product.variants.length === 0) {\n return [null, []];\n }\n\n // CASE: we have some variants\n const values = product.variants\n .reduce((acc: number[], variant: ProductVariant) => {\n if (variant.isAvailable && variant.isVisible) {\n acc.push(variant.price);\n }\n return acc;\n }, [])\n .sort((n, n2) => n - n2);\n\n let min = 0;\n let max = 0;\n let hasMinMax = false;\n\n // CASE: We have a min and max(at least 2 values)\n if (values.length > 1) {\n min = values[0];\n max = values[values.length - 1];\n hasMinMax = true;\n } else if (values.length === 1) {\n // CASE: We only have a single value(min === max)\n min = values[0];\n }\n\n return [hasMinMax, [min, max]];\n};\n\nconst PhysicalContent = () => {\n const { products } = useContext(UnAuthPDPContext);\n const physicalProduct = hasProductType(products ?? [], ProductType.GiftCard);\n\n if (!physicalProduct) {\n return null;\n }\n\n const [hasMinMax, [min, max]] = getPhysicalProductMinMax(physicalProduct);\n const renderAvailableAmounts = () => {\n if (hasMinMax === null) {\n return null;\n } else if (!hasMinMax) {\n return
  • Available as ${min}
  • ;\n } else if (hasMinMax) {\n return (\n
  • \n Available in amounts between ${min}-${max}\n
  • \n );\n }\n };\n\n return (\n
    \n
      \n {renderAvailableAmounts()}\n
    • \n Plastic or paper-based gift cards that are shipped to your organization or can\n be mailed direct to your home address using our Ship to Home option.\n
    • \n\n
    • \n Make great gifts for everyone in your life, with multiple denomination options\n to choose from.\n
    • \n\n
    • Can help serve as a visual reminder that you have funds available to spend.
    • \n\n
    • \n A great payment alternative when eGift cards aren’t available for a specific\n brand.\n
    • \n
    \n
    \n );\n};\n\nconst ReloadContent = () => {\n const { products } = useContext(UnAuthPDPContext);\n const reloadProduct = hasProductType(products ?? [], ProductType.Reload);\n\n if (!reloadProduct) {\n return null;\n }\n\n return (\n
    \n
      \n
    • \n Available in amounts between ${reloadProduct.minValue}-$\n {reloadProduct.maxBalance}\n
    • \n\n
    • \n Allows you to electronically reload funds onto physical gift cards purchased\n from RaiseRight — available for ~125 brands.\n
    • \n\n
    • \n Great for regular purchases like gas and groceries, or the daily visits to your\n favorite coffee shop or restaurant drive-thru.\n
    • \n\n
    • \n Can be saved to your account ‘Wallet’ and reloaded right in the mobile app or on\n the website to keep track of your balances.\n
    • \n\n
    • Saves time and card waste.
    • \n
    \n
    \n );\n};\n\nconst Footer = ({ brandId, productType }: { brandId?: number; productType?: ProductType }) => {\n return brandId && productType ? (\n
    \n \n
    \n ) : null;\n};\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { addReloadItemToCart } from 'common/api/e-comm/cart';\nimport { addItemToCart } from 'common/api/e-comm/cart/lineitem';\nimport { Product, ProductType } from 'common/api/e-comm/models/Product';\nimport { ProductAmountInputFormData } from 'features/product/components/ProductAmountInput';\nimport { ReloadableProductAmountFormData } from 'features/product/components/ReloadTabPanel';\nimport { defaultApiErrorMessage } from 'utils/apiResponseMessages';\nimport { requestCartItems } from 'common/features/store/duck/cart/duck';\nimport { useNavMenu } from 'components/nav/context';\nimport { useAlert } from 'modules/alerts';\nimport { gaLogAddToCart } from 'config/analytics';\nimport { UniversalBrand } from 'common/api/models/UniversalBrand';\nimport { CartResponse } from 'common/api/e-comm/cart/lineitem/models/CartItems';\nimport { APIResponse } from 'common/api/models';\nimport { CartLineItemGiftDetails } from 'common/api/e-comm/models/CartLineItem';\n\nexport const useAddProductToCart = () => {\n const dispatch = useDispatch();\n const { setOpenMenu } = useNavMenu();\n const alert = useAlert();\n\n const addProductToCart = useCallback(\n async (\n product: Product,\n amount: ProductAmountInputFormData,\n brand?: UniversalBrand,\n giftDetail?: CartLineItemGiftDetails,\n showAddToCartAnimation = true\n ) => {\n let response: APIResponse;\n\n if (product.type === ProductType.Reload) {\n const reloadableAmount = amount as ReloadableProductAmountFormData;\n response = await addReloadItemToCart({\n productId: product.id,\n cardId: reloadableAmount.cardId,\n priceOverride: reloadableAmount.priceOverride,\n quantity: reloadableAmount.quantity,\n selectedOptions: reloadableAmount.selectedOptions,\n });\n\n if (response.error) {\n alert(defaultApiErrorMessage());\n return response;\n }\n } else {\n const hasOptions = Object.keys(amount.selectedOptions).length > 0;\n response = await addItemToCart({\n productId: product.id,\n priceOverride:\n hasOptions || product.isLocalProduct ? null : amount.priceOverride,\n quantity: amount.quantity,\n selectedOptions: amount.selectedOptions,\n giftDetail,\n });\n\n if (response.error) {\n alert(defaultApiErrorMessage());\n return response;\n }\n }\n\n gaLogAddToCart({\n product,\n brand,\n price: product.price,\n quantity: amount.quantity,\n });\n\n if (showAddToCartAnimation) {\n setOpenMenu('cart');\n await requestCartItems()(dispatch);\n }\n\n return response;\n },\n [alert, dispatch, setOpenMenu]\n );\n\n return { addProductToCart };\n};\n","import { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\n\nexport const ProductDetailScreenStyles = createStyles({\n brandLogoOffer: [\n 'bg-grey-1 text-center text-white rounded-t-md text-xs lg:text-base',\n {\n height: '2.5rem',\n lineHeight: '2.5rem',\n },\n ],\n brandLogoOfferMobile: [\n 'bg-grey-1 text-center text-white rounded-t-md text-xs lg:text-base',\n {\n height: '1.25rem',\n lineHeight: '1.25rem',\n },\n ],\n body: [\n 'px-6 xd:px-16 xl:px-44 my-8 lg:my-10 gap-8 xl:gap-20 block text-sm lg:text-base',\n {\n gridTemplateColumns: 'minmax(180px, 200px) 1fr',\n },\n ],\n tabs: [\n 'flex flex-col w-full',\n {\n maxWidth: '780px',\n },\n ],\n tabList: ['flex flex-shrink-0 border-b border-gray-50'],\n logoSection: ['relative'],\n logoContainer: [\n 'inline-block lg:transform lg:-translate-x-48 xl:-translate-x-64',\n {\n width: '100%',\n },\n ],\n logoImage: [\n 'relative w-full',\n {\n paddingTop: '100%',\n borderColor: colors.grey3,\n },\n ],\n firstRow: ['max-w-3xl w-full flex pb-4'],\n title: [\n 'text-brand-dark lg:mt-2 text-3xl lg:text-5xl max-h-28 pb-2',\n {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n },\n ],\n main: [\n 'mt-4 lg:mt-8 max-w-3xl mx-auto',\n {\n maxWidth: '780px',\n },\n ],\n termsSkeleton: ['w-full mt-4', { height: '11rem', minWidth: '100%' }],\n productDetail: ['mt-8 w-full', { height: '19rem', minWidth: '100%' }],\n optionalLoggedInDescription: ['mt-1 w-full text-grey-1 relative', { fontSize: '0.875rem' }],\n readMoreButton: [\n 'text-brand pl-4 font-semibold',\n {\n position: 'absolute',\n right: 0,\n bottom: '1px',\n height: '1rem',\n lineHeight: '10px',\n marginBottom: '0px',\n paddingBottom: '4px',\n background:\n 'linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 10%, rgba(255, 255, 255, 1) 100%)',\n '@media(min-width: 1024px)': {\n display: 'none',\n },\n },\n ],\n readMoreCollapsed: [\n {\n maxHeight: '3.75rem',\n '@media(min-width: 1024px)': {\n maxHeight: 'none',\n },\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n ],\n readMoreExpanded: [{ maxHeight: 'none' }],\n});\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Heart } from 'react-feather';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { colors } from '../../../styles/settings';\nimport { waitPromise } from '../../../utils/promiseHelpers';\n\nimport { FeaturesState } from 'common/features/featuresReducer';\nimport {\n favoriteBrandThunk,\n getFavoritesThunk,\n unfavoriteBrandThunk,\n} from 'common/features/store/duck/brands/duck';\nimport { createStyle, createStyles } from 'utils/createStyle';\n\nexport interface BrandFavoriteProps {\n brandId: string;\n brandName: string;\n}\n\nexport interface HeartIconProps\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes,\n HTMLButtonElement\n > {\n isActive: boolean;\n title?: string;\n ariaLabel?: string;\n size?: number;\n}\n\nconst styles = createStyles({\n animationPulsingHeart: createStyle('', {\n animation: 'heartbeat 2s infinite',\n }),\n});\n\nexport const BrandFavorite = ({ brandId, brandName }: BrandFavoriteProps) => {\n const brands = useSelector((state: FeaturesState) => state.store.brands);\n const isFavorite = brands && brands.favorites.indexOf(brandId) > -1;\n const [isSaving, setIsSaving] = useState(false);\n const dispatch = useDispatch();\n\n const toggle = () => {\n if (!isFavorite) {\n waitPromise(favoriteBrandThunk(brandId)(dispatch), setIsSaving);\n } else {\n waitPromise(unfavoriteBrandThunk(brandId)(dispatch), setIsSaving);\n }\n };\n\n return (\n
    \n
    \n \n \n \n
    \n
    \n );\n};\n","import React from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { BrandFavorite } from './BrandFavorite';\nimport { FirstRowProps } from './utils/types';\nimport { ProductDetailScreenStyles } from '../ProductDetailScreenStyles';\n\nconst FavoriteBrand = ({ brand, isLoadingBrandInfo, userId }: FirstRowProps) => {\n if (!userId) {\n return null;\n }\n\n return !isLoadingBrandInfo && brand ? (\n
    \n \n
    \n ) : (\n \n );\n};\n\nexport const FirstRow = ({ brand, isLoadingBrandInfo, userId }: FirstRowProps) => {\n return (\n
    \n
    \n
    \n {brand && }\n
    \n
    \n
    \n \n {brand &&

    {brand.name}

    }\n
    \n
    \n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { getGeneralInformationFilter, ProductDetailTerms } from '../ProductDetailTerms';\nimport { ProductAmountInputFormData } from '../components/ProductAmountInput';\nimport { ProductDetailMainTabAffiliate } from '../ProductDetailMainTab';\n\nimport { requestWallet } from 'common/features/store/duck/wallet/duck';\nimport { Product, ProductQueryParam, ProductType } from 'common/api/e-comm/models/Product';\nimport { useRootSelector } from 'rootStore';\nimport { useAddProductToCart } from 'hooks/useAddProductToCart';\nimport { useProductRebate } from 'hooks/useProductRebate';\nimport { useLocation, matchPath, useHistory } from 'react-router-dom';\nimport { faChevronDown } from '@fortawesome/pro-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { CartLineItemGiftDetails } from 'common/api/e-comm/models/CartLineItem';\nimport { selectIsShipToCoordinatorEnabled } from 'common/features/store/duck/organization/duck';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { Document } from '@contentful/rich-text-types';\nimport { constructorInstance } from 'common/api/constructor/constructor-instance';\nimport { demonetize } from 'common/utils/strings';\nimport { DetailsProps } from '../components/utils/types';\nimport { ProductDetailScreenStyles } from '../ProductDetailScreenStyles';\nimport { FirstRow } from '../components/FirstRow';\nimport { Routes } from 'routes';\nimport { EarnTypeConstructorFilter } from 'common/api/constructor/util';\nimport { selectAffiliateEnabledWeb } from 'common/features/store/duck/ffs';\nimport useQueryParams from 'hooks/useQueryParams';\n\nexport const ProductDetailScreenContentConstructor = ({\n brand,\n brands,\n brandId,\n constructorBrand,\n products,\n isLoadingBrandInfo,\n isAffiliateOnlyBrand,\n isGiftCardOnlyBrand,\n backRoute,\n idWithSlug,\n}: DetailsProps) => {\n const [readMoreExpanded, setReadMoreExpanded] = useState(false);\n const [selectedTab, setSelectedTab] = useState();\n const { pathname } = useLocation();\n const nav = useHistory();\n const params = useQueryParams();\n const isAffiliateEnabled = useRootSelector(selectAffiliateEnabledWeb);\n\n const [selectedWayToEarnTab, setSelectedWayToEarnTab] = useState(\n EarnTypeConstructorFilter.GiftCards\n );\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (!isAffiliateEnabled) {\n return;\n }\n\n const shopOnlinePath = Routes.BrandsShopOnlineDetails;\n\n if (!matchPath(pathname, { path: shopOnlinePath, exact: true }) && !isAffiliateOnlyBrand) {\n setSelectedWayToEarnTab(EarnTypeConstructorFilter.GiftCards);\n } else {\n setSelectedWayToEarnTab(EarnTypeConstructorFilter.ShopOnline);\n }\n }, [isAffiliateEnabled, pathname, isAffiliateOnlyBrand]);\n\n useEffect(() => {\n if (isAffiliateOnlyBrand && idWithSlug) {\n nav.replace(window.location.pathname + window.location.search, {\n brandName: constructorBrand?.name,\n backRoute: backRoute,\n });\n setSelectedWayToEarnTab(EarnTypeConstructorFilter.ShopOnline);\n }\n }, [isAffiliateOnlyBrand, constructorBrand?.name, idWithSlug]);\n\n const userId = useRootSelector((s) => s.store.account.userId);\n\n const { addProductToCart } = useAddProductToCart();\n\n const { calculateProductRebate } = useProductRebate();\n\n const bestRebate = Math.max(\n ...(products || []).map((product) => calculateProductRebate(product).rebate)\n );\n\n const isShipToCoordinatorEnabled = useRootSelector(selectIsShipToCoordinatorEnabled);\n\n const eGiftCardProduct =\n products && products.find((prod) => prod.type === ProductType.EGiftCard);\n const physicalCardProduct =\n products && products.find((prod) => prod.type === ProductType.GiftCard);\n const reloadCardProduct = products && products.find((prod) => prod.type === ProductType.Reload);\n const hidePhysicalTab =\n physicalCardProduct &&\n (reloadCardProduct || eGiftCardProduct) &&\n !isShipToCoordinatorEnabled &&\n !physicalCardProduct.isShipToHomeEligible;\n\n const setQueryParam = useCallback((type: ProductQueryParam) => {\n const url = new URL(window.location.href);\n url.searchParams.set('type', type);\n window.history.pushState(null, '', url.toString());\n }, []);\n\n const checkQueryParams = (queryParam: ProductQueryParam) => {\n return Object.values(ProductQueryParam).includes(queryParam);\n };\n\n const checkSelectedTab = useCallback(() => {\n switch (selectedTab) {\n case ProductType.GiftCard:\n return ProductQueryParam.GiftCard;\n case ProductType.EGiftCard:\n return ProductQueryParam.EGiftCard;\n case ProductType.Reload:\n return ProductQueryParam.Reload;\n default:\n return hidePhysicalTab ? ProductQueryParam.EGiftCard : ProductQueryParam.GiftCard;\n }\n }, [hidePhysicalTab, selectedTab]);\n\n useEffect(() => {\n if (params.get('type') && selectedTab) {\n setQueryParam(checkSelectedTab());\n }\n }, [checkSelectedTab, selectedTab, setQueryParam, params]);\n\n useEffect(() => {\n const url = new URL(window.location.href);\n const queryParam = url.searchParams.get('type') as ProductQueryParam;\n const defaultTab = checkQueryParams(queryParam) ? queryParam : checkSelectedTab();\n\n if (products && products.length > 0) {\n if (defaultTab === ProductQueryParam.GiftCard) {\n if (products.find((p) => p.type === ProductType.GiftCard) && !hidePhysicalTab) {\n return setSelectedTab(ProductType.GiftCard);\n }\n }\n if (defaultTab === ProductQueryParam.EGiftCard) {\n if (products.find((p) => p.type === ProductType.EGiftCard)) {\n return setSelectedTab(ProductType.EGiftCard);\n }\n }\n if (\n products.find((p) => p.type === ProductType.Reload) &&\n (defaultTab === ProductQueryParam.Reload || hidePhysicalTab)\n ) {\n return setSelectedTab(ProductType.Reload);\n }\n if (!products.find((p) => p.type === ProductType.GiftCard)) {\n return setSelectedTab(ProductType.EGiftCard);\n }\n }\n }, [products, hidePhysicalTab, checkSelectedTab]);\n\n useEffect(() => {\n if (userId) {\n requestWallet(userId)(dispatch);\n }\n }, [userId, dispatch]);\n\n const term = useRootSelector((state) => state.store.search.term);\n\n const handleAddItemToCart = useCallback(\n async (\n product: Product,\n amount: ProductAmountInputFormData,\n giftDetail?: CartLineItemGiftDetails\n ) => {\n const price =\n amount.priceOverride && amount.priceOverride > 0\n ? amount.priceOverride\n : demonetize(Object.values(amount.selectedOptions)[0]) || 0;\n const total = price * amount.quantity;\n\n // @ts-ignore\n constructorInstance.tracker.requests.sendTrackingEvents = true;\n constructorInstance.tracker.trackConversion(term || 'TERM_UNKNOWN', {\n itemId: product.id.toString(),\n itemName: product.name,\n revenue: total,\n type: 'add_to_cart',\n section: 'Products',\n });\n\n return await addProductToCart(\n product,\n amount,\n brand,\n giftDetail,\n !amount.hideAddedToCartAnimation\n );\n },\n [addProductToCart, brand]\n );\n\n const renderTerms = () => {\n return (\n <>\n {brands && brands.contentfulBrandsById[brandId] ? (\n
    \n \n
    \n ) : (\n \n )}\n \n );\n };\n\n const optionalLoggedInDescription = (\n brandId ? brands?.contentfulBrandsById[brandId]?.optionalLoggedInDescription : null\n ) as Document | null;\n\n const optionalLoggedInDescriptionComponents = optionalLoggedInDescription\n ? documentToReactComponents(optionalLoggedInDescription)\n : null;\n\n return (\n
    \n
    \n
    \n
    \n \n
    \n\n {optionalLoggedInDescription && (\n
    \n \n {optionalLoggedInDescriptionComponents}\n
    \n\n {!readMoreExpanded && (\n setReadMoreExpanded(!readMoreExpanded)}\n className={ProductDetailScreenStyles.readMoreButton}\n >\n Read More \n \n )}\n \n )}\n\n {constructorBrand ? (\n \n ) : (\n \n )}\n {selectedWayToEarnTab === EarnTypeConstructorFilter.GiftCards\n ? renderTerms()\n : null}\n \n
    \n \n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { getGeneralInformationFilter, ProductDetailTerms } from '../ProductDetailTerms';\nimport { ProductAmountInputFormData } from '../components/ProductAmountInput';\nimport { ProductDetailMainTab } from '../ProductDetailMainTab';\n\nimport { requestWallet } from 'common/features/store/duck/wallet/duck';\nimport { Product, ProductQueryParam, ProductType } from 'common/api/e-comm/models/Product';\nimport { useRootSelector } from 'rootStore';\nimport { useAddProductToCart } from 'hooks/useAddProductToCart';\nimport { useProductRebate } from 'hooks/useProductRebate';\nimport { faChevronDown } from '@fortawesome/pro-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { CartLineItemGiftDetails } from 'common/api/e-comm/models/CartLineItem';\nimport { selectIsShipToCoordinatorEnabled } from 'common/features/store/duck/organization/duck';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\nimport { Document } from '@contentful/rich-text-types';\nimport { constructorInstance } from 'common/api/constructor/constructor-instance';\nimport { demonetize } from 'common/utils/strings';\nimport { DetailsProps } from '../components/utils/types';\nimport { ProductDetailScreenStyles } from '../ProductDetailScreenStyles';\nimport { FirstRow } from '../components/FirstRow';\nimport useQueryParams from 'hooks/useQueryParams';\n\nexport const ProductDetailScreenContentCognitive = ({\n brand,\n brands,\n brandId,\n products,\n isLoadingBrandInfo,\n}: DetailsProps) => {\n const [readMoreExpanded, setReadMoreExpanded] = useState(false);\n const [selectedTab, setSelectedTab] = useState();\n const dispatch = useDispatch();\n const params = useQueryParams();\n const { userId } = useRootSelector((s) => s.store.account);\n\n const { addProductToCart } = useAddProductToCart();\n\n const { calculateProductRebate } = useProductRebate();\n\n const bestRebate = Math.max(\n ...(products || []).map((product) => calculateProductRebate(product).rebate)\n );\n\n const isShipToCoordinatorEnabled = useRootSelector(selectIsShipToCoordinatorEnabled);\n\n const eGiftCardProduct =\n products && products.find((prod) => prod.type === ProductType.EGiftCard);\n const physicalCardProduct =\n products && products.find((prod) => prod.type === ProductType.GiftCard);\n const reloadCardProduct = products && products.find((prod) => prod.type === ProductType.Reload);\n const hidePhysicalTab =\n physicalCardProduct &&\n (reloadCardProduct || eGiftCardProduct) &&\n !isShipToCoordinatorEnabled &&\n !physicalCardProduct.isShipToHomeEligible;\n\n const setQueryParam = useCallback((type: ProductQueryParam) => {\n const url = new URL(window.location.href);\n url.searchParams.set('type', type);\n window.history.pushState(null, '', url.toString());\n }, []);\n\n const checkQueryParams = (queryParam: ProductQueryParam) => {\n return Object.values(ProductQueryParam).includes(queryParam);\n };\n\n const checkSelectedTab = useCallback(() => {\n switch (selectedTab) {\n case ProductType.GiftCard:\n return ProductQueryParam.GiftCard;\n case ProductType.EGiftCard:\n return ProductQueryParam.EGiftCard;\n case ProductType.Reload:\n return ProductQueryParam.Reload;\n default:\n return hidePhysicalTab ? ProductQueryParam.EGiftCard : ProductQueryParam.GiftCard;\n }\n }, [hidePhysicalTab, selectedTab]);\n\n useEffect(() => {\n if (params.get('type') && selectedTab) {\n setQueryParam(checkSelectedTab());\n }\n }, [checkSelectedTab, selectedTab, setQueryParam, params]);\n\n useEffect(() => {\n const url = new URL(window.location.href);\n const queryParam = url.searchParams.get('type') as ProductQueryParam;\n const defaultTab = checkQueryParams(queryParam) ? queryParam : checkSelectedTab();\n\n if (products && products.length > 0) {\n if (defaultTab === ProductQueryParam.GiftCard) {\n if (products.find((p) => p.type === ProductType.GiftCard) && !hidePhysicalTab) {\n return setSelectedTab(ProductType.GiftCard);\n }\n }\n if (defaultTab === ProductQueryParam.EGiftCard) {\n if (products.find((p) => p.type === ProductType.EGiftCard)) {\n return setSelectedTab(ProductType.EGiftCard);\n }\n }\n if (\n products.find((p) => p.type === ProductType.Reload) &&\n (defaultTab === ProductQueryParam.Reload || hidePhysicalTab)\n ) {\n return setSelectedTab(ProductType.Reload);\n }\n if (!products.find((p) => p.type === ProductType.GiftCard)) {\n return setSelectedTab(ProductType.EGiftCard);\n }\n }\n }, [products, hidePhysicalTab, checkSelectedTab]);\n\n useEffect(() => {\n if (userId) {\n requestWallet(userId)(dispatch);\n }\n }, [userId, dispatch]);\n\n const term = useRootSelector((state) => state.store.search.term);\n\n const handleAddItemToCart = useCallback(\n async (\n product: Product,\n amount: ProductAmountInputFormData,\n giftDetail?: CartLineItemGiftDetails\n ) => {\n const price =\n amount?.priceOverride && amount.priceOverride > 0\n ? amount.priceOverride\n : demonetize(Object.values(amount.selectedOptions)[0] as string) || 0;\n const total = price * amount.quantity;\n\n // @ts-ignore\n constructorInstance.tracker.requests.sendTrackingEvents = true;\n constructorInstance.tracker.trackConversion(term || 'TERM_UNKNOWN', {\n itemId: product.id.toString(),\n itemName: product.name,\n revenue: total,\n type: 'add_to_cart',\n section: 'Products',\n });\n\n return await addProductToCart(\n product,\n amount,\n brand,\n giftDetail,\n !amount.hideAddedToCartAnimation\n );\n },\n [addProductToCart, brand]\n );\n\n const renderTerms = () => {\n return (\n <>\n {brands && brands.contentfulBrandsById[brandId] ? (\n
    \n \n
    \n ) : (\n \n )}\n \n );\n };\n\n const optionalLoggedInDescription = (\n brandId ? brands?.contentfulBrandsById[brandId]?.optionalLoggedInDescription : null\n ) as Document | null;\n\n const optionalLoggedInDescriptionComponents = optionalLoggedInDescription\n ? documentToReactComponents(optionalLoggedInDescription)\n : null;\n\n return (\n
    \n
    \n
    \n
    \n \n
    \n\n {optionalLoggedInDescription && (\n
    \n \n {optionalLoggedInDescriptionComponents}\n
    \n\n {!readMoreExpanded && (\n setReadMoreExpanded(!readMoreExpanded)}\n className={ProductDetailScreenStyles.readMoreButton}\n >\n Read More \n \n )}\n \n )}\n\n {brand && products && selectedTab ? (\n \n ) : (\n \n )}\n {renderTerms()}\n \n
    \n \n );\n};\n","import { useState, useEffect } from 'react';\n\nimport { getBrandThunk } from 'common/features/store/duck/brands/duck';\nimport { useDispatch } from 'react-redux';\nimport {\n processOnBonusBrands,\n ConstructorReturnObject,\n constructorToBrand,\n} from 'common/api/constructor/util';\nimport { Brand } from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\nimport { isAffiliateOnlyBrand } from 'common/utils/affiliate';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { useConstructorDefaultParameters } from 'common/api/constructor/useConstructorDefaultParameters';\nimport ConstructorIO from '@constructor-io/constructorio-client-javascript';\n\nexport function isRaiseRightOnlyBrandWithoutAffiliate(brand?: Brand) {\n return brand?.isRaiseRightBrand && !brand?.containsAffiliateOffer;\n}\n\nexport const useConstructorBrandById = (\n isConstructorEnabled?: boolean,\n constructorClient?: ConstructorIO,\n brandIdParam?: string | number\n) => {\n const dispatch = useDispatch();\n const [constructorBrand, setConstructorBrand] = useState();\n const [constructorBrandHasLoaded, setConstructorBrandHasLoaded] = useState(false);\n\n const brand = useRootSelector((state) => {\n if (brandIdParam) {\n return state.store.brands.brandsById[brandIdParam as number];\n }\n });\n\n const baseFilters = useConstructorDefaultParameters({ resultsPerPage: 1 });\n\n useEffect(() => {\n if (brandIdParam && !isAffiliateOnlyBrand(`${brandIdParam}`)) {\n const numbericBrandId =\n typeof brandIdParam === 'string' ? parseInt(brandIdParam) : brandIdParam;\n getBrandThunk(numbericBrandId)(dispatch).then((r) => {\n setConstructorBrandHasLoaded(true);\n });\n }\n }, [brandIdParam, baseFilters, dispatch, constructorClient?.browse, isConstructorEnabled]);\n\n useEffect(() => {\n if (brandIdParam && isConstructorEnabled) {\n constructorClient?.browse\n .getBrowseResultsForItemIds([`${brandIdParam}`], baseFilters.current)\n .then(({ response }) => {\n const validBrands = processOnBonusBrands(\n response?.results as ConstructorReturnObject[],\n false\n );\n const brandConstructor = constructorToBrand(validBrands || [])[0] as Brand;\n\n setConstructorBrand(brandConstructor);\n setConstructorBrandHasLoaded(true);\n });\n }\n }, [brandIdParam, dispatch, isConstructorEnabled]);\n\n const isGiftCardOnlyBrand = isRaiseRightOnlyBrandWithoutAffiliate(constructorBrand);\n const isAffiliateOnlyBrand_ = isAffiliateOnlyBrand(`${brandIdParam}`);\n\n return {\n brand,\n constructorBrand,\n isAffiliateOnlyBrand: isAffiliateOnlyBrand_,\n isGiftCardOnlyBrand,\n constructorBrandHasLoaded: constructorBrandHasLoaded,\n };\n};\n","import React, { useEffect, useState, useLayoutEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useParams, useHistory } from 'react-router';\n\nimport { ShopScreen } from '../shop-base/ShopScreen';\n\nimport { getContentfulBrandThunk } from 'common/features/store/duck/brands/duck';\nimport { Product } from 'common/api/e-comm/models/Product';\nimport { useRootSelector } from 'rootStore';\nimport { getProductsByBrand } from 'common/api/e-comm/brands';\nimport { useScrollToTop } from 'hooks/useScrollToTop';\nimport { UnAuthProductDetailsView } from './views/UnAuthProductDetailsView';\nimport { Routes } from 'routes';\nimport { Metadata } from 'components/metadata';\nimport { MetadataPage } from 'components/metadata/constants';\nimport { DetailsProps, ProductDetailsScreenParams } from './components/utils/types';\nimport { selectIsConstructorBrowseEnabledWeb } from 'common/features/store/duck/ffs';\nimport { ProductDetailScreenContentConstructor } from './views/ProductDetailScreenContentConstructor';\nimport { ProductDetailScreenContentCognitive } from './views/ProductDetailScreenContentCognitive';\nimport { constructorClient } from 'third-party-integrations/constructor';\nimport { useConstructorBrandById } from 'common/api/constructor/useConstructorBrandById';\nimport { isAffiliateOnlyBrand } from 'common/utils/affiliate';\n\nexport const ProductDetailsScreenContent = (props: DetailsProps) => {\n const isConstructorAffiliateEnabled = useRootSelector(selectIsConstructorBrowseEnabledWeb);\n\n return isConstructorAffiliateEnabled ? (\n \n ) : (\n \n );\n};\n\nconst useBrandId = () => {\n const brandId = useParams().id;\n let id: number | string;\n if (isAffiliateOnlyBrand(brandId)) {\n const [, numericId] = brandId.split('-');\n id = `affiliate-${numericId}`;\n } else {\n id = parseInt(brandId, 10);\n }\n\n return id;\n};\n\nexport const ProductDetailsScreen = () => {\n useScrollToTop();\n const history = useHistory();\n const brandId = useBrandId();\n const params = useParams<{ id: string }>();\n const brandName = history.location.state?.brandName || '';\n const backRoute = history.location.state?.backRoute || '';\n const [products, setProducts] = useState();\n const brands = useRootSelector((state) => state.store.brands);\n const isAuthenticated = useRootSelector((state) => state.store.account.userId);\n const isConstructorAffiliateEnabled = useRootSelector(selectIsConstructorBrowseEnabledWeb);\n\n const {\n brand,\n constructorBrand,\n isAffiliateOnlyBrand,\n isGiftCardOnlyBrand,\n constructorBrandHasLoaded,\n } = useConstructorBrandById(isConstructorAffiliateEnabled, constructorClient, brandId);\n\n const dispatch = useDispatch();\n\n useLayoutEffect(() => {\n const [brandDetailsPath, inBulkPath] = history.location.pathname.split('/gifting');\n if (inBulkPath === '') {\n history.replace(brandDetailsPath);\n }\n // eslint-disable-next-line\n }, []);\n\n useEffect(() => {\n if (typeof brandId !== 'number') {\n setProducts([]);\n return;\n }\n\n const loadProducts = async () => {\n const result = await getProductsByBrand(brandId);\n\n if (result.error) {\n return;\n }\n\n setProducts(result.data);\n };\n loadProducts();\n\n // retrieve terms from Contentful\n getContentfulBrandThunk(brandId)(dispatch);\n }, [dispatch, brandId]);\n\n useEffect(() => {\n if (constructorBrandHasLoaded && !brand && !constructorBrand) {\n history.replace(Routes.Brands);\n }\n }, [\n history,\n brand,\n constructorBrand,\n constructorBrandHasLoaded,\n isConstructorAffiliateEnabled,\n ]);\n\n return (\n \n \n {isAuthenticated ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default ProductDetailsScreen;\n","import { keyframes } from 'glamor';\nimport React, { useEffect } from 'react';\nimport { ChevronRight } from 'react-feather';\nimport { Link, useHistory } from 'react-router-dom';\n\nimport { EASE_IN_OUT_BACK } from 'styles/easing';\nimport { createStyles } from 'utils/createStyle';\nimport { animated, config, useSprings } from 'react-spring';\n\nexport interface BreadcrumbProps {\n paths: BreadcrumbLink[];\n}\n\nconst showItemAnimation = keyframes({\n '0%': {\n transform: 'translateX(-100%)',\n maxWidth: '0%',\n opacity: 0,\n },\n '100%': {\n transform: 'translateX(0%)',\n maxWidth: 'max-content',\n opacity: 1,\n },\n});\n\nconst hideItemAnimation = keyframes({\n '0%': {\n transform: 'translateX(0%)',\n maxWidth: 'max-content',\n opacity: 1,\n },\n '100%': {\n transform: 'translateX(-100%)',\n maxWidth: '0%',\n opacity: 0,\n },\n});\n\nexport interface BreadcrumbLink {\n text: string;\n url: string;\n state?: unknown;\n invisible?: boolean;\n disabled?: boolean;\n}\n\nconst styles = createStyles({\n selected: ['text-brand-dark font-bold'],\n showItem: {\n animationName: showItemAnimation,\n animationFillMode: 'forwards',\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n },\n hideItem: {\n animationName: hideItemAnimation,\n animationFillMode: 'forwards',\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n },\n});\n\nexport const Breadcrumb = ({ paths }: BreadcrumbProps) => {\n const history = useHistory();\n const [trail, api] = useSprings(paths.length, (i: number) => ({\n config: config.wobbly,\n from: { x: i * -20, opacity: 0, delay: 100 },\n to: { x: 0, opacity: paths[i].invisible ? 0 : 1, delay: 100 },\n }));\n\n const visiblePaths = paths.filter(({ invisible }: BreadcrumbLink) => !invisible).length;\n\n useEffect(() => {\n api.start((i) => ({\n config: config.wobbly,\n from: { x: i * -20, opacity: 0, delay: 100 },\n to: { x: 0, opacity: paths[i].invisible ? 0 : 1, delay: 100 },\n }));\n // eslint-disable-next-line\n }, [visiblePaths]);\n\n return (\n \n );\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport debounce from 'lodash.debounce';\n\nimport { CartLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport { editCartLineItemThunk } from 'common/features/store/duck/cart/duck';\nimport { isInIframe, mainWebsiteOrigin } from 'utils';\n\nexport const useQuantityControls = (\n item: CartLineItem,\n setShowItemUpdateErrorModal: (_: boolean) => void,\n setUpdatingLineItem: React.Dispatch> | ((_: boolean) => void)\n) => {\n const dispatch = useDispatch();\n const [quantity, setQuantity] = useState(item.quantity);\n const itemQt = item.quantity;\n\n const decrement = () => setQuantity((qt) => qt - 1);\n const increment = () => setQuantity((qt) => qt + 1);\n\n // CASE: update the cart line item's quantity after `quantity`\n // gets updated. We should debounce this.\n useEffect(() => {\n if (quantity > 0 && itemQt !== quantity) {\n updateLineItem(quantity);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [quantity, itemQt]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const updateLineItem = useCallback(\n debounce(async (quantity: number) => {\n setUpdatingLineItem(true);\n\n const response = await editCartLineItemThunk({ quantity, id: item.id })(dispatch);\n\n if (response.error) {\n setQuantity(item.quantity);\n setShowItemUpdateErrorModal(true);\n }\n if (isInIframe()) {\n window.parent.postMessage({ type: 'cartUpdated' }, mainWebsiteOrigin());\n }\n setUpdatingLineItem(false);\n }, 800),\n [item]\n );\n\n return {\n decrement,\n increment,\n quantity,\n };\n};\n","import React, { useContext } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faMinus, faPlus } from '@fortawesome/pro-regular-svg-icons';\nimport classnames from 'classnames';\n\nimport { createStyles } from 'utils/createStyle';\nimport { CartLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport { useQuantityControls } from 'hooks/useCartLineQuantityControls';\n\nconst styles = createStyles({\n plainText: ['text-right sm:text-center', { minWidth: 84 }],\n quantity: [\n 'text-center',\n {\n lineHeight: '14px',\n width: 36,\n },\n ],\n quantityContainer: [\n 'edit_in_cart_quantity py-1 items-center justify-between flex gp-2',\n { minWidth: 70 },\n ],\n button: [\n 'w-8 sm:w-6 h-8 sm:h-6 font-semibold border border-1 border-grey-light rounded-md text-xs cursor-pointer',\n { boxShadow: '0px 3px 6px rgba(0, 0, 0, 0.06)' },\n ],\n});\n\ninterface QuantityRendererProps {\n item: CartLineItem;\n hideButtons: boolean;\n setShowItemUpdateErrorModal: (_: boolean) => void;\n}\n\nexport const QuantityRenderer = ({\n item,\n hideButtons,\n setShowItemUpdateErrorModal,\n}: QuantityRendererProps) => {\n const Renderer =\n hideButtons || item.giftDetail || item.product.type === ProductType.Reload\n ? PlainTextRenderer\n : EditableQuantityRenderer;\n return (\n
    \n \n
    \n );\n};\n\nconst PlainTextRenderer = ({ item }: QuantityRendererProps) => (\n {item.quantity}\n);\n\nconst EditableQuantityRenderer = ({ item, setShowItemUpdateErrorModal }: QuantityRendererProps) => {\n const { setUpdatingLineItem, updatingLineItem } = useContext(OrderScreenContext);\n const { decrement, increment, quantity } = useQuantityControls(\n item,\n setShowItemUpdateErrorModal,\n setUpdatingLineItem\n );\n const buttonStyles = classnames(styles.button, updatingLineItem ? 'bg-grey-accent' : '');\n const minusButtonStyles = classnames(buttonStyles, quantity === 1 ? 'bg-grey-accent' : '');\n\n return (\n
    \n \n \n \n {quantity}\n \n
    \n );\n};\n","import classNames from 'classnames';\nimport _round from 'lodash/round';\nimport React, { useCallback, useState, useContext, useMemo } from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport { useDispatch } from 'react-redux';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTimes } from '@fortawesome/pro-regular-svg-icons';\n\nimport { getProductTypeDisplayName, getProductTypeIcon } from './OrderSummaryGrid';\nimport { ReactComponent as WarningTriangle } from '../../../../media/images/warning-triangle.svg';\n\nimport { removeItemFromCart } from 'common/api/e-comm/cart/lineitem';\nimport { CartLineItem, CartLineItemGiftDetails } from 'common/api/e-comm/models/CartLineItem';\nimport { requestCartItems, resetCart } from 'common/features/store/duck/cart/duck';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { createStyles, createStyle } from 'utils/createStyle';\nimport { getProductName, getWalletCardDisplayName } from 'features/order-summary/utils';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { useAlert } from 'modules/alerts';\nimport { formatDate } from 'common/utils/time';\nimport { LinkBtn } from 'components/link-btn';\nimport { useCardsFromWallet } from 'hooks/useCardsFromWallet';\nimport { GiftCard, EGiftCard } from 'common/api/e-comm/models/Card';\nimport { FeatureFlag } from 'components/feature-flag';\nimport { QuantityRenderer } from './QuantityRenderer';\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { isInIframe, mainWebsiteOrigin } from 'utils';\n\nconst styles = createStyles({\n container: 'lg:p-2',\n header: createStyle('pt-2'),\n headerShipToHome: createStyle('duration-300 border-solid border-b border-grey-3', {\n background:\n 'linear-gradient(180deg, rgba(241, 90, 41, 0.1) 0%, rgba(230, 18, 106, 0.1) 42.35%, rgba(126, 63, 151, 0.1) 88.48%)',\n }),\n bigBtn: createStyle('border border-brand-accent bg-white px-8 py-2 w-full', {\n borderRadius: '10px',\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.06), 0px 4px 6px -1px rgba(0, 0, 0, 0.1)',\n }),\n bigBtnUnselected: createStyle('border border-grey-2 bg-white/75 px-8 py-2 text-grey-2 w-full', {\n borderRadius: '10px',\n }),\n shippingOptionButtons: createStyle('block lg:grid gap-2 py-4 px-4', {\n gridTemplateColumns: '1fr 1fr',\n }),\n summaryGroupItems: createStyle('grid w-full', {\n gridTemplateColumns: '2fr 1fr 1fr 1fr 2rem',\n rowGap: '1rem',\n }),\n productTypeSeparator: createStyle('py-4 px-8'),\n columns: createStyle('', {\n backgroundColor: '#F7F7F7',\n borderRadius: '10px 10px 0 0',\n }),\n footer: createStyle('', {\n backgroundColor: '#F7F7F7',\n borderRadius: '0 0 10px 10px',\n }),\n});\n\nexport const RenderItems = ({\n items,\n removeCartItem,\n loading,\n hideButtons = false,\n showEgiftDetails,\n walletCards,\n setShowItemUpdateErrorModal,\n hideDeleteButton = false,\n}: {\n items: CartLineItem[];\n removeCartItem: (id: string) => void;\n loading: boolean;\n hideButtons: boolean;\n showEgiftDetails: (giftCardDetail: CartLineItemGiftDetails | undefined) => void;\n walletCards: (GiftCard | EGiftCard)[];\n setShowItemUpdateErrorModal: (_: boolean) => void;\n hideDeleteButton: boolean;\n}) => {\n const { updatingLineItem } = useContext(OrderScreenContext);\n\n return (\n <>\n {items.map((item) => (\n \n {loading && (\n <>\n
    \n \n
    \n \n )}\n {!loading && (\n <>\n
    \n
    \n \n {getProductName(item)}\n \n
    \n
    \n \n {getProductTypeIcon(item.product.type)}\n \n {getProductTypeDisplayName(item.product.type)}\n {item.product.type === ProductType.EGiftCard &&\n item.giftDetail ? (\n <>\n - \n showEgiftDetails(item.giftDetail)}\n >\n Gift Details{' '}\n \n \n ) : null}\n \n {getWalletCardDisplayName(item, walletCards)\n ? ` - ${getWalletCardDisplayName(item, walletCards)}`\n : ''}\n \n
    \n
    \n Earn{' '}\n {_round((item.earnings / item.subtotal) * 100, 2).toFixed(2)}% ={' '}\n \n {monetizeWithDecimal(item.earnings)}\n \n
    \n
    \n
    \n {monetizeWithDecimal(item.price)}\n
    \n \n
    \n {monetizeWithDecimal(item.subtotal)}\n
    \n
    \n {!hideDeleteButton && (\n removeCartItem(item.id)}\n >\n \n \n )}\n
    \n \n )}\n
    \n ))}\n \n );\n};\n\n// TODO: Refactor both RenderItems & RenderItemsMobile\nexport const RenderItemsMobile = ({\n items,\n removeCartItem,\n loading,\n hideButtons = false,\n showEgiftDetails,\n walletCards,\n setShowItemUpdateErrorModal,\n hideDeleteButton = false,\n}: {\n items: CartLineItem[];\n removeCartItem: (id: string) => void;\n loading: boolean;\n hideButtons: boolean;\n showEgiftDetails: (giftCardDetail: CartLineItemGiftDetails | undefined) => void;\n walletCards: (GiftCard | EGiftCard)[];\n setShowItemUpdateErrorModal: (_: boolean) => void;\n hideDeleteButton?: boolean;\n}) => {\n return (\n <>\n {items.map((item) => {\n return (\n \n {loading && (\n
    \n \n
    \n )}\n {!loading && (\n
    \n
    \n
    \n
    \n \n {getProductName(item)}\n \n
    \n \n {getProductTypeIcon(item.product.type, '1rem')}\n \n \n {getProductTypeDisplayName(item.product.type)}\n \n {item.product.type === ProductType.EGiftCard &&\n item.giftDetail ? (\n <>\n - \n \n showEgiftDetails(item.giftDetail)\n }\n >\n Gift Details{' '}\n \n \n ) : null}\n \n \n {getWalletCardDisplayName(item, walletCards)\n ? ` - ${getWalletCardDisplayName(\n item,\n walletCards\n )}`\n : ''}\n \n \n
    \n
    \n
    \n {!hideButtons && (\n \n )}\n
    \n
    \n
    \n
    \n Earn{' '}\n {_round(\n (item.earnings / item.subtotal) * 100,\n 2\n ).toFixed(2)}\n % ={' '}\n \n {monetizeWithDecimal(item.earnings)}\n \n
    \n
    \n \n {`${item.quantity} x `}{' '}\n {monetizeWithDecimal(item.price)}\n \n
    \n
    \n
    \n
    \n
    \n {!hideDeleteButton && (\n removeCartItem(item.id)}\n className=\"text-brand text-sm underline\"\n >\n Remove\n \n )}\n
    \n
    \n Amount {monetizeWithDecimal(item.subtotal)}\n
    \n
    \n
    \n )}\n
    \n );\n })}\n \n );\n};\n\nexport interface OrderSummaryGroupItemsProps {\n items: CartLineItem[];\n loading: boolean;\n hideButtons?: boolean;\n hideDeleteButton?: boolean;\n}\n\nexport const OrderSummaryGroupItems = ({\n items,\n loading,\n hideButtons,\n hideDeleteButton = false,\n}: OrderSummaryGroupItemsProps) => {\n const dispatch = useDispatch();\n const [isRemoving, setIsRemoving] = useState(false);\n const alert = useAlert();\n const walletCards = useCardsFromWallet();\n const isDesktopView = useDetectDesktopView();\n const [showErrorModal, setShowErrorModal] = useState(false);\n\n const showEgiftDetails = (giftDetail: CartLineItemGiftDetails | undefined) => {\n alert({\n title: eGift Details,\n message: (\n
    \n

    {`Scheduled Delivery: ${\n giftDetail?.deliveryDate ? formatDate(giftDetail.deliveryDate) : 'N/A'\n }`}

    \n

    {`To: ${giftDetail?.toName || ''}`}

    \n

    {`Email: ${giftDetail?.toEmail || ''}`}

    \n

    {`Message: ${giftDetail?.message || ''}`}

    \n
    \n ),\n showCloseButton: true,\n buttons: [{ text: 'Close', secondary: true, className: 'font-bold' }],\n });\n };\n\n const removeCartItem = useCallback(\n async (id: string) => {\n setIsRemoving(true);\n const response = await removeItemFromCart(id);\n if (response.response?.ok && !response.data) {\n dispatch(resetCart());\n if (isInIframe()) {\n window.parent.postMessage({ type: 'resetCart' }, mainWebsiteOrigin());\n }\n }\n await requestCartItems()(dispatch);\n setIsRemoving(false);\n if (isInIframe()) {\n window.parent.postMessage({ type: 'cartUpdated' }, mainWebsiteOrigin());\n }\n },\n [dispatch]\n );\n\n return (\n
    \n \n {isDesktopView ? (\n
    \n \n
    \n ) : (\n
    \n \n
    \n )}\n
    \n );\n};\n\nconst QuantityEditErrorModal = ({\n isOpen,\n setIsOpen,\n}: {\n isOpen: boolean;\n setIsOpen: React.Dispatch>;\n}) => {\n return (\n setIsOpen(false)}\n size={[ModalSize.MEDIUM, ModalSize.SMALL]}\n >\n
    \n
    \n

    \n \n

    \n

    \n Unable to update cart\n

    \n
    \n

    Please try again

    \n setIsOpen(false)}\n >\n Close\n \n
    \n \n );\n};\n\nconst useDetectDesktopView = () => {\n const [inDesktopView, setInDesktopView] = useState(true);\n\n const query = useMemo(\n () => ({\n '(max-width: 1024px)': () => {\n setInDesktopView(false);\n },\n '(min-width: 1024px)': () => {\n setInDesktopView(true);\n },\n }),\n []\n );\n\n useMediaQueries(query);\n return inDesktopView;\n};\n","import { getShippingMethods } from 'common/api/e-comm/orders/service';\nimport { useApi } from 'common/modules/async-actions/useApi';\n\nexport const useShippingMethods = () => {\n const [loadShippingMethods, { loading }, shippingMethodsResult] = useApi(getShippingMethods);\n const result = shippingMethodsResult && shippingMethodsResult.data;\n\n return {\n loadShippingMethods,\n loading,\n shippingMethodsResponse: result,\n };\n};\n","import { FamilyAddress } from './models/FamilyAddress';\n\nimport { FAMILY_URL, FAMILY_ADDRESS_URL } from 'common/api/config';\nimport { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\n\nexport const getAddresses = () => withTokensIfNeeded(`${FAMILY_URL}/address`);\n\nexport const addAddress = (address: FamilyAddress) =>\n withTokensIfNeeded(`${FAMILY_URL}/address`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(address),\n });\n\nexport const editAddress = (address: FamilyAddress) =>\n withTokensIfNeeded(`${FAMILY_URL}/address/${address.id}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(address),\n });\n\nexport const deleteAddress = (id: FamilyAddress['id']) =>\n withTokensIfNeeded(`${FAMILY_URL}/address/${id}`, {\n method: 'DELETE',\n });\n\nexport const putDefaultAddress = (id: FamilyAddress['id']) =>\n withTokensIfNeeded(`${FAMILY_ADDRESS_URL}/${id}/default?api-version=1`, {\n method: 'PUT',\n });\n\nexport const getDefaultAddress = () =>\n withTokensIfNeeded(`${FAMILY_ADDRESS_URL}/default?api-version=1`, { method: 'GET' });\n","import { useCallback } from 'react';\n\nimport { getDefaultAddress, putDefaultAddress } from 'common/api/crm/family/address';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\n\nexport const useDefaultAddress = () => {\n const [doGetDefaultAddress, defaultAddressesAsyncState, defaultAddressResult] =\n useApi(getDefaultAddress);\n\n const defaultAddress =\n (defaultAddressResult && (defaultAddressResult.data as FamilyAddress)) || null;\n\n const refreshDefaultAddress = useCallback(async () => {\n const response = await doGetDefaultAddress();\n\n if (response.error) {\n return false;\n }\n\n return true;\n }, [doGetDefaultAddress]);\n\n const setDefaultAddress = async (familyAddress: FamilyAddress) => {\n const response = await putDefaultAddress(familyAddress.id);\n\n if (response.error) {\n return false;\n }\n refreshDefaultAddress();\n return true;\n };\n\n const isDefaultAddress = useCallback(\n (address: FamilyAddress) => {\n if (!defaultAddress) {\n return null;\n }\n return defaultAddress.id === address.id;\n },\n [defaultAddress]\n );\n\n return {\n defaultAddress,\n refreshDefaultAddress,\n defaultAddressesAsyncState,\n setDefaultAddress,\n isDefaultAddress,\n };\n};\n","import { Address, emptyAddress } from 'common/api/models/Address';\n\nexport interface FamilyAddress extends Address {\n id: string;\n phoneNumber: string;\n firstName: string;\n lastName: string;\n}\n\nexport const emptyFamilyAddress: FamilyAddress = {\n ...emptyAddress,\n id: '',\n phoneNumber: '',\n firstName: '',\n lastName: '',\n};\n","import { useCallback } from 'react';\n\nimport { getAddresses } from 'common/api/crm/family/address';\nimport { useApi } from 'common/modules/async-actions/useApi';\n\nexport const useAddresses = () => {\n const [doGetAddresses, addressesAsyncState, addressesResult] = useApi(getAddresses);\n const addresses = (addressesResult && addressesResult.data) || null;\n const refreshAddresses = useCallback(async () => {\n const response = await doGetAddresses();\n\n if (response.error) {\n return false;\n }\n\n return true;\n }, [doGetAddresses]);\n\n return {\n addresses,\n asyncState: addressesAsyncState,\n refreshAddresses,\n };\n};\n","import React, { useEffect, useRef } from 'react';\n\nexport const useEffectUntilDone = (cb: Function, deps: any[]) => {\n const ran = useRef(false);\n\n useEffect(() => {\n if (!ran.current) {\n cb(() => {\n ran.current = true;\n });\n }\n }, [cb, ...deps]);\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { CartInfoState } from '../CartInfoState';\nimport { getItemsByDeliveryType } from '../utils';\n\nimport { useRootSelector } from 'rootStore';\nimport { useShippingMethods } from 'common/hooks/useShippingMethods';\nimport { useDefaultAddress } from 'common/hooks/useDefaultAddress';\nimport { useHomeDetails } from 'common/features/store/duck/home/utils/useHomeDetails';\nimport { ShippingMethodsResponse, ShippingOption } from 'common/api/e-comm/orders/service';\nimport { requestCartItems } from 'common/features/store/duck/cart/duck';\nimport {\n emptyFamilyAddress,\n FamilyAddress,\n} from 'common/api/crm/family/address/models/FamilyAddress';\nimport { AsyncActionState } from 'common/modules/async-actions/core';\nimport { APIError } from 'common/api/models';\nimport { useAddresses } from 'common/hooks/useAddresses';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { useEffectUntilDone } from 'hooks/useEffectUntilDone';\n\nexport const useCartShipping = (cartInfo: CartInfoState): CartInfoShipping => {\n const homeDetails = useHomeDetails();\n const { cart, cartAsyncState } = useRootSelector((s) => s.store.cart);\n const { shipToHome, shippingToAddressId } = cartInfo;\n const dispatch = useDispatch();\n const { addresses, asyncState, refreshAddresses } = useAddresses();\n\n const { refreshDefaultAddress, defaultAddress, defaultAddressesAsyncState } =\n useDefaultAddress();\n\n const {\n loadShippingMethods,\n shippingMethodsResponse,\n loading: isLoadingShippingMethods,\n } = useShippingMethods();\n\n const requestedCartItemsRef = useRef(false);\n const refreshedDefaultAddressRef = useRef(false);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const lineItems = cart?.lineItems || [];\n const hasShipToHomeEligibleItems = Boolean(\n lineItems.find(\n (item) =>\n item.product.type === ProductType.GiftCard && item.product.isShipToHomeEligible\n )\n );\n\n const { shipToHomeItems } = useMemo(\n () => getItemsByDeliveryType(lineItems, Boolean(shipToHome)),\n [lineItems, shipToHome]\n );\n\n useEffect(() => {\n if (!cart && !requestedCartItemsRef.current) {\n requestedCartItemsRef.current = true;\n requestCartItems()(dispatch);\n }\n }, [cart, dispatch]);\n\n useEffect(() => {\n if (!defaultAddress && !refreshedDefaultAddressRef.current) {\n refreshedDefaultAddressRef.current = true;\n refreshDefaultAddress();\n }\n }, [defaultAddress, refreshedDefaultAddressRef, refreshDefaultAddress]);\n\n useEffect(() => {\n if (!addresses) {\n refreshAddresses();\n }\n }, [addresses, refreshAddresses]);\n\n const selectedAddress = useMemo(\n () =>\n (addresses &&\n shippingToAddressId &&\n addresses.find((addr) => addr.id === shippingToAddressId)) ||\n defaultAddress,\n [addresses, shippingToAddressId, defaultAddress]\n );\n\n const cartId = useMemo(() => cart?.id || '', [cart]);\n\n const shipToHomeIfPossible = useMemo(\n () => shipToHome && shipToHomeItems.length > 0,\n [shipToHome, shipToHomeItems]\n );\n\n const refreshShippingMethods = useCallback(\n async (address: FamilyAddress) => {\n if (cartId && homeDetails && address) {\n await loadShippingMethods({\n cartId,\n customerFirstName: homeDetails.profile.firstName,\n customerLastName: homeDetails.profile.lastName,\n customerEmail: homeDetails.profile.email,\n shipToHomeLineItemIds: shipToHomeIfPossible\n ? shipToHomeItems.map((li) => li.id)\n : undefined,\n shippingAddress: { email: homeDetails.profile.email, ...address },\n });\n }\n },\n [cartId, homeDetails, loadShippingMethods, shipToHomeItems, shipToHomeIfPossible]\n );\n\n useEffectUntilDone(\n (markDone: () => void) => {\n if (defaultAddress && cartId && homeDetails) {\n markDone();\n refreshShippingMethods(defaultAddress);\n }\n },\n [defaultAddress, homeDetails, cartId]\n );\n\n const shippingOptions = useMemo(() => {\n return shippingMethodsResponse && shippingMethodsResponse.shipToHomeConsignment\n ? shippingMethodsResponse.shipToHomeConsignment.shippingOptions\n : [];\n }, [shippingMethodsResponse]);\n\n const cheapestShipToHome = useMemo(() => {\n if (!shippingOptions || shippingOptions.length <= 0) {\n return;\n }\n return shippingOptions.sort((sm1, sm2) => sm1.cost - sm2.cost)[0];\n }, [shippingOptions]);\n\n const selectedShipping = useMemo(() => {\n if (!shipToHomeIfPossible) {\n return;\n }\n\n if (cartInfo.shippingMethodId) {\n return shippingOptions.find((opt) => opt.id === cartInfo.shippingMethodId);\n }\n return cheapestShipToHome;\n }, [shipToHomeIfPossible, shippingOptions, cheapestShipToHome, cartInfo.shippingMethodId]);\n\n const shippingFee = useMemo(() => {\n return selectedShipping?.cost || 0;\n }, [selectedShipping]);\n\n return {\n isLoading:\n cartAsyncState.loading ||\n defaultAddressesAsyncState.loading ||\n isLoadingShippingMethods,\n hasShipToHomeEligibleItems,\n shippingFee,\n shippingOptions,\n selectedShipping,\n selectedAddress,\n defaultAddress,\n defaultAddressesAsyncState,\n userAddresses: {\n addresses,\n isLoading: asyncState.loading,\n refreshAddresses,\n },\n shippingMethodsResponse,\n refreshShippingMethods,\n };\n};\n\nexport interface CartInfoShipping {\n isLoading: boolean;\n hasShipToHomeEligibleItems: boolean;\n shippingFee: number;\n shippingOptions: ShippingOption[];\n selectedShipping: ShippingOption | undefined;\n selectedAddress: FamilyAddress | null;\n defaultAddress: FamilyAddress | null;\n defaultAddressesAsyncState: AsyncActionState<[], APIError> | undefined;\n userAddresses: {\n addresses: FamilyAddress[] | null;\n isLoading: boolean;\n refreshAddresses: () => Promise;\n };\n shippingMethodsResponse: ShippingMethodsResponse | null | undefined;\n refreshShippingMethods?: (address: FamilyAddress) => Promise;\n}\n\nexport const emptyCartInfoShipping: CartInfoShipping = {\n isLoading: false,\n hasShipToHomeEligibleItems: false,\n shippingFee: 0,\n shippingOptions: [],\n selectedShipping: undefined,\n selectedAddress: null,\n defaultAddress: emptyFamilyAddress,\n defaultAddressesAsyncState: undefined,\n userAddresses: {\n addresses: [],\n isLoading: false,\n refreshAddresses: () => Promise.reject(),\n },\n shippingMethodsResponse: undefined,\n refreshShippingMethods: () => Promise.reject(),\n};\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { CartInfoState } from '../CartInfoState';\n\nimport { useRootSelector } from 'rootStore';\nimport {\n ACHPaymentMethod,\n CheckPaymentMethod,\n CreditCardPaymentMethod,\n PaymentMethod,\n PaymentSubType,\n PaymentType,\n PaymentTypeFee,\n getFeeForPaymentMethod,\n} from 'common/api/e-comm/payment-types';\nimport { useHomeDetails } from 'common/features/store/duck/home/utils/useHomeDetails';\nimport { usePaymentOptions } from 'common/hooks/usePaymentOptions';\n\nexport interface PaymentInfo {\n paymentSubType: PaymentSubType | null;\n paymentType: PaymentType;\n id: string | number;\n}\n\nexport type PaymentInfoDescription = PaymentInfo & {\n description: string;\n};\n\nexport const getPaymentMethod = (paymentInfo: PaymentInfo) => {\n if (paymentInfo.paymentType === PaymentType.Check) {\n return {\n paymentType: PaymentType.Check,\n achAccountId: null,\n creditCardId: null,\n } as CheckPaymentMethod;\n }\n\n if (paymentInfo.paymentType === PaymentType.BankAccount) {\n return {\n paymentSubType: null,\n paymentType: PaymentType.BankAccount,\n achAccountId: paymentInfo.id,\n creditCardId: null,\n } as ACHPaymentMethod;\n }\n\n if (paymentInfo.paymentType === PaymentType.CreditCard) {\n const creditCardId = paymentInfo.id ? parseInt(paymentInfo.id.toString(), 10) : null;\n\n return {\n paymentSubType: paymentInfo.paymentSubType,\n paymentType: PaymentType.CreditCard,\n achAccountId: null,\n creditCardId,\n } as CreditCardPaymentMethod;\n }\n\n return null;\n};\n\nexport const getDefaultPaymentId = (paymentMethod: PaymentMethod | null): PaymentInfo => {\n if (paymentMethod) {\n if (paymentMethod.paymentType === PaymentType.BankAccount) {\n return {\n id: paymentMethod.achAccountId,\n paymentType: PaymentType.BankAccount,\n paymentSubType: null,\n };\n }\n\n if (paymentMethod.paymentType === PaymentType.CreditCard && paymentMethod.creditCardId) {\n return {\n id: paymentMethod.creditCardId.toString(),\n paymentType: PaymentType.CreditCard,\n paymentSubType: paymentMethod.paymentSubType || PaymentSubType.Credit,\n };\n }\n }\n\n return {\n paymentType: PaymentType.Check,\n id: PaymentType.Check,\n paymentSubType: null,\n };\n};\n\nexport const isPaymentTypeValidForShipToHome = (paymentType: PaymentType | undefined) =>\n paymentType !== 'Check';\n\nexport const useCartPayment = (cartInfo: CartInfoState): CartInfoPayment => {\n const homeDetails = useHomeDetails();\n const { defaultPayment, defaultPaymentAsyncState } = useRootSelector((s) => s.store.account);\n const {\n loadPaymentOptionsData,\n paymentTypeFees,\n isLoading: isLoadingPaymentInfo,\n savedCreditCards,\n achAccount,\n } = usePaymentOptions();\n\n const { shipToHome, paymentMethodId } = cartInfo;\n\n useEffect(() => {\n if (homeDetails) {\n loadPaymentOptionsData();\n }\n }, [homeDetails, loadPaymentOptionsData]);\n\n const defaultPaymentMethodFee = useMemo(() => {\n return getFeeForPaymentMethod(paymentTypeFees, defaultPayment);\n }, [paymentTypeFees, defaultPayment]);\n\n const defaultPaymentType = defaultPayment?.paymentType;\n\n const validPayment = useMemo(() => {\n // if the current selected payment method is valid then it is ok.\n if (paymentMethodId) {\n return paymentMethodId;\n }\n\n // if the current selected payment is invalid or null check if the default method is valid.\n if (defaultPayment) {\n return getDefaultPaymentId(defaultPayment);\n }\n\n return;\n }, [paymentMethodId, shipToHome, defaultPayment]);\n\n let paymentFee: PaymentTypeFee | undefined;\n\n if (paymentTypeFees && validPayment) {\n // type casting from PaymentInfo -> PaymentMethod because they share the same\n // structure\n paymentFee =\n getFeeForPaymentMethod(paymentTypeFees, validPayment as unknown as PaymentMethod) ||\n undefined;\n }\n\n const getDefaultPaymentInfoDescription = useCallback(() => {\n if (!defaultPayment) {\n return;\n }\n\n switch (defaultPayment.paymentType) {\n case PaymentType.CreditCard: {\n if (defaultPayment.creditCardId) {\n return {\n id: defaultPayment.creditCardId,\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Credit,\n };\n }\n return;\n }\n case PaymentType.BankAccount: {\n return {\n id: defaultPayment.achAccountId,\n paymentType: PaymentType.BankAccount,\n paymentSubType: null,\n };\n }\n case PaymentType.Check: {\n return {\n id: 'check',\n paymentType: PaymentType.Check,\n paymentSubType: null,\n };\n }\n }\n }, [defaultPayment]);\n\n const paymentAccount = useMemo(() => {\n const paymentInfoDescription = paymentMethodId || getDefaultPaymentInfoDescription();\n\n if (!paymentInfoDescription) {\n return;\n }\n\n if (paymentInfoDescription.paymentType === PaymentType.BankAccount) {\n return {\n ...paymentInfoDescription,\n description: achAccount?.accountNumber || '',\n };\n }\n\n if (paymentInfoDescription.paymentType === PaymentType.CreditCard) {\n if (paymentMethodId?.id === 'new-credit-card') {\n return {\n ...paymentInfoDescription,\n description: cartInfo.newCreditCard?.cardNumber.slice(-4) || '',\n };\n }\n\n if (savedCreditCards) {\n const creditCard = savedCreditCards.find(\n (cc) =>\n cc.id === paymentInfoDescription.id ||\n cc.id.toString() === paymentInfoDescription.id\n );\n\n return {\n ...paymentInfoDescription,\n description: creditCard?.maskedCardNumber?.slice(-4) || '',\n };\n }\n }\n\n if (paymentInfoDescription.paymentType === PaymentType.Check) {\n return {\n ...paymentInfoDescription,\n description: '',\n };\n }\n }, [\n paymentMethodId,\n getDefaultPaymentInfoDescription,\n achAccount?.accountNumber,\n savedCreditCards,\n cartInfo.newCreditCard?.cardNumber,\n ]);\n\n return {\n isLoading: defaultPaymentAsyncState.loading || isLoadingPaymentInfo,\n defaultPaymentType,\n defaultPayment,\n defaultPaymentMethodFee,\n payment: validPayment,\n paymentFee,\n paymentAccount,\n };\n};\n\nexport interface CartInfoPayment {\n isLoading: boolean;\n defaultPaymentType: PaymentType | undefined;\n defaultPayment: PaymentMethod | null;\n defaultPaymentMethodFee?: PaymentTypeFee | null;\n payment: PaymentInfo | undefined;\n paymentFee: PaymentTypeFee | undefined;\n paymentAccount?: PaymentInfoDescription;\n}\n\nexport const emptyCartInfoPayment: CartInfoPayment = {\n isLoading: false,\n defaultPaymentType: undefined,\n defaultPayment: null,\n defaultPaymentMethodFee: undefined,\n payment: undefined,\n paymentFee: undefined,\n paymentAccount: undefined,\n};\n","import { useCallback, useState } from 'react';\n\nimport { ShippingOption } from 'common/api/e-comm/orders/service';\nimport { getEstimatedShipDate, ShipDateEstimation } from 'common/api/fulfillment/shipping/service';\nimport { fromEntries } from 'common/utils';\nimport { PartialRecord } from 'common/definitions/PartialRecord';\nimport { asTuple } from 'common/utils/asTuple';\nimport { APIResponse } from 'common/api/models';\n\nexport const useShipDateEstimations = () => {\n const [estimationResponses, setEstimationResponses] = useState<\n PartialRecord>\n >({});\n\n return {\n estimationResponses,\n loadShipDateEstimations: useCallback(\n async (shippingOptions: ShippingOption[], orderSubtotal: number) => {\n const entries = await Promise.all(\n shippingOptions.map(async ({ name }) => {\n const response = await getEstimatedShipDate(name, orderSubtotal);\n return asTuple(name, response);\n })\n );\n setEstimationResponses(fromEntries(entries));\n },\n []\n ),\n };\n};\n","import { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\nimport { FULFILLMENT_SHIPPING_URL } from 'common/api/config';\nimport { toQueryString } from 'common/utils/queryString';\n\nexport interface ShipDateEstimation {\n estimatedShipDate: string;\n estimateIncludesHolidays: boolean;\n}\n\nexport const getEstimatedShipDate = async (name: string, orderSubtotal: number) => {\n const response = await withTokensIfNeeded(\n `${FULFILLMENT_SHIPPING_URL}/ship-date?${toQueryString({ method: name, orderSubtotal })}`\n );\n return response;\n};\n\nexport const getUspsShippingOrderSubtotalLimit = async () => {\n const response = await withTokensIfNeeded(\n `${FULFILLMENT_SHIPPING_URL}/usps-shipping-order-subtotal-limit`\n );\n return response;\n};\n","import { useEffect, useState } from 'react';\n\nimport { CartInfoState } from '../CartInfoState';\n\nimport { CartInfoShipping, emptyCartInfoShipping, useCartShipping } from './useCartShipping';\nimport { CartInfoPayment, emptyCartInfoPayment, useCartPayment } from './useCartPayment';\n\nimport { getItemsByDeliveryType } from '.';\n\nimport { CartResponse } from 'common/api/e-comm/cart/lineitem/models/CartItems';\nimport { PaymentTypeFee } from 'common/api/e-comm/payment-types';\nimport { useRootSelector } from 'rootStore';\nimport { CartLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport { ShippingOption } from 'common/api/e-comm/orders/service';\nimport { useShipDateEstimations } from 'common/hooks/useEstimatedShipDates';\nimport { PartialRecord } from 'common/definitions/PartialRecord';\nimport { APIResponse } from 'common/api/models';\nimport { ShipDateEstimation } from 'common/api/fulfillment/shipping/service';\nimport { ProductType } from 'common/api/e-comm/models/Product';\n\nexport const calculatePaymentFee = (total: number, paymentTypeFee?: PaymentTypeFee) => {\n if (!paymentTypeFee) {\n return 0;\n }\n\n if (paymentTypeFee.isPercentage) {\n return total * (paymentTypeFee.amount / 100);\n }\n\n return paymentTypeFee.amount;\n};\n\nexport const calculateTotal = (\n cart: CartResponse | null,\n shippingFee: number,\n paymentFee: PaymentTypeFee | undefined\n) => {\n const total = cart ? cart.subtotal + shippingFee : 0;\n\n if (total <= 0) {\n return 0;\n }\n\n return total + calculatePaymentFee(total, paymentFee);\n};\n\nexport const useCartDetails = (cartInfo: CartInfoState): CartInfoDetails => {\n const { cart, cartAsyncState } = useRootSelector((s) => s.store.cart);\n\n const { loadShipDateEstimations, estimationResponses } = useShipDateEstimations();\n const [isLoadingShipDateEstimations, setIsLoadingShipDateEstimations] = useState(false);\n\n const payment = useCartPayment(cartInfo);\n const shipping = useCartShipping(cartInfo);\n\n const { shipToHome } = cartInfo;\n\n const { shippingFee, shippingOptions, isLoading: isLoadingShipping } = shipping;\n\n const { paymentFee, isLoading: isLoadingPayment } = payment;\n\n const total = calculateTotal(cart, shippingFee, paymentFee);\n\n const lineItems = cart?.lineItems || [];\n const hasShipToHomeEligibleItems = Boolean(\n lineItems.find(\n (item) =>\n item.product.type === ProductType.GiftCard && item.product.isShipToHomeEligible\n )\n );\n\n const { shipToHomeItems, shipToCoordinator, electronicDeliveryItems } = getItemsByDeliveryType(\n lineItems,\n Boolean(shipToHome)\n );\n\n const shipToHomeIfPossible = Boolean(shipToHome) && shipToHomeItems.length > 0;\n const cartSubtotal = cart?.subtotal || 0;\n\n useEffect(() => {\n (async () => {\n if (shippingOptions.length > 0) {\n try {\n setIsLoadingShipDateEstimations(true);\n await loadShipDateEstimations(shippingOptions, cartSubtotal);\n } finally {\n setIsLoadingShipDateEstimations(false);\n }\n }\n })();\n }, [shippingOptions, cartSubtotal, loadShipDateEstimations]);\n\n return {\n isLoading: cartAsyncState.loading || isLoadingShipping || isLoadingPayment,\n cartSubtotal: cart?.subtotal || 0,\n total,\n shipping,\n payment,\n shipToHomeItems,\n shipToCoordinator,\n electronicDeliveryItems,\n hasShipToHomeEligibleItems,\n shipToHomeIfPossible,\n shippingOptions,\n isLoadingShipDateEstimations,\n estimationResponses,\n };\n};\n\nexport interface CartInfoDetails {\n isLoading: boolean;\n cartSubtotal: number;\n total: number;\n shipping: CartInfoShipping;\n payment: CartInfoPayment;\n shipToHomeItems: CartLineItem[];\n shipToCoordinator: CartLineItem[];\n electronicDeliveryItems: CartLineItem[];\n hasShipToHomeEligibleItems: boolean;\n shipToHomeIfPossible: boolean;\n shippingOptions: ShippingOption[];\n isLoadingShipDateEstimations: boolean;\n estimationResponses: PartialRecord>;\n}\n\nexport const emptyCartInfoDetails: CartInfoDetails = {\n isLoading: false,\n cartSubtotal: 0,\n total: 0,\n shipping: emptyCartInfoShipping,\n payment: emptyCartInfoPayment,\n shipToHomeItems: [],\n shipToCoordinator: [],\n electronicDeliveryItems: [],\n hasShipToHomeEligibleItems: false,\n shipToHomeIfPossible: false,\n shippingOptions: [],\n isLoadingShipDateEstimations: false,\n estimationResponses: {},\n};\n","import { useEffect, useState } from 'react';\n\nexport const useWindowInnerSize = () => {\n const [width, setWidth] = useState(window.innerWidth);\n const [height, setHeight] = useState(window.innerHeight);\n\n useEffect(() => {\n const fn = () => {\n setWidth(window.innerWidth);\n setHeight(window.innerHeight);\n };\n\n window.addEventListener('resize', fn);\n\n return () => window.removeEventListener('resize', fn);\n }, [setWidth, setHeight]);\n\n return { width, height };\n};\n","import classNames from 'classnames';\nimport React, { useContext, useMemo } from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport { keyframes } from 'glamor';\nimport { useHistory } from 'react-router-dom';\n\nimport { calculatePaymentFee } from '../../utils/useCartDetails';\nimport { getPaymentDisplayName, getPaymentInfo } from '../../utils';\n\nimport { useRootSelector } from 'rootStore';\nimport { createStyle, createStyles } from 'utils/createStyle';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport { EASE_IN_OUT_BACK } from 'styles/easing';\nimport { getPath, Routes } from 'routes';\nimport { LinkBtn } from 'components/link-btn';\n\nexport const hideHeight = keyframes({\n '0%': {\n maxHeight: '200px',\n },\n '100%': {\n maxHeight: '0px',\n },\n});\n\nexport const showHeight = keyframes({\n '0%': {\n maxHeight: '0px',\n },\n '99%': {\n maxHeight: '200px',\n },\n '100%': {\n maxHeight: 'auto',\n },\n});\n\nconst styles = createStyles({\n container: createStyle(''),\n title: ['text-brand', { fontSize: '17px' }],\n description: 'text-sm text-grey-1 ml-4',\n subtotal: 'text-grey-1 font-bold flex flex-row align-center',\n subtotalItems: createStyle('grid', {\n gridTemplateColumns: 'max-content auto',\n }),\n area: [\n 'mb-2',\n {\n overflow: 'hidden',\n animationName: showHeight,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n hidden: {\n overflow: 'hidden',\n animationName: hideHeight,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n});\n\nexport interface OrderSummaryOptionsProps {\n shipToHome: boolean;\n hidePayment?: boolean;\n}\n\nexport const OrderSummaryOptions = ({\n shipToHome,\n hidePayment,\n children,\n}: React.PropsWithChildren) => {\n return (\n
    \n {!hidePayment && }\n \n \n \n \n {children}\n
    \n );\n};\n\nexport const EarningsSection = () => {\n const cart = useRootSelector((s) => s.store.cart.cart);\n return (\n
    \n \n
    Earnings
    \n
    \n {cart && monetizeWithDecimal(cart.earnings)}\n
    \n
    \n \n );\n};\n\nexport const ShippingMethodSection = ({ shipToHome }: { shipToHome: boolean }) => {\n const history = useHistory();\n const { cartInfo, cartInfoDetails } = useContext(OrderScreenContext);\n const {\n shipToHomeItems,\n hasShipToHomeEligibleItems,\n shipping: { selectedShipping, isLoading: isLoadingShipping },\n } = cartInfoDetails;\n\n const shipToHomeIfPossible = shipToHome && hasShipToHomeEligibleItems;\n const hasPaymentMethod = cartInfo.paymentMethodId;\n\n const goToShipping = (e: React.MouseEvent) => {\n history.push(Routes.ShopOrderShipping, cartInfo);\n e.preventDefault();\n };\n return (\n
    \n
    \n Shipping Method\n {shipToHomeIfPossible && hasPaymentMethod && (\n \n Edit\n \n )}\n
    \n
    \n {isLoadingShipping && }\n {!isLoadingShipping &&
    {selectedShipping ? selectedShipping.name : ''}
    }\n
    \n
    \n );\n};\n\nexport const ShipToSection = ({ shipToHome }: { shipToHome: boolean }) => {\n const history = useHistory();\n const { cartInfo, cartInfoDetails } = useContext(OrderScreenContext);\n const {\n shipToHomeItems,\n hasShipToHomeEligibleItems,\n shipToCoordinator,\n shipping: { selectedAddress },\n } = cartInfoDetails;\n\n const shipToHomeIfPossible = shipToHome && hasShipToHomeEligibleItems;\n const hasPaymentMethod = cartInfo.paymentMethodId;\n\n const goToShipping = (e: React.MouseEvent) => {\n history.push(Routes.ShopOrderShipping, cartInfo);\n e.preventDefault();\n };\n\n const addressPart1 = useMemo(() => {\n if (!selectedAddress) {\n return '';\n }\n\n return selectedAddress.address2\n ? `${selectedAddress.address1} ${selectedAddress.address2}`\n : selectedAddress.address1;\n }, [selectedAddress]);\n\n const addressPart2 = useMemo(() => {\n if (!selectedAddress) {\n return '';\n }\n\n return `${selectedAddress.city} ${selectedAddress.state} ${selectedAddress.zipCode}`;\n }, [selectedAddress]);\n\n let totalShipToCoordinatorItems = 0;\n let totallShipToHomeItems = 0;\n\n for (let i = 0; i < shipToHomeItems.length; ++i) {\n totallShipToHomeItems += shipToHomeItems[i].quantity || 1;\n }\n\n for (let i = 0; i < shipToCoordinator.length; ++i) {\n totalShipToCoordinatorItems += shipToCoordinator[i].quantity || 1;\n }\n\n return (\n
    \n
    \n Ship to\n {shipToHomeIfPossible && hasPaymentMethod && (\n \n Edit\n \n )}\n
    \n
      \n {totalShipToCoordinatorItems > 0 && (\n
    • \n Ship to coordinator: {totalShipToCoordinatorItems} card\n {totalShipToCoordinatorItems > 1 ? 's' : ''}\n
    • \n )}\n {totallShipToHomeItems > 0 && (\n
    • \n Ship to home: {totallShipToHomeItems} card\n {totallShipToHomeItems > 1 ? 's' : ''}\n {selectedAddress && (\n
      \n
      {addressPart1}
      \n
      {addressPart2}
      \n
      \n )}\n
    • \n )}\n
    \n
    \n );\n};\n\nexport const TotalSection = ({ shipToHome }: { shipToHome: boolean }) => {\n const { cartInfoDetails } = useContext(OrderScreenContext);\n const {\n hasShipToHomeEligibleItems,\n shipping: { selectedShipping, isLoading: isLoadingShipping, shippingFee },\n payment: { paymentFee },\n total,\n } = cartInfoDetails;\n const cart = useRootSelector((s) => s.store.cart.cart);\n const shipToHomeIfPossible = shipToHome && hasShipToHomeEligibleItems;\n\n return (\n <>\n
    \n
    \n
    Subtotal
    \n
    {cart && monetizeWithDecimal(cart.subtotal)}
    \n
    \n
    \n {paymentFee && paymentFee.amount > 0 && (\n <>\n
    {getPaymentDisplayName(paymentFee.paymentType)}
    \n
    \n {monetizeWithDecimal(\n calculatePaymentFee(\n (cart?.subtotal || 0) + shippingFee,\n paymentFee\n )\n )}\n
    \n \n )}\n {shipToHomeIfPossible && (\n <>\n {!isLoadingShipping && (\n <>\n
    Shipping & Handling
    \n
    \n {selectedShipping\n ? monetizeWithDecimal(selectedShipping.cost)\n : '-'}\n
    \n \n )}\n {isLoadingShipping && (\n
    \n \n
    \n )}\n \n )}\n
    \n
    \n
    \n
    \n
    Total
    \n
    \n {monetizeWithDecimal(total)}\n
    \n
    \n
    \n \n );\n};\n\nexport const PaymentSection = ({ shipToHome }: { shipToHome: boolean }) => {\n const { cartInfo, cartInfoDetails } = useContext(OrderScreenContext);\n const {\n payment: { paymentAccount, isLoading: isLoadingPayment },\n } = cartInfoDetails;\n const history = useHistory();\n\n const goToPayment = (e: React.MouseEvent) => {\n const url = getPath(Routes.ShopOrderPayment, {\n shipToHome: shipToHome ? 'ship-to-home' : 'ship-to-coordinator',\n });\n history.push(url, cartInfo);\n e.preventDefault();\n };\n\n return (\n
    \n
    \n Payment\n \n Edit\n \n
    \n {!isLoadingPayment && (\n
    \n
    {getPaymentInfo(paymentAccount)}
    \n
    \n )}\n {isLoadingPayment && }\n
    \n );\n};\n","import React, { ReactNode, useContext, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { keyframes } from 'glamor';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { BarCode, PhysicalCard, Reload } from '../../../../components/custom-icons';\n\nimport { OrderSummaryGroupItems } from './OrderSummaryItems';\n\nimport { createStyles } from 'utils/createStyle';\nimport { CartResponse } from 'common/api/e-comm/cart/lineitem/models/CartItems';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { useRootSelector } from 'rootStore';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { orgSupportsShipToHome } from 'common/utils/utils';\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport { CartLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport { EASE_IN_OUT_BACK } from 'styles/easing';\nimport { calculatePaymentFee } from 'features/order-summary/utils/useCartDetails';\nimport { getPaymentDisplayName } from 'features/order-summary/utils';\nimport { useWindowInnerSize } from 'hooks/useWindowSize';\nimport { OrderSummaryOptions } from './OrderSummaryOptions';\n\nconst bigBtnSelectedAnimation = (low = 60, high = 77) =>\n keyframes({\n '0%': {\n height: `${low}px`,\n opacity: 1,\n },\n '20%': { opacity: 0.6 },\n '100%': {\n height: `${high}px`,\n fontSize: '12px',\n opacity: 1,\n },\n });\n\nconst bigBtnUnselectedAnimation = (low = 60, high = 77) =>\n keyframes({\n '0%': {\n height: `${high}px`,\n opacity: 1,\n },\n '20%': { opacity: 0.6 },\n '100%': {\n height: `${low}px`,\n fontSize: '10px',\n opacity: 1,\n },\n });\n\nconst showOpacity = keyframes({\n '0%': {\n opacity: 0.6,\n },\n '100%': {\n opacity: '1',\n },\n});\n\nconst styles = createStyles({\n container: '',\n header: ['pt-2'],\n headerShipToHome: [\n 'duration-300',\n {\n background:\n 'linear-gradient(180deg, rgba(241, 90, 41, 0.1) 0%, rgba(230, 18, 106, 0.1) 42.35%, rgba(126, 63, 151, 0.1) 88.48%)',\n borderRadius: '10px 10px 0 0',\n marginBottom: '10px',\n },\n ],\n shippingOptionButtons: [\n 'block lg:grid gap-5 py-4 px-4 items-center',\n {\n gridTemplateColumns: '1fr 1fr',\n minHeight: '110px',\n },\n ],\n summaryGroupItems: [\n 'grid w-full',\n {\n gridTemplateColumns: '2fr 1fr 1fr 1fr 2rem',\n rowGap: '1rem',\n },\n ],\n sendToHomeSummaryGroupItems: ['px-8 pb-4 lg:px-0 lg:pb-0 lg:pl-4 col-span-3'],\n productTypeSeparator: [\n 'py-4 px-5',\n {\n animationName: showOpacity,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n showDeliveryGroup: [\n '',\n {\n animationName: showOpacity,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n columns: [\n 'lg:border-b border-solid border-grey-3',\n {\n backgroundColor: '#F7F7F7',\n },\n ],\n footer: [\n '',\n {\n backgroundColor: '#F7F7F7',\n borderRadius: '0 0 10px 10px',\n },\n ],\n bigBtnDescriptionSelected: ['text-grey-1', { fontSize: '12px' }],\n bigBtnDescriptionUnselected: ['text-grey-1', { fontSize: '10px' }],\n total: [\n 'grid w-full',\n {\n gridTemplateColumns: '2fr 1fr 1fr 1fr 2rem',\n rowGap: '0.4rem',\n },\n ],\n footerSummaryTotal: 'text-left text-xs text-grey-1',\n});\n\nexport const getProductTypeIcon = (productType: ProductType, size_?: string) => {\n const size = size_ || '1.25rem'; // default to 1.25rem\n if (productType === ProductType.EGiftCard) {\n return ;\n }\n\n if (productType === ProductType.GiftCard) {\n return ;\n }\n\n if (productType === ProductType.Reload) {\n return ;\n }\n\n return null;\n};\n\nexport const getProductTypeDisplayName = (productType: ProductType) => {\n if (productType === ProductType.EGiftCard) {\n return 'eGift';\n }\n\n if (productType === ProductType.GiftCard) {\n return 'Physical';\n }\n\n if (productType === ProductType.Reload) {\n return 'Reload';\n }\n};\n\nexport interface BigBtnProps {\n selected: boolean;\n title: ReactNode;\n description: ReactNode;\n onClick: () => void;\n sizes?: { max: number; from: number; to: number }[];\n}\n\nconst defaultSize = { max: 0, from: 65, to: 80 };\nconst BigBtn = ({ selected, title, description, sizes, ...props }: BigBtnProps) => {\n const { width } = useWindowInnerSize();\n\n const btnSize = useMemo(() => {\n const result = sizes && sizes.sort((a, b) => a.max - b.max).find((it) => it.max >= width);\n return result || defaultSize;\n }, [sizes, width]);\n\n const dynamicStyles = useMemo(\n () =>\n createStyles({\n bigBtn: [\n 'flex flex-row justify-center items-center border border-brand-accent bg-white px-4 sm:px-8 w-full',\n {\n ':focus': {\n outline: 'none',\n },\n overflow: 'hidden',\n borderRadius: '10px',\n animationName: bigBtnSelectedAnimation(btnSize.from, btnSize.to),\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n bigBtnUnselected: [\n 'border border-grey-2 focus:border-brand-accent bg-white/75 px-4 sm:px-8 text-grey-2 w-full',\n {\n ':focus': {\n outline: 'none',\n },\n overflow: 'hidden',\n borderRadius: '10px',\n animationName: bigBtnUnselectedAnimation(btnSize.from, btnSize.to),\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n }),\n [btnSize]\n );\n\n return (\n \n
    \n \n {title}\n
    \n \n {description}\n \n \n \n );\n};\n\nexport interface OrderSummaryGridProps {\n cart: CartResponse;\n loading: boolean;\n shipToHome: boolean;\n onShipToHomeChange: (shipToHome: boolean) => void;\n hideButtons?: boolean;\n summaryType?: 'subtotal' | 'total';\n hideEditQuantityButtons?: boolean;\n hideDeleteButton?: boolean;\n}\n\nexport const OrderSummaryGrid = ({\n cart,\n loading,\n shipToHome,\n onShipToHomeChange,\n hideButtons,\n summaryType,\n hideEditQuantityButtons,\n hideDeleteButton = false,\n}: OrderSummaryGridProps) => {\n const { cartInfoDetails } = useContext(OrderScreenContext);\n const {\n hasShipToHomeEligibleItems,\n shipToHomeItems,\n shipToCoordinator,\n electronicDeliveryItems,\n shipping: { shippingFee, isLoading: isLoadingShipping },\n payment: { paymentFee },\n total,\n } = cartInfoDetails;\n\n const organization = useRootSelector((s) => s.store.organization);\n const organizationSupportsShipToHome = orgSupportsShipToHome(organization);\n\n const renderDeliveryGroup = (title: string, description: string, items: CartLineItem[]) => {\n return (\n <>\n
    \n
    \n {\n
    \n
    {title}
    \n
    {description}
    \n
    \n }\n
    \n {\n \n }\n
    \n
    \n
    \n
    \n \n );\n };\n\n const renderPayment = () => {\n return (\n paymentFee &&\n paymentFee.amount > 0 && (\n <>\n
    \n {getPaymentDisplayName(paymentFee?.paymentType)}\n
    \n
    \n
    \n {monetizeWithDecimal(\n calculatePaymentFee((cart?.subtotal || 0) + shippingFee, paymentFee)\n )}\n
    \n
    \n \n )\n );\n };\n\n return (\n
    \n {!hideButtons && organizationSupportsShipToHome && (\n \n {hasShipToHomeEligibleItems && (\n <>\n
    \n
    \n You have cards eligible for ship to home.{' '}\n
    \n
    \n
    \n \n Ship them to me\n
    \n }\n description={\n
    \n I’d like them sent directly to me.{' '}\n (S&H fees apply)\n
    \n }\n onClick={() => onShipToHomeChange(true)}\n sizes={[\n { max: 350, from: 90, to: 100 },\n { max: 450, from: 80, to: 100 },\n ]}\n />\n
    \n \n \n Ship them to my coordinator\n \n
    \n }\n description={\n <>\n I’d like them sent to my coordinator.{' '}\n \n (Organization schedules and pays S&H fees)\n \n \n }\n onClick={() => onShipToHomeChange(false)}\n sizes={[\n { max: 350, from: 100, to: 120 },\n { max: 450, from: 80, to: 100 },\n ]}\n />\n
    \n \n )}\n
    \n )}\n
    \n
    \n
    \n
    \n {renderDeliveryGroup(\n 'Ship to Home',\n 'These cards will ship directly to you.',\n shipToHomeItems\n )}\n {renderDeliveryGroup(\n 'Ship to Coordinator',\n 'These cards will be sent to your Coordinator.',\n shipToCoordinator\n )}\n {renderDeliveryGroup('Electronic Delivery', '', electronicDeliveryItems)}\n {(!summaryType || summaryType === 'subtotal') && (\n
    \n \n
    \n Subtotal\n
    \n
    \n
    \n {cart.productCount}\n
    \n
    \n {monetizeWithDecimal(cart.subtotal)}\n
    \n
    \n
    \n )}\n {summaryType === 'total' && (\n <>\n \n
    Subtotal
    \n
    \n
    {cart.productCount}
    \n
    \n
    \n {monetizeWithDecimal(cart.subtotal)}\n
    \n
    \n\n {renderPayment()}\n\n
    \n Shipping & Handling\n
    \n
    \n
    \n {isLoadingShipping ? : monetizeWithDecimal(shippingFee)}\n
    \n
    \n
    \n
    \n \n
    \n
    \n Total\n
    \n
    \n {isLoadingShipping ? : monetizeWithDecimal(total)}\n
    \n
    \n
    \n
    \n
    \n \n
    \n \n )}\n
    \n );\n};\n","import classNames from 'classnames';\nimport React, { useContext, useMemo } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { getProductTypeDisplayName, getProductTypeIcon } from './summary/OrderSummaryGrid';\n\nimport { CartLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { createStyles } from 'utils/createStyle';\nimport { useRootSelector } from 'rootStore';\nimport {\n getPaymentDisplayName,\n getPaymentInfo,\n getProductName,\n getWalletCardDisplayName,\n} from 'features/order-summary/utils';\nimport { calculatePaymentFee } from 'features/order-summary/utils/useCartDetails';\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport { ShipToHome } from 'components/custom-icons';\nimport { useCardsFromWallet } from 'hooks/useCardsFromWallet';\nimport { GiftCard, EGiftCard } from 'common/api/e-comm/models/Card';\nimport { FeatureFlag } from 'components/feature-flag';\n\nconst styles = createStyles({\n container: 'p-8 max-w-lg',\n itemsContainer: ['border border-solid border-grey-3', { borderRadius: '10px' }],\n header: 'pt-2',\n headerShipToHome: [\n 'duration-300 border-solid border-b border-grey-3',\n {\n background:\n 'linear-gradient(180deg, rgba(241, 90, 41, 0.1) 0%, rgba(230, 18, 106, 0.1) 42.35%, rgba(126, 63, 151, 0.1) 88.48%)',\n },\n ],\n bigBtn: [\n 'border border-brand-accent bg-white px-8 py-1 w-full',\n {\n borderRadius: '10px',\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.06), 0px 4px 6px -1px rgba(0, 0, 0, 0.1)',\n },\n ],\n bigBtnUnselected: [\n 'border border-grey-2 bg-white/75 px-8 py-1 text-grey-2 w-full',\n { borderRadius: '10px' },\n ],\n shippingOptionButtons: [\n 'block lg:grid gap-2 py-4 px-4',\n {\n gridTemplateColumns: '1fr 1fr',\n },\n ],\n summaryGroupItems: [\n 'grid w-full',\n {\n gridTemplateColumns: '2fr 1fr 1fr 1fr',\n },\n ],\n sendToHomeSummaryGroupItems: 'px-8 pb-4 lg:px-0 lg:pb-0 lg:pl-4 col-span-3',\n productTypeSeparator: 'py-4 px-8',\n column: 'text-xs text-center text-brand-dark font-bold border-b border-solid border-grey-3 pb-1',\n columns: {\n backgroundColor: '#F7F7F7',\n borderRadius: '10px 10px 0 0',\n },\n footer: {\n backgroundColor: '#F7F7F7',\n borderRadius: '0 0 10px 10px',\n },\n cell: 'border-b border-solid border-grey-3 py-2',\n});\n\nexport const renderItems = (\n items: CartLineItem[],\n loading: boolean,\n walletCards: (GiftCard | EGiftCard)[]\n) =>\n items.map((item) => (\n \n {loading && (\n <>\n
    \n \n
    \n \n )}\n {!loading && (\n <>\n
    \n
    \n \n {getProductTypeIcon(item.product.type)}\n \n \n {getProductName(item)}\n \n
    \n
    \n {getProductTypeDisplayName(item.product.type)}{' '}\n {item.product.isShipToHomeEligible && (\n \n )}\n \n {' '}\n {getWalletCardDisplayName(item, walletCards)\n ? ` - ${getWalletCardDisplayName(item, walletCards)}`\n : ''}\n \n
    \n
    \n \n {monetizeWithDecimal(item.price)}\n
    \n \n {item.quantity}\n
    \n \n {monetizeWithDecimal(item.subtotal)}\n
    \n \n )}\n \n ));\n\nexport const OrderSummaryDetails = () => {\n const { cart, cartAsyncState } = useRootSelector((s) => s.store.cart);\n const items = cart?.lineItems || [];\n const loading = cartAsyncState.loading;\n const { cartInfoDetails } = useContext(OrderScreenContext);\n\n const walletCards = useCardsFromWallet();\n\n const {\n total,\n payment: { payment, paymentFee, paymentAccount },\n shipping: { shippingFee, selectedShipping },\n shipToHomeItems,\n shipToCoordinator,\n } = cartInfoDetails;\n\n const paymentTypeDisplayName = getPaymentDisplayName(paymentFee?.paymentType);\n const paymentFeeAmount = cart\n ? calculatePaymentFee(cart.subtotal + shippingFee, paymentFee)\n : 0;\n\n const renderPaymentMethod = () => {\n return (\n paymentFeeAmount > 0 && (\n <>\n
    \n {paymentTypeDisplayName}\n
    \n\n
    \n\n
    \n {monetizeWithDecimal(paymentFeeAmount)}\n
    \n \n )\n );\n };\n\n const renderShippingMethod = () => {\n return (\n <>\n
    \n Shipping & Handling\n
    \n
    \n
    \n {selectedShipping ? monetizeWithDecimal(selectedShipping.cost) : '-'}\n
    \n \n );\n };\n\n const paymentInfo = useMemo(() => getPaymentInfo(paymentAccount), [paymentAccount]);\n\n let totalShipToCoordinatorItems = 0;\n let totallShipToHomeItems = 0;\n\n for (let i = 0; i < shipToHomeItems.length; ++i) {\n totallShipToHomeItems += shipToHomeItems[i].quantity || 1;\n }\n\n for (let i = 0; i < shipToCoordinator.length; ++i) {\n totalShipToCoordinatorItems += shipToCoordinator[i].quantity || 1;\n }\n\n const renderSummaryDetails = () => {\n return (\n
    \n
    \n {(shipToHomeItems.length > 0 || shipToCoordinator.length > 0) && (\n
    \n
    Ship to
    \n
      \n {totallShipToHomeItems > 0 && (\n
    • \n
      Ship to home: {totallShipToHomeItems} items
      \n
    • \n )}\n {totalShipToCoordinatorItems > 0 && (\n
    • \n
      \n Ship to coordinator: {totalShipToCoordinatorItems} items\n
      \n
    • \n )}\n
    \n
    \n )}\n
    \n
    Payment
    \n
    \n {paymentInfo}\n
    \n
    \n
    \n
    \n );\n };\n\n return (\n
    \n
    Cart
    \n\n {loading && (\n <>\n
    \n \n
    \n \n )}\n {!loading && (\n <>\n
    \n
    \n
    \n \n Product\n
    \n\n
    Value
    \n\n
    Quantity
    \n\n
    Amount
    \n\n {renderItems(items, loading, walletCards)}\n\n
    \n Subtotal\n
    \n\n
    \n {cart?.productCount}\n
    \n\n
    \n {monetizeWithDecimal(cart?.subtotal || 0)}\n
    \n\n {renderPaymentMethod()}\n\n {renderShippingMethod()}\n\n
    \n\n
    \n\n
    \n Total\n
    \n\n
    \n {monetizeWithDecimal(total)}\n
    \n
    \n
    \n {renderSummaryDetails()}\n
    \n \n )}\n
    \n );\n};\n","import { RefObject, useCallback, useEffect, useState } from 'react';\n\nconst checkFocus = (ref: RefObject) => {\n if (!ref || !ref.current) {\n return;\n }\n\n return ref.current.contains(document.activeElement) || ref.current === document.activeElement;\n};\n\nexport const useFocusMonitor = (ref: RefObject) => {\n const [focused, setFocused] = useState(checkFocus(ref));\n\n const monitorFocus = useCallback(() => {\n setFocused(checkFocus(ref));\n }, [setFocused, ref]);\n\n useEffect(() => {\n const events = ['click', 'mouseup', 'keyup'];\n events.forEach((eventName) => document.addEventListener(eventName, monitorFocus));\n return () =>\n events.forEach((eventName) => document.removeEventListener(eventName, monitorFocus));\n }, [monitorFocus]);\n\n return focused;\n};\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport { ChevronDown, ChevronUp } from 'react-feather';\nimport classNames from 'classnames';\nimport { useHistory } from 'react-router-dom';\n\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\n\nimport { OrderSummaryOptions, showHeight } from './summary/OrderSummaryOptions';\n\nimport { useRootSelector } from 'rootStore';\nimport { createStyle } from 'utils/createStyle';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { Btn } from 'components/btn/Btn';\nimport { EASE_IN_OUT_BACK } from 'styles/easing';\nimport { getPath, Routes } from 'routes';\nimport { useFocusMonitor } from 'hooks/useFocusMonitor';\nimport { FeatureFlag } from 'components/feature-flag';\n\nconst styles = {\n orderDetailsContainerMobile: createStyle('absolute bg-white top-0 right-0 left-0 block', {\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.06), 0px 4px 6px -1px rgba(0, 0, 0, 0.1)',\n }),\n orderDetails: 'text-brand-dark flex p-4 bg-grey-7 w-full items-center h-16',\n area: [\n 'mb-2',\n {\n overflow: 'hidden',\n animationName: showHeight,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n};\n\nexport interface OrderSummaryDetailsMobileProps {\n shipToHome: boolean;\n}\n\nexport const OrderSummaryDetailsMobile = ({ shipToHome }: OrderSummaryDetailsMobileProps) => {\n const [expandItems, setExpandItems] = useState(false);\n const { cartInfo, cartInfoDetails } = useContext(OrderScreenContext);\n const { total } = cartInfoDetails;\n const cart = useRootSelector((s) => s.store.cart.cart);\n const isCartEmpty = !cart || cart.lineItems.length <= 0;\n\n const history = useHistory();\n\n const beginCheckout = () => {\n const url = getPath(Routes.ShopOrderPayment, {\n shipToHome: shipToHome ? 'ship-to-home' : 'ship-to-coordinator',\n });\n history.push(url, cartInfo);\n };\n\n const containerRef = useRef(null);\n const isFocused = useFocusMonitor(containerRef);\n\n useEffect(() => {\n if (!isFocused) {\n setExpandItems(false);\n }\n }, [isFocused]);\n\n return (\n \n \n
    \n
    \n {!isCartEmpty && (\n \n
    \n \n \n Begin Checkout\n \n \n \n \n Checkout Disabled\n \n \n
    \n
    \n )}\n {isCartEmpty &&
    Empty cart.
    }\n
    \n
    \n
    \n );\n};\n","import { IFincen } from 'common/api/e-comm/cart';\n\nexport enum FincenFlowState {\n CAN_ORDER = 'CAN_ORDER',\n REQUIRES_INFORMATION_SUBMISSION = 'REQUIRES_INFORMATION_SUBMISSION',\n REQUIRES_INFORMATION_VERIFICATION = 'REQUIRES_INFORMATION_VERIFICATION',\n WILL_EDIT_CART = 'WILL_EDIT_CART',\n}\n\nexport interface IFincenState {\n fincen: IFincen | null;\n fincenFlowState: FincenFlowState | null;\n}\n\nexport interface IFincenFormUrl {\n updateFincenInfoUrl: string;\n enterFincenInfoUrl: string;\n moreInfoUrl: string;\n}\n\nexport const defaultFincenFormUrl = {\n updateFincenInfoUrl: '',\n enterFincenInfoUrl: '',\n moreInfoUrl: '',\n};\n","import React from 'react';\nimport { noop } from 'common/utils';\nimport { IFincenState, FincenFlowState } from './types';\nimport { IFincen, validateCart } from 'common/api/e-comm/cart';\n\nexport const initialState: IFincenState = {\n fincen: null,\n fincenFlowState: null,\n};\n\nexport interface IEvent {\n name: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n payload: any;\n}\n\nconst within24Hours = (date: string | null) => {\n if (date === null) {\n // default to false incase date string is null\n return false;\n }\n\n const fincenSubmissionDate = new Date(date);\n const now = new Date();\n const difference = now.getTime() - fincenSubmissionDate.getTime();\n\n // convert difference to hours\n return difference / 1000 / 60 / 60 <= 24;\n};\n\nconst deriveFincenFlowState = (fincenData: IFincen | null, shouldRunFincenFlow: boolean) => {\n // Only run the logic IFF we got a 422 status code\n if (shouldRunFincenFlow) {\n // CASE: fincenData is null means user has never submitted a\n // fincen form.\n if (fincenData === null) {\n return FincenFlowState.REQUIRES_INFORMATION_SUBMISSION;\n } else {\n // CASE: User has previously submitted a form -- we should check\n // if they have submitted a recent one in the past 24 hours or not.\n const { submitDt } = fincenData as IFincen;\n try {\n const userHasNotVerifiedWithin24Hours = !within24Hours(submitDt);\n if (userHasNotVerifiedWithin24Hours) {\n return FincenFlowState.REQUIRES_INFORMATION_VERIFICATION;\n } else {\n return FincenFlowState.CAN_ORDER;\n }\n } catch {\n // RARE-CASE: if submitDt for some reason doesn't parse properly\n // we should default to have the user verify their information\n return FincenFlowState.REQUIRES_INFORMATION_VERIFICATION;\n }\n }\n } else {\n return FincenFlowState.CAN_ORDER;\n }\n};\n\nconst handlers: { [key: string]: Function } = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n SET_FINCEN_DATA: (state: IFincenState, payload: any) => {\n const shouldRunFincenFlow = payload.shouldRunFincenFlow;\n let fincenFlowState = deriveFincenFlowState(payload.fincen, shouldRunFincenFlow);\n\n // CASE: User decided to edit their cart -- the cart will update which will cause `validate`\n // to get called. We should not derive the fincen-flow-state again.\n if (\n state.fincenFlowState === FincenFlowState.WILL_EDIT_CART &&\n payload.shouldRunFincenFlow\n ) {\n fincenFlowState = state.fincenFlowState;\n }\n\n return { ...payload, fincenFlowState };\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n SET_FINCEN_FLOW_STATE: (state: IFincenState, payload: any) => {\n return { ...state, fincenFlowState: payload as FincenFlowState };\n },\n};\n\nexport const fincenState = (state: IFincenState = initialState, event: IEvent) => {\n const handler = handlers[event.name];\n if (handler) {\n return handler(state, event.payload);\n }\n return state;\n};\n\ninterface IFincenContext {\n data: IFincenState;\n dispatch: React.Dispatch | null;\n editInfoUrl: string;\n enterInfoUrl: string;\n moreInfoUrl: string;\n processValidateCartResult: (r: Awaited>) => void\n}\n\nexport const FincenContext = React.createContext({\n data: initialState,\n dispatch: noop,\n editInfoUrl: '',\n enterInfoUrl: '',\n moreInfoUrl: '',\n processValidateCartResult: noop\n});\n","import React, { useContext } from 'react';\nimport { faExclamationCircle } from '@fortawesome/pro-light-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FincenContext, IEvent } from './context';\nimport { Btn } from 'components/btn/Btn';\nimport { FincenFlowState } from './types';\n\nexport const RequiresInformationSubmissionView = () => {\n return (\n
    \n \n <Content />\n </div>\n );\n};\n\nconst Title = () => (\n <div className=\"text-error mb-2 font-semibold text-xl\">\n <FontAwesomeIcon icon={faExclamationCircle} size=\"lg\" className=\"mr-2\" />\n Additional information needed\n </div>\n);\n\nconst Content = () => {\n const { dispatch, enterInfoUrl, moreInfoUrl } = useContext(FincenContext);\n\n const changeOrder = () => {\n (dispatch as React.Dispatch<IEvent>)({\n name: 'SET_FINCEN_FLOW_STATE',\n payload: FincenFlowState.WILL_EDIT_CART,\n });\n };\n\n const sendToFincenForm = () => {\n if (enterInfoUrl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).location.href = `${enterInfoUrl}?returnUrl=${window.location.href}`;\n }\n };\n\n return (\n <div className=\"font-semibold text-xs text-grey-2\">\n <p>\n This order will result in you purchasing more than $10,000 worth of gift cards in\n the past 24 hours. We are required by the Financial Crimes Enforcement Network\n (FinCEN) to gather additional information before completing your purchase. We\n appreciate your patience as we work to comply with all federal regulations.\n </p>\n\n <p className=\"mt-5\">\n For more information: <a href={moreInfoUrl}>RaiseRight FinCEN Policy</a>\n </p>\n\n <div className=\"mt-14 sm:mt-10 flex gap-5 flex-col-reverse sm:flex-row sm:justify-end\">\n <Btn className=\"mx-auto sm:m-0\" onClick={changeOrder} isSecondary>\n Change My Order\n </Btn>\n <Btn onClick={sendToFincenForm}>Fill Out FinCEN Form</Btn>\n </div>\n </div>\n );\n};\n","import React, { useContext } from 'react';\nimport { faExclamationCircle } from '@fortawesome/pro-light-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FincenContext } from './context';\nimport { Btn } from 'components/btn/Btn';\nimport { IFincen } from 'common/api/e-comm/cart';\nimport { formatDate } from 'common/utils/time';\n\nconst formatFlatPhone = (phone: string) => {\n if (phone && phone.length === 10) {\n const match = phone.match(/(\\d{3})(\\d{3})(\\d{4})/);\n\n if (match) {\n const [, areaCode, firstPart, secondPart] = match;\n return `(${areaCode}) ${firstPart}-${secondPart}`;\n }\n }\n console.error('[formatFlatPhone]: Phone is not at least 10 characters');\n throw new Error('[formatFlatPhone]: Phone is not at least 10 characters');\n};\n\nexport const RequiresInformationVerificationView = () => {\n return (\n <div className=\"border rounded-md p-5 shadow-md mb-5 border-brand\">\n <Title />\n <FincenInfo />\n <Footer />\n </div>\n );\n};\n\nconst FincenInfo = () => {\n const { moreInfoUrl } = useContext(FincenContext);\n return (\n <div className=\"font-semibold text-xs text-grey-2\">\n <p>\n This order will result in you purchasing more than $10,000 worth of gift cards in\n the past 24 hours. We are required by the Financial Crimes Enforcement Network\n (FinCEN) to gather additional information before completing your purchase. We\n appreciate your patience as we work to comply with all federal regulations.\n </p>\n\n <p className=\"mt-5\">\n For more information: <a href={moreInfoUrl}>RaiseRight FinCEN Policy</a>\n </p>\n </div>\n );\n};\n\nconst Title = () => (\n <div className=\"text-brand mb-8 font-semibold text-xl\">\n <p>\n <FontAwesomeIcon icon={faExclamationCircle} size=\"lg\" className=\"mr-2\" />\n Please verify the previously submitted FinCEN information\n </p>\n </div>\n);\n\nconst Header = ({ children }: React.PropsWithChildren) => (\n <p className=\"text-brand font-semibold text-xl mb-2\">{children}</p>\n);\n\n// NOTE: Keep around in the case that we want this back once we're able to verify\n// user's fincen info from react-web\nexport const UserInformation = () => {\n const { data } = useContext(FincenContext);\n\n return (\n <div className=\"flex flex-col sm:flex-row gap-10 text-sm text-grey-2\">\n <Address {...(data.fincen as IFincen)} />\n <ContactInformation {...(data.fincen as IFincen)} />\n </div>\n );\n};\n\nconst Address = ({\n firstName,\n lastName,\n address,\n address2,\n city,\n state,\n zip,\n suffix,\n streetName,\n}: IFincen) => {\n return (\n <div>\n <Header>Address</Header>\n <p>{`${suffix ?? ''} ${firstName ?? ''} ${lastName ?? ''}`}</p>\n <p>{`${address ?? ''} ${streetName ?? ''} ${address2 ?? ''}`}</p>\n <p>{`${city ?? ''}, ${state ?? ''} ${zip ?? ''}`}</p>\n </div>\n );\n};\n\nconst ContactInformation = ({\n phone,\n dateOfBirthDt,\n driversLicense,\n licenseIssueState,\n}: IFincen) => {\n return (\n <div>\n <Header>Contact Information</Header>\n <div className=\"flex gap-4\">\n <div>\n <p>Phone</p>\n <p>Date of Birth</p>\n <p>Driver's License</p>\n <p>State Issuing License</p>\n </div>\n <div>\n <p>{phone ? formatFlatPhone(phone as string) : <> </>}</p>\n <p>{dateOfBirthDt ? formatDate(dateOfBirthDt) : <> </>}</p>\n <p>{driversLicense || <> </>}</p>\n <p>{licenseIssueState || <> </>}</p>\n </div>\n </div>\n </div>\n );\n};\n\nconst Footer = () => {\n const { editInfoUrl } = useContext(FincenContext);\n\n const editInformation = async () => {\n if (editInfoUrl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).location.href = `${editInfoUrl}?returnUrl=${window.location.href}`;\n }\n };\n\n return (\n <div className=\"font-semibold text-sm text-grey-2 mt-8\">\n <div className=\"mt-2 flex gap-5 flex-col-reverse sm:flex-row\">\n <Btn onClick={editInformation}>Agree and Proceed</Btn>\n </div>\n </div>\n );\n};\n","import React, { useContext } from 'react';\nimport { faExclamationCircle } from '@fortawesome/pro-light-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FincenContext } from './context';\n\nexport const ChangingYourOrderView = () => {\n return (\n <div className=\"border rounded-md p-5 shadow-md mb-5 border-error\">\n <Title />\n <Content />\n </div>\n );\n};\n\nconst Title = () => (\n <div className=\"text-error mb-2 font-semibold text-xl\">\n <FontAwesomeIcon icon={faExclamationCircle} size=\"lg\" className=\"mr-2\" />\n Changing your order\n </div>\n);\n\nconst Content = () => {\n const { enterInfoUrl, moreInfoUrl } = useContext(FincenContext);\n const sendToFincenForm = () => {\n if (enterInfoUrl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).location.href = `${enterInfoUrl}?returnUrl=${window.location.href}`;\n }\n };\n\n return (\n <div className=\"font-semibold text-xs text-grey-2\">\n <p>\n You have chosen not to supply the information required to complete your order. To\n proceed, you will have to remove items from your cart until, the total for your\n combined purchases for the past 24 hours is less than $10,000. You may still\n <button\n className=\"underline text-brand mx-1 font-semibold\"\n onClick={sendToFincenForm}\n >\n fill out the FinCEN form\n </button>\n if you choose to do so.\n </p>\n\n <p className=\"mt-5\">\n For more information: <a href={moreInfoUrl}>RaiseRight FinCEN Policy</a>\n </p>\n </div>\n );\n};\n","import React, { useEffect, useReducer, useRef, useContext, useCallback } from 'react';\nimport { validateCart } from 'common/api/e-comm/cart';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport {\n FincenFlowState,\n IFincenFormUrl,\n defaultFincenFormUrl,\n} from 'features/order-summary/components/fincen/types';\nimport { StatusCode } from 'common/api/config';\nimport { FincenContext, initialState, fincenState } from './context';\nimport { RequiresInformationSubmissionView } from './RequiresInformationSubmissionView';\nimport { RequiresInformationVerificationView } from './RequiresInformationVerificationView';\nimport { ChangingYourOrderView } from './ChangingYourOrderView';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport {\n OrderScreenContext,\n CheckoutFlowState,\n} from 'features/order-summary/screens/CheckoutScreen';\nimport { Value } from 'firebase/remote-config';\nimport { useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport { isInIframe } from 'utils';\n\nconst parseFincen = (value: Value) => {\n // CASE: values aren't loaded -- lets use the defaults which are empty strings\n return value.asString() ? JSON.parse(value.asString()) : defaultFincenFormUrl;\n};\n\nexport const FincenFlowView = () => {\n const [validateCart_, , result] = useApi(validateCart);\n const [state, dispatch] = useReducer(fincenState, initialState);\n const cart = useRootSelector((s) => s.store.cart.cart);\n const lastUpdatedTime = useRef<string | undefined>();\n const { setCheckoutFlowState, showFincen, setShowFincen } = useContext(OrderScreenContext);\n const fincen = {\n updateFincenInfoUrl: process.env.REACT_APP_UPDATE_FINCEN_INFO_URL,\n enterFincenInfoUrl: process.env.REACT_APP_ENTER_FINCEN_INFO_URL,\n moreInfoUrl: process.env.REACT_APP_FINCEN_MORE_INFO_URL,\n } as IFincenFormUrl;\n\n // Side-Effect(A): validate the cart whenever it is updated.\n // We utilize `updatedTime` instead of `cart` to avoid many api-calls\n // to `validateCart`.\n useEffect(() => {\n if (lastUpdatedTime.current != cart?.updatedTime) {\n validateCart_();\n }\n }, [cart?.updatedTime, validateCart_]);\n\n // Side-Effect(B): if cart changes we want to update our lastUpdatedTime reference\n // to update to the latest updatedTime.\n useEffect(() => {\n lastUpdatedTime.current = cart?.updatedTime;\n }, [cart]);\n\n // Side-Effect(C): Enable/Disable the cart-checkout button\n // depending on the FinCEN flow state.\n // - CAN_ORDER will tell the checkout to render the `Checkout` buttons\n // without the __disabled__ state.\n // - Any other state will __disable__ the `Checkout` buttons,\n // not allowing the user to continue forward. These buttons are any buttons\n // that allow you to advance through the checkout flow.\n useEffect(() => {\n if (state.fincenFlowState === FincenFlowState.CAN_ORDER) {\n setCheckoutFlowState(CheckoutFlowState.ENABLED);\n setShowFincen(false);\n } else {\n setCheckoutFlowState(CheckoutFlowState.DISABLED);\n }\n }, [state.fincenFlowState, showFincen, setCheckoutFlowState, setShowFincen]);\n\n const processValidateCartResult = useCallback(\n (result: Awaited<ReturnType<typeof validateCart>>) => {\n if (result) {\n const fincen =\n result.data?.fincenResponse || result?.error?.body?.fincenResponse || null;\n const shouldRunFincenFlow =\n result.response?.status === StatusCode.UnprocessableEntity;\n dispatch({\n name: 'SET_FINCEN_DATA',\n payload: {\n fincen,\n shouldRunFincenFlow,\n },\n });\n }\n },\n [dispatch]\n );\n\n useEffect(() => {\n processValidateCartResult(result!);\n }, [result, processValidateCartResult]);\n\n const renderFincenView = () => {\n if (isInIframe()) {\n // return because we only want fincen to show up in the main window since it handles navigation to the fincen site\n return null;\n }\n switch (state.fincenFlowState) {\n case FincenFlowState.CAN_ORDER:\n return null;\n case FincenFlowState.REQUIRES_INFORMATION_VERIFICATION:\n return <RequiresInformationVerificationView />;\n case FincenFlowState.REQUIRES_INFORMATION_SUBMISSION:\n return <RequiresInformationSubmissionView />;\n case FincenFlowState.WILL_EDIT_CART:\n return <ChangingYourOrderView />;\n }\n };\n\n const context = {\n data: state,\n dispatch,\n enterInfoUrl: fincen?.enterFincenInfoUrl || '',\n editInfoUrl: fincen?.updateFincenInfoUrl || '',\n moreInfoUrl: fincen?.moreInfoUrl || '',\n processValidateCartResult,\n };\n return <FincenContext.Provider value={context}>{renderFincenView()}</FincenContext.Provider>;\n};\n","import React, { useMemo } from 'react';\nimport { createStyles } from 'utils/createStyle';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectWalletAffiliateBonuses } from 'common/features/store/duck/wallet/duck';\n\nconst styles = createStyles({\n doubleDipMessage: [\n 'flex h-8 w-full bg-pale-blue justify-center text-dark-blue font-semibold items-center',\n { borderTopRightRadius: 10, borderTopLeftRadius: 10, fontSize: 14 },\n ],\n});\n\nexport const ShopOnlineWalletCardMarker = React.memo(({ brandId }: { brandId: number }) => {\n const affiliateBrandOffersSelector = useRootSelector(selectWalletAffiliateBonuses);\n\n const affiliateOffers = useMemo(() => {\n if (brandId && affiliateBrandOffersSelector) {\n return affiliateBrandOffersSelector(`${brandId}`);\n }\n }, [brandId, affiliateBrandOffersSelector]);\n\n if (!affiliateOffers?.canDoubleDip) {\n return null;\n }\n\n return (\n <div className={styles.doubleDipMessage}>\n <span>{`Shop online and earn ${affiliateOffers.variable ? 'up to' : ''} ${\n affiliateOffers.bestRebate\n }% more`}</span>\n </div>\n );\n});\n","import React from 'react';\nimport classNames from 'classnames';\nimport { useHistory } from 'react-router-dom';\n\nimport { BarCode, Reload } from '../../../components/custom-icons';\n\nimport { Card, getLastBalanceAddedDate } from 'common/api/e-comm/models/Card';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectBrandId } from 'common/features/store/duck/brands/duck';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { createStyles } from 'utils/createStyle';\nimport { formatDateObject } from 'common/utils/time';\nimport { Routes } from 'routes';\nimport { useSpring, animated } from 'react-spring';\nimport { ShopOnlineWalletCardMarker } from './ShopOnlineWalletCardMarker';\n\ninterface WalletCardProps {\n idx: number;\n card: Card;\n archived: boolean;\n openUnArchiveModal?: React.Dispatch<React.SetStateAction<string | null>>;\n}\n\ninterface IFadeIn {\n classes?: string;\n}\n\nexport const FadeIn = ({ children, classes = '' }: React.PropsWithChildren<IFadeIn>) => {\n const styles = useSpring({\n from: { opacity: 0 },\n to: { opacity: 1 },\n delay: 300,\n });\n\n return (\n <animated.div className={classes} style={{ ...styles }}>\n {children}\n </animated.div>\n );\n};\n\nconst styles = createStyles({\n card: [\n 'border-solid border-grey-3 border my-3 md:flex md:flex-col md:justify-between md:items-center',\n { borderRadius: 10 },\n ],\n doubleDipCard: ['border-brand'],\n brandImage: ['mr-8 object-contain', { width: 40, '@media (min-width: 500px)': { width: 80 } }],\n cardTypeIcon: ['object-contain text-brand mr-1', { height: 15 }],\n balanceUpdated: ['text-grey-1 font-semibold', { fontSize: 10, lineHeight: '15px' }],\n lastViewed: ['text-brand font-semibold', { fontSize: 10, lineHeight: '15px' }],\n});\n\ntype CardTypeIcon = (props: React.ComponentProps<'svg'>) => JSX.Element;\n\nfunction generateCardMetaData(card: Card): [string, CardTypeIcon] {\n if (card.type === ProductType.EGiftCard) {\n return ['eGift', BarCode];\n }\n\n return ['Reload', Reload];\n}\n\nconst WalletCard = ({ card, archived, openUnArchiveModal }: WalletCardProps) => {\n const brands = useRootSelector((s) => selectBrandId(s));\n const history = useHistory();\n const cardBrand = brands && brands[card.brandId];\n const cardName = card.name || cardBrand?.name;\n const [cardType, CardTypeIcon] = generateCardMetaData(card);\n\n const redirectToDetailPage = () =>\n history.push(Routes.WalletMyCardDetails.replace(':cardId', card.id));\n const balanceUpdatedDate = formatDateObject(getLastBalanceAddedDate(card));\n const unArchiveCard = () => {\n openUnArchiveModal && openUnArchiveModal(card.id);\n };\n\n const onClick = archived ? unArchiveCard : redirectToDetailPage;\n\n const lastViewedDate = card.lastViewedDate\n ? new Date(card.lastViewedDate).toLocaleDateString('en-US')\n : '--/--/----';\n\n return (\n <React.Fragment>\n <article className={classNames(styles.card)}>\n <ShopOnlineWalletCardMarker brandId={card.brandId} />\n <div className=\"w-full px-6 py-5 md:flex md:flex-row md:px-5 md:py-5 md:justify-between md:items-center\">\n <section className=\"flex\">\n <FadeIn>\n <img className={styles.brandImage} src={cardBrand?.imageUrl} />\n </FadeIn>\n <div className=\"flex flex-col\">\n <h4\n style={{ maxWidth: 280 }}\n className=\"text-brand-dark font-semibold text-2xl mb-1 md:mr-14 overflow-ellipsis whitespace-nowrap overflow-hidden\"\n >\n {cardName}\n </h4>\n <label className=\"text-grey-1 text-xs flex mb-1 font-semibold\">\n <CardTypeIcon className={styles.cardTypeIcon} />\n {cardType}\n </label>\n </div>\n </section>\n <section className=\"flex justify-between mt-7 md:mt-0\">\n <div\n className={classNames(\n 'flex-col items-center justify-end md:justify-start md:mr-12',\n archived ? 'hidden' : 'flex'\n )}\n >\n <h5 className=\"text-brand text-2xl mb-1\">\n {monetizeWithDecimal(card.cardBalance || 0)}\n </h5>\n <small className={styles.balanceUpdated}>\n As of {balanceUpdatedDate}\n </small>\n </div>\n <div className=\"flex flex-col items-center justify-end w-36\">\n <button\n onClick={onClick}\n className=\"text-brand no-underline cursor-pointer text-lg font-semibold rounded-full border-2 border-brand px-8 py-1 mb-1 md:px-10 bg-white\"\n >\n {archived ? 'Unarchive' : 'View'}\n </button>\n <span className=\"text-brand text-sm w-40\">\n Last Viewed: {lastViewedDate}\n </span>\n </div>\n </section>\n </div>\n </article>\n </React.Fragment>\n );\n};\n\nexport default WalletCard;\n","import { useRef, useState } from 'react';\nimport { getBrands } from 'common/api/search/getBrands';\nimport {\n Brand,\n searchResultBrandsToBrands,\n} from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\nimport { useBrandList } from 'common/hooks/useBrandList';\nimport { CardPropsEarns, convertBrandToCardProps } from 'components/bonus/CardProps';\nimport { BrandCardSlim } from 'components/brand-card/BrandCardSlim';\nimport { Render } from 'components/loading-screen/Render';\nimport { FadeIn } from 'features/wallet/components/WalletCard';\nimport { useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport React, { useEffect, useMemo } from 'react';\nimport { SkeletonProps } from 'react-loading-skeleton';\nimport { useConstructorDefaultParameters } from 'common/api/constructor/useConstructorDefaultParameters';\nimport { constructorClient } from 'third-party-integrations/constructor';\nimport { constructorToBrand } from 'common/api/constructor/util/conversion-utils';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectIsConstructorBrowseEnabledWeb } from 'common/features/store/duck/ffs';\nimport { ConstructorReturnObject } from 'common/api/constructor/util';\n\nexport const BrandCardTiles = () => {\n const isConstructorEnabled = useRootSelector(selectIsConstructorBrowseEnabledWeb);\n\n if (isConstructorEnabled === undefined) {\n return null;\n }\n\n return isConstructorEnabled ? <BrandCardTilesConstructor /> : <BrandCardTilesCognitive />;\n};\n\nconst BrandCardTilesCognitive = () => {\n const cardBrandTilesValue = useFirebaseConfigValues('cart_brand_card_tiles', undefined, (v) =>\n v.asString()\n );\n const { data: brands, loadData } = useBrandList<Brand[]>(searchResultBrandsToBrands);\n const isLoading = useRef<boolean>(true);\n\n const cardBrandTiles = useMemo(() => {\n if (cardBrandTilesValue) {\n return JSON.parse(cardBrandTilesValue)['brandIds'] as number[];\n }\n return [];\n }, [cardBrandTilesValue]);\n\n useEffect(() => {\n if (cardBrandTiles.length > 0 && isLoading.current) {\n isLoading.current = false;\n const filter = `search.in(Id, '${cardBrandTiles.join(', ')}')`;\n loadData(getBrands)({\n filter,\n });\n }\n }, [loadData, cardBrandTiles]);\n\n const brandsList = (brands?.map((brand) => convertBrandToCardProps(brand)) || []).slice(0, 5);\n\n return (\n <Render<SkeletonProps>\n when={Boolean(brands && brands.length > 0)}\n loadingComponentProps={{ className: 'h-36 sm:h-56' }}\n >\n <FadeIn>\n <div className=\"pt-14 pb-8 text-2xl bg-pale-blue\">\n <div className=\"text-center mb-8 text-brand-dark px-4 font-semibold\">\n We thought you might also like these brands\n </div>\n <div className=\"flex flex-wrap gap-2 justify-center\">\n {brandsList.map((brand) => (\n <BrandCardSlim key={brand.id} styles={{}} data={brand} />\n ))}\n </div>\n </div>\n </FadeIn>\n </Render>\n );\n};\n\nconst BrandCardTilesConstructor = () => {\n const [cardBrandList, setCardBrandList] = useState<CardPropsEarns[]>([]);\n\n const isLoading = useRef<boolean>(true);\n\n const lastUpdate = useRootSelector((s) => s.store.organization.optionsAsyncState.lastUpdate);\n const homeDetailsLastUpdate = useRootSelector(\n (s) => s.store.home.homeDetailsAsyncState.lastUpdate\n );\n\n const baseFilters = useConstructorDefaultParameters({ resultsPerPage: 5 });\n\n useEffect(() => {\n if (isLoading.current && lastUpdate > 0 && homeDetailsLastUpdate > 0) {\n const loadBrands = async () => {\n const result = await constructorClient.browse.getBrowseResults(\n 'group_id',\n 'Filter-IsSponsored',\n baseFilters.current\n );\n\n isLoading.current = false;\n\n if (result?.response?.results?.length) {\n const results = result.response?.results;\n\n const brandsConstructor = constructorToBrand(\n results as ConstructorReturnObject[]\n );\n const brands = searchResultBrandsToBrands({\n count: brandsConstructor.length,\n brands: brandsConstructor,\n });\n\n const brandsToCards = brands.map((brand) => convertBrandToCardProps(brand));\n\n setCardBrandList(brandsToCards);\n }\n };\n loadBrands();\n }\n }, [baseFilters, lastUpdate, homeDetailsLastUpdate]);\n\n return (\n <Render<SkeletonProps>\n when={Boolean(cardBrandList && cardBrandList.length > 0)}\n loadingComponentProps={{ className: 'h-36 sm:h-56' }}\n >\n <FadeIn>\n <div className=\"pt-14 pb-8 text-2xl bg-pale-blue\">\n <div className=\"text-center mb-8 text-brand-dark px-4 font-semibold\">\n We thought you might also like these brands\n </div>\n <div className=\"flex flex-wrap gap-2 justify-center\">\n {cardBrandList.map((brand) => (\n <BrandCardSlim key={brand.id} styles={{}} data={brand} />\n ))}\n </div>\n </div>\n </FadeIn>\n </Render>\n );\n};\n","import React, { useRef, useEffect, useState } from 'react';\nimport { paymentWebsiteOrigin } from 'utils';\nimport { createStyles } from 'utils/createStyle';\n\nexport const PaymentIframe = ({ src }: { src: string }) => {\n const [iframeHeight, setIframeHeight] = useState('300px');\n const iframeRef = useRef(null);\n\n useEffect(() => {\n const handleMessage = (event: any) => {\n // Validate that the message comes from the expected iframe domain\n if (event.origin !== paymentWebsiteOrigin()) {\n return;\n }\n\n if (event.data.type === 'setHeight' && event.data.height) {\n setIframeHeight(`${event.data.height}px`);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n id=\"payment-iframe\"\n src={src}\n title=\"Cross Domain Iframe\"\n className=\"w-full border-none\"\n style={{ height: iframeHeight }}\n />\n );\n};\n","import classNames from 'classnames';\nimport React, { useContext, useEffect } from 'react';\nimport { requestCartItems, resetCart, updateCart } from 'common/features/store/duck/cart/duck';\nimport { useDispatch } from 'react-redux';\nimport { CartInfoState, OrderSteps } from './CartInfoState';\nimport { Breadcrumb } from './components/Breadcrumb';\nimport { getBreadcrumbPath } from './utils';\nimport { CartInfoDetails } from './utils/useCartDetails';\nimport { OrderSummaryDetails } from './components/OrderSummaryDetails';\nimport { OrderSummaryDetailsMobile } from './components/OrderSummaryDetailsMobile';\n\nimport { getPath, Routes } from 'routes';\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { isDefined } from 'common/utils';\nimport { createStyles } from 'utils/createStyle';\nimport { useScrollToTop } from 'hooks/useScrollToTop';\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport { FincenFlowView } from 'features/order-summary/components/fincen/FincenFlowView';\nimport { BrandCardTiles } from './components/BrandCardTiles';\nimport { FeatureFlag } from 'components/feature-flag';\nimport { OrderSuccessGridData } from './components/success/OrderSuccessGrid';\n\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { PaymentIframe } from './components/PaymentIframe';\nimport { getPaymentWindowUrl, isInIframe, mainWebsiteOrigin, paymentWebsiteOrigin } from 'utils';\nimport { gaLogBeginCheckout, gaLogPurchase, logPageView } from 'config/analytics';\nimport { sendToLoginPage } from 'features/auth/components/withAuth';\n\nexport interface OrderScreenProps {\n title: string;\n className?: string;\n hideHeader?: boolean;\n orderStep: OrderSteps;\n showSummary: boolean;\n showMobileSummary: boolean;\n noMaxWidth?: boolean;\n showBrandCardTiles?: boolean;\n embedView?: boolean;\n}\n\nexport interface OrderScreenContextType {\n cartInfo: CartInfoState;\n cartInfoDetails: CartInfoDetails;\n setCartInfo: (value: CartInfoState) => void;\n}\n\nconst enabledRules: {\n [key in OrderSteps]: (\n cartInfoState: CartInfoState,\n cartInfoDetails: CartInfoDetails\n ) => boolean;\n} = {\n summary: () => true,\n payment: (cartInfo) => isDefined(cartInfo.paymentMethodId),\n shipping: (cartInfo, cartInfoDetails) =>\n Boolean(cartInfoDetails.shipToHomeIfPossible) && Boolean(cartInfo.paymentMethodId),\n review: (cartInfo, cartInfoDetails) =>\n Boolean(cartInfo.paymentMethodId) &&\n (!cartInfoDetails.shipToHomeIfPossible || Boolean(cartInfo.shippingMethodId)),\n success: () => false,\n};\n\nconst styles = createStyles({\n orderDetails: [\n 'max-w-lg xl:max-w-2xl w-full ml-auto py-12 hidden lg:block',\n {\n right: '0px',\n backgroundColor: '#F7F7F7',\n zIndex: -1,\n },\n ],\n});\n\nexport const OrderScreenListener = () => {\n const history = useHistory();\n const dispatch = useDispatch<any>();\n\n useEffect(() => {\n const handleMessage = (event: any) => {\n // Always check the origin of the message\n\n if (isInIframe()) {\n if (event.origin !== mainWebsiteOrigin()) {\n return;\n }\n\n if (event.data.type === 'cartUpdated') {\n if (event.data.cart.lineItems.length === 0) {\n dispatch(resetCart());\n } else {\n dispatch(updateCart({ cart: event.data.cart }));\n }\n } else if (event.data.type === 'resetCart') {\n dispatch(resetCart());\n }\n } else {\n if (event.origin !== paymentWebsiteOrigin()) {\n return;\n }\n\n if (event.data.type === 'orderPlaced') {\n const data = event.data.orderSuccessGridData as OrderSuccessGridData;\n sessionStorage.setItem(\n `placed_order_${data.data.orderId}`,\n JSON.stringify(data)\n );\n\n dispatch(resetCart());\n\n history.push(\n getPath(Routes.ShopOrderSuccess, {\n orderId: data.data.orderId?.toString() || 'unknown',\n })\n );\n } else if (event.data.type === 'cartUpdated') {\n dispatch(requestCartItems());\n } else if (event.data.type === 'goShopping') {\n history.push(Routes.Brands);\n } else if (event.data.type === 'logPurchase') {\n gaLogPurchase(event.data.gaData);\n } else if (event.data.type === 'logBeginCheckout') {\n gaLogBeginCheckout(event.data.cart);\n } else if (event.data.type === 'resetCart') {\n dispatch(resetCart());\n } else if (event.data.type === 'scrollToTop') {\n window.scrollTo(0, 0);\n } else if (event.data.type === 'pathChanged') {\n window.history.replaceState(null, '', `#${event.data.path}`);\n logPageView({\n pagePath: window.location.pathname + window.location.hash,\n pageLocation: window.location.href,\n });\n } else if (event.data.type === 'closeOnHold') {\n dispatch(resetCart());\n history.push(Routes.Shop);\n } else if (event.data.type === 'signIn') {\n sendToLoginPage();\n }\n }\n };\n\n // Add event listener on mount\n window.addEventListener('message', handleMessage);\n\n // Clean up event listener on unmount\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n });\n return <div></div>;\n};\n\nexport const OrderScreen = ({\n children,\n className,\n title,\n hideHeader,\n showSummary,\n showMobileSummary,\n noMaxWidth,\n showBrandCardTiles = false,\n embedView = false,\n}: React.PropsWithChildren<OrderScreenProps>) => {\n const location = useLocation();\n useScrollToTop();\n useEffect(() => {\n if (isInIframe()) {\n const pathSegments = location.pathname.split('/').filter(Boolean);\n const lastSegment = pathSegments[pathSegments.length - 1] || 'unknown';\n window.parent.postMessage(\n { type: 'pathChanged', path: lastSegment },\n mainWebsiteOrigin()\n );\n }\n }, [location]);\n\n const { cartInfo, cartInfoDetails } = useContext(OrderScreenContext);\n const orderBreadcrumbPath = getBreadcrumbPath(cartInfo, cartInfoDetails, enabledRules);\n\n const { shipToHome } = cartInfo;\n const isIframed = isInIframe();\n const shouldIframe = embedView && !isIframed;\n const iFrameSrc = getPaymentWindowUrl(window.location);\n\n showSummary = showSummary && isIframed;\n showMobileSummary = showMobileSummary && isIframed;\n hideHeader = hideHeader || !isIframed;\n showBrandCardTiles = showBrandCardTiles && !isIframed;\n\n return (\n <ShopScreen isEmbeddedView={isIframed}>\n <div className=\"relative flex justify-center\">\n <div\n className={classNames(\n `w-full {!noMaxWidth && 'max-w-screen-xl'} my-0`,\n isIframed ? 'py-4 px-6 lg:px-8 sm:py-20 xl:mx-24' : 'px-0 mx-0',\n className\n )}\n >\n {!hideHeader && (\n <div className=\"mb-4\">\n <div className=\"flex gap-3 \">\n <h1 className=\"text-brand-dark text-3xl sm:text-5xl mb-6 mt-4 lg:mt-0\">\n {title}\n </h1>\n </div>\n <Breadcrumb paths={orderBreadcrumbPath} />\n </div>\n )}\n <FincenFlowView />\n {shouldIframe ? <PaymentIframe src={iFrameSrc} /> : children}\n </div>\n {showSummary && (\n <div className={styles.orderDetails}>\n <div className=\"hidden lg:block\">\n <OrderSummaryDetails />\n </div>\n </div>\n )}\n {showMobileSummary && (\n <div className=\"lg:hidden\">\n <OrderSummaryDetailsMobile shipToHome={Boolean(shipToHome)} />\n </div>\n )}\n </div>\n {showBrandCardTiles && (\n <FeatureFlag flagKey=\"enable_cart_brand_card_tiles\">\n <BrandCardTiles />\n </FeatureFlag>\n )}\n <OrderScreenListener />\n </ShopScreen>\n );\n};\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { CartResponse } from 'common/api/e-comm/cart/lineitem/models/CartItems';\nimport {\n placeOrder,\n PlaceOrderRequest,\n PlaceOrderResponse,\n PlaceOrderResult,\n PaymentProviderResponse,\n ShippingOption,\n} from 'common/api/e-comm/orders/service';\nimport { CheckoutRequest } from 'common/types/CheckoutRequest';\nimport { ThreeDSResponse, ThreeDSTransactionError } from 'common/modules/3dsecure';\nimport { hasServerError } from 'common/api/utils/hasServerError';\nimport { useHomeDetails } from 'common/features/store/duck/home/utils/useHomeDetails';\nimport { OrderSource } from 'common/api/e-comm/models/OrderSource';\nimport { APIResponse, UnsuccessfulResponseWithBody } from 'common/api/models';\nimport { emptyHomeDetailsResponse } from 'common/api/crm/home/models/HomeDetailsResponse';\nimport { voidPayment } from 'common/api/e-comm/credit-cards/service';\nimport { PaymentType } from 'common/api/e-comm/payment-types';\nimport { isDefined } from 'common/utils';\nimport { setDefaultPaymentMethodThunk } from 'common/features/store/duck/account/duck';\nimport { useBlackBoxValues } from 'modules/fraud-force/fraudForce';\nimport { gaLogPurchase } from 'config/analytics';\nimport { isInIframe, mainWebsiteOrigin } from 'utils';\n\nconst isShipToHomeEnabled = () => true;\n\nconst hasResult =\n (result: PlaceOrderResult) =>\n (response: APIResponse<PlaceOrderResponse, PlaceOrderResponse>) => {\n if (response.data) {\n return response.data.result === result;\n }\n\n return Boolean(response.error.body && response.error.body.result === result);\n };\n\nconst isOrderOnHold = hasResult(PlaceOrderResult.Hold);\nconst exceedsFinCenLimit = hasResult(PlaceOrderResult.ExceedsFinCenLimit);\nconst hasUnavailableItems = hasResult(PlaceOrderResult.ContainsUnavailableItems);\nconst creditCardRejected = hasResult(PlaceOrderResult.CreditCardPaymentRejected);\n\ninterface PlaceOrderResponseWithActualEarnings extends PlaceOrderResponse {\n actualEarnings: number;\n}\n\nconst hasEarningsMismatchError = (\n response: APIResponse<PlaceOrderResponse, PlaceOrderResponse>\n): response is UnsuccessfulResponseWithBody<PlaceOrderResponseWithActualEarnings> => {\n return hasResult(PlaceOrderResult.EarningsMismatch)(response);\n};\n\nconst checkoutServerErrorConfig = {\n title: 'Transaction Could Not Be Completed',\n message: 'There was an error from the card issuer. Please try again later.',\n};\n\nexport interface useSubmitOrderProps {\n openLoader: () => void;\n closeLoader: () => void;\n clientVersion: string;\n report: (msg: { title?: string; message?: string }) => void;\n backToCart: () => void;\n onHold: () => void;\n onSuccess: () => void;\n onCreditCardError: () => void;\n doFinCENAlert: () => void;\n doEarningsMismatchAlert: (earnings: number) => Promise<boolean>;\n onUnavailableItems: () => void;\n shouldUpdateDefaultPayment: boolean;\n shippingMethod?: ShippingOption;\n cartTotal: number;\n}\n\nexport const useSubmitOrder = (params: useSubmitOrderProps) => {\n const {\n openLoader,\n closeLoader,\n clientVersion = '',\n report,\n backToCart,\n onCreditCardError,\n doFinCENAlert,\n doEarningsMismatchAlert,\n onUnavailableItems,\n shouldUpdateDefaultPayment,\n shippingMethod,\n cartTotal,\n } = params;\n\n const dispatch = useDispatch<any>();\n\n const doSetPaymentMethodAsDefault = useCallback(\n (values: CheckoutRequest, creditCardId: number | null) => {\n const { paymentMethod } = values;\n\n if (!isDefined(paymentMethod)) {\n return;\n }\n\n if (paymentMethod.paymentType === PaymentType.CreditCard) {\n if (!values.useNewCreditCard && !values.useNewDebitCard) {\n return dispatch(setDefaultPaymentMethodThunk(paymentMethod));\n }\n\n if (!values.newCreditCard.save || !isDefined(creditCardId)) {\n return;\n }\n\n return dispatch(\n setDefaultPaymentMethodThunk({\n ...paymentMethod,\n creditCardId,\n })\n );\n }\n\n return dispatch(setDefaultPaymentMethodThunk(paymentMethod));\n },\n [dispatch]\n );\n\n const homeDetails = useHomeDetails() || emptyHomeDetailsResponse;\n const { retrieveBlackBox } = useBlackBoxValues();\n\n // eslint-disable-next-line complexity\n const submitOrder = useCallback(\n async (\n _cart: CartResponse,\n values: CheckoutRequest,\n transactionId: string | null,\n paymentProviderResponse: PaymentProviderResponse | null,\n payment3DSecureResponse: ThreeDSResponse | ThreeDSTransactionError | null\n ): Promise<APIResponse<PlaceOrderResponse, PlaceOrderResponse> | void> => {\n if (!values.paymentMethod) {\n return;\n }\n\n // const total = getCartTotal({ paymentMethod: values.paymentMethod, shippingMethod });\n const bbValues = await retrieveBlackBox();\n const { firstName, lastName, email } = homeDetails.profile;\n const placeOrderApiVersion = isShipToHomeEnabled() ? '2' : '1.1';\n const { savePaymentDetails } = values;\n\n // ^ https://glscrip.atlassian.net/browse/S30-2559?focusedCommentId=49994&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-49994\n // placeOrder v2 assumes that the order's billing method and shipping information have both\n // been stored using the /orders/billing and /orders/shipping APIs (read: it is NOT backwards compatible)\n const requestBody: PlaceOrderRequest = {\n blackBoxValue: bbValues.blackBoxValue || '',\n secondaryBlackBoxValue: bbValues.secondaryBlackBoxValue || '',\n paymentProviderResponse,\n payment3DSecureResponse,\n cartId: _cart.id,\n expectedEarnings: _cart.earnings,\n paymentMethod: values.paymentMethod,\n orderSource: OrderSource.Web,\n clientVersion,\n firstName,\n lastName,\n email,\n savePaymentDetails,\n };\n\n const response = await placeOrder(requestBody, placeOrderApiVersion);\n\n // TODO: Log error into AppInsights\n // if (response.error && transactionId) {\n // appInsights.trackException({\n // exception: new PlaceOrderError('A new credit card was charged, but the order failed to be placed'),\n // properties: {\n // userId: homeDetails.profile.userId,\n // transactionId,\n // requestBody,\n // responseBody: response.error.body,\n // responseStatus: response.error.response?.status,\n // },\n // });\n // appInsights.flush();\n // }\n\n await closeLoader();\n\n if (hasUnavailableItems(response)) {\n await report({\n title: 'Some items in your cart are unavailable.',\n });\n\n onUnavailableItems();\n return;\n }\n\n const isOnHold = isOrderOnHold(response);\n const hasEarningsMismatch = hasEarningsMismatchError(response);\n\n if (!isOnHold && !hasEarningsMismatch && response.error) {\n if (creditCardRejected(response)) {\n return onCreditCardError();\n } else if (exceedsFinCenLimit(response)) {\n return doFinCENAlert();\n } else if (values.paymentMethod.paymentType === PaymentType.CreditCard) {\n if (transactionId) {\n await voidPayment(transactionId);\n }\n\n if (hasServerError(response)) {\n return report(checkoutServerErrorConfig);\n }\n }\n\n return;\n }\n\n if (hasEarningsMismatchError(response)) {\n const actualEarnings = response.error.body.actualEarnings;\n\n const shouldContinue = await doEarningsMismatchAlert(actualEarnings);\n\n if (!shouldContinue) {\n if (transactionId) {\n await openLoader();\n await voidPayment(transactionId);\n await closeLoader();\n }\n\n return backToCart();\n }\n\n await openLoader();\n\n return submitOrder(\n { ..._cart, earnings: actualEarnings },\n values,\n transactionId,\n paymentProviderResponse,\n payment3DSecureResponse\n );\n }\n\n if (shouldUpdateDefaultPayment) {\n doSetPaymentMethodAsDefault(\n values,\n response.data ? response.data.newCreditCardId : null\n );\n }\n\n if (response.data) {\n const gaData = {\n cart: _cart,\n total: cartTotal,\n shippingCost: shippingMethod?.cost,\n orderId: response.data.orderId ? String(response.data.orderId) : '',\n isBuyNow: false,\n };\n if (isInIframe()) {\n window.parent.postMessage({ type: 'logPurchase', gaData }, mainWebsiteOrigin());\n } else {\n gaLogPurchase(gaData);\n }\n }\n\n return response;\n },\n [\n homeDetails.profile,\n shouldUpdateDefaultPayment,\n onUnavailableItems,\n onCreditCardError,\n backToCart,\n doSetPaymentMethodAsDefault,\n clientVersion,\n closeLoader,\n doEarningsMismatchAlert,\n doFinCENAlert,\n openLoader,\n report,\n retrieveBlackBox,\n shippingMethod,\n cartTotal,\n ]\n );\n\n return { submitOrder };\n};\n","/* eslint-disable camelcase */\nimport { useCallback } from 'react';\n\nimport _round from 'lodash/round';\nimport { CheckoutRequest } from 'common/types/CheckoutRequest';\nimport { emptyFamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\nimport { useHomeDetails } from 'common/features/store/duck/home/utils/useHomeDetails';\nimport { HomeDetailsResponse } from 'common/api/crm/home/models/HomeDetailsResponse';\nimport { CreditCardTransactionTokenResponse } from 'common/api/e-comm/credit-cards/service';\nimport { createAPIError } from 'common/api/utils/createAPIError';\nimport { isDefined, noop } from 'common/utils';\nimport { ThreeDSResponse, ThreeDSTransactionError } from 'common/modules/3dsecure';\nimport {\n ConvergeCreditCardRequestBody,\n SuccessfulConvergeResponse,\n UnsuccessfulConvergeResponse\n} from 'common/api/e-comm/models/Converge';\n\nexport enum ConvergeResponseType {\n Approval = 'CONVERGE_APPROVAL',\n Declined = 'CONVERGE_DECLINED',\n Error = 'CONVERGE_ERROR',\n Unknown = 'CONVERGE_UNKNOWN',\n ThreeDSecureResult = 'THREEDS_RESULT',\n ThreeDSecureError = 'THREEDS_ERROR',\n ThreeDSecureUnauthenticated = 'THREEDS_UNAUTHENTICATED',\n ThreeDSecureAuthenticated = 'THREEDS_AUTHENTICATED',\n ThreeDSecureChallengeStart = 'THREEDS_CHALLENGE_START',\n ThreeDSecureChallengeEnd = 'THREEDS_CHALLENGE_END',\n}\n\nexport type ErrorMessage = { type: 'ERROR', payload: string };\n\nexport type ConvergeErrorMessage = {\n type: ConvergeResponseType.Error;\n payload: UnsuccessfulConvergeResponse;\n};\n\nexport type ConvergeUnknownMessage = {\n type: ConvergeResponseType.Unknown;\n payload: unknown;\n};\n\nexport type ConvergeApprovalMessage = {\n type: ConvergeResponseType.Approval;\n payload: SuccessfulConvergeResponse;\n};\n\nexport type ConvergeDeclinedMessage = {\n type: ConvergeResponseType.Declined;\n payload: SuccessfulConvergeResponse | UnsuccessfulConvergeResponse;\n};\n\nexport type ThreeDSecureResultMessage = {\n type: ConvergeResponseType.ThreeDSecureResult;\n payload: ThreeDSResponse | ThreeDSTransactionError;\n};\n\nexport type ThreeDSecureErrorMessage = {\n type: ConvergeResponseType.ThreeDSecureError | ConvergeResponseType.ThreeDSecureUnauthenticated;\n payload: string;\n};\n\nexport type ThreeDSecureAuthenticatedMessage = {\n type: ConvergeResponseType.ThreeDSecureAuthenticated;\n payload: string;\n};\n\nexport type ThreeDSecureChallengeMessage = {\n type: ConvergeResponseType.ThreeDSecureChallengeStart | ConvergeResponseType.ThreeDSecureChallengeEnd;\n payload: undefined;\n};\n\nexport type ThreeDSecureMessage =\n ThreeDSecureErrorMessage | ThreeDSecureChallengeMessage | ThreeDSecureAuthenticatedMessage |\n ThreeDSecureResultMessage;\n\nexport type CreditCardIncomingMessage =\n ErrorMessage | ConvergeErrorMessage | ConvergeUnknownMessage |\n ConvergeDeclinedMessage | ConvergeApprovalMessage | ThreeDSecureMessage;\n\nexport type CreditCardOutgoingMessage = {\n type: 'PAY';\n payload: {\n transactionToken3DSecure?: string;\n data: ConvergeCreditCardRequestBody;\n };\n};\n\nexport interface CreateCreditCardRequestOptions {\n total: number;\n cartId: string;\n cartReferenceId: number;\n homeDetails: HomeDetailsResponse;\n request: CheckoutRequest;\n customerId: number;\n clientIpAddress: string | null;\n token: string | null;\n}\n\nconst createCreditCardRequest = (options: CreateCreditCardRequestOptions): ConvergeCreditCardRequestBody => {\n const { cartId, homeDetails, request, token, total, clientIpAddress, customerId, cartReferenceId } = options;\n const { profile } = homeDetails;\n const address = request.newCreditCard.address || emptyFamilyAddress;\n const { newCreditCard } = request;\n\n return {\n ssl_transaction_type: 'ccsale',\n ssl_txn_auth_token: token || '',\n ssl_cvv2cvc2: newCreditCard.securityCode,\n ssl_cvv2cvc2_indicator: 1,\n ssl_add_token: newCreditCard.save ? 'Y' : 'N',\n ssl_get_token: newCreditCard.save ? 'Y' : 'N',\n ssl_vendor_id: 'sc100046',\n ssl_email: profile.email,\n ssl_avs_address: address.address1,\n ssl_city: address.city,\n ssl_state: address.state,\n ssl_avs_zip: address.zipCode.split('-')[0], // Converge throws a cryptic error if you send a zip with the +4 digits\n ssl_description: 'RaiseRight',\n ssl_first_name: profile.firstName,\n ssl_last_name: profile.lastName,\n cardholder_name: newCreditCard.name,\n ssl_card_number: newCreditCard.cardNumber,\n ssl_exp_date: newCreditCard.expirationDate.replace(/\\//, ''),\n ssl_amount: _round(total, 2),\n ssl_customer_id: customerId,\n ssl_invoice_number: cartReferenceId,\n ssl_merchant_txn_id: cartId,\n ssl_cardholder_ip: clientIpAddress || '',\n };\n};\n\nexport interface PayWithNewCreditCardCallbacks {\n onThreeDSecureChallengeStart: () => void;\n onThreeDSecureChallengeEnd: () => void;\n onThreeDSecureAuthenticated: (token: string) => void;\n onThreeDSecureResult: (threeDSecureResponse: ThreeDSResponse | ThreeDSTransactionError) => void;\n}\n\nexport interface PayWithNewCreditCardOptions extends CreditCardTransactionTokenResponse {\n total: number;\n cartId: string;\n request: CheckoutRequest;\n callbacks: PayWithNewCreditCardCallbacks;\n transactionToken3DSecure?: string;\n}\n\nexport const useCreditCard = () => {\n const homeDetails = useHomeDetails();\n\n const payWithNewCreditCard = useCallback(async (options: PayWithNewCreditCardOptions) => {\n if (!homeDetails) { return { error: createAPIError<null>(null, new Error('HomeDetailsResponse required')) }; }\n\n const { callbacks, cartId, cartReferenceId, transactionToken3DSecure, ...rest } = options;\n\n if (!isDefined(rest.token)) { return { error: createAPIError<null>(null, new Error('Token required')) }; }\n\n const payload = {\n transactionToken3DSecure,\n data: createCreditCardRequest({\n ...rest,\n homeDetails,\n cartReferenceId,\n cartId,\n }),\n };\n\n const {\n onThreeDSecureChallengeStart,\n onThreeDSecureChallengeEnd,\n onThreeDSecureAuthenticated,\n onThreeDSecureResult = noop,\n } = callbacks;\n\n // eslint-disable-next-line complexity\n return await new Promise((resolve) => {\n RR.checkout.payWithCreditCard(payload, (type) => (payload: unknown) => {\n switch (type) {\n case ConvergeResponseType.ThreeDSecureChallengeStart:\n onThreeDSecureChallengeStart();\n break;\n case ConvergeResponseType.ThreeDSecureChallengeEnd:\n onThreeDSecureChallengeEnd();\n break;\n case ConvergeResponseType.ThreeDSecureAuthenticated:\n onThreeDSecureAuthenticated(payload as string);\n break;\n case ConvergeResponseType.ThreeDSecureResult:\n onThreeDSecureResult(payload as ThreeDSResponse);\n break;\n case ConvergeResponseType.Approval:\n case ConvergeResponseType.Declined:\n case ConvergeResponseType.Error:\n case ConvergeResponseType.Unknown:\n case ConvergeResponseType.ThreeDSecureError:\n case ConvergeResponseType.ThreeDSecureUnauthenticated:\n resolve({ data: { type, payload } });\n break;\n }\n });\n });\n }, [homeDetails]);\n\n return {\n payWithNewCreditCard,\n };\n};\n\n","import {\n required,\n minLength,\n maxLength,\n isWithoutEmojis,\n isAmexCard,\n isFutureExpDateDate,\n} from 'common/modules/form-validation/validation';\nimport {\n withMessage,\n combineValidators,\n combineValidationFns,\n} from 'common/modules/form-validation';\nimport { emojiMessage } from 'common/modules/form-validation/validators';\nimport { CreditCardType } from 'common/api/e-comm/models/CreditCard';\n\nexport const nameValidator = combineValidators(\n withMessage('Name on Card is required.')(required),\n withMessage(emojiMessage)(isWithoutEmojis)\n);\n\nexport const creditCardRegex: Record<CreditCardType, RegExp> = {\n [CreditCardType.Visa]: /^4[0-9]{12}(?:[0-9]{3})?$/,\n [CreditCardType.Mastercard]:\n /^5[1-5][0-9]{14}$|^2(?:2(?:2[1-9]|[3-9][0-9])|[3-6][0-9][0-9]|7(?:[01][0-9]|20))[0-9]{12}$/,\n [CreditCardType.Discover]:\n /^65[4-9][0-9]{13}|64[4-9][0-9]{13}|6011[0-9]{12}|(622(?:12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])[0-9]{10})$/,\n};\n\nexport const getCreditCardTypeFromNumber = (value: string) => {\n const cardNumber = value.replace(/ /g, '');\n const entry = Object.entries(creditCardRegex).find(([, regex]) => cardNumber.match(regex));\n if (!entry) {\n return null;\n }\n const creditCardType = entry[0] as CreditCardType;\n return creditCardType;\n};\n\nconst isCardNumberValid = (value: string) => {\n const creditCardType = getCreditCardTypeFromNumber(value);\n return creditCardType != null;\n};\n\nexport const cardNumberValidator = combineValidators(\n withMessage('Card Number is required.')(required),\n withMessage('We do not accept American Express.')(isAmexCard),\n withMessage('Please enter a valid card number.')(isCardNumberValid)\n);\n\nexport const cloCardNumberValidator = (value: string) => {\n if (!required(value)) {\n return 'Card Number is required.';\n }\n if (!isCardNumberValid(value)) {\n const creditCardRegexes = Object.values(creditCardRegex);\n const amexRegex = /^3[47][0-9]{13}$/;\n creditCardRegexes.push(amexRegex);\n\n for (let i = 0; i < creditCardRegexes.length; ++i) {\n if (value.match(creditCardRegexes[i])) {\n return undefined;\n }\n }\n return 'Please enter a valid card number.';\n }\n};\n\nexport const maskedCardNumberValidator = combineValidators(\n withMessage('Card Number is required.')(required),\n withMessage('We do not accept American Express.')(isAmexCard),\n withMessage('Please enter a valid card number.')(minLength(19)),\n withMessage('Please enter a valid card number.')(isCardNumberValid)\n);\n\nexport const expirationDateValidator = combineValidators(\n withMessage('Exp. Date is required.')(required),\n withMessage('Please enter a valid Exp. Date: MM/YY.')(minLength(5)),\n withMessage('Please enter a valid Exp. Date: MM/YY.')(isFutureExpDateDate)\n);\n\nexport const cvcValidator = combineValidators(\n withMessage('CVV is required.')(required),\n withMessage('Please enter a valid 3 digits security code.')(\n combineValidationFns(minLength(3), maxLength(3))\n )\n);\n\nexport const securityCodeValidator = combineValidators(\n withMessage('CVV is required.')(required),\n withMessage('Invalid CVV.')(combineValidationFns(minLength(3), maxLength(4)))\n);\n\nexport const amexCardValidator = withMessage('We do not accept American Express.')(isAmexCard);\n","import { CartResponse } from 'common/api/e-comm/cart/lineitem/models/CartItems';\nimport { sumBy } from 'common/utils';\nimport { MAX_SHIP_TO_HOME_CARD_QUANTITY } from 'config';\n\nexport const isOrderExceedsMaxCards = (cart: CartResponse) => {\n const shipToHomeItems = cart.lineItems.filter((item) => item.product.isShipToHomeEligible);\n const shipToHomeQuantity = sumBy(shipToHomeItems, (item) => item.quantity);\n return shipToHomeQuantity > MAX_SHIP_TO_HOME_CARD_QUANTITY;\n};\n","import React, { useCallback, useContext, useMemo, useRef } from 'react';\nimport { useHistory } from 'react-router';\nimport _round from 'lodash/round';\n\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport { Routes } from '../../../routes';\nimport { useSubmitOrder } from '../../cart/utils/useSubmitOrder';\nimport { useAlert, AlertConfig } from '../../../modules/alerts';\n\nimport { getPaymentMethod } from './useCartPayment';\n\nimport {\n ConvergeResponseType,\n CreditCardIncomingMessage,\n PayWithNewCreditCardCallbacks,\n PayWithNewCreditCardOptions,\n useCreditCard,\n} from './useCart';\n\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { CheckoutRequest, emptyCheckoutRequest } from 'common/types/CheckoutRequest';\nimport {\n PaymentProviderResponse,\n setShippingOptions,\n TokenType,\n} from 'common/api/e-comm/orders/service';\nimport { useHomeDetails } from 'common/features/store/duck/home/utils/useHomeDetails';\nimport { useShippingMethods } from 'common/hooks/useShippingMethods';\nimport { isDefined } from 'common/utils';\nimport {\n get3DSecureToken,\n getCreditCardTransactionToken,\n logCreditCardFailure,\n} from 'common/api/e-comm/credit-cards/service';\nimport { getECommFeatureFlagsThunk } from 'common/features/store/duck/feature-flags/duck';\nimport { ReactComponent as WarningTriangleFilled } from '../../../media/images/warning-triangle-filled.svg';\n\nimport { useDispatch } from 'react-redux';\n\nimport { closeLoader, openLoader, LoadingOverlay } from 'components/loading-overlay/LoadingOverlay';\nimport { ThreeDSResponse, ThreeDSTransactionError } from 'common/modules/3dsecure';\nimport { hasServerError } from 'common/api/utils/hasServerError';\nimport { getCreditCardTypeFromNumber } from 'common/utils/creditCardValidators';\nimport { APIResponse, SuccessfulResponse } from 'common/api/models';\nimport { SuccessfulConvergeResponse } from 'common/api/e-comm/models/Converge';\nimport { PaymentType } from 'common/api/e-comm/payment-types';\nimport { SERVICE_UNAVAILABLE_MESSAGE, MAX_SHIP_TO_HOME_CARD_QUANTITY } from 'config';\nimport { CreditCardType } from 'common/api/e-comm/models/CreditCard';\nimport { validateCart } from 'common/api/e-comm/cart';\nimport { FincenContext } from '../components/fincen/context';\nimport { StatusCode } from 'common/api/config';\nimport { isOrderExceedsMaxCards } from 'features/cart/utils/cartCheck';\n\ninterface PartialPayWithNewCreditCardOptions\n extends Omit<PayWithNewCreditCardOptions, 'callbacks'> {\n callbacks: Omit<\n PayWithNewCreditCardCallbacks,\n 'onThreeDSecureAuthenticated' | 'onThreeDSecureResult'\n >;\n}\n\nexport const creditCardErrorConfig: AlertConfig = {\n title: 'Service Temporarily Unavailable',\n message: SERVICE_UNAVAILABLE_MESSAGE,\n};\n\nexport const creditCardPaymentDeclinedErrorConfig: AlertConfig = {\n title: 'Unable to Process Payment',\n message:\n 'Sorry, we were unable to process this payment method. Please try again, or try a different form of payment.',\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isSuccessfulConvergePayload = (payload: any): payload is SuccessfulConvergeResponse =>\n isDefined(payload.ssl_card_number);\n\nconst getLastFourCCDigits = (message: SuccessfulResponse<CreditCardIncomingMessage>) => {\n if (message.data.type !== ConvergeResponseType.Declined) {\n return;\n }\n\n return isSuccessfulConvergePayload(message.data.payload)\n ? message.data.payload.ssl_card_number.slice(-4)\n : undefined;\n};\n\nexport const useCartPlaceOrder = ({\n onThreeDSecureChallengeStart,\n onThreeDSecureChallengeEnd,\n}: {\n onThreeDSecureChallengeStart: () => void;\n onThreeDSecureChallengeEnd: () => void;\n}) => {\n const { cart } = useRootSelector((s) => s.store.cart);\n const { cartInfo, cartInfoDetails } = useContext(OrderScreenContext);\n const { payment } = cartInfoDetails;\n const homeDetails = useHomeDetails();\n const { loadShippingMethods } = useShippingMethods();\n const alert = useAlert();\n const ref = useRef<LoadingOverlay>(null);\n const fincen = useContext(FincenContext);\n\n const { payWithNewCreditCard } = useCreditCard();\n\n const history = useHistory();\n\n const goToSuccess = () => history.push(Routes.ShopOrderSuccess, cartInfo);\n\n const showPaymentDeclinedAlert = useCallback(() => {\n alert({\n title: ' ',\n message: (\n <div className=\"w-full text-grey-1\">\n <div className=\"flex justify-center p-4\">\n <WarningTriangleFilled />\n </div>\n <div className=\"text-brand-dark text-center text-3xl font-semibold mb-4\">\n {creditCardPaymentDeclinedErrorConfig.title}\n </div>\n <div className=\"text-center text-lg\">\n {creditCardPaymentDeclinedErrorConfig.message}\n </div>\n </div>\n ),\n largeAlert: true,\n showCloseButton: true,\n buttons: [\n {\n text: 'Close',\n secondary: true,\n className: 'mb-4',\n },\n ],\n });\n }, [alert]);\n\n const { submitOrder } = useSubmitOrder({\n backToCart: () => history.goBack(),\n clientVersion: '2.0.0',\n openLoader: () => openLoader(ref.current),\n closeLoader: () => closeLoader(ref.current),\n doEarningsMismatchAlert: () => Promise.resolve(true),\n doFinCENAlert: () => {\n // We should show a custom message to the user regarding fincen-limit-exceed\n // TODO (FEC-1098): Check which fincen-limit-exceed message to show here.\n alert(creditCardErrorConfig);\n },\n onCreditCardError: () => {\n showPaymentDeclinedAlert();\n },\n onHold: goToSuccess,\n onSuccess: goToSuccess,\n onUnavailableItems: () => {},\n report: ({ title, message }) => alert({ title, message }),\n shippingMethod: cartInfoDetails.shipping.selectedShipping,\n shouldUpdateDefaultPayment: cartInfo.setPaymentMethodAsDefault,\n cartTotal: cartInfoDetails.total,\n });\n\n const threeDSecureCallbacks = useMemo(\n () => ({\n onThreeDSecureChallengeStart: async () => {\n await closeLoader(ref.current);\n onThreeDSecureChallengeStart();\n },\n onThreeDSecureChallengeEnd: async () => {\n onThreeDSecureChallengeEnd();\n await openLoader(ref.current);\n },\n }),\n [onThreeDSecureChallengeStart, onThreeDSecureChallengeEnd]\n );\n\n const dispatch = useDispatch<any>();\n const getPayWithNewCreditCardOptions = useCallback(\n async (\n values: CheckoutRequest,\n total: number\n ): Promise<PartialPayWithNewCreditCardOptions> => {\n if (!cart) {\n return Promise.reject();\n }\n\n const [tokenResponse, featureFlagsResponse] = await Promise.all([\n getCreditCardTransactionToken(total),\n getECommFeatureFlagsThunk()(dispatch),\n ]);\n\n if (tokenResponse.error) {\n return Promise.reject(tokenResponse.error);\n }\n\n let transactionToken3DSecure = '';\n\n if (featureFlagsResponse.data && featureFlagsResponse.data.enable3DSecure) {\n transactionToken3DSecure = ((await get3DSecureToken()).data || { token: '' }).token;\n }\n\n return {\n ...tokenResponse.data,\n total,\n transactionToken3DSecure,\n callbacks: threeDSecureCallbacks,\n cartId: cart.id,\n request: values,\n };\n },\n [cart, threeDSecureCallbacks, dispatch]\n );\n\n /* eslint-disable complexity */\n const placeOrder = async ({\n onCreditCardError,\n }: {\n onCreditCardError?: (cardNumber: string | undefined) => void;\n }) => {\n if (!cart || !cartInfo || !cartInfoDetails || !homeDetails) {\n return;\n }\n\n // Run Fincen validation one more time\n const result = await validateCart();\n if (result.response?.status === StatusCode.UnprocessableEntity) {\n fincen.processValidateCartResult(result);\n return;\n }\n\n // Run Cart Validations\n if (cartInfoDetails.shipToHomeIfPossible) {\n if (cart && isOrderExceedsMaxCards(cart)) {\n alert({\n title: ' ',\n message: (\n <div className=\"w-full text-grey-1\">\n <div className=\"flex justify-center p-4\">\n <WarningTriangleFilled />\n </div>\n <div className=\"text-brand-dark text-center text-3xl font-semibold mb-4\">\n {MAX_SHIP_TO_HOME_CARD_QUANTITY} Cards Max For Ship to Home Orders\n </div>\n <div className=\"text-center text-lg\">\n Ship to Home orders have a maximum of{' '}\n {MAX_SHIP_TO_HOME_CARD_QUANTITY} cards. <br />\n In order to Ship to Home additional cards, you will need to place a\n separate order.\n </div>\n </div>\n ),\n largeAlert: true,\n showCloseButton: true,\n buttons: [\n {\n text: 'Close',\n secondary: true,\n className: 'mb-4',\n },\n ],\n });\n return;\n }\n }\n\n const paymentMethod =\n cartInfo.paymentMethodId && getPaymentMethod(cartInfo.paymentMethodId);\n const cartId = cart.id;\n\n const selectedAddress =\n cartInfoDetails.shipping.selectedAddress ||\n cartInfoDetails.shipping.defaultAddress ||\n undefined;\n\n if (\n (cartInfoDetails.shipToHomeIfPossible && !selectedAddress) ||\n !payment.payment ||\n !cart ||\n !paymentMethod\n ) {\n return;\n }\n\n if (paymentMethod) {\n if (!cartInfoDetails.shipToHomeIfPossible) {\n const response = await loadShippingMethods({\n cartId,\n customerFirstName: homeDetails.profile.firstName,\n customerLastName: homeDetails.profile.lastName,\n customerEmail: homeDetails.profile.email,\n shipToHomeLineItemIds: undefined,\n shippingAddress: undefined,\n });\n\n if (!response.data) {\n return;\n }\n\n const shipToCoordinatorSelection = {\n consignmentId: response.data.shipToCoordinatorConsignment.id,\n shippingOptionId:\n response.data.shipToCoordinatorConsignment.shippingOptions[0].id,\n };\n\n await setShippingOptions({\n cartId,\n shipToCoordinatorSelection,\n shipToHomeSelection: null,\n paymentMethod,\n });\n } else {\n const response = cartInfoDetails.shipping.shippingMethodsResponse;\n\n if (!response) {\n return;\n }\n\n const shipToHomeSelection = {\n consignmentId: response.shipToHomeConsignment.id,\n shippingOptionId: cartInfo.shippingMethodId,\n };\n\n const shipToCoordinatorSelection = response.shipToCoordinatorConsignment\n ? {\n consignmentId: response.shipToCoordinatorConsignment.id,\n shippingOptionId:\n response.shipToCoordinatorConsignment.shippingOptions[0].id,\n }\n : null;\n\n await setShippingOptions({\n cartId,\n shipToCoordinatorSelection,\n shipToHomeSelection,\n paymentMethod,\n });\n }\n }\n\n let transactionId: string | null = null;\n let paymentProviderResponse: PaymentProviderResponse | null = null;\n let payment3DSecureResponse: ThreeDSResponse | ThreeDSTransactionError | null = null;\n\n const isNewCreditCard =\n cartInfo.paymentMethodId?.paymentType === PaymentType.CreditCard &&\n (!cartInfo.paymentMethodId.id || cartInfo.paymentMethodId.id === 'new-credit-card');\n\n const isNewDebitCard =\n cartInfo.paymentMethodId?.paymentType === PaymentType.CreditCard &&\n (!cartInfo.paymentMethodId.id || cartInfo.paymentMethodId.id === 'new-debit-card');\n\n if (isNewCreditCard || isNewDebitCard) {\n if (!cartInfo.newCreditCard && isNewCreditCard) {\n alert({\n title: 'No New Credit Card',\n message: 'There is no info about this new credit card.',\n });\n return;\n }\n\n if (!cartInfo.newDebitCard && isNewDebitCard) {\n alert({\n title: 'No New Debit Card',\n message: 'There is no info about this new debit card.',\n });\n return;\n }\n\n const total = cartInfoDetails.total;\n\n if (\n !isDefined(total) ||\n (isNewCreditCard && !isDefined(cartInfo.newCreditCard?.zipCode)) ||\n (isNewDebitCard && !isDefined(cartInfo.newDebitCard?.zipCode))\n ) {\n alert({\n title: 'Missing Zip Code',\n message: `The zip code is missing for this ${\n isNewCreditCard ? 'credit' : 'debit'\n } card.`,\n });\n return;\n }\n\n let payWithNewCreditCardOptions;\n\n try {\n if (isNewCreditCard && cartInfo.newCreditCard) {\n payWithNewCreditCardOptions = await getPayWithNewCreditCardOptions(\n {\n paymentMethod,\n newCreditCard: cartInfo.newCreditCard,\n useNewCreditCard: true,\n savePaymentDetails: !!cartInfo.newCreditCard?.save,\n shouldUpdateDefaultPayment: cartInfo.setPaymentMethodAsDefault,\n newDebitCard: emptyCheckoutRequest.newDebitCard,\n useNewDebitCard: false,\n },\n total\n );\n } else if (isNewDebitCard && cartInfo.newDebitCard) {\n payWithNewCreditCardOptions = await getPayWithNewCreditCardOptions(\n {\n paymentMethod,\n newCreditCard: cartInfo.newDebitCard,\n useNewCreditCard: false,\n savePaymentDetails: !!cartInfo.newDebitCard?.save,\n shouldUpdateDefaultPayment: cartInfo.setPaymentMethodAsDefault,\n newDebitCard: cartInfo.newDebitCard,\n useNewDebitCard: true,\n },\n total\n );\n } else {\n return;\n }\n } catch (e) {\n if (hasServerError(e as APIResponse<unknown, unknown>)) {\n alert(creditCardErrorConfig);\n }\n return;\n }\n\n let transactionToken3DSecure = null;\n\n const message = (await payWithNewCreditCard({\n ...payWithNewCreditCardOptions,\n callbacks: {\n ...payWithNewCreditCardOptions.callbacks,\n onThreeDSecureResult: (\n threeDSResult: ThreeDSResponse | ThreeDSTransactionError | null\n ) => {\n payment3DSecureResponse = threeDSResult;\n },\n onThreeDSecureAuthenticated: (token: string) => {\n transactionToken3DSecure = token;\n },\n },\n })) as { data: CreditCardIncomingMessage };\n\n if (isNewCreditCard) {\n paymentProviderResponse = {\n transactionToken3DSecure,\n expectedChargeAmount: _round(total, 2),\n billingAddress:\n {\n zipCode: cartInfo.newCreditCard?.zipCode || '',\n } || null,\n cardToken: payWithNewCreditCardOptions.token,\n convergeResponse: JSON.stringify(message.data.payload),\n tokenType: cartInfo.newCreditCard?.save\n ? TokenType.NewRecurring\n : TokenType.NewSingleUse,\n };\n } else {\n paymentProviderResponse = {\n transactionToken3DSecure,\n expectedChargeAmount: _round(total, 2),\n billingAddress: {\n zipCode: cartInfo.newDebitCard?.zipCode || '',\n },\n cardToken: payWithNewCreditCardOptions.token,\n convergeResponse: JSON.stringify(message.data.payload),\n tokenType: cartInfo.newDebitCard?.save\n ? TokenType.NewRecurring\n : TokenType.NewSingleUse,\n };\n }\n\n if (message.data.type !== ConvergeResponseType.Approval) {\n if (payment3DSecureResponse) {\n let cardType = getCreditCardTypeFromNumber(\n cartInfo.newCreditCard?.cardNumber || ''\n );\n if (isNewDebitCard && cartInfo.newDebitCard?.cardNumber) {\n cardType = getCreditCardTypeFromNumber(cartInfo.newDebitCard.cardNumber);\n }\n logCreditCardFailure({\n cartId: cart.id,\n paymentProviderResponse,\n payment3DSecureResponse,\n cardType: cardType as CreditCardType,\n });\n }\n\n // NOTE: Do we want to show a specific error message for 3DS related errors?\n if (\n onCreditCardError &&\n (message.data.type === ConvergeResponseType.Declined ||\n message.data.type === ConvergeResponseType.ThreeDSecureUnauthenticated)\n ) {\n return onCreditCardError(getLastFourCCDigits(message));\n } else {\n showPaymentDeclinedAlert();\n }\n\n return;\n }\n\n // Elavon Succeeded!\n transactionId = message.data.payload.ssl_txn_id;\n }\n\n const request: CheckoutRequest = {\n newCreditCard: cartInfo.newCreditCard || emptyCheckoutRequest.newCreditCard,\n useNewCreditCard: cartInfo.paymentMethodId?.id === 'new-credit-card',\n useNewDebitCard: cartInfo.paymentMethodId?.id === 'new-debit-card',\n newDebitCard: cartInfo.newDebitCard || emptyCheckoutRequest.newDebitCard,\n shouldUpdateDefaultPayment: cartInfo.setPaymentMethodAsDefault,\n savePaymentDetails:\n cartInfo.paymentMethodId?.id === 'new-credit-card'\n ? !!cartInfo.newCreditCard?.save\n : !!cartInfo.newDebitCard?.save,\n paymentMethod,\n };\n\n return submitOrder(\n cart,\n request,\n transactionId,\n paymentProviderResponse,\n payment3DSecureResponse\n );\n };\n\n return { placeOrder };\n};\n","import React, { ReactNode, useContext, useEffect, useState, useRef } from 'react';\nimport classNames from 'classnames';\nimport Skeleton from 'react-loading-skeleton';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\n\nimport { OrderScreen } from '../OrderScreen';\nimport { OrderSummaryGrid } from '../components/summary/OrderSummaryGrid';\nimport { OrderSummaryOptions, showHeight } from '../components/summary/OrderSummaryOptions';\nimport { ActivityIndicator } from '../../../components/activity-indicator/ActivityIndicator';\nimport { useCartPlaceOrder } from '../utils/useCartPlaceOrder';\nimport { OrderSuccessGridData } from '../components/success/OrderSuccessGrid';\n\nimport { getPath, Routes } from 'routes';\nimport { EASE_IN_OUT_BACK } from 'styles/easing';\nimport { Btn } from 'components/btn/Btn';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { createStyles } from 'utils/createStyle';\nimport { resetCart } from 'common/features/store/duck/cart/duck';\nimport { LoadingOverlay, closeLoader, openLoader } from 'components/loading-overlay/LoadingOverlay';\nimport {\n OrderScreenContext,\n CheckoutFlowState,\n} from 'features/order-summary/screens/CheckoutScreen';\nimport { PlaceOrderResult } from 'common/api/e-comm/orders/service';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { putDefaultAddress } from 'common/api/crm/family/address';\nimport { PaymentIframe } from '../components/PaymentIframe';\nimport { isInIframe, mainWebsiteOrigin } from 'utils';\n\nconst styles = createStyles({\n area: [\n 'mb-2',\n {\n overflow: 'hidden',\n animationName: showHeight,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n});\n\nconst renderProcessingButton = (title: ReactNode) => {\n return (\n <div className=\"flex items-center justify-center py-2 font-bold text-lg text-brand-dark\">\n <span className=\"-ml-4 inline-block mr-2\">\n <ActivityIndicator width=\"20px\" />\n </span>\n <span>{title}...</span>\n </div>\n );\n};\n\nexport const OrderReviewScreenContent = () => {\n const { cart, cartAsyncState } = useRootSelector((s) => s.store.cart);\n const { cartInfo, setCartInfo, cartInfoDetails, checkoutFlowState } =\n useContext(OrderScreenContext);\n const ref = useRef<LoadingOverlay>(null);\n const disableCheckoutBtn = checkoutFlowState === CheckoutFlowState.DISABLED;\n\n const defaultOrg = useRootSelector((s) => {\n const homeDetails = s.store.home.homeDetails;\n\n if (homeDetails?.organizations && homeDetails?.defaultOrganization) {\n return homeDetails?.organizations[homeDetails?.defaultOrganization?.id];\n }\n });\n\n const canCheckout = Boolean(defaultOrg?.isActive && defaultOrg?.organization?.isActive);\n\n const { placeOrder } = useCartPlaceOrder({\n onThreeDSecureChallengeEnd: () => {\n closeLoader(ref.current);\n },\n onThreeDSecureChallengeStart: () => {\n openLoader(ref.current);\n },\n });\n const dispatch = useDispatch<any>();\n const history = useHistory();\n const [showOnHoldBanner, setShowOnHoldBanner] = useState<boolean>(false);\n\n // Does not allow the user to view the review page if they have not set their payment info\n useEffect(() => {\n if (!cartInfo.paymentMethodId) {\n history.replace(Routes.ShopOrderSummary);\n }\n }, [cartInfo.paymentMethodId, history]);\n\n const {\n shipping: { selectedShipping, isLoading: isLoadingShipping, shippingFee },\n payment: { paymentFee },\n total,\n } = cartInfoDetails;\n\n const { shipToHome } = cartInfo;\n\n const setShipToHome = (value: boolean) => {\n setCartInfo({\n ...cartInfo,\n shipToHome: value,\n });\n };\n\n const [isPlacingOrder, setIsPlacingOrder] = useState(false);\n\n const doPlaceOrder = async () => {\n try {\n setIsPlacingOrder(true);\n\n const response = await placeOrder({});\n let data: OrderSuccessGridData | undefined = undefined;\n if (response) {\n if (response.data && response.data.orderId) {\n if (cart) {\n data = {\n data: response.data,\n cart,\n shipToHome: Boolean(shipToHome),\n paymentFee,\n selectedShipping,\n total,\n shippingFee,\n };\n\n // updates the default shipping address\n if (cartInfo.setShippingAddressAsDefault && cartInfo.shippingToAddressId) {\n await putDefaultAddress(cartInfo.shippingToAddressId);\n }\n }\n\n if (response.data?.result === PlaceOrderResult.Hold) {\n setShowOnHoldBanner(true);\n return;\n }\n\n if (data) {\n window.parent.postMessage(\n { type: 'orderPlaced', orderSuccessGridData: data },\n mainWebsiteOrigin()\n );\n }\n dispatch(resetCart());\n }\n }\n } finally {\n setIsPlacingOrder(false);\n }\n };\n\n const renderPlaceOrderButton = () => {\n if (!isPlacingOrder) {\n return (\n <Btn\n className=\"cart_place_order_button w-full mt-4\"\n onClick={canCheckout ? doPlaceOrder : undefined}\n disabled={isLoadingShipping || disableCheckoutBtn || !canCheckout}\n >\n Place Order\n </Btn>\n );\n }\n\n return renderProcessingButton('Placing Order');\n };\n\n const cancelOrder = () => history.push(Routes.ShopOrderSummary, cartInfo);\n\n const onCloseOnHold = () => {\n dispatch(resetCart());\n\n if (isInIframe()) {\n window.parent.postMessage({ type: 'closeOnHold' }, mainWebsiteOrigin());\n } else {\n history.push(Routes.Shop);\n }\n };\n\n const renderOrderOptions = () => {\n return (\n <div className=\"hidden md:block\" style={{ width: '20%', minWidth: '18rem' }}>\n {cart && !cartAsyncState.loading && (\n <OrderSummaryOptions shipToHome={Boolean(shipToHome)} hidePayment={false}>\n <div className={classNames(styles.area, 'hidden md:block mt-5')}>\n {renderPlaceOrderButton()}\n <Btn\n isSecondary={true}\n className=\"cart_cancel_order_button w-full mt-4\"\n onClick={cancelOrder}\n >\n Cancel\n </Btn>\n </div>\n </OrderSummaryOptions>\n )}\n {cartAsyncState.loading && (\n <>\n <Skeleton height=\"10rem\" />\n </>\n )}\n </div>\n );\n };\n\n return (\n <>\n {showOnHoldBanner ? (\n <Modal\n title=\"Order Pending\"\n isOpen={showOnHoldBanner}\n showCloseButton={false}\n onClose={onCloseOnHold}\n titleStyles=\"text-error font-semibold sm:text-lg text-lg\"\n size={[ModalSize.CONTENT_WIDTH, ModalSize.MEDIUM]}\n >\n <p className=\"text-grey-1 text-sm\">\n This order is currently being reviewed and placed in a pending status.\n You’ll receive an order confirmation by email once it processes. Any\n subsequent orders will also be held until processed.\n </p>\n <button\n onClick={onCloseOnHold}\n className=\"ml-auto mr-auto w-2/3 rounded-full bg-brand text-white font-semibold text-lg py-2 mt-10\"\n >\n Back to RaiseRight.com\n </button>\n </Modal>\n ) : null}\n <div className=\"md:flex flex-row gap-4\">\n {cart && (\n <>\n <div className=\"w-full\">\n <OrderSummaryGrid\n cart={cart}\n loading={false}\n shipToHome={Boolean(shipToHome)}\n onShipToHomeChange={setShipToHome}\n hideButtons={true}\n summaryType=\"total\"\n hideEditQuantityButtons\n hideDeleteButton\n />\n </div>\n {renderOrderOptions()}\n <div\n className={classNames(\n styles.area,\n 'block md:hidden mt-5 w-full text-center'\n )}\n >\n <div className=\"inline-block max-w-xs\">\n {renderPlaceOrderButton()}\n <Btn\n isSecondary={true}\n className=\"cart_cancel_order_button w-full mt-4\"\n onClick={cancelOrder}\n >\n Cancel\n </Btn>\n </div>\n </div>\n </>\n )}\n </div>\n </>\n );\n};\n\nexport const OrderReviewScreen = () => {\n return (\n <OrderScreen\n title=\"Order Review\"\n orderStep=\"review\"\n showSummary={false}\n showMobileSummary={false}\n embedView={true}\n >\n <OrderReviewScreenContent />\n </OrderScreen>\n );\n};\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgEmptyCart(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 348,\n height: 343,\n viewBox: \"0 0 348 343\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#filter0_d_5551_89307)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M176.454 313C260.15 313 328 245.171 328 161.5C328 77.8289 260.15 10 176.454 10C92.7576 10 24.9082 77.8289 24.9082 161.5C24.9082 245.171 92.7576 313 176.454 313Z\",\n fill: \"#AEDAEA\"\n }), /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 176.454,\n cy: 161.505,\n rx: 133.139,\n ry: 133.099,\n fill: \"#E1F1F7\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.1309 142.629H103.625L124.435 280.8H223.693M235.661 293.738C235.661 297.19 234.29 300.501 231.848 302.942C229.407 305.382 226.095 306.754 222.642 306.754C219.189 306.754 215.878 305.382 213.436 302.942C210.995 300.501 209.623 297.19 209.623 293.738C209.63 290.291 211.004 286.987 213.445 284.552C215.886 282.117 219.194 280.749 222.642 280.749C224.36 280.732 226.065 281.055 227.658 281.7C229.25 282.345 230.7 283.299 231.922 284.506C233.144 285.714 234.115 287.151 234.779 288.736C235.443 290.32 235.786 292.021 235.789 293.738H235.661ZM137.454 293.738C137.454 297.19 136.082 300.501 133.641 302.942C131.199 305.382 127.888 306.754 124.435 306.754C122.724 306.757 121.03 306.423 119.449 305.77C117.868 305.117 116.431 304.158 115.221 302.949C114.012 301.74 113.053 300.304 112.4 298.723C111.747 297.142 111.412 295.449 111.416 293.738C111.416 292.03 111.753 290.339 112.407 288.762C113.062 287.184 114.021 285.751 115.231 284.544C116.44 283.338 117.875 282.381 119.455 281.73C121.034 281.079 122.727 280.745 124.435 280.749C127.883 280.749 131.191 282.117 133.632 284.552C136.073 286.987 137.447 290.291 137.454 293.738Z\",\n stroke: \"#143961\",\n strokeWidth: 3,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M100.755 222.845H71.1801M95.3474 195.738H65.7726H95.3474ZM98.0385 209.292H54.9316H98.0385Z\",\n stroke: \"#143961\",\n strokeWidth: 1.56,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.8031 127.638L51.1639 119.542L43.0654 115.904L51.1639 112.291L54.8031 104.195L58.4167 112.291L66.5152 115.904L58.4167 119.542L54.8031 127.638Z\",\n fill: \"#F15A29\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M37.4272 51.9593L32.0453 39.9177L20 34.5118L32.0453 29.1058L37.4272 17.0898L42.8347 29.1058L54.88 34.5118L42.8347 39.9177L37.4272 51.9593Z\",\n fill: \"#40B4E2\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M80.5851 94.6896L71.359 74.0907L50.7539 64.8417L71.359 55.6184L80.5851 35.0195L89.8369 55.6184L110.442 64.8417L89.8369 74.0907L80.5851 94.6896Z\",\n fill: \"#7E3F97\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M230.62 140.773L230.675 139.689C230.798 137.286 231.265 135.341 232.077 133.854C232.909 132.368 234.372 130.807 236.466 129.17L239.293 126.993C240.783 125.874 241.866 124.744 242.541 123.603C243.216 122.462 243.593 121.129 243.67 119.605C243.797 117.124 243.064 115.108 241.471 113.558C239.898 112.008 237.762 111.165 235.062 111.027C233.494 110.947 232.016 111.048 230.628 111.33C229.242 111.593 227.735 112.064 226.108 112.745L225.126 110.345C227.357 109.518 229.215 108.986 230.7 108.748C232.205 108.511 233.741 108.433 235.31 108.513C238.942 108.698 241.752 109.811 243.737 111.851C245.724 113.872 246.632 116.563 246.46 119.924C246.393 121.252 246.155 122.406 245.747 123.384C245.339 124.362 244.785 125.265 244.086 126.091C243.408 126.899 242.592 127.68 241.638 128.435C240.685 129.17 239.629 129.968 238.471 130.83C237.147 131.82 236.115 132.737 235.375 133.581C234.656 134.406 234.114 135.29 233.747 136.231C233.401 137.173 233.179 138.592 233.083 140.487L233.062 140.898L230.62 140.773ZM229.191 149.486C229.288 147.572 230.131 146.655 231.719 146.736C233.347 146.818 234.112 147.817 234.014 149.732C233.917 151.647 233.054 152.563 231.426 152.48C229.838 152.399 229.093 151.401 229.191 149.486Z\",\n fill: \"#005E9D\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M117.387 159.355H256.138L244.503 231.964L129.15 241.495L117.387 159.355Z\",\n fill: \"white\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M234.893 168.246L223.258 240.854M109.699 168.246H248.45L236.815 240.854L136.199 249.155L109.699 168.246Z\",\n stroke: \"#143961\",\n strokeWidth: 3,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.502 111.771L145.184 111.153C144.479 109.785 144.113 108.56 144.084 107.477C144.067 106.388 144.374 105.055 145.006 103.478L145.87 101.366C146.334 100.269 146.57 99.2964 146.577 98.4488C146.583 97.6011 146.363 96.7434 145.917 95.8758C145.189 94.4631 144.136 93.5838 142.757 93.238C141.39 92.8863 139.938 93.1059 138.401 93.8967C137.508 94.3561 136.723 94.8865 136.046 95.488C135.364 96.0783 134.682 96.8229 134.002 97.722L132.687 96.7098C133.655 95.5363 134.512 94.6454 135.257 94.0371C136.013 93.423 136.837 92.8863 137.73 92.4269C139.798 91.3628 141.709 91.0761 143.462 91.5668C145.21 92.0463 146.577 93.2427 147.562 95.156C147.951 95.9124 148.19 96.6266 148.279 97.2986C148.367 97.9705 148.351 98.6472 148.23 99.3285C148.115 99.9929 147.915 100.687 147.63 101.41C147.339 102.123 147.012 102.903 146.648 103.752C146.234 104.725 145.958 105.563 145.82 106.267C145.688 106.954 145.672 107.617 145.771 108.255C145.883 108.887 146.216 109.743 146.771 110.822L146.892 111.055L145.502 111.771ZM147.511 117.047C146.949 115.957 147.121 115.18 148.025 114.715C148.952 114.238 149.696 114.544 150.257 115.634C150.818 116.725 150.635 117.508 149.709 117.985C148.805 118.45 148.072 118.138 147.511 117.047Z\",\n fill: \"#005E9D\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M153.753 162.113H204.064L197.928 184.194H159.888L153.753 162.113Z\",\n fill: \"white\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M170.894 119.569L171.743 111.918C172.478 105.3 174.528 99.7014 177.895 95.1208C181.261 90.5401 187.003 85.9092 195.12 81.2279C202.924 76.8607 208.142 73.1834 210.773 70.1959C213.474 67.2161 215.046 63.7272 215.49 59.7292C215.988 55.2488 214.714 51.6533 211.669 48.9428C208.624 46.2323 204.141 44.5484 198.219 43.8911C187.891 42.7446 175.742 44.8151 161.772 50.1027L153.027 26.2095C169.338 19.2978 186.101 16.7973 203.315 18.7081C217.499 20.2827 228.378 24.9444 235.952 32.6933C243.595 40.4499 246.785 50.0149 245.523 61.3883C244.681 68.9706 242.233 75.3279 238.178 80.4601C234.123 85.5923 226.893 91.0699 216.488 96.8928C209.335 101.053 204.721 104.309 202.648 106.661C200.643 109.02 199.412 112.268 198.953 116.403L198.264 122.607L170.894 119.569ZM163.663 154.563C164.306 148.773 166.341 144.568 169.769 141.948C173.196 139.328 177.871 138.346 183.792 139.004C189.507 139.638 193.746 141.644 196.508 145.021C199.338 148.405 200.44 152.924 199.813 158.576C199.208 164.021 197.146 168.154 193.627 170.973C190.115 173.723 185.536 174.785 179.89 174.158C174.106 173.516 169.799 171.503 166.968 168.118C164.145 164.665 163.044 160.146 163.663 154.563Z\",\n fill: \"#E6126A\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M166.224 124.648L166.058 126.139L167.549 126.304L194.919 129.342L196.41 129.507L196.576 128.016L197.265 121.813C197.701 117.881 198.854 114.951 200.604 112.886C202.499 110.742 206.901 107.6 214.053 103.439C224.507 97.588 231.939 91.9965 236.177 86.6329C240.434 81.2456 242.969 74.6108 243.837 66.7966C245.147 55.0015 241.823 44.9819 233.847 36.8858C225.963 28.8217 214.722 24.0617 200.305 22.4618C182.829 20.5225 165.808 23.0643 149.266 30.0745L147.952 30.6312L148.442 31.9711L157.186 55.8639L157.707 57.288L159.126 56.7511C172.964 51.5129 184.865 49.5153 194.877 50.6264C200.626 51.2643 204.767 52.8789 207.495 55.3072C210.134 57.6564 211.273 60.7509 210.823 64.8076C210.413 68.492 208.974 71.6864 206.485 74.4325L206.478 74.4403L206.471 74.4482C204.022 77.228 199.004 80.8014 191.21 85.1632L191.201 85.168L191.193 85.1728C182.998 89.8992 177.052 94.655 173.508 99.4773C169.96 104.304 167.832 110.163 167.073 116.997L166.224 124.648ZM191.371 177.397L191.378 177.392L191.384 177.387C195.278 174.268 197.485 169.735 198.123 163.985C198.782 158.053 197.643 153.09 194.484 149.308C191.403 145.545 186.752 143.42 180.778 142.757C174.621 142.074 169.514 143.069 165.678 146.001C161.824 148.947 159.664 153.593 158.992 159.642C158.34 165.517 159.486 170.47 162.626 174.312L162.632 174.319L162.637 174.325C165.787 178.091 170.502 180.222 176.544 180.893C182.468 181.55 187.472 180.451 191.371 177.397Z\",\n stroke: \"#143860\",\n strokeWidth: 3\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"filter0_d_5551_89307\",\n x: 0,\n y: 0,\n width: 348,\n height: 343,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 10\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 10\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_5551_89307\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_5551_89307\",\n result: \"shape\"\n })))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgEmptyCart);\nexport default __webpack_public_path__ + \"static/media/empty-cart.e5c0d89d13064b96f60d76bb98371917.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useContext, useState, useEffect, useCallback } from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\nimport classNames from 'classnames';\nimport { ReactComponent as EmptyCartImg } from '../../../media/images/empty-cart.svg';\nimport { OrderScreen } from '../OrderScreen';\nimport {\n OrderScreenContext,\n CheckoutFlowState,\n} from 'features/order-summary/screens/CheckoutScreen';\nimport { OrderSummaryGrid } from '../components/summary/OrderSummaryGrid';\nimport { OrderSummaryOptions, showHeight } from '../components/summary/OrderSummaryOptions';\n\nimport { useRootSelector } from 'rootStore';\nimport { updateCart } from 'common/features/store/duck/cart/duck';\nimport { selectIsAuthenticated } from 'common/features/store/duck/account/duck';\nimport { removeItemFromCart } from 'common/api/e-comm/cart/lineitem';\nimport { Btn } from 'components/btn/Btn';\nimport { getPath, Routes } from 'routes';\nimport { EASE_IN_OUT_BACK } from 'styles/easing';\nimport { createStyles } from 'utils/createStyle';\nimport { gaLogBeginCheckout } from 'config/analytics';\nimport { FeatureFlag } from 'components/feature-flag';\nimport { CartInfoState } from '../CartInfoState';\nimport { selectIsShipToCoordinatorEnabled } from 'common/features/store/duck/organization/duck';\nimport { useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport { Value } from 'firebase/remote-config';\nimport { PaymentIframe } from '../components/PaymentIframe';\nimport { isInIframe, mainWebsiteOrigin } from 'utils';\n\nconst styles = createStyles({\n area: [\n 'mb-2',\n {\n overflow: 'hidden',\n animationName: showHeight,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n});\n\nexport const OrderSummaryScreenContent = () => {\n const { cart, cartAsyncState } = useRootSelector((s) => s.store.cart);\n const { cartInfo, setCartInfo, checkoutFlowState, updatingLineItem } =\n useContext(OrderScreenContext);\n\n const { shipToHome } = cartInfo;\n const dispatch = useDispatch<any>();\n const history = useHistory();\n const [isClearingCart, setIsClearingCart] = useState(false);\n const disableCheckoutBtn = checkoutFlowState === CheckoutFlowState.DISABLED || updatingLineItem;\n const shipToCoordinatorDisable = !useSelector(selectIsShipToCoordinatorEnabled);\n const enableEditInCartQuantity = useFirebaseConfigValues<boolean>(\n 'enable_edit_in_cart_quantity_web',\n true,\n (value: Value) => value.asBoolean()\n );\n const userIsLoggedIn = useRootSelector(selectIsAuthenticated);\n\n const clearCart = async () => {\n if (cart) {\n try {\n setIsClearingCart(true);\n\n const ids = cart.lineItems.map((li) => li.id);\n\n // Removing the items from cart serially to avoid issues with the backend when removing in parallel.\n for (let i = 0; i < ids.length; i++) {\n await removeItemFromCart(ids[i]);\n }\n dispatch(updateCart({ cart: null }));\n window.parent.postMessage({ type: 'resetCart' }, mainWebsiteOrigin());\n } finally {\n setIsClearingCart(false);\n }\n }\n };\n\n const setShipToHome = useCallback(\n (value: boolean) => {\n setCartInfo((cartInfo: CartInfoState) => ({\n ...cartInfo,\n shipToHome: value,\n }));\n },\n [setCartInfo]\n );\n\n const goShopping = () => {\n if (isInIframe()) {\n window.parent.postMessage({ type: 'goShopping' }, mainWebsiteOrigin());\n } else {\n history.push(Routes.Brands);\n }\n };\n\n const beginCheckout = () => {\n const url = getPath(Routes.ShopOrderPayment, {\n shipToHome: shipToHome ? 'ship-to-home' : 'ship-to-coordinator',\n });\n if (cart) {\n if (isInIframe()) {\n window.parent.postMessage({ type: 'logBeginCheckout', cart }, mainWebsiteOrigin());\n } else {\n gaLogBeginCheckout(cart);\n }\n }\n history.push(url, cartInfo);\n };\n\n const isLoading = isClearingCart || cartAsyncState.loading;\n const shouldHideButtons = shipToCoordinatorDisable;\n\n /* Side Effect:\n * Sets the shipToHome boolean to `true` when shipToCoordinatorDisable is disabled.\n *\n * NOTE: The `shipToHome` variable controls how the cart line items gets rendered.\n *\n * Logic:\n * shipToCoordinatorDisable controls whether or not we can ship to coordinator.\n * if the value is `true` then the only other possible option is `ship to home`.\n */\n useEffect(() => {\n if (shipToCoordinatorDisable) {\n setShipToHome(shipToCoordinatorDisable);\n }\n }, [shipToCoordinatorDisable, setShipToHome]);\n\n const renderGrid = () => {\n return (\n <div className=\"w-full md:mr-4\" data-testid=\"order-summary-grid\">\n {!isLoading && cart && (\n <>\n <div className=\"mb-4 lg:mb-1 lg:block text-right mr-2 text-sm\">\n <button onClick={clearCart}>\n <a href=\"#\" className=\"text-grey-2 font-bold\">\n Clear Cart\n </a>\n </button>\n </div>\n <OrderSummaryGrid\n cart={cart}\n loading={isLoading}\n shipToHome={Boolean(shipToHome)}\n onShipToHomeChange={setShipToHome}\n hideButtons={shouldHideButtons}\n hideEditQuantityButtons={!enableEditInCartQuantity}\n />\n <div className=\"block md:hidden\">\n <FeatureFlag\n flagKey=\"enable_checkout_button\"\n fallback={true}\n displayOnValue={true}\n >\n <Btn\n disabled={disableCheckoutBtn}\n className={'cart_begin_checkout_button w-full mt-10 lg:mt-4'}\n onClick={disableCheckoutBtn ? undefined : beginCheckout}\n >\n Begin Checkout\n </Btn>\n </FeatureFlag>\n <FeatureFlag flagKey=\"enable_checkout_button\" displayOnValue={false}>\n <Btn disabled={true} className={'w-full mt-10 lg:mt-4'}>\n Checkout Disabled\n </Btn>\n </FeatureFlag>\n </div>\n </>\n )}\n {isLoading && (\n <>\n <Skeleton height=\"9rem\" className=\"mt-4\" />\n <Skeleton height=\"4rem\" className=\"mt-4\" />\n <Skeleton height=\"4rem\" className=\"mt-4\" />\n <Skeleton height=\"4rem\" className=\"mt-4\" />\n <Skeleton height=\"4rem\" className=\"mt-4\" />\n </>\n )}\n </div>\n );\n };\n\n const renderOrderOptions = () => {\n return (\n <div className=\"hidden md:block\" style={{ width: '20%', minWidth: '16rem' }}>\n {cart && !cartAsyncState.loading && (\n <OrderSummaryOptions shipToHome={Boolean(shipToHome)} hidePayment={true}>\n <div className={classNames(styles.area, 'hidden md:block mt-5')}>\n <FeatureFlag\n flagKey=\"enable_checkout_button\"\n displayOnValue={true}\n fallback={true}\n >\n <Btn\n disabled={disableCheckoutBtn}\n onClick={disableCheckoutBtn ? undefined : beginCheckout}\n className=\"cart_begin_checkout_button w-full mt-4\"\n >\n Begin Checkout\n </Btn>\n </FeatureFlag>\n <FeatureFlag flagKey=\"enable_checkout_button\" displayOnValue={false}>\n <Btn disabled={true} className=\"w-full mt-4\">\n Checkout Disabled\n </Btn>\n </FeatureFlag>\n </div>\n </OrderSummaryOptions>\n )}\n {cartAsyncState.loading && (\n <>\n <Skeleton height=\"10rem\" />\n </>\n )}\n </div>\n );\n };\n\n return (\n <>\n {isInIframe() && !userIsLoggedIn ? (\n <div>\n <div className=\"text-center p-2\">\n <div className=\"text-3xl md:text-5xl text-brand-dark\">\n Your shopping cart is empty.\n </div>\n <div className=\"text-lg mt-4 mb-2 md:mb-12 text-grey-1\">\n Sign in to continue shopping.\n </div>\n <EmptyCartImg\n width=\"100%\"\n className=\"inline-block text-left mb-0 md:mb-12\"\n style={{ maxWidth: '1000px', width: '90%' }}\n />\n <Btn\n className=\"w-full max-w-sm\"\n onClick={() =>\n window.parent.postMessage({ type: 'signIn' }, mainWebsiteOrigin())\n }\n >\n Sign In\n </Btn>\n </div>\n </div>\n ) : (\n !cartAsyncState.loading &&\n (!cart || cart.lineItems.length <= 0) && (\n <div>\n <div className=\"text-center p-2\">\n <div className=\"text-3xl md:text-5xl text-brand-dark\">\n Your shopping cart is empty.\n </div>\n <div className=\"text-lg mt-4 mb-2 md:mb-12 text-grey-1\">\n Shop top brands and start earning now.\n </div>\n <EmptyCartImg\n width=\"100%\"\n className=\"inline-block text-left mb-0 md:mb-12\"\n style={{ maxWidth: '1000px', width: '90%' }}\n />\n <Btn className=\"w-full max-w-sm\" onClick={goShopping}>\n Take Me Shopping\n </Btn>\n </div>\n </div>\n )\n )}\n {(!cart || cart.lineItems.length > 0) && (\n <div className=\"w-full\">\n <div className=\"flex\">\n {renderGrid()}\n {renderOrderOptions()}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport const OrderSummaryScreen = () => {\n const { cart, cartAsyncState } = useRootSelector((s) => s.store.cart);\n const className = isInIframe() ? 'pt-20' : 'pt-0';\n return (\n <OrderScreen\n title=\"Cart\"\n orderStep=\"summary\"\n className={className}\n showSummary={false}\n showMobileSummary={true}\n hideHeader={!cartAsyncState.loading && (!cart || cart.lineItems.length <= 0)}\n showBrandCardTiles={true}\n embedView={true}\n >\n <OrderSummaryScreenContent />\n </OrderScreen>\n );\n};\n\nexport default OrderSummaryScreen;\n","import React, { ReactNode, useMemo } from 'react';\nimport classNames from 'classnames';\n\nimport { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\n\nexport const styles = createStyles({\n StyledIndicator: [\n 'bg-black',\n {\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: colors.brand,\n },\n ],\n optionStyle: ['cursor-pointer align-middle', {}],\n});\n\nexport interface RadioItemProps {\n value: string;\n selected: boolean;\n text: ReactNode;\n onClick: (value: string) => void;\n disabled?: boolean;\n disabledRadioOnly?: boolean;\n fontTypeUnselected?: string;\n fontColor?: string;\n}\n\nexport const RadioItem = ({\n text,\n value,\n selected,\n onClick,\n disabled = false,\n disabledRadioOnly = false,\n fontTypeUnselected = '',\n fontColor = colors.brand,\n}: RadioItemProps) => {\n const dynamicStyles = useMemo(() => {\n return createStyles({\n container: [\n 'flex flex-row items-center mx-auto text-sm',\n {\n pointerEvents: disabled ? 'none' : 'inherit',\n color: disabled && !disabledRadioOnly ? colors.grey4 : fontColor,\n cursor: disabled ? 'not-allowed' : 'inherit',\n },\n ],\n styledRadio: [\n 'align-middle',\n {\n appearance: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n padding: 0,\n borderRadius: '50%',\n boxShadow: `inset 0 0 0 2px ${disabled ? colors.grey4 : colors.brand}`,\n width: 20,\n height: 20,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& ~ &': { marginLeft: 5 },\n\n '&:focus': {\n outline: 'none',\n boxShadow: `inset 0 0 0 2px ${colors.brandDark}`,\n },\n },\n ],\n });\n }, [disabled, disabledRadioOnly, fontColor]);\n\n // NOTE: data-testid used to make it easier to target the button state when testing\n return (\n <div className={dynamicStyles.container}>\n <div>\n <button\n data-testid={text}\n disabled={disabled}\n type=\"button\"\n className={dynamicStyles.styledRadio}\n onClick={() => onClick(value)}\n >\n {selected && <span className={styles.StyledIndicator} />}\n </button>\n </div>\n <span\n className={classNames(\n styles.optionStyle,\n 'ml-2 w-full',\n selected ? 'font-semibold' : fontTypeUnselected\n )}\n onClick={() => onClick(value)}\n >\n {text}\n </span>\n </div>\n );\n};\n","import React, { useMemo, useState } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { usePaymentOptions } from 'common/hooks/usePaymentOptions';\nimport {\n PaymentMethod,\n PaymentSubType,\n PaymentType,\n PaymentTypeFee,\n} from 'common/api/e-comm/payment-types';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { AchAccount } from 'common/api/e-comm/ach/models/AchAccount';\nimport { SavedCreditCard } from 'common/api/e-comm/models/CreditCard';\nimport { PartialRecord } from 'common/definitions/PartialRecord';\nimport { PaymentInfo } from 'features/order-summary/utils/useCartPayment';\nimport { RadioItem } from 'features/product/components/RadioItem';\nimport { Checkbox } from 'components/checkbox/Checkbox';\nimport { Link } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { selectDefaultPaymentType } from 'common/features/store/duck/account/duck';\nimport { useSelector } from 'react-redux';\nimport { useRootSelector } from 'common/features/featuresReducer';\n\ntype OrderPaymentOptionInfo = PaymentInfo & {\n title: React.ReactNode;\n description: string;\n disabled?: boolean;\n};\n\nexport interface OrderPaymentOptionsProps {\n shipToHome: boolean;\n selectedPayment?: PaymentInfo;\n onPaymentChange: (payment: PaymentInfo) => unknown;\n makeThisTheDefaultPayment: boolean;\n setMakeThisTheDefaultPayment: (state: boolean) => void;\n}\n\nconst formatFee = (fee: PaymentTypeFee | null) => {\n if (!fee) {\n return '$0';\n }\n return fee.isPercentage ? `${fee.amount.toFixed(1)}%` : monetizeWithDecimal(fee.amount);\n};\n\nconst hasPaymentType = (paymentType: PaymentType, paymentTypes: PaymentType[] | null) => {\n if (!paymentTypes) {\n return false;\n }\n return Boolean(paymentTypes.find((pt) => pt === paymentType));\n};\n\nconst getFee = (\n paymentType: PaymentSubType,\n paymentTypeFees: PartialRecord<PaymentSubType, PaymentTypeFee> | null\n) => {\n return (paymentTypeFees && paymentTypeFees[paymentType]) || null;\n};\n\nconst getPaymentOptions = (\n paymentTypes: PaymentType[] | null,\n paymentTypeFees: PartialRecord<PaymentSubType, PaymentTypeFee> | null,\n achAccount: AchAccount | null,\n savedCreditCards: SavedCreditCard[] | null,\n shipToHome: boolean,\n isCheckEnabled: boolean\n) => {\n const paymentOptions: OrderPaymentOptionInfo[] = [];\n\n const achFee = getFee(PaymentSubType.BankAccount, paymentTypeFees);\n const creditCardFee = getFee(PaymentSubType.Credit, paymentTypeFees);\n const debitCardFee = getFee(PaymentSubType.Debit, paymentTypeFees);\n\n const checkPayment: OrderPaymentOptionInfo = {\n id: PaymentType.Check,\n paymentType: PaymentType.Check,\n paymentSubType: null,\n title: 'Pay Coordinator Directly',\n description: isCheckEnabled\n ? 'Pay with a check or cash. Not eligible for ship to home.'\n : 'This payment option has been disabled by your coordinator.',\n disabled: !isCheckEnabled,\n };\n\n if (\n hasPaymentType(PaymentType.BankAccount, paymentTypes) &&\n achAccount &&\n achAccount.availableForPayment\n ) {\n const achPayment: OrderPaymentOptionInfo = {\n id: achAccount.id,\n paymentType: PaymentType.BankAccount,\n paymentSubType: null,\n title: (\n <span>\n Bank Account <span data-recording-sensitive>({achAccount.accountNumber})</span>\n </span>\n ),\n description: `${formatFee(achFee)} Convenience Fee`,\n };\n\n paymentOptions.push(achPayment);\n }\n\n if (hasPaymentType(PaymentType.CreditCard, paymentTypes)) {\n savedCreditCards?.forEach((creditCard) => {\n const isCredit = creditCard.cardSubType === PaymentSubType.Credit;\n paymentOptions.push({\n id: creditCard.id.toString(),\n paymentType: PaymentType.CreditCard,\n paymentSubType: creditCard.cardSubType,\n title: (\n <span>\n Pay with {isCredit ? 'credit' : 'debit'} card\n <span data-recording-sensitive>({creditCard.maskedCardNumber})</span>\n </span>\n ),\n description: `${formatFee(\n isCredit ? creditCardFee : debitCardFee\n )} fee applies to each card transaction`,\n });\n });\n\n paymentOptions.push({\n id: 'new-credit-card',\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Credit,\n title: 'Add and pay with a credit card',\n description: `${formatFee(creditCardFee)} fee applies to each credit card transaction`,\n });\n }\n\n // NOTE: add check-payment as the top item\n if (!shipToHome) {\n if (isCheckEnabled) {\n paymentOptions.splice(0, 0, checkPayment);\n } else {\n // NOTE: payment-check is disabled, put it at the bottom\n paymentOptions.push(checkPayment);\n }\n }\n\n return paymentOptions;\n};\n\nconst getSelectedPaymentOption = (\n defaultPaymentType: PaymentMethod | null,\n selectedPayment: PaymentInfo | undefined,\n paymentOptions: OrderPaymentOptionInfo[],\n isCheckEnabled: boolean\n) => {\n if (selectedPayment && (selectedPayment?.paymentType !== PaymentType.Check || isCheckEnabled)) {\n return selectedPayment.id;\n }\n\n switch (defaultPaymentType?.paymentType) {\n case 'Check':\n // NOTE: When check payment is not enabled then\n return isCheckEnabled ? paymentOptions.find((option) => option.id === 'Check')?.id : '';\n case 'BankAccount':\n return paymentOptions.find((option) => option.id === defaultPaymentType.achAccountId)\n ?.id;\n case 'CreditCard':\n return paymentOptions.find(\n (option) => parseInt(option.id as string) === defaultPaymentType.creditCardId\n )?.id;\n default:\n return '';\n }\n};\n\nexport const OrderPaymentOptions = ({\n shipToHome,\n selectedPayment,\n onPaymentChange,\n makeThisTheDefaultPayment,\n setMakeThisTheDefaultPayment,\n}: OrderPaymentOptionsProps) => {\n const defaultPaymentType = useSelector(selectDefaultPaymentType);\n const { paymentTypes, paymentTypeFees, achAccount, savedCreditCards, isLoading } =\n usePaymentOptions();\n const isCheckEnabled = Boolean(paymentTypes?.includes(PaymentType.Check));\n\n const paymentOptions = getPaymentOptions(\n paymentTypes,\n paymentTypeFees,\n achAccount,\n savedCreditCards,\n shipToHome,\n isCheckEnabled\n );\n\n const [onChangeLoadingStatus, setOnChangeLoadingStatus] = useState<{ [id: string]: boolean }>(\n {}\n );\n\n const internalOnPaymentChange = async (id: string) => {\n const selectedPaymentOption = paymentOptions.find((opt) => opt.id.toString() === id);\n if (selectedPaymentOption) {\n const { paymentType, id } = selectedPaymentOption;\n const value = onPaymentChange({\n paymentType,\n id,\n paymentSubType: selectedPaymentOption.paymentSubType,\n });\n if (value instanceof Promise) {\n setOnChangeLoadingStatus({\n ...onChangeLoadingStatus,\n [id]: true,\n });\n\n try {\n await value;\n } finally {\n setOnChangeLoadingStatus({\n ...onChangeLoadingStatus,\n [id]: false,\n });\n }\n }\n }\n };\n\n const selectedPaymentId = getSelectedPaymentOption(\n defaultPaymentType,\n selectedPayment,\n paymentOptions,\n isCheckEnabled\n );\n\n // passing no deps in to useMemo on purpose, we only want to call this once\n // on component initial load to set pass the default payment up to the parent component,\n // since the default payment doesn't trigger a radio onClick handler to set it initially.\n useMemo(() => {\n if (selectedPaymentId) {\n internalOnPaymentChange(selectedPaymentId.toString());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (paymentOptions.length <= 0) {\n return <div>No payment methods available.</div>;\n }\n\n return (\n <div>\n <div>\n {!isLoading && (\n <>\n <AchStatusNotification\n paymentTypes={paymentTypes}\n paymentOptions={paymentOptions}\n />\n <div>\n {paymentOptions.map((option) => (\n <div key={option.id} className=\"mt-4\">\n {onChangeLoadingStatus[option.id] && <Skeleton height={35} />}\n {!onChangeLoadingStatus[option.id] && (\n <>\n <RadioItem\n disabled={option.disabled}\n onClick={() =>\n internalOnPaymentChange(option.id.toString())\n }\n selected={option.id === selectedPaymentId}\n text={option.title}\n value={option.id.toString()}\n key={option.id}\n />\n <div className=\"text-grey-3 text-xs ml-7\">\n {option.description}\n </div>\n </>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n {isLoading && <Skeleton />}\n </div>\n <div className=\"mt-6 text-sm text-grey-1\">\n <Checkbox\n checked={makeThisTheDefaultPayment}\n onChange={setMakeThisTheDefaultPayment}\n id=\"chkDefaultPayment\"\n text=\"Make this my default payment\"\n labelClassName=\"pl-1\"\n />\n </div>\n </div>\n );\n};\n\ninterface IPaymentNotification {\n paymentOptions: OrderPaymentOptionInfo[];\n paymentTypes: PaymentType[] | null;\n}\n\nconst AchStatusNotification = ({ paymentOptions, paymentTypes }: IPaymentNotification) => {\n const hasAchPayment = paymentOptions.some(\n (option) => option.paymentType === PaymentType.BankAccount\n );\n const isAchLocked = Boolean(useRootSelector((s) => s.store.account.achAccount?.isLocked));\n const achPaymentAllowed = hasPaymentType(PaymentType.BankAccount, paymentTypes);\n\n const NotificationView = notificationToRender(hasAchPayment, achPaymentAllowed, isAchLocked);\n\n return <NotificationView />;\n};\n\nconst NoAchNotificationRenderer = () => (\n <div className=\"text-sm mb-6\">\n <div className=\"text-brand-dark\">\n Need to add to a bank account (ACH) as a payment option?\n </div>\n <Link to={Routes.ShopAccountSettingsPaymentOptionsTab}>\n Add ACH account in personal settings payment options\n </Link>\n </div>\n);\n\nconst AchIsLockedNotificationRenderer = () => (\n <div className=\"mb-6\">\n <p className=\"text-brand-dark font-semibold\">\n Your online payment account has been locked.\n </p>\n <p className=\"text-sm\">\n Please ask your coordinator to call the Customer Support team at 1-800-727-4715, option\n 3, to unlock your account.\n </p>\n </div>\n);\n\n// NOTE: turn the args into an a single object param IFF parameters become too big\nconst notificationToRender = (\n hasAchPayment: boolean,\n achPaymentAllowed: boolean,\n isAchLocked: boolean\n) => {\n if (isAchLocked) {\n return AchIsLockedNotificationRenderer;\n } else if (achPaymentAllowed && !hasAchPayment) {\n return NoAchNotificationRenderer;\n }\n // NOTE: Add more cases if we want to render other types of notification\n\n // BaseCase: do not render anything\n return () => <></>;\n};\n","import React, { useMemo, useState } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { usePaymentOptions } from 'common/hooks/usePaymentOptions';\nimport {\n PaymentMethod,\n PaymentType,\n PaymentTypeFee,\n PaymentSubType,\n} from 'common/api/e-comm/payment-types';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { AchAccount } from 'common/api/e-comm/ach/models/AchAccount';\nimport { SavedCreditCard } from 'common/api/e-comm/models/CreditCard';\nimport { PartialRecord } from 'common/definitions/PartialRecord';\nimport { PaymentInfo, getDefaultPaymentId } from 'features/order-summary/utils/useCartPayment';\nimport { RadioItem } from 'features/product/components/RadioItem';\nimport { Checkbox } from 'components/checkbox/Checkbox';\nimport { Link } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { selectDefaultPaymentType } from 'common/features/store/duck/account/duck';\nimport { useSelector } from 'react-redux';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { colors } from 'styles/settings';\n\ntype OrderPaymentOptionInfo = PaymentInfo & {\n title: React.ReactNode;\n description: string;\n disabled?: boolean;\n link?: string;\n linkText?: string;\n disabledRadioOnly?: boolean;\n sortId: number;\n};\n\nexport interface OrderPaymentOptionsProps {\n shipToHome: boolean;\n selectedPayment?: PaymentInfo;\n onPaymentChange: (payment: PaymentInfo) => unknown;\n makeThisTheDefaultPayment: boolean;\n setMakeThisTheDefaultPayment: (state: boolean) => void;\n}\n\nconst formatFee = (fee: PaymentTypeFee | null) => {\n if (!fee) {\n return '$0';\n }\n return fee.isPercentage ? `${fee.amount.toFixed(1)}%` : monetizeWithDecimal(fee.amount);\n};\n\nconst hasPaymentType = (paymentType: PaymentType, paymentTypes: PaymentType[] | null) => {\n if (!paymentTypes) {\n return false;\n }\n return Boolean(paymentTypes.find((pt) => pt === paymentType));\n};\n\nconst getFee = (\n paymentType: PaymentSubType,\n paymentTypeFees: PartialRecord<PaymentSubType, PaymentTypeFee> | null\n) => {\n return (paymentTypeFees && paymentTypeFees[paymentType]) || null;\n};\n\nconst getPaymentOptions = (\n paymentTypes: PaymentType[] | null,\n paymentTypeFees: PartialRecord<PaymentType, PaymentTypeFee> | null,\n achAccount: AchAccount | null,\n savedCreditCards: SavedCreditCard[] | null,\n shipToHome: boolean,\n isCheckEnabled: boolean,\n defaultPaymentType?: PaymentMethod | null\n) => {\n const paymentOptions: OrderPaymentOptionInfo[] = [];\n\n const achFee = getFee(PaymentSubType.BankAccount, paymentTypeFees);\n const creditCardFee = getFee(PaymentSubType.Credit, paymentTypeFees);\n const debitCardFee = getFee(PaymentSubType.Debit, paymentTypeFees);\n\n const checkPayment: OrderPaymentOptionInfo = {\n id: PaymentType.Check,\n paymentType: PaymentType.Check,\n paymentSubType: null,\n title: 'Pay Coordinator Directly',\n description: isCheckEnabled\n ? 'Pay with a check or cash. Not eligible for ship to home.'\n : 'This payment option has been disabled by your coordinator.',\n disabled: !isCheckEnabled,\n sortId: 3,\n };\n\n const creditCards = savedCreditCards?.filter(\n (savedCreditCards) => savedCreditCards.cardSubType === PaymentSubType.Credit\n );\n const debitCards = savedCreditCards?.filter(\n (savedCreditCards) => savedCreditCards.cardSubType === PaymentSubType.Debit\n );\n\n if (\n hasPaymentType(PaymentType.BankAccount, paymentTypes) &&\n achAccount &&\n achAccount.availableForPayment\n ) {\n const achPayment: OrderPaymentOptionInfo = {\n id: achAccount.id,\n paymentType: PaymentType.BankAccount,\n paymentSubType: null,\n title: (\n <span>\n Bank Account{' '}\n <span data-recording-sensitive className=\"font-normal text-grey-darkest\">\n ({achAccount.accountNumber})\n </span>\n </span>\n ),\n description: `${formatFee(achFee)} Convenience Fee`,\n sortId: 0,\n };\n\n paymentOptions.push(achPayment);\n }\n\n if (hasPaymentType(PaymentType.CreditCard, paymentTypes)) {\n debitCards?.forEach((debitCard) => {\n paymentOptions.push({\n id: debitCard.id.toString(),\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Debit,\n title: (\n <span>\n Debit Card\n <span data-recording-sensitive className=\"font-normal text-grey-darkest\">\n {' '}\n ({debitCard.maskedCardNumber})\n </span>\n </span>\n ),\n description: `${formatFee(debitCardFee)} Convenience Fee`,\n sortId: 1,\n });\n });\n\n paymentOptions.push({\n id: 'new-debit-card',\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Debit,\n title: 'Add Debit Card',\n description: `${formatFee(debitCardFee)} convenience fee applies to each transaction`,\n sortId: 5,\n });\n\n creditCards?.forEach((creditCard) => {\n paymentOptions.push({\n id: creditCard.id.toString(),\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Credit,\n title: (\n <span>\n Pay with credit card\n <span data-recording-sensitive className=\"font-normal text-grey-darkest\">\n {' '}\n ({creditCard.maskedCardNumber})\n </span>\n </span>\n ),\n description: `${formatFee(creditCardFee)} Convenience Fee`,\n sortId: 2,\n });\n });\n\n paymentOptions.push({\n id: 'new-credit-card',\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Credit,\n title: 'Add Credit Card',\n description: `${formatFee(creditCardFee)} convenience fee applies to each transaction`,\n sortId: 6,\n });\n }\n\n // NOTE: add check-payment as the top item\n if (!shipToHome) {\n paymentOptions.push(checkPayment);\n }\n\n if (\n hasPaymentType(PaymentType.BankAccount, paymentTypes) &&\n paymentOptions.filter((option) => option.paymentType === PaymentType.BankAccount).length ===\n 0\n ) {\n paymentOptions.push({\n id: 'BankAccount',\n paymentType: PaymentType.BankAccount,\n paymentSubType: null,\n title: 'Add a Bank Account',\n description: `${formatFee(\n getFee(PaymentSubType.BankAccount, paymentTypeFees)\n )} convenience fee applies to each transaction`,\n link: Routes.ShopAccountSettingsPaymentOptionsTab,\n linkText: 'Add a Bank Account in Personal Settings',\n disabled: true,\n disabledRadioOnly: true,\n sortId: 4,\n });\n }\n\n const defaultId =\n defaultPaymentType?.creditCardId || defaultPaymentType?.achAccountId || 'Check';\n\n return paymentOptions.sort((a, b) =>\n a.id === `${defaultId}` ? -1 - b.sortId : a.sortId - b.sortId\n );\n};\n\nconst getSelectedPaymentOption = (\n defaultPaymentType: PaymentMethod | null,\n selectedPayment: PaymentInfo | undefined,\n paymentOptions: OrderPaymentOptionInfo[],\n isCheckEnabled: boolean\n) => {\n if (selectedPayment && (selectedPayment?.paymentType !== PaymentType.Check || isCheckEnabled)) {\n return selectedPayment.id;\n }\n\n switch (defaultPaymentType?.paymentType) {\n case 'Check':\n // NOTE: When check payment is not enabled then\n return isCheckEnabled ? paymentOptions.find((option) => option.id === 'Check')?.id : '';\n case 'BankAccount':\n return paymentOptions.find((option) => option.id === defaultPaymentType.achAccountId)\n ?.id;\n case 'CreditCard':\n return paymentOptions.find(\n (option) => parseInt(option.id as string) === defaultPaymentType.creditCardId\n )?.id;\n default:\n return '';\n }\n};\n\nexport const OrderPaymentOptionsWithDebit = ({\n shipToHome,\n selectedPayment,\n onPaymentChange,\n makeThisTheDefaultPayment,\n setMakeThisTheDefaultPayment,\n children,\n}: React.PropsWithChildren<OrderPaymentOptionsProps>) => {\n const defaultPaymentType = useSelector(selectDefaultPaymentType);\n const { paymentTypes, paymentTypeFees, achAccount, savedCreditCards, isLoading } =\n usePaymentOptions();\n const isCheckEnabled = Boolean(paymentTypes?.includes(PaymentType.Check));\n const paymentOptions = getPaymentOptions(\n paymentTypes,\n paymentTypeFees,\n achAccount,\n savedCreditCards,\n shipToHome,\n isCheckEnabled,\n defaultPaymentType\n );\n\n const [onChangeLoadingStatus, setOnChangeLoadingStatus] = useState<{ [id: string]: boolean }>(\n {}\n );\n\n const internalOnPaymentChange = async (id: string) => {\n if (['new-credit-card', 'new-debit-card'].includes(id)) {\n setMakeThisTheDefaultPayment(true);\n } else {\n setMakeThisTheDefaultPayment(false);\n }\n\n const selectedPaymentOption = paymentOptions.find((opt) => opt.id.toString() === id);\n\n if (selectedPaymentOption) {\n const { paymentType, id } = selectedPaymentOption;\n const value = onPaymentChange({\n paymentType,\n id,\n paymentSubType: selectedPaymentOption.paymentSubType,\n });\n if (value instanceof Promise) {\n setOnChangeLoadingStatus({\n ...onChangeLoadingStatus,\n [id]: true,\n });\n\n try {\n await value;\n } finally {\n setOnChangeLoadingStatus({\n ...onChangeLoadingStatus,\n [id]: false,\n });\n }\n }\n }\n };\n\n const selectedPaymentId = getSelectedPaymentOption(\n defaultPaymentType,\n selectedPayment,\n paymentOptions,\n isCheckEnabled\n );\n\n // passing no deps in to useMemo on purpose, we only want to call this once\n // on component initial load to set pass the default payment up to the parent component,\n // since the default payment doesn't trigger a radio onClick handler to set it initially.\n useMemo(() => {\n if (selectedPaymentId) {\n internalOnPaymentChange(selectedPaymentId.toString());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (paymentOptions.length <= 0) {\n return <div>No payment methods available.</div>;\n }\n\n const defaultPaymentMethodId = getDefaultPaymentId(defaultPaymentType);\n\n const shouldHideDefaultCheckbox = (option: OrderPaymentOptionInfo) =>\n option.id === defaultPaymentMethodId.id ||\n option.id === defaultPaymentType?.achAccountId ||\n option.id === defaultPaymentType?.creditCardId ||\n option.id === 'new-credit-card' ||\n option.id === 'new-debit-card' ||\n option.id !== selectedPaymentId;\n\n return (\n <div>\n <div>\n {!isLoading && (\n <>\n <AchStatusNotification />\n <div>\n {paymentOptions.map((option) => (\n <div key={option.id} className=\"mt-4\">\n {onChangeLoadingStatus[option.id] && <Skeleton height={35} />}\n {!onChangeLoadingStatus[option.id] && (\n <>\n <RadioItem\n disabled={option.disabled}\n onClick={() =>\n internalOnPaymentChange(option.id.toString())\n }\n selected={option.id === selectedPaymentId}\n text={option.title}\n value={option.id.toString()}\n key={option.id}\n disabledRadioOnly={option.disabledRadioOnly}\n fontTypeUnselected=\"font-semibold\"\n fontColor={colors.brandDark}\n />\n <div className=\"text-grey-3 text-xs ml-7 mt-0.5\">\n {option.description}\n </div>\n {option.link && option.linkText ? (\n <Link className=\"ml-7 text-xs\" to={option.link}>\n {option.linkText}\n </Link>\n ) : null}\n\n {shouldHideDefaultCheckbox(option) ? null : (\n <div className=\"mt-2 pl-7 text-sm text-grey-1\">\n <Checkbox\n checked={makeThisTheDefaultPayment}\n onChange={setMakeThisTheDefaultPayment}\n id=\"chkDefaultPayment\"\n text=\"Save as default payment method\"\n labelClassName=\"pl-1 text-xs\"\n />\n </div>\n )}\n\n {defaultPaymentMethodId.id === option.id ? (\n <div className=\"text-xs font-medium ml-7 mt-0.5 text-success\">\n Default Payment\n </div>\n ) : null}\n\n {option.id === selectedPaymentId ? children : null}\n </>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n {isLoading && <Skeleton />}\n </div>\n </div>\n );\n};\n\nconst AchStatusNotification = () => {\n const isAchLocked = Boolean(useRootSelector((s) => s.store.account.achAccount?.isLocked));\n\n if (isAchLocked) {\n return <AchIsLockedNotificationRenderer />;\n }\n\n return <></>;\n};\n\nconst AchIsLockedNotificationRenderer = () => (\n <div className=\"mb-6\">\n <p className=\"text-brand-dark font-semibold\">\n Your online payment account has been locked.\n </p>\n <p className=\"text-sm\">\n Please ask your coordinator to call the Customer Support team at 1-800-727-4715, option\n 3, to unlock your account.\n </p>\n </div>\n);\n","import React, { useState } from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { FormikTextField } from 'features/product/components/utils/fields';\nimport MaskedInput from 'react-text-mask';\nimport {\n MASK_SHORT_DATE,\n CREDIT_CARD_MASK,\n MASK_CVC,\n MASK_ZIP_CODE_SHORT,\n} from 'common/modules/mask-text/masks';\nimport { FormikCheckboxField } from 'components/fields/FormikTextField';\nimport CCImage from '../../../../media/images/allowed-creditcards-img.png';\nimport CCImageNew from '../../../../media/images/new-allowed-creditcards-img.png';\nimport {\n expirationDateValidator,\n cvcValidator,\n nameValidator,\n cardNumberValidator,\n} from 'common/utils/creditCardValidators';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { Checkbox } from 'components/checkbox/Checkbox';\nimport { zipCodeValidator } from 'common/modules/form-validation/validators';\nimport ResponsiveContainer, {\n ContainerType,\n} from 'components/responsive-containers/ResponsiveContainer';\nimport { validateCardBin, validateCardBinWithTokenX } from 'common/api/e-comm/credit-cards/service';\nimport useMediaQueries from 'hooks/useMediaQueries';\n\nexport const TOKENEX_ID = process.env.REACT_APP_TOKENEX_ID;\nexport const TOKENEX_URL = process.env.REACT_APP_TOKENEX_URL;\n\nexport interface CreditCardFields {\n name: string;\n cardNumber: string;\n expirationDate: string;\n securityCode: string;\n zipCode: string;\n save: boolean;\n}\n\nexport interface CreditDebitCardFormProps {\n makeThisTheDefaultPayment?: boolean;\n setMakeThisTheDefaultPayment?: (state: boolean) => void;\n checkboxText?: string;\n isDebitCard?: boolean;\n}\n\nexport const CreditDebitCardForm = ({\n makeThisTheDefaultPayment,\n setMakeThisTheDefaultPayment,\n checkboxText = 'Save this card',\n isDebitCard = false,\n}: CreditDebitCardFormProps) => {\n const [disabledDefault, setDisabledDefault] = useState(false);\n const [isMobile, setIsMobile] = useState<boolean>(false);\n const formikProps = useFormikContext<CreditCardFields>();\n useMediaQueries({\n '(max-width: 640px)': () => {\n setIsMobile(true);\n },\n '(min-width: 640px)': () => {\n setIsMobile(false);\n },\n });\n\n const validateDebitCardNumber = async (cardNumber: string): Promise<void> => {\n if (isDebitCard && cardNumber) {\n const validation = await validateCardBinWithTokenX(cardNumber, TOKENEX_ID, TOKENEX_URL);\n\n if (validation && validation.data) {\n const { isDebit } = validation?.data;\n if (!isDebit) {\n formikProps.setFieldError(\n 'cardNumber',\n 'This number is linked to a Credit Card.'\n );\n }\n }\n }\n };\n\n const combinedMaskedCreditDebitMaskedValidator = (value: string) => {\n return cardNumberValidator(value.replace(/\\s/g, ''));\n };\n\n return (\n <div data-recording-disable className=\"ml-0 sm:ml-7\">\n <Form>\n <AcceptedCreditCardsDisclaimer />\n <>\n <div className=\"w-full\">\n <FormikTextField\n name=\"name\"\n label=\"Name on Card\"\n placeholder=\"Name on Card\"\n validate={nameValidator}\n />\n </div>\n <br />\n <div className=\"flex justify-between gap-2 sm:gap-5\">\n <div className=\"w-full\">\n <MaskedInput\n mask={CREDIT_CARD_MASK}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n id=\"cardNumber\"\n name=\"cardNumber\"\n label=\"Card Number\"\n placeholder=\"0000 0000 0000 0000\"\n validate={combinedMaskedCreditDebitMaskedValidator}\n {..._props}\n onBlur={(e) => {\n const { value } = e.target;\n const validationErrors = cardNumberValidator(value);\n if (!validationErrors) {\n validateDebitCardNumber(value);\n }\n }}\n />\n )}\n />\n </div>\n </div>\n <br />\n <div className=\"flex justify-between gap-5\">\n <div className=\"w-full\">\n <MaskedInput\n mask={MASK_SHORT_DATE}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n label=\"Exp Date\"\n name=\"expirationDate\"\n placeholder=\"mm/yy\"\n validate={expirationDateValidator}\n {..._props}\n />\n )}\n />\n </div>\n <div className=\"w-full\">\n <MaskedInput\n mask={MASK_CVC}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n name=\"securityCode\"\n label=\"CVV\"\n placeholder=\"000\"\n maxLength={3}\n validate={cvcValidator}\n {..._props}\n />\n )}\n />\n </div>\n <ResponsiveContainer For={ContainerType.desktop} defaultVisibility>\n <div className=\"w-full\">\n {isMobile ? null : (\n <MaskedInput\n mask={MASK_ZIP_CODE_SHORT}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n label=\"Zip Code\"\n name=\"zipCode\"\n placeholder=\"Enter Zip Code\"\n validate={zipCodeValidator}\n {..._props}\n />\n )}\n />\n )}\n </div>\n </ResponsiveContainer>\n </div>\n\n <ResponsiveContainer For={ContainerType.mobile} defaultVisibility>\n <div className=\"w-full mt-5\">\n {isMobile ? (\n <MaskedInput\n mask={MASK_ZIP_CODE_SHORT}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n label=\"Zip Code\"\n name=\"zipCode\"\n placeholder=\"Enter Zip Code\"\n validate={zipCodeValidator}\n {..._props}\n />\n )}\n />\n ) : null}\n </div>\n </ResponsiveContainer>\n <br />\n </>\n\n <FormikCheckboxField\n name=\"save\"\n id=\"save\"\n label={checkboxText}\n className=\"text-sm pl-1\"\n onStateChange={(val) => {\n formikProps.setFieldValue('save', val);\n formikProps.setFieldValue('savePaymentDetails', val);\n if (!val) {\n setDisabledDefault(true);\n setMakeThisTheDefaultPayment && setMakeThisTheDefaultPayment(false);\n } else {\n setDisabledDefault(false);\n }\n }}\n checked={formikProps.values.save}\n />\n {makeThisTheDefaultPayment !== undefined && setMakeThisTheDefaultPayment ? (\n <Checkbox\n checked={makeThisTheDefaultPayment}\n onChange={setMakeThisTheDefaultPayment}\n id=\"chkDefaultPayment\"\n text=\"Save as default payment method\"\n labelClassName=\"pl-1 text-sm\"\n className=\"mt-1\"\n disabled={disabledDefault}\n />\n ) : null}\n </Form>\n </div>\n );\n};\n\nconst AcceptedCreditCardsDisclaimer = () => {\n const { isEnabled } = useFeatureFlags();\n return (\n <div className=\"my-4\">\n <p className=\"text-center font-semibold text-xs text-grey-1\">We Accept</p>\n {isEnabled(FeatureFlagTypes.enable_debit_web) ? (\n <img width={145} className=\"mx-auto py-2\" src={CCImageNew} />\n ) : (\n <img className=\"mx-auto\" src={CCImage} />\n )}\n </div>\n );\n};\n","import React, { useContext } from 'react';\n\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\nimport { RadioItem } from 'features/product/components/RadioItem';\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\nimport { createStyles } from 'utils/createStyle';\n\nexport interface OrderBillingAddressesProps {\n onEdit?: (address: FamilyAddress) => void;\n onChange: (address: FamilyAddress) => unknown;\n selectedAddressId?: string | undefined;\n}\n\nconst styles = createStyles({\n list: ['overflow-auto', { maxHeight: '500px' }],\n});\n\nexport const OrderAddresses = ({\n onEdit,\n onChange,\n selectedAddressId,\n}: OrderBillingAddressesProps) => {\n const { cartInfoDetails } = useContext(OrderScreenContext);\n\n const addresses = [...(cartInfoDetails.shipping.userAddresses.addresses || [])];\n\n return (\n <div>\n <ul className={styles.list}>\n {addresses &&\n addresses.reverse().map((address) => (\n <li key={address.id}>\n <div className=\"mb-2\">\n <RadioItem\n value={address.id}\n text={\n <div className=\"inline-block flex flex-row items-center\">\n <div className=\"mr-auto inline-block flex flex-col w-full\">\n <div className=\"text-brand\">{`${address.firstName} ${address.lastName}`}</div>\n <div>{`${address.address1}${\n address.address2 ? ', ' + address.address2 : ''\n }, ${address.city}, ${address.state}`}</div>\n </div>\n {onEdit && (\n <a\n className=\"text-xs text-grey-1 cursor-pointer ml-auto\"\n onClick={() => onEdit(address)}\n >\n Edit\n </a>\n )}\n </div>\n }\n selected={selectedAddressId === address.id}\n onClick={() => onChange(address)}\n />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import React from 'react';\nimport MaskedInput from 'react-text-mask';\n\nimport { FormikTextField } from '../components/utils/fields';\n\nimport { FieldContainerProps } from './FieldContainer';\n\nimport { FieldWrapperProps } from 'components/fields/FieldWrapper';\nimport { MASK_PHONE_US } from 'common/modules/mask-text/masks';\nimport { phoneNumberValidator } from 'common/modules/form-validation/validators';\n\nexport type PhoneFieldProps = FieldContainerProps &\n FieldWrapperProps &\n React.InputHTMLAttributes<HTMLInputElement> & {\n inputRef?: React.Ref<HTMLInputElement>;\n };\n\nexport const PhoneField = (props: PhoneFieldProps) => {\n const { label } = props;\n\n return (\n <MaskedInput\n {...props}\n mask={MASK_PHONE_US}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n {..._props}\n inputRef={ref}\n type=\"tel\"\n validate={phoneNumberValidator}\n label={label}\n name={props.name || ''}\n />\n )}\n />\n );\n};\n","import React from 'react';\n\nimport { Address } from 'common/api/models/Address';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { Btn } from 'components/btn/Btn';\n\nexport interface SuggestedAddressProps {\n suggestedAddress: Address;\n originalAddress: Address;\n onClose: () => void;\n onConfirm: (useSuggestion: boolean) => void;\n}\n\nexport const SuggestedAddress = ({\n suggestedAddress,\n originalAddress,\n onConfirm,\n onClose,\n}: SuggestedAddressProps) => {\n const originalStreetAddress = originalAddress.address2\n ? `${originalAddress.address1} ${originalAddress.address2}`\n : originalAddress.address1;\n const suggestedStreetAddress = suggestedAddress.address2\n ? `${suggestedAddress.address1} ${suggestedAddress.address2}`\n : suggestedAddress.address1;\n\n return (\n <Modal\n title=\"Suggested Address\"\n isOpen={Boolean(suggestedAddress)}\n onClose={onClose}\n size={[ModalSize.CONTENT_WIDTH, ModalSize.CONTENT_WIDTH]}\n >\n {suggestedAddress && (\n <>\n <p className=\"text-xl font-bold mb-4\">\n Would you like to update to the suggested address match?\n </p>\n <div>\n <h3 className=\"font-bold\">Original Address</h3>\n <p>{originalStreetAddress}</p>\n <p>\n {originalAddress.city}, {originalAddress.state},{' '}\n {originalAddress.zipCode}\n </p>\n </div>\n <div className=\"mt-4\">\n <h3 className=\"font-bold\">Suggested Address</h3>\n <div>\n <p>{suggestedStreetAddress}</p>\n <p>\n {suggestedAddress.city}, {suggestedAddress.state},{' '}\n {suggestedAddress.zipCode}\n </p>\n </div>\n </div>\n <div className=\"mt-8\">\n <div className=\"text-center mt-4\">\n <Btn\n type=\"button\"\n className=\"w-full mb-2 sm:max-w-xs\"\n onClick={() => onConfirm(true)}\n >\n Yes\n </Btn>\n <Btn type=\"button\" isSecondary={true} onClick={() => onConfirm(false)}>\n No, Use Address As Entered\n </Btn>\n </div>\n </div>\n </>\n )}\n </Modal>\n );\n};\n","import { Address } from '../models/Address';\n\nimport { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\nimport { FULFILLMENT_ADDRESS_VALIDATION_URL } from 'common/api/config';\n\nexport interface AddressValidationResult {\n hasSuggestions: boolean;\n wasAddressFound: boolean;\n suggestedAddress: Address | null;\n}\n\nexport const validateAddress = (address: Address) =>\n withTokensIfNeeded<AddressValidationResult>(FULFILLMENT_ADDRESS_VALIDATION_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(address),\n });\n","import { Form, Formik, FormikErrors } from 'formik';\nimport React, { useCallback, useState } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { FormikTextField, FormikComboField } from '../../../product/components/utils/fields';\nimport { Btn } from '../../../../components/btn/Btn';\nimport { orgAddressLine1Validator } from '../../../coordinator/enrollment/steps/validators';\nimport { PhoneField } from '../../../product/components/FieldPhone';\n\nimport { SuggestedAddress } from './SuggestedAddress';\n\nimport { addAddress, editAddress } from 'common/api/crm/family/address';\nimport { Address } from 'common/api/models/Address';\nimport { stateOptions } from 'common/modules/form-validation/utils/stateOptions';\nimport {\n addressLine2Validator,\n cityValidator,\n stateValidator,\n zipCodeValidator,\n} from 'common/modules/form-validation/validators';\nimport { createStyles } from 'utils/createStyle';\nimport { EASE_OUT_QUART, fadeIn } from 'styles/easing';\nimport { validateAddress } from 'common/api/fulfillment/service';\nimport { useAlert } from 'modules/alerts';\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\nimport { waitPromise } from 'utils/promiseHelpers';\n\nexport interface ShippingDetailsRequest extends Omit<FamilyAddress, 'id'> {\n id?: string;\n}\n\ninterface AddressFormOverrides {\n submitBtnText: string;\n addressFormHeader: string;\n personalInfoFormHeader: string;\n}\n\nexport interface OrderEditAddressFormProps {\n overrides?: AddressFormOverrides;\n addressId?: string;\n request: ShippingDetailsRequest;\n onAddressSaved: (address: FamilyAddress) => void;\n onCancel: () => void;\n}\n\nconst styles = createStyles({\n formPersonalInformationRow1: [\n 'grid',\n {\n gridTemplateColumns: '',\n gridAutoRows: '65px',\n columnGap: '25px',\n '@media(max-width: 640px)': {\n gridTemplateColumns: '',\n },\n },\n ],\n\n formShippingAddressRow1: [\n 'grid',\n {\n gridAutoRows: '65px',\n gridTemplateColumns: '312px auto',\n columnGap: '25px',\n '@media(max-width: 640px)': {\n gridTemplateColumns: '1fr',\n },\n '@media(max-width: 1125px)': {\n gridTemplateColumns: '1fr 0fr',\n },\n },\n ],\n\n formShippingAddressRow2: [\n 'grid',\n {\n gridAutoRows: '65px',\n gridTemplateColumns: 'auto 130px 130px',\n columnGap: '25px',\n '@media(max-width: 640px)': {\n gridTemplateColumns: '1fr 1fr',\n },\n },\n ],\n\n openFormAnimation: {\n opacity: 0,\n animation: `${fadeIn} 0.3s ${EASE_OUT_QUART} forwards`,\n },\n});\n\nexport const OrderEditAddressForm = ({\n overrides = {\n submitBtnText: 'Save Address',\n addressFormHeader: 'Shipping Address',\n personalInfoFormHeader: 'Personal Information',\n },\n addressId,\n request,\n onAddressSaved,\n onCancel,\n}: OrderEditAddressFormProps) => {\n const validateFormData = (formValues: ShippingDetailsRequest) => {\n const errors: FormikErrors<ShippingDetailsRequest> = {};\n\n if (!formValues.firstName) {\n errors.firstName = 'First Name is required';\n }\n if (!formValues.lastName) {\n errors.lastName = 'Last Name is required';\n }\n if (!formValues.phoneNumber) {\n errors.phoneNumber = 'Phone Number is required';\n }\n\n if (!formValues.address1) {\n errors.address1 = 'Address is required';\n }\n if (!formValues.city) {\n errors.city = 'City is required';\n }\n if (!formValues.state) {\n errors.state = 'State is required';\n }\n if (!formValues.zipCode) {\n errors.zipCode = 'ZipCode is required';\n }\n\n return errors;\n };\n\n const saveAddress = useCallback(\n async (saveAddressRequest: FamilyAddress) => {\n const response = addressId\n ? await editAddress(saveAddressRequest)\n : await addAddress(saveAddressRequest);\n\n if (response.response?.ok) {\n onAddressSaved({\n ...saveAddressRequest,\n id: ((response.data as string) || '').toString(),\n });\n }\n },\n [onAddressSaved, addressId]\n );\n\n const alert = useAlert();\n\n const [suggestedAddress, setSuggestedAddress] = useState<Address | null>();\n const [originalAddress, setOriginalAddress] = useState<FamilyAddress | null>();\n const [isBusy, setIsBusy] = useState(false);\n\n const onSaveAddress = useCallback(\n async (values: ShippingDetailsRequest) => {\n const saveAddressRequest = {\n ...values,\n id: addressId || '',\n firstName: values.firstName,\n lastName: values.lastName,\n phoneNumber: values.phoneNumber,\n };\n\n setOriginalAddress(saveAddressRequest);\n\n const validationResult = await validateAddress(saveAddressRequest);\n\n if (validationResult.data && validationResult.data.hasSuggestions) {\n setSuggestedAddress(validationResult.data.suggestedAddress);\n return;\n }\n\n if (validationResult.data && !validationResult.data.wasAddressFound) {\n alert({\n title: 'Invalid Address',\n message:\n 'The address you have entered is not valid. Please correct the address and try again.',\n });\n\n return;\n }\n\n await saveAddress(saveAddressRequest);\n },\n [setOriginalAddress, setSuggestedAddress, addressId, alert, saveAddress]\n );\n\n const _onSaveAddress = useCallback(\n (values: ShippingDetailsRequest) => {\n waitPromise(onSaveAddress(values), setIsBusy);\n },\n [onSaveAddress, setIsBusy]\n );\n\n const onSuggestedAddressConfirm = async (useSuggestedAddress: boolean) => {\n if (!originalAddress || !suggestedAddress) {\n return;\n }\n\n const address: FamilyAddress = useSuggestedAddress\n ? {\n id: '',\n firstName: originalAddress.firstName,\n lastName: originalAddress.lastName,\n phoneNumber: originalAddress.phoneNumber,\n ...suggestedAddress,\n }\n : originalAddress;\n\n await saveAddress(address);\n };\n\n const stateOptionsList = [\n { text: '', value: '' },\n ...stateOptions.map((opt) => ({ text: opt.label, value: opt.value })),\n ];\n\n return (\n <div className={styles.openFormAnimation}>\n {isBusy && (\n <div>\n <Skeleton height={30} />\n <Skeleton height={200} />\n <div className=\"my-4\" />\n <Skeleton height={30} />\n <Skeleton height={135} />\n <div className=\"my-2\" />\n <Skeleton height={45} width={170} className=\"mr-2\" />\n <Skeleton height={45} width={170} />\n </div>\n )}\n <div style={{ display: isBusy ? 'none' : '' }}>\n <Formik\n initialValues={request}\n onSubmit={_onSaveAddress}\n validate={validateFormData}\n >\n {(formikProps) => (\n <Form>\n <div>\n <div>\n <div className=\"text-brand-dark text-lg font-bold mb-1\">\n {overrides.personalInfoFormHeader}\n </div>\n <div className={styles.formPersonalInformationRow1}>\n <div>\n <FormikTextField<ShippingDetailsRequest>\n name=\"firstName\"\n title={'First Name'}\n label={'First Name'}\n placeholder=\"First Name\"\n error={formikProps.errors.firstName}\n required={true}\n />\n </div>\n <div>\n <FormikTextField<ShippingDetailsRequest>\n name=\"lastName\"\n title={'Last Name'}\n label={'Last Name'}\n placeholder=\"Last Name\"\n error={formikProps.errors.lastName}\n required={true}\n />\n </div>\n <div>\n <PhoneField\n name=\"phoneNumber\"\n title={'Phone Number'}\n label={'Phone Number'}\n placeholder=\"Phone Number\"\n error={formikProps.errors.phoneNumber}\n required={true}\n />\n </div>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <div className=\"text-brand-dark text-lg font-bold mb-1\">\n {overrides.addressFormHeader}\n </div>\n <div className=\"grid grid-cols-1 gap-1\">\n <div className={styles.formShippingAddressRow1}>\n <div className=\"inline-block align-top\">\n <FormikTextField\n name=\"address1\"\n label=\"Address\"\n placeholder=\"1234 Street Name\"\n validate={orgAddressLine1Validator}\n error={formikProps.errors.address1}\n required={true}\n />\n </div>\n <div className=\"inline-block align-top w-full\">\n <FormikTextField\n name=\"address2\"\n label=\"Address/Suite/Other\"\n placeholder=\"\"\n validate={addressLine2Validator}\n error={formikProps.errors.address2}\n />\n </div>\n </div>\n <div className={styles.formShippingAddressRow2}>\n <div className=\"inline-block align-top w-full col-span-2 sm:col-span-1\">\n <FormikTextField\n name=\"city\"\n label=\"City\"\n placeholder=\"City Name\"\n validate={cityValidator}\n required={true}\n error={formikProps.errors.city}\n />\n </div>\n <div>\n <FormikComboField\n label=\"State\"\n name=\"state\"\n validate={stateValidator}\n required={true}\n options={stateOptionsList}\n error={formikProps.errors.state}\n />\n </div>\n <div className=\"inline-block align-top \">\n <FormikTextField\n name=\"zipCode\"\n label={'Zip'}\n placeholder=\"12345\"\n required={true}\n maxLength={10}\n validate={zipCodeValidator}\n error={formikProps.errors.zipCode}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\"text-left mt-4\">\n <div className=\"block\">\n <div className=\"sm:hidden flex flex-col gap-4 justify-center w-full\">\n <div className=\"text-center\">\n <Btn type=\"submit\" className=\"max-w-xs w-full\">\n {overrides.submitBtnText}\n </Btn>\n </div>\n <div className=\"text-center\">\n <Btn\n type=\"button\"\n className=\"max-w-xs w-full\"\n isSecondary={true}\n onClick={onCancel}\n >\n Cancel\n </Btn>\n </div>\n </div>\n <div className=\"hidden sm:flex text-left gap-4\">\n <Btn type=\"button\" isSecondary={true} onClick={onCancel}>\n Cancel\n </Btn>\n <Btn type=\"submit\" className=\"hidden sm:inline-block\">\n {overrides.submitBtnText}\n </Btn>\n </div>\n </div>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n {suggestedAddress && originalAddress && (\n <SuggestedAddress\n suggestedAddress={suggestedAddress}\n originalAddress={originalAddress}\n onConfirm={onSuggestedAddressConfirm}\n onClose={() => setSuggestedAddress(null)}\n />\n )}\n </div>\n );\n};\n","import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { Formik, Form, FormikProps } from 'formik';\n\nimport { OrderAddresses } from './OrderAddresses';\n\nimport {\n emptyFamilyAddress,\n FamilyAddress,\n} from 'common/api/crm/family/address/models/FamilyAddress';\nimport { FormikTextField } from 'features/product/components/utils/fields';\nimport { PayWithCreditCardRequest } from 'common/types/CheckoutRequest';\nimport { OrderEditAddressForm } from '../shipping/OrderEditAddressForm';\nimport MaskedInput from 'react-text-mask';\nimport { MASK_SHORT_DATE, CREDIT_CARD_MASK, MASK_CVC } from 'common/modules/mask-text/masks';\nimport { FormikCheckboxField } from 'components/fields/FormikTextField';\nimport { useSelector } from 'react-redux';\nimport { selectHomeDetails } from 'common/features/store/duck/home/duck';\nimport CCImage from '../../../../media/images/allowed-creditcards-img.png';\nimport CCImageNew from '../../../../media/images/new-allowed-creditcards-img.png';\nimport {\n maskedCardNumberValidator,\n expirationDateValidator,\n cvcValidator,\n nameValidator,\n} from 'common/utils/creditCardValidators';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { Checkbox } from 'components/checkbox/Checkbox';\n\nexport interface CreditCardFields {\n name: string;\n cardNumber: string;\n expirationDate: string;\n securityCode: string;\n address: FamilyAddress;\n zipCode?: string;\n save: boolean;\n}\n\nexport interface CreditCardFormProps {\n formRef: React.MutableRefObject<FormikProps<CreditCardFields>>;\n initialValues: PayWithCreditCardRequest | undefined;\n creditCardInfo?: PayWithCreditCardRequest;\n setCreditCardInfo: (_: PayWithCreditCardRequest) => void;\n onAddressForm?: (state: boolean) => void;\n makeThisTheDefaultPayment?: boolean;\n setMakeThisTheDefaultPayment?: (state: boolean) => void;\n checkboxText?: string;\n}\n\nexport const CreditCardForm = ({\n formRef,\n initialValues,\n setCreditCardInfo,\n onAddressForm,\n makeThisTheDefaultPayment,\n setMakeThisTheDefaultPayment,\n checkboxText = 'Save Credit Card',\n}: CreditCardFormProps) => {\n const [isNewAddress, setIsNewAddress] = useState<boolean>(false);\n const [selectedAddress, setSelectedAddress] = useState<FamilyAddress>();\n const homeDetails = useSelector(selectHomeDetails);\n\n const onSubmit = async (values: CreditCardFields) => {\n const payload: PayWithCreditCardRequest = {\n ...values,\n cardNumber: values.cardNumber.replace(/\\s/g, ''),\n expirationDate: values.expirationDate.replace('/', ''),\n address: selectedAddress || null,\n zipCode: selectedAddress?.zipCode || '',\n };\n setCreditCardInfo(payload);\n };\n\n useEffect(() => {\n if (onAddressForm) {\n onAddressForm(isNewAddress);\n }\n }, [onAddressForm, isNewAddress]);\n\n const formValues = useMemo((): CreditCardFields | undefined => {\n if (!homeDetails) {\n return;\n }\n\n const defaultAddress = {\n ...emptyFamilyAddress,\n firstName: homeDetails.profile.firstName,\n lastName: homeDetails.profile.lastName,\n phoneNumber: '',\n };\n\n if (initialValues) {\n return {\n ...initialValues,\n address: initialValues.address || defaultAddress,\n };\n }\n\n return {\n name: homeDetails.profile.firstName,\n cardNumber: '',\n expirationDate: '',\n securityCode: '',\n address: defaultAddress,\n save: false,\n };\n }, [homeDetails, initialValues]);\n\n useEffect(() => {\n if (initialValues?.address) {\n setSelectedAddress(initialValues.address);\n }\n }, [initialValues]);\n\n const onAddressSelected = useCallback((address: FamilyAddress) => {\n setSelectedAddress(address);\n }, []);\n\n return (\n <div data-recording-disable>\n {formValues && (\n <Formik validateOnChange initialValues={formValues} onSubmit={onSubmit}>\n {(props) => {\n formRef.current = props;\n return (\n <Form>\n <AcceptedCreditCardsDisclaimer />\n <>\n <p className=\"text-sm text-grey-1 pb-2\">\n Credit Card Information\n </p>\n <FormikTextField\n name=\"name\"\n label=\"Name on card\"\n placeholder=\"type your name as on the card\"\n validate={nameValidator}\n />\n <br />\n <MaskedInput\n mask={CREDIT_CARD_MASK}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n id=\"cardNumber\"\n name=\"cardNumber\"\n label=\"Card number\"\n placeholder=\"0000 0000 0000 0000\"\n validate={maskedCardNumberValidator}\n {..._props}\n onBlur={() => onSubmit(props.values)}\n />\n )}\n />\n <br />\n <div className=\"flex justify-between\">\n <MaskedInput\n mask={MASK_CVC}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n name=\"securityCode\"\n label=\"CVC\"\n placeholder=\"000\"\n maxLength={3}\n validate={cvcValidator}\n {..._props}\n onBlur={() => props.handleSubmit()}\n />\n )}\n />\n\n <MaskedInput\n mask={MASK_SHORT_DATE}\n guide={false}\n render={(ref, _props) => (\n <FormikTextField\n inputRef={ref}\n label=\"Exp Date\"\n name=\"expirationDate\"\n placeholder=\"mm/yy\"\n validate={expirationDateValidator}\n {..._props}\n onBlur={() => props.handleSubmit()}\n />\n )}\n />\n </div>\n <br />\n <p className=\"text-sm text-grey-1 pb-1\">Billing Address</p>\n <p className=\"text-xs text-grey-1 font-light pb-3\">\n {isNewAddress\n ? 'Fill out the form with the new address'\n : 'Select billing address associated with your credit card'}\n </p>\n </>\n\n {isNewAddress ? (\n <OrderEditAddressForm\n overrides={{\n submitBtnText: 'Save Address',\n addressFormHeader: 'Billing Address',\n personalInfoFormHeader: 'Personal Information',\n }}\n request={emptyFamilyAddress}\n onAddressSaved={(addr) => {\n setSelectedAddress(addr);\n setIsNewAddress(false);\n props.handleSubmit();\n }}\n onCancel={() => setIsNewAddress(false)}\n />\n ) : (\n <OrderAddresses\n onChange={(addr) => {\n onAddressSelected(addr);\n props.handleSubmit();\n }}\n selectedAddressId={selectedAddress?.id}\n />\n )}\n <FormikCheckboxField\n name=\"save\"\n id=\"save\"\n label={checkboxText}\n className=\"text-sm pl-1\"\n onStateChange={() => {\n props.handleSubmit();\n }}\n checked={initialValues?.save}\n />\n {makeThisTheDefaultPayment !== undefined &&\n setMakeThisTheDefaultPayment ? (\n <Checkbox\n checked={makeThisTheDefaultPayment}\n onChange={setMakeThisTheDefaultPayment}\n id=\"chkDefaultPayment\"\n text=\"Save as default payment method\"\n labelClassName=\"pl-1 text-sm\"\n />\n ) : null}\n {!isNewAddress && (\n <button\n type=\"button\"\n onClick={() => {\n setIsNewAddress(!isNewAddress);\n }}\n className=\"text-sm text-brand block underline hover:underline focus:underline text-center my-4\"\n >\n {isNewAddress\n ? 'Select an existing address'\n : 'Use a new address'}\n </button>\n )}\n </Form>\n );\n }}\n </Formik>\n )}\n </div>\n );\n};\n\nconst AcceptedCreditCardsDisclaimer = () => {\n const { isEnabled } = useFeatureFlags();\n return (\n <div className=\"my-4\">\n <p className=\"text-center font-semibold text-xs text-grey-1\">We Accept</p>\n {isEnabled(FeatureFlagTypes.enable_debit_web) ? (\n <img width={145} className=\"mx-auto py-2\" src={CCImageNew} />\n ) : (\n <img className=\"mx-auto\" src={CCImage} />\n )}\n </div>\n );\n};\n","import React, { useContext, useEffect, useMemo, useState, useRef } from 'react';\nimport { useHistory } from 'react-router';\nimport { useDispatch } from 'react-redux';\nimport Skeleton from 'react-loading-skeleton';\nimport TextareaAutosize from 'react-textarea-autosize';\nimport classNames from 'classnames';\n\nimport { OrderPaymentOptions } from '../components/payment/OrderPaymentOptions';\nimport { OrderPaymentOptionsWithDebit } from '../components/payment/OrderPaymentOptionsWithDebit';\nimport { OrderScreen } from '../OrderScreen';\nimport { getPaymentMethod, PaymentInfo } from '../utils/useCartPayment';\nimport { CreditDebitCardForm, CreditCardFields } from '../components/payment/CreditDebitCardForm';\n\nimport {\n CreditCardForm,\n CreditCardFields as CreditCardOnlyFields,\n} from '../components/payment/CreditCardForm';\nimport {\n OrderScreenContext,\n CheckoutFlowState,\n} from 'features/order-summary/screens/CheckoutScreen';\n\nimport { createStyles } from 'utils/createStyle';\nimport { Btn } from 'components/btn/Btn';\nimport { Accordion } from 'features/product/components/Accordion';\nimport {\n PaymentType,\n CreditCardPaymentMethod,\n ACHPaymentMethod,\n CheckPaymentMethod,\n PaymentSubType,\n PaymentMethod,\n} from 'common/api/e-comm/payment-types';\nimport { Routes } from 'routes';\nimport {\n getDefaultPaymentMethodThunk,\n setDefaultPaymentMethodThunk,\n} from 'common/features/store/duck/account/duck';\nimport { RootState, useRootSelector } from 'rootStore';\nimport { addBillingInfo } from 'common/api/e-comm/orders/service';\nimport { useHomeDetails } from 'common/features/store/duck/home/utils/useHomeDetails';\nimport { useAlert } from 'modules/alerts';\nimport { MAX_SHIP_TO_HOME_CARD_QUANTITY, SERVICE_UNAVAILABLE_MESSAGE } from 'config';\nimport {\n PayWithCreditCardRequest,\n PayWithDebitCardRequest,\n emptyDebitCard,\n emptyCreditCard,\n} from 'common/types/CheckoutRequest';\nimport { useScrollToTop } from 'hooks/useScrollToTop';\nimport { CartInfoState } from '../CartInfoState';\nimport { isOrderExceedsMaxCards } from 'features/cart/utils/cartCheck';\nimport { Formik, FormikHelpers, FormikProps } from 'formik';\nimport { Modal, ModalFooter, ModalPrimaryBtn, ModalSecondaryBtn } from 'components/modal/Modal';\nimport { selectIsShipToCoordinatorEnabled } from 'common/features/store/duck/organization/duck';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { validateCardBin, validateCardBinWithTokenX } from 'common/api/e-comm/credit-cards/service';\nimport { PaymentIframe } from '../components/PaymentIframe';\nimport { isInIframe } from 'utils';\n\nconst styles = createStyles({\n page: ['flex', { maxWidth: '580px' }],\n termsContent: [\n 'w-full text-sm mt-1 text-grey-1 font-normal resize-none',\n { lineHeight: '22px' },\n ],\n btn: 'max-w-xs',\n});\n\nexport type OrderPaymentScreenParams = {\n shipToHome: string | undefined;\n};\n\ninterface ModalExceedsMaxCardsProps {\n maxCards: number;\n isOpen: boolean;\n closeModal: () => void;\n primaryButton: {\n text: string;\n action: () => void;\n };\n secondaryButton?: {\n text: string;\n action: () => void;\n };\n isShipToCoordinatorEnabled: boolean;\n}\n\nconst ModalExceedsMaxCards = ({\n maxCards,\n isOpen,\n closeModal,\n primaryButton,\n secondaryButton,\n isShipToCoordinatorEnabled,\n}: ModalExceedsMaxCardsProps) => {\n const textContent = useMemo(() => {\n return isShipToCoordinatorEnabled\n ? `Ship to Home orders have a maximum of ${maxCards} cards. The Physical Cards in your order\n will be sent to your coordinator. If you want to Ship to Home, you will need to\n place a separate order.`\n : `Ship to Home orders have a maximum of ${maxCards} cards. \n In order to Ship to Home additional cards, you will need to place a separate order.`;\n }, [isShipToCoordinatorEnabled, maxCards]);\n\n return (\n <Modal title=\"\" isOpen={isOpen} onClose={closeModal}>\n <h3 className=\" font-semibold text-3xl text-center sm:px-10 px-2\">{`${maxCards} Cards Max For Ship to Home Orders`}</h3>\n <div className=\"sm:-mb-4 mb-2 mt-8 sm:px-10 px-2 text-grey-medium font-normal text-center\">\n {textContent}\n </div>\n <ModalFooter>\n <ModalPrimaryBtn onClick={primaryButton.action}>\n {primaryButton.text}\n </ModalPrimaryBtn>\n {secondaryButton ? (\n <ModalSecondaryBtn onClick={secondaryButton.action}>\n {secondaryButton.text}\n </ModalSecondaryBtn>\n ) : null}\n </ModalFooter>\n </Modal>\n );\n};\n\nconst OrderPaymentScreenContent = () => {\n useScrollToTop();\n\n const { defaultPaymentAsyncState } = useRootSelector((s) => s.store.account);\n const dispatch = useDispatch<any>();\n const [makeThisTheDefaultPayment, setMakeThisTheDefaultPayment] = useState(false);\n const { cartInfo, setCartInfo, cartInfoDetails, checkoutFlowState, setCheckoutFlowState } =\n useContext(OrderScreenContext);\n const history = useHistory();\n const { paymentMethodId } = cartInfo;\n const { shipToHomeIfPossible } = cartInfoDetails;\n const { cart } = useRootSelector((s) => s.store.cart);\n const homeDetails = useHomeDetails();\n const disableCheckoutBtn = checkoutFlowState === CheckoutFlowState.DISABLED;\n const paymentTypes = useRootSelector((s) => s.store.organization.paymentTypes);\n const formRef = useRef<FormikProps<CreditCardFields>>({} as FormikProps<CreditCardFields>);\n const alert = useAlert();\n const isShipCoordinatorEnabled = useRootSelector(selectIsShipToCoordinatorEnabled);\n const [showExceededModal, setShowExceededModal] = useState(false);\n const { isEnabled } = useFeatureFlags();\n\n const onNewCreditCardConfirm = (values: PayWithCreditCardRequest) => {\n setCartInfo({\n ...cartInfo,\n newCreditCard: values,\n });\n if (!isEnabled(FeatureFlagTypes.enable_debit_web)) {\n cartInfoDetails.shipping.userAddresses.refreshAddresses();\n }\n };\n\n const onNewDebitCardConfirm = (values: PayWithDebitCardRequest) => {\n setCartInfo({\n ...cartInfo,\n newDebitCard: values,\n });\n };\n\n const setSelectedPayment = async (value: PaymentInfo) => {\n let paymentMethod = getPaymentMethod(value);\n\n if (paymentMethod && cart && homeDetails) {\n const { firstName, lastName, email } = homeDetails.profile;\n\n const name = `${firstName} ${lastName}`.trim() || '';\n\n if (value.id === 'new-credit-card') {\n setCartInfo({\n ...cartInfo,\n newDebitCard: { ...emptyDebitCard, name },\n paymentMethodId: {\n id: 'new-credit-card',\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Credit,\n },\n });\n paymentMethod = {\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Credit,\n achAccountId: null,\n creditCardId: null,\n };\n }\n\n if (value.id === 'new-debit-card') {\n setCartInfo({\n ...cartInfo,\n newCreditCard: { ...emptyCreditCard, name },\n paymentMethodId: {\n id: 'new-debit-card',\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Debit,\n },\n });\n paymentMethod = {\n paymentType: PaymentType.CreditCard,\n paymentSubType: PaymentSubType.Debit,\n achAccountId: null,\n creditCardId: null,\n };\n }\n\n if (['new-credit-card', 'new-debit-card'].includes(`${value.id}`)) {\n return;\n }\n\n setCartInfo({\n ...cartInfo,\n paymentMethodId: value,\n });\n }\n };\n\n const onBack = () => {\n history.push(Routes.ShopOrderSummary, cartInfo);\n };\n\n useEffect(() => {\n getDefaultPaymentMethodThunk()(dispatch);\n }, [dispatch]);\n\n useEffect(() => {\n setCartInfo((currentCartInfo: CartInfoState) => ({\n ...currentCartInfo,\n setPaymentMethodAsDefault: makeThisTheDefaultPayment,\n }));\n }, [makeThisTheDefaultPayment, setCartInfo]);\n\n const setForceShipToCoordinator = async () => {\n await setCartInfo({\n ...cartInfo,\n shipToHome: false,\n });\n history.push(Routes.ShopOrderReview, cartInfo);\n };\n\n const onContinue = async () => {\n let paymentType;\n if (paymentMethodId) {\n if (paymentMethodId.paymentType === PaymentType.Check) {\n paymentType = {\n paymentType: PaymentType.Check,\n achAccountId: null,\n creditCardId: null,\n } as CheckPaymentMethod;\n } else if (paymentMethodId.paymentType === PaymentType.BankAccount) {\n paymentType = {\n paymentType: PaymentType.BankAccount,\n paymentSubType: null,\n achAccountId: paymentMethodId.id as string,\n creditCardId: null,\n } as ACHPaymentMethod;\n } else if (\n paymentMethodId.paymentType === PaymentType.CreditCard &&\n paymentMethodId.id !== 'new-debit-card' &&\n paymentMethodId.id !== 'new-credit-card'\n ) {\n paymentType = {\n paymentType: PaymentType.CreditCard,\n paymentSubType: paymentMethodId.paymentSubType,\n creditCardId: paymentMethodId.id as number,\n achAccountId: null,\n } as CreditCardPaymentMethod;\n } else if (\n paymentMethodId.id === 'new-credit-card' ||\n paymentMethodId.id === 'new-debit-card'\n ) {\n paymentType = {\n paymentType: PaymentType.CreditCard,\n paymentSubType: paymentMethodId.paymentSubType,\n creditCardId: null,\n achAccountId: null,\n } as PaymentMethod;\n }\n if (\n paymentType &&\n makeThisTheDefaultPayment &&\n paymentMethodId.id !== 'new-debit-card' &&\n paymentMethodId.id !== 'new-credit-card'\n ) {\n await setDefaultPaymentMethodThunk(paymentType)(dispatch);\n }\n }\n\n if (paymentType && cart) {\n const response = await addBillingInfo({\n cartId: cart.id,\n firstName: homeDetails!.profile.firstName,\n lastName: homeDetails!.profile.lastName,\n email: homeDetails!.profile.email,\n paymentMethod: paymentType,\n });\n if (response.error) {\n alert({ title: 'Error setting payment', message: SERVICE_UNAVAILABLE_MESSAGE });\n }\n }\n\n if (shipToHomeIfPossible) {\n if (cart && isOrderExceedsMaxCards(cart)) {\n setShowExceededModal(true);\n setCheckoutFlowState(CheckoutFlowState.DISABLED);\n return;\n }\n history.push(Routes.ShopOrderShipping, cartInfo);\n } else {\n history.push(Routes.ShopOrderReview, cartInfo);\n }\n };\n\n const demoFAQ = [\n { title: 'What if my bank account information changes?', content: 'Content 1', value: '1' },\n { title: 'Which credit cards xxxxx?', content: 'Content 2', value: '2' },\n { title: 'How do I xxxxx?', content: 'Content 3', value: '3' },\n ].map(({ title, content, value }) => ({\n value,\n title: <span className=\"font-semibold text-xs leading-1 text-grey-1\">{title}</span>,\n content: (\n <div className=\"pl-12\">\n <TextareaAutosize\n className={styles.termsContent}\n readOnly={true}\n value={(content || '').toString()}\n />\n </div>\n ),\n }));\n\n const continueToShippingNoDebit = `Continue to ${\n !shipToHomeIfPossible ? 'Confirm Order' : 'Shipping'\n }`;\n\n const continueToShippingIsDebit = !shipToHomeIfPossible\n ? 'Review Order'\n : 'Continue to Shipping';\n\n const continueToShipping = isEnabled(FeatureFlagTypes.enable_debit_web)\n ? continueToShippingIsDebit\n : continueToShippingNoDebit;\n\n const continueToButtonUniqueClass = shipToHomeIfPossible\n ? 'cart_continue_to_shipping_button'\n : 'cart_review_order_button';\n\n const isCheckEnabled = Boolean(paymentTypes?.includes(PaymentType.Check));\n const orgSupportsPayingCoordinator = useRootSelector((rootState: RootState) => {\n return rootState?.store?.organization?.options?.isPayCoordinatorEnabled;\n });\n\n const continueToShippingDisabled =\n !cartInfo.paymentMethodId ||\n (cartInfo.paymentMethodId.paymentType === PaymentType.Check && !isCheckEnabled) ||\n (!orgSupportsPayingCoordinator &&\n cartInfo.paymentMethodId.paymentType === PaymentType.Check);\n\n const [hideButtons, setHideButtons] = useState(false);\n\n const renderCreditDebitCardForm = () => {\n if (paymentMethodId?.id === 'new-debit-card') {\n return (\n <CreditDebitCardForm\n makeThisTheDefaultPayment={makeThisTheDefaultPayment}\n setMakeThisTheDefaultPayment={setMakeThisTheDefaultPayment}\n isDebitCard={true}\n />\n );\n }\n\n if (paymentMethodId?.id === 'new-credit-card') {\n return (\n <CreditDebitCardForm\n makeThisTheDefaultPayment={makeThisTheDefaultPayment}\n setMakeThisTheDefaultPayment={setMakeThisTheDefaultPayment}\n isDebitCard={false}\n />\n );\n }\n\n return <></>;\n };\n\n let initialValues;\n let isNewDebitFormSelected = false;\n\n if (paymentMethodId?.id === 'new-credit-card') {\n initialValues = cartInfo.newCreditCard;\n } else if (paymentMethodId?.id === 'new-debit-card') {\n isNewDebitFormSelected = true;\n initialValues = cartInfo.newDebitCard;\n }\n\n const onSubmit = async (\n values: CreditCardFields,\n formik: FormikHelpers<PayWithCreditCardRequest>\n ) => {\n const cardNumber = values.cardNumber.replace(/\\s/g, '');\n if (isNewDebitFormSelected && cardNumber) {\n const tokenExId = process.env.REACT_APP_TOKENEX_ID;\n const tokenExUrl = process.env.REACT_APP_TOKENEX_URL;\n const validation = await validateCardBinWithTokenX(cardNumber, tokenExId, tokenExUrl);\n\n if (validation.data) {\n const { isDebit } = validation?.data as any;\n\n if (!isDebit) {\n formik.setFieldError('cardNumber', 'This number is linked to a Credit Card.');\n return;\n }\n }\n }\n const payload = {\n ...values,\n cardNumber,\n expirationDate: values.expirationDate,\n address: { zipCode: values.zipCode.replace('/', '') },\n zipCode: values.zipCode.replace('/', ''),\n };\n\n if (isNewDebitFormSelected) {\n onNewDebitCardConfirm(payload as PayWithDebitCardRequest);\n } else {\n onNewCreditCardConfirm(payload as PayWithCreditCardRequest);\n }\n\n onContinue();\n };\n\n return (\n <div>\n <div className={styles.page}>\n <div className=\"w-full max-w-xl\">\n <Formik\n key={paymentMethodId?.id}\n validateOnMount={Boolean(initialValues)}\n initialValues={\n initialValues || {\n ...emptyCreditCard,\n name:\n `${homeDetails?.profile.firstName} ${homeDetails?.profile.lastName}`.trim() ||\n '',\n }\n }\n isInitialValid={\n !(\n paymentMethodId?.id === 'new-credit-card' ||\n paymentMethodId?.id === 'new-debit-card'\n )\n }\n onSubmit={onSubmit}\n >\n {(formikProps) => {\n return (\n <>\n <div className=\"mb-14 pl-1\">\n {!defaultPaymentAsyncState.loading && (\n <>\n {isEnabled(FeatureFlagTypes.enable_debit_web) ? (\n <OrderPaymentOptionsWithDebit\n shipToHome={Boolean(shipToHomeIfPossible)}\n selectedPayment={cartInfo.paymentMethodId}\n onPaymentChange={setSelectedPayment}\n makeThisTheDefaultPayment={\n makeThisTheDefaultPayment\n }\n setMakeThisTheDefaultPayment={\n setMakeThisTheDefaultPayment\n }\n >\n {[\n 'new-credit-card',\n 'new-debit-card',\n ].includes(`${paymentMethodId?.id}`)\n ? renderCreditDebitCardForm()\n : null}\n </OrderPaymentOptionsWithDebit>\n ) : (\n <OrderPaymentOptions\n shipToHome={Boolean(shipToHomeIfPossible)}\n selectedPayment={cartInfo.paymentMethodId}\n onPaymentChange={setSelectedPayment}\n makeThisTheDefaultPayment={\n makeThisTheDefaultPayment\n }\n setMakeThisTheDefaultPayment={\n setMakeThisTheDefaultPayment\n }\n />\n )}\n </>\n )}\n {defaultPaymentAsyncState.loading && <Skeleton />}\n {['new-credit-card'].includes(`${paymentMethodId?.id}`) && (\n <>\n {!isEnabled(FeatureFlagTypes.enable_debit_web) ? (\n <CreditCardForm\n formRef={formRef as any}\n initialValues={cartInfo.newCreditCard}\n setCreditCardInfo={onNewCreditCardConfirm}\n onAddressForm={setHideButtons}\n />\n ) : null}\n </>\n )}\n </div>\n\n {!hideButtons && (\n <div className=\"flex md:block flex-col items-center\">\n <Btn\n className={classNames(\n `${continueToButtonUniqueClass} block md:hidden w-full mb-5`,\n styles.btn\n )}\n disabled={\n continueToShippingDisabled ||\n !formikProps.isValid ||\n formikProps.isValidating ||\n disableCheckoutBtn\n }\n type=\"submit\"\n onClick={() => formikProps.handleSubmit()}\n >\n {continueToShipping}\n </Btn>\n\n <Btn\n isSecondary={true}\n className={classNames(\n 'inline-block w-full md:w-auto mb-5',\n styles.btn\n )}\n onClick={onBack}\n type=\"button\"\n >\n Back\n </Btn>\n\n <Btn\n className={classNames(\n `${continueToButtonUniqueClass} hidden md:inline-block ml-5 mb-5`,\n styles.btn\n )}\n disabled={\n continueToShippingDisabled ||\n !formikProps.isValid ||\n formikProps.isValidating ||\n disableCheckoutBtn\n }\n type=\"submit\"\n onClick={() => formikProps.handleSubmit()}\n >\n {continueToShipping}\n </Btn>\n </div>\n )}\n </>\n );\n }}\n </Formik>\n\n {/* hiding the Payment FAQ for now... Will be used in the future. */}\n <div style={{ display: 'none' }}>\n <div className=\"mt-20\">\n <div className=\"text-brand-dark font-bold text-xl\">Payment FAQs</div>\n <div className=\"border-t-2 border-brand mt-2\">\n <Accordion items={demoFAQ} />\n </div>\n </div>\n </div>\n\n <ModalExceedsMaxCards\n maxCards={MAX_SHIP_TO_HOME_CARD_QUANTITY}\n isOpen={showExceededModal}\n closeModal={() => setShowExceededModal(false)}\n isShipToCoordinatorEnabled={!!isShipCoordinatorEnabled}\n primaryButton={\n isShipCoordinatorEnabled\n ? {\n text: 'Continue',\n action: () => {\n setForceShipToCoordinator();\n setShowExceededModal(false);\n },\n }\n : { text: 'Ok', action: () => setShowExceededModal(false) }\n }\n secondaryButton={\n isShipCoordinatorEnabled\n ? {\n text: 'Close',\n action: () => setShowExceededModal(false),\n }\n : undefined\n }\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport const OrderPaymentScreen = () => {\n const className = isInIframe() ? 'pt-20' : 'pt-0';\n return (\n <OrderScreen\n title=\"Payment\"\n orderStep=\"payment\"\n className={className}\n showSummary={true}\n showMobileSummary={true}\n embedView={true}\n >\n <OrderPaymentScreenContent />\n </OrderScreen>\n );\n};\n\nexport default OrderPaymentScreen;\n","import React, { Fragment, useContext } from 'react';\nimport classNames from 'classnames';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { createStyles } from '../../../../utils/createStyle';\n\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { RadioItem } from 'features/product/components/RadioItem';\nimport { OrderScreenContext } from 'features/order-summary/screens/CheckoutScreen';\n\nconst styles = createStyles({\n grid: [\n 'grid w-full',\n {\n gridTemplateColumns: 'auto auto 100px',\n },\n ],\n shippingMethodCols: [\n 'border-b border-solid border-grey-3 text-grey-2 py-1',\n { backgroundColor: '#F7F7F7', fontSize: '10px' },\n ],\n cell: [\n 'text-sm',\n {\n marginBottom: '23px',\n },\n ],\n});\n\nexport const OrderShippingGrid = () => {\n const { cartInfo, setCartInfo, cartInfoDetails } = useContext(OrderScreenContext);\n\n const shippingOptions = cartInfoDetails.shippingOptions;\n\n const formatEstimatedShipDate = (name: string) => {\n const estimated = cartInfoDetails.estimationResponses[name];\n const today = new Date(new Date().toDateString());\n\n if (estimated && estimated.data) {\n const fixEstimatedDate = estimated.data.estimatedShipDate.endsWith('Z')\n ? estimated.data.estimatedShipDate.substring(\n 0,\n estimated.data.estimatedShipDate.length - 1\n )\n : estimated.data.estimatedShipDate;\n const deliveryDate = new Date(fixEstimatedDate).getTime();\n const days = (deliveryDate - today.getTime()) / (1000 * 3600 * 24);\n return `Ships within ${days} day${days > 1 ? 's' : ''}`;\n }\n\n return '';\n };\n\n const setShippingMethodId = (shippingMethodId: string) => {\n setCartInfo({\n ...cartInfo,\n shippingMethodId,\n });\n };\n\n const isLoading =\n cartInfoDetails.isLoadingShipDateEstimations || cartInfoDetails.shipping.isLoading;\n\n return (\n <div>\n {isLoading && (\n <div>\n <Skeleton count={5} height={42} />\n </div>\n )}\n {!isLoading && (\n <div>\n <div className={styles.grid}>\n <div className={classNames(styles.shippingMethodCols, 'pl-7')}>\n Shipping Method\n </div>\n <div className={styles.shippingMethodCols}>Estimated Shipping Date</div>\n <div className={classNames(styles.shippingMethodCols, 'text-center')}>\n Cost\n </div>\n <div className=\"py-1 col-span-3\" />\n {shippingOptions.map((option) => (\n <Fragment key={option.id}>\n <div className={classNames(styles.cell, 'text-left pl-2')}>\n <RadioItem\n selected={cartInfo.shippingMethodId === option.id}\n value={option.id}\n text={option.name}\n onClick={() => setShippingMethodId(option.id)}\n />\n </div>\n <div className={classNames(styles.cell, 'text-left')}>\n {formatEstimatedShipDate(option.name)}\n </div>\n <div className={classNames(styles.cell, 'text-center')}>\n {monetizeWithDecimal(option.cost)}\n </div>\n </Fragment>\n ))}\n </div>\n {shippingOptions.length > 0 && (\n <div>\n <ul className=\"list-disc ml-6 text-xs text-grey-2\">\n <li>Holidays may affect actual ship dates</li>\n <li>Tracking number not provided with Standard USPS Mail</li>\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useContext, useEffect, useState } from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport { useHistory } from 'react-router-dom';\n\nimport { OrderShippingGrid } from '../components/shipping/OrderShippingGrid';\nimport { OrderScreen } from '../OrderScreen';\nimport {\n OrderScreenContext,\n CheckoutFlowState,\n} from 'features/order-summary/screens/CheckoutScreen';\nimport {\n OrderEditAddressForm,\n ShippingDetailsRequest,\n} from '../components/shipping/OrderEditAddressForm';\n\nimport {\n emptyFamilyAddress,\n FamilyAddress,\n} from 'common/api/crm/family/address/models/FamilyAddress';\nimport { emptyAddress } from 'common/api/models/Address';\nimport { useHomeDetails } from 'common/features/store/duck/home/utils/useHomeDetails';\nimport { Btn } from 'components/btn/Btn';\nimport { Checkbox } from 'components/checkbox/Checkbox';\nimport { getPath, Routes } from 'routes';\nimport { OrderAddresses } from '../components/payment/OrderAddresses';\nimport { useDefaultAddress } from 'common/hooks/useDefaultAddress';\nimport { useEffectUntilDone } from 'hooks/useEffectUntilDone';\nimport { isInIframe } from 'utils';\n\nexport interface OrderShippingScreenProps {}\n\nconst OrderShippingScreenContent = () => {\n const { cartInfo, setCartInfo, cartInfoDetails, checkoutFlowState } =\n useContext(OrderScreenContext);\n const isLoading = cartInfoDetails.shipping.userAddresses.isLoading;\n const homeDetails = useHomeDetails();\n const [editingAddress, setEditingAddress] = useState<FamilyAddress>();\n const history = useHistory();\n const { shipToHome } = cartInfo;\n const disableCheckoutBtn = checkoutFlowState === CheckoutFlowState.DISABLED;\n const { defaultAddress, refreshDefaultAddress } = useDefaultAddress();\n const addresses = cartInfoDetails.shipping.userAddresses.addresses;\n\n const setEmptyEditingAddress = useCallback(() => {\n if (!homeDetails) {\n return;\n }\n setEditingAddress({\n ...emptyFamilyAddress,\n firstName: homeDetails.profile.firstName,\n lastName: homeDetails.profile.lastName,\n });\n }, [homeDetails, setEditingAddress]);\n\n useEffect(() => {\n if (!homeDetails) {\n return;\n }\n if (!isLoading && addresses && addresses.length <= 0) {\n setEmptyEditingAddress();\n }\n }, [isLoading, homeDetails, addresses, setEmptyEditingAddress]);\n\n const selectedAddress = cartInfoDetails.shipping.selectedAddress;\n\n useEffectUntilDone(\n (markDone: () => void) => {\n if (selectedAddress) {\n markDone();\n cartInfoDetails.shipping?.refreshShippingMethods?.(selectedAddress);\n }\n },\n [selectedAddress]\n );\n\n useEffect(() => {\n refreshDefaultAddress();\n }, [refreshDefaultAddress]);\n\n const request: ShippingDetailsRequest = {\n firstName: editingAddress?.firstName || '',\n lastName: editingAddress?.lastName || '',\n phoneNumber: editingAddress?.phoneNumber || '',\n ...(editingAddress || emptyAddress),\n };\n\n const onAddressSaved = (address: FamilyAddress) => {\n setCartInfo({\n ...cartInfo,\n shippingToAddressId: address.id,\n });\n setEditingAddress(undefined);\n\n cartInfoDetails.shipping.userAddresses.refreshAddresses();\n cartInfoDetails?.shipping?.refreshShippingMethods?.(address);\n };\n\n const renderEditAddressForm = () => {\n return (\n editingAddress && (\n <OrderEditAddressForm\n addressId={editingAddress.id}\n request={request}\n onAddressSaved={onAddressSaved}\n onCancel={() => setEditingAddress(undefined)}\n />\n )\n );\n };\n\n const confirmOrder = () => {\n history.push(Routes.ShopOrderReview, cartInfo);\n };\n\n const back = () => {\n const url = getPath(Routes.ShopOrderPayment, {\n shipToHome: shipToHome ? 'ship-to-home' : 'ship-to-coordinator',\n });\n history.push(url, cartInfo);\n };\n\n const onChangeSetShippingAddressAsDefault = (state: boolean) => {\n setCartInfo({\n ...cartInfo,\n setShippingAddressAsDefault: state,\n });\n };\n\n return (\n <>\n {!isLoading && (\n <div>\n <div className=\"w-full max-w-xl\">\n {!editingAddress && (\n <div className=\"mb-8\">\n <div className=\"text-brand-dark text-lg font-bold mb-1\">\n Shipping Address\n </div>\n <OrderAddresses\n onEdit={(address) => setEditingAddress(address)}\n onChange={(address) => {\n cartInfoDetails.shipping?.refreshShippingMethods?.(address);\n setCartInfo({\n ...cartInfo,\n shippingToAddressId: address.id,\n });\n }}\n selectedAddressId={\n cartInfo.shippingToAddressId || defaultAddress?.id\n }\n />\n <a\n href=\"#\"\n className=\"text-xs text-grey-1 cursor-pointer ml-auto\"\n onClick={() => {\n setEmptyEditingAddress();\n return false;\n }}\n >\n Add New Address\n </a>\n </div>\n )}\n {renderEditAddressForm()}\n {!editingAddress && (\n <>\n <div className=\"mb-8\">\n <Checkbox\n checked={Boolean(cartInfo.setShippingAddressAsDefault)}\n text=\"Make this my preferred shipping address\"\n onChange={onChangeSetShippingAddressAsDefault}\n />\n </div>\n {selectedAddress && (\n <div className=\"mt-12 mb-14\">\n <div className=\"text-brand-dark text-lg font-bold mb-1\">\n Shipping Method\n </div>\n <OrderShippingGrid />\n </div>\n )}\n\n <div className=\"text-left\">\n <div className=\"block\">\n <div className=\"sm:hidden flex flex-col gap-4 justify-center w-full\">\n <div className=\"text-center\">\n <Btn\n type=\"submit\"\n className=\"cart_review_order_button max-w-xs w-full\"\n onClick={confirmOrder}\n disabled={\n !cartInfo.shippingMethodId ||\n disableCheckoutBtn\n }\n >\n Review Order\n </Btn>\n </div>\n <div className=\"text-center\">\n <Btn\n type=\"button\"\n className=\"max-w-xs w-full\"\n isSecondary={true}\n onClick={back}\n >\n Back\n </Btn>\n </div>\n </div>\n <div className=\"hidden sm:block text-left\">\n <Btn\n type=\"button\"\n className=\"mr-4\"\n isSecondary={true}\n onClick={back}\n >\n Back\n </Btn>\n <Btn\n type=\"submit\"\n className=\"cart_review_order_button hidden sm:inline-block\"\n onClick={confirmOrder}\n disabled={\n !cartInfo.shippingMethodId || disableCheckoutBtn\n }\n >\n Review Order\n </Btn>\n </div>\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n )}\n {isLoading && (\n <>\n <div>\n <Skeleton\n style={{\n lineHeight: '2rem',\n maxWidth: '30rem',\n display: 'block',\n marginBottom: '0.5rem',\n }}\n />\n <Skeleton\n style={{\n lineHeight: '3rem',\n maxWidth: '45rem',\n display: 'block',\n marginBottom: '0.5rem',\n }}\n />\n <Skeleton\n style={{\n lineHeight: '3rem',\n maxWidth: '45rem',\n display: 'block',\n marginBottom: '0.5rem',\n }}\n />\n </div>\n\n <div className=\"mt-8\">\n <Skeleton\n style={{\n lineHeight: '2rem',\n maxWidth: '30rem',\n display: 'block',\n marginBottom: '0.5rem',\n }}\n />\n <Skeleton\n style={{\n lineHeight: '3rem',\n maxWidth: '45rem',\n display: 'block',\n marginBottom: '0.5rem',\n }}\n />\n <Skeleton\n style={{\n lineHeight: '3rem',\n maxWidth: '45rem',\n display: 'block',\n marginBottom: '0.5rem',\n }}\n />\n </div>\n </>\n )}\n </>\n );\n};\n\nexport const OrderShippingScreen = () => {\n const className = isInIframe() ? 'pt-20' : 'pt-0';\n return (\n <OrderScreen\n title=\"Shipping\"\n orderStep=\"shipping\"\n className={className}\n showSummary={true}\n showMobileSummary={true}\n embedView={true}\n >\n <OrderShippingScreenContent />\n </OrderScreen>\n );\n};\n\nexport default OrderShippingScreen;\n","import { PaymentInfo } from './utils/useCartPayment';\n\nimport { PayWithCreditCardRequest, PayWithDebitCardRequest } from 'common/types/CheckoutRequest';\n\nexport type OrderSteps = 'summary' | 'payment' | 'shipping' | 'review' | 'success';\n\nexport interface CartInfoState {\n shipToHome?: boolean;\n shippingMethodId: string;\n shippingToAddressId?: string;\n paymentMethodId?: PaymentInfo;\n newCreditCard?: PayWithCreditCardRequest;\n newDebitCard?: PayWithDebitCardRequest;\n billingAddressId?: string;\n setPaymentMethodAsDefault: boolean;\n setShippingAddressAsDefault?: boolean;\n}\n\nexport const initialState: CartInfoState = {\n shipToHome: undefined,\n shippingMethodId: '',\n paymentMethodId: undefined,\n shippingToAddressId: undefined,\n billingAddressId: undefined,\n setPaymentMethodAsDefault: false,\n setShippingAddressAsDefault: false,\n};\n","import _round from 'lodash/round';\nimport React, { useEffect, useState } from 'react';\nimport classNames from 'classnames';\n\nimport { getProductTypeDisplayName, getProductTypeIcon } from '../summary/OrderSummaryGrid';\nimport { hideHeight, showHeight } from '../summary/OrderSummaryOptions';\n\nimport { createStyles, createStyle } from 'utils/createStyle';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { CartLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport { EASE_IN_OUT_BACK } from 'styles/easing';\nimport {\n getPaymentDisplayName,\n getProductName,\n getWalletCardDisplayName,\n} from 'features/order-summary/utils';\nimport { calculatePaymentFee } from 'features/order-summary/utils/useCartDetails';\nimport { ShipToHome } from 'components/custom-icons';\nimport { CartResponse } from 'common/api/e-comm/cart/lineitem/models/CartItems';\nimport { PlaceOrderResponse, ShippingOption } from 'common/api/e-comm/orders/service';\nimport { PaymentTypeFee } from 'common/api/e-comm/payment-types';\nimport { useCardsFromWallet } from 'hooks/useCardsFromWallet';\nimport { EGiftCard, GiftCard } from 'common/api/e-comm/models/Card';\nimport { FeatureFlag } from 'components/feature-flag';\n\nexport interface OrderSuccessGridData {\n data: PlaceOrderResponse;\n cart: CartResponse;\n shipToHome: boolean;\n selectedShipping: ShippingOption | undefined;\n paymentFee: PaymentTypeFee | undefined;\n total: number;\n shippingFee: number;\n}\n\nexport interface OrderSuccessGridProps {\n data: OrderSuccessGridData;\n}\n\nconst styles = createStyles({\n grid: [\n 'grid border border-solid border-grey-3 overflow-hidden max-w-3xl',\n {\n borderRadius: '10px',\n gridTemplateColumns: '1px 3rem 1fr 1fr 1fr 1fr 1fr 1px',\n columnGap: '1rem',\n },\n ],\n\n gridTotal: [\n 'grid col-span-8 border-t border-solid border-grey-3',\n {\n gridTemplateColumns: 'inherit',\n columnGap: 'inherit',\n background: '#F7F7F7',\n },\n ],\n\n message: 'text-lg lg:text-xl text-center col-span-8 text-success font-bold py-3',\n column: 'text-xs font-bold text-brand-dark py-2',\n\n container: createStyle(''),\n title: ['text-brand', { fontSize: '17px' }],\n description: 'text-sm text-grey-1',\n subtotal: 'text-grey-1 flex flex-row align-center',\n subtotalItems: createStyle('grid', {\n gridTemplateColumns: 'max-content auto',\n }),\n area: [\n 'mb-2',\n {\n overflow: 'hidden',\n animationName: showHeight,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n ],\n hidden: {\n overflow: 'hidden',\n animationName: hideHeight,\n animationDuration: '.5s',\n animationTimingFunction: EASE_IN_OUT_BACK,\n animationFillMode: 'forwards',\n },\n});\n\nexport const renderItems = (items: CartLineItem[], walletCards: (GiftCard | EGiftCard)[]) =>\n items.map((item) => (\n <React.Fragment key={item.id}>\n <div className=\"col-span-8 py-1\" />\n\n <div />\n <div className=\"flex items-center justify-center text-grey-2\">\n {<img src={item.brand?.imageUrl} />}\n </div>\n <div className=\"text-sm truncate\">\n <div className=\"flex text-lg text-brand-dark align-middle truncate relative\">\n <span className=\"flex items-center float-left mr-1\">\n {getProductTypeIcon(item.product.type)}\n </span>\n <span className=\"text-sm inline-block align-text-bottom font-bold truncate w-full\">\n {getProductName(item)}\n </span>\n </div>\n <div className=\"text-xs text-grey-1 truncate\">\n {getProductTypeDisplayName(item.product.type)}\n <FeatureFlag flagKey=\"enable_custom_card_names\" fallback={true}>\n {getWalletCardDisplayName(item, walletCards)\n ? ` - ${getWalletCardDisplayName(item, walletCards)}`\n : ''}\n </FeatureFlag>\n </div>\n </div>\n <div className=\"text-xs flex items-center justify-center text-center text-grey-1\">\n <span className=\"truncate\">\n Earn {_round((item.earnings / item.subtotal) * 100, 2).toFixed(2)}%\n </span>\n <span> = </span>\n <span className=\"text-success font-bold\">{monetizeWithDecimal(item.earnings)}</span>\n </div>\n <div className=\"flex items-center justify-center text-center text-sm font-bold text-grey-1\">\n {monetizeWithDecimal(item.price || 0)}\n </div>\n <div className=\"flex items-center justify-center text-center text-sm text-grey-1\">\n {item.quantity}\n </div>\n <div className=\"flex items-center justify-center text-center text-sm text-brand-dark font-bold\">\n {monetizeWithDecimal(item.subtotal || 0)}\n </div>\n <div />\n\n <div className=\"col-span-8 py-1\" />\n </React.Fragment>\n ));\n\nconst renderItemsMobile = (items: CartLineItem[], walletCards: (GiftCard | EGiftCard)[]) =>\n items.map((item) => {\n return (\n <React.Fragment key={item.id}>\n <div key={item.id} className={'grid py-4 truncate col-span-8 px-2'}>\n <div className=\"text-sm truncate\">\n <div className=\"text-sm truncate\">\n <div className=\"flex\">\n <div className=\"flex text-sm text-brand-dark align-middle truncate relative\">\n <span className=\"flex items-center float-left mr-1\">\n {getProductTypeIcon(item.product.type)}\n </span>\n <span className=\"inline-block align-text-bottom font-bold truncate w-full\">\n {getProductName(item)}\n </span>\n </div>\n </div>\n <div className=\"mt-1 text-xs text-grey-1\">\n {getProductTypeDisplayName(item.product.type)}\n {item.product.isShipToHomeEligible && (\n <ShipToHome height=\"0.6rem\" className=\"inline-block ml-2\" />\n )}\n <FeatureFlag flagKey=\"enable_custom_card_names\" fallback={true}>\n {getWalletCardDisplayName(item, walletCards)\n ? ` - ${getWalletCardDisplayName(item, walletCards)}`\n : ''}\n </FeatureFlag>\n </div>\n <div>\n <div className=\"flex\">\n <div className=\"text-xs mr-auto text-grey-1 inline-block truncate\">\n Earn{' '}\n {_round((item.earnings / item.subtotal) * 100, 2).toFixed(\n 2\n )}\n % ={' '}\n <span className=\"text-success\">\n {monetizeWithDecimal(item.earnings)}\n </span>\n </div>\n <div className=\"ml-auto text-right inline-block text-center text-sm text-grey-1\">\n <span className=\"ml-4\">{item.quantity.toString()}</span>\n {' x '}\n <span>{monetizeWithDecimal(item.price)}</span>\n </div>\n </div>\n <div className=\"flex justify-end text-right inline-block text-sm font-bold text-brand-dark\">\n Amount {monetizeWithDecimal(item.subtotal)}\n </div>\n </div>\n </div>\n </div>\n </div>\n </React.Fragment>\n );\n });\n\nexport const OrderSuccessGrid = ({ data }: OrderSuccessGridProps) => {\n const { cart, shipToHome, selectedShipping, paymentFee, total, shippingFee } = data;\n const { lineItems } = cart;\n\n const walletCards = useCardsFromWallet();\n\n const [showMobileLayout, setShowMobileLayout] = useState(window.innerWidth <= 1280);\n\n const earn = lineItems.reduce((acc, item) => acc + item.earnings, 0);\n\n const renderTotalPayment = () => {\n return (\n <>\n <div />\n <div className=\"text-xs text-grey-1 flex flex-row items-center col-span-4\">\n {paymentFee &&\n paymentFee.amount > 0 &&\n getPaymentDisplayName(paymentFee.paymentType)}{' '}\n </div>\n <div className=\"text-xs text-center flex flex-row items-center justify-center\" />\n <div className=\"text-sm text-center flex flex-row items-center justify-center pb-1\">\n {monetizeWithDecimal(\n calculatePaymentFee(cart.subtotal + shippingFee, paymentFee)\n )}\n </div>\n <div />\n </>\n );\n };\n\n const renderTotal = () => {\n return (\n <>\n <div className=\"border-t border-solid border-grey-3 col-span-8 pb-3\" />\n\n <div />\n <div className=\"text-xs text-grey-1 flex flex-row items-center col-span-4\">\n Subtotal\n </div>\n <div className=\"text-xs text-center flex flex-row items-center justify-center\">\n {cart?.productCount || 0}\n </div>\n <div className=\"text-sm text-center flex flex-row items-center justify-center font-bold pb-1\">\n {cart && monetizeWithDecimal(cart.subtotal)}\n </div>\n <div />\n\n {renderTotalPayment()}\n\n {shipToHome && (\n <>\n <div />\n <div className=\"text-xs text-grey-1 flex flex-row items-center col-span-4\">\n Shipping & Handling\n </div>\n <div className=\"text-xs text-center flex flex-row items-center justify-center\" />\n <div className=\"text-sm text-center flex flex-row items-center justify-center pb-1\">\n {selectedShipping ? monetizeWithDecimal(selectedShipping.cost) : '-'}\n </div>\n <div />\n </>\n )}\n\n <div className=\"col-span-8 pt-3\" />\n\n <div className={styles.gridTotal}>\n <div className=\"col-span-5\" />\n <div className=\"font-bold text-xs text-center flex items-center justify-center\">\n Total\n </div>\n <div className=\"font-bold text-sm text-center text-brand-dark flex items-center justify-center py-3\">\n {monetizeWithDecimal(total)}\n </div>\n <div />\n </div>\n </>\n );\n };\n\n useEffect(() => {\n const fn = () => setShowMobileLayout(window.innerWidth <= 1280);\n\n window.addEventListener('resize', fn);\n\n return () => window.removeEventListener('resize', fn);\n }, []);\n\n return (\n <>\n <div />\n <div className={styles.grid}>\n <div className={styles.message}>\n — You earned {monetizeWithDecimal(earn)} on this order —\n </div>\n\n {!showMobileLayout && (\n <>\n <div className={classNames(styles.column)} />\n <div className={classNames(styles.column, 'text-left')} />\n <div className={classNames(styles.column, 'text-left')}>Product</div>\n <div className={classNames(styles.column, 'text-center')}>Earnings</div>\n <div className={classNames(styles.column, 'text-center')}>Value</div>\n <div className={classNames(styles.column, 'text-center')}>Quantity</div>\n <div className={classNames(styles.column, 'text-center')}>\n Dollar Amount\n </div>\n <div className={classNames(styles.column)} />\n </>\n )}\n\n <div className=\"col-span-8 border-b border-solid border-grey-3\" />\n\n <div />\n {!showMobileLayout && renderItems(lineItems, walletCards)}\n {showMobileLayout && renderItemsMobile(lineItems, walletCards)}\n\n {renderTotal()}\n </div>\n </>\n );\n};\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgConfetti(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 223,\n height: 362,\n viewBox: \"0 0 223 362\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M90 96.92L92.8601 95C92.8601 95 91.89 99.41 98.25 101.57L95.71 103.54C95.7 103.54 90.36 102.91 90 96.92Z\",\n fill: \"#F15A29\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39 285.92L41.8601 284C41.8601 284 40.89 288.41 47.25 290.57L44.71 292.54C44.7 292.54 39.36 291.91 39 285.92Z\",\n fill: \"#F15A29\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M132.18 10.45L129 9.10999C129 9.10999 133.22 7.5 131.53 1L134.58 2.03998C134.57 2.04998 136.99 6.85001 132.18 10.45Z\",\n fill: \"#F15A29\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.18 190.45L113 189.11C113 189.11 117.22 187.5 115.53 181L118.58 182.04C118.57 182.05 120.99 186.85 116.18 190.45Z\",\n fill: \"#F15A29\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 193.92L3.86011 192C3.86011 192 2.89 196.41 9.25 198.57L6.71021 200.54C6.71021 200.54 1.37 199.92 1 193.92Z\",\n fill: \"#E6126A\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M214 123.92L216.86 122C216.86 122 215.89 126.41 222.25 128.57L219.71 130.54C219.7 130.54 214.36 129.92 214 123.92Z\",\n fill: \"#E6126A\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M143.24 131.01L142 127.79C142 127.79 146.08 129.72 149.6 124L150.96 126.92C150.97 126.92 149.17 131.99 143.24 131.01Z\",\n fill: \"#7E3F97\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M184 32.73L186.98 31C186.98 31 185.72 35.34 191.93 37.91L189.26 39.71C189.26 39.71 183.97 38.74 184 32.73Z\",\n fill: \"#7E3F97\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M155 73.73L157.98 72C157.98 72 156.72 76.34 162.93 78.9L160.26 80.7C160.26 80.71 154.97 79.74 155 73.73Z\",\n fill: \"#7E3F97\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M55.21 10.5501L54.03 12.0802C54.03 12.0802 53.76 9.57015 50 9.55015L51 8.05015C51 8.05015 53.95 7.43015 55.21 10.5501Z\",\n fill: \"#E6126A\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M97.49 59.39L96 57.17C96 57.17 99.4201 57.93 101.1 53L102.63 54.98C102.63 54.98 102.14 59.12 97.49 59.39Z\",\n fill: \"#E6126A\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M52.21 114.55L51.03 116.08C51.03 116.08 50.76 113.57 47 113.55L48 112.05C48.01 112.05 50.95 111.43 52.21 114.55Z\",\n fill: \"#7E3F97\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.21 75.8301L9 73.1801C9 73.1801 13.49 73.6901 14.97 67.1401L17.2 69.4601C17.2 69.4701 17.14 74.8501 11.21 75.8301Z\",\n fill: \"#F15A29\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.21 360.69L114 358.04C114 358.04 118.49 358.55 119.97 352L122.2 354.32C122.2 354.32 122.14 359.7 116.21 360.69Z\",\n fill: \"#F15A29\",\n stroke: \"#E6126A\",\n strokeWidth: 0.75,\n strokeMiterlimit: 10,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgConfetti);\nexport default __webpack_public_path__ + \"static/media/confetti.5552d6e8980eacbe3dd812bcc7a3aee3.svg\";\nexport { ForwardRef as ReactComponent };","import { ECommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { Card } from 'common/api/e-comm/models/Card';\n\nexport type CardWithBrand = Card & { brand?: ECommBrand };\n\nexport enum FilterGroup {\n brand = 'brand',\n cardType = 'cardType',\n}\n\nexport interface Option {\n text: string;\n value: string;\n imageUrl?: string;\n group?: FilterGroup;\n}\n\nexport interface Group {\n name: string;\n options: Option[];\n}\n\nexport interface TabContent {\n isActive: boolean;\n brands?: Option[];\n}\n\nexport interface SortOption extends Pick<Option, 'text' | 'value'> {}\nexport interface SortOptions {\n addedRecentlyOption: SortOption;\n amountDescOption: SortOption;\n amountAscOption: SortOption;\n lastViewedOption: SortOption;\n nameOption: SortOption;\n}\n","import { ProductType } from 'common/api/e-comm/models/Product';\nimport { Option, FilterGroup, SortOptions, CardWithBrand, SortOption } from './types';\nimport { Card } from 'common/api/e-comm/models/Card';\n\n// Constant options for the CardType filter, the data structure to save the filters is a Set\n// therefore having these pre-defined in 1 place makes it easier to refactor but also use the\n// `has` function to test membership.\nexport const allCards: Option = { text: 'All Cards', value: 'all', group: FilterGroup.cardType };\nexport const eGift: Option = {\n text: 'eGift',\n value: ProductType.EGiftCard as string,\n group: FilterGroup.cardType,\n};\nexport const reload: Option = {\n text: 'Reload',\n value: ProductType.Reload as string,\n group: FilterGroup.cardType,\n};\n\n// Sort Constants\nexport const sortOptions: SortOptions = {\n addedRecentlyOption: { text: 'Added Recently', value: 'addedRecently' },\n amountDescOption: { text: 'Amount $$$$-$', value: 'amount:desc' },\n amountAscOption: { text: 'Amount $-$$$$', value: 'amount:asc' },\n nameOption: { text: 'Name (A-Z)', value: 'name' },\n lastViewedOption: { text: 'Last Viewed', value: 'lastViewed' },\n};\n\nconst sortByName = (cardA: CardWithBrand, cardB: CardWithBrand) => {\n const cardAName = (cardA.name || (cardA.brand?.name ?? '')) as string;\n const cardBName = (cardB.name || (cardB.brand?.name ?? '')) as string;\n\n return cardAName.localeCompare(cardBName);\n};\n\nconst sortByDate = (\n cardA: CardWithBrand,\n cardB: CardWithBrand,\n getDate: (_: CardWithBrand | Card) => string | null\n) => {\n const cardADateStr = getDate(cardA);\n const cardBDateStr = getDate(cardB);\n\n const cardADate = new Date(cardADateStr ? cardADateStr : 0);\n const cardBDate = new Date(cardBDateStr ? cardBDateStr : 0);\n\n return cardBDate.valueOf() - cardADate.valueOf();\n};\n\nexport const sortCards = (cardA: CardWithBrand, cardB: CardWithBrand, sortedBy: SortOption) => {\n const [attr, sortDirection] = sortedBy.value.split(':');\n switch (attr) {\n case 'addedRecently': {\n return sortByDate(cardA, cardB, (card: CardWithBrand) =>\n card.type === ProductType.EGiftCard ? card.activationDate : card.registeredDate\n );\n }\n case 'amount': {\n const ascSort = (cardA.cardBalance || 0) - (cardB.cardBalance || 0);\n const descSort = (cardB.cardBalance || 0) - (cardA.cardBalance || 0);\n\n return sortDirection === 'desc' ? descSort : ascSort;\n }\n case 'lastViewed': {\n return sortByDate(cardA, cardB, (card: CardWithBrand) => card.lastViewedDate);\n }\n case 'name': {\n return sortByName(cardA, cardB);\n }\n default:\n return 1;\n }\n};\n","import React, { createContext, useState, useEffect, useRef, useMemo } from 'react';\nimport { Option, CardWithBrand, SortOption } from './types';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { Card } from 'common/api/e-comm/models/Card';\nimport { noop } from 'common/utils';\nimport { allCards, sortOptions, sortCards, eGift, reload } from './util';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { selectUserCards } from 'common/features/store/duck/wallet/duck';\nimport { useHistory } from 'react-router';\n\n/*\n * The context provides the following:\n * - State for holding the brand filter and cardType filter\n * - functions to update the state for both filter types\n * - helper function that allows logic to be shared between mobile/desktop\n * for the CardType filter logic.\n * - The result string of the number of viewable cards after filters have been applied\n */\n\nexport interface WalletSortAndFilterContext {\n // filter functions\n filterByCardType: (_: string[]) => void;\n filterByBrand: (_: Option[]) => void;\n\n // state for card-type filters\n activeCardTypeFilter: Set<Option>;\n setActiveCardTypeFilter: React.Dispatch<React.SetStateAction<Set<Option>>>;\n\n // state for brand-type filters\n selectedBrands: Option[];\n setSelectedBrands: React.Dispatch<React.SetStateAction<Option[]>>;\n\n // state for controlling viewable cards\n cardsWithBrand: CardWithBrand[];\n setViewableCards: (_: Card[]) => void;\n\n // function that encapsulates the logic for resolving the cardType filters\n // logic\n resolveCardTypeActiveFilters: (__: Option) => Set<Option>;\n\n result: string;\n shouldResetFilters: boolean;\n\n // sort\n sortedBy: SortOption;\n setSortedBy: (_: SortOption) => void;\n}\n\nconst initData: WalletSortAndFilterContext = {\n filterByCardType: noop,\n filterByBrand: noop,\n activeCardTypeFilter: new Set<Option>([allCards]),\n selectedBrands: [],\n setActiveCardTypeFilter: noop,\n setSelectedBrands: noop,\n cardsWithBrand: [],\n setViewableCards: noop,\n resolveCardTypeActiveFilters: () => new Set<Option>([]),\n result: '00',\n shouldResetFilters: true,\n sortedBy: sortOptions.addedRecentlyOption,\n setSortedBy: () => undefined,\n};\n\nconst resolveCardTypeActiveFilters = (cardType: Option) => {\n const updatedFilters: Set<Option> = new Set([]);\n\n updatedFilters.add(cardType);\n\n return updatedFilters;\n};\n\nexport type WalletSortAndFilterContextType = Omit<\n WalletSortAndFilterContext,\n | 'setViewableCards'\n | 'cardsWithBrand'\n | 'filterByCardType'\n | 'filterByBrand'\n | 'shouldResetFilters'\n>;\n\nexport const SESSION_STORAGE_KEY = 'WalletFilters';\n\nexport const WalletSortAndFilterContext = createContext<WalletSortAndFilterContextType>(initData);\n\nconst getStateFromSessionStorage = (key: string) => {\n const walletFiltersJson = sessionStorage.getItem(`${SESSION_STORAGE_KEY}_${key}`);\n if (walletFiltersJson) {\n const rawObj = JSON.parse(walletFiltersJson) as WalletSortAndFilterContextType;\n rawObj.activeCardTypeFilter = new Set(\n Array.from(rawObj.activeCardTypeFilter).map((ctf) => {\n switch (ctf.value) {\n case eGift.value:\n return eGift;\n case reload.value:\n return reload;\n default:\n return allCards;\n }\n })\n );\n return rawObj;\n }\n};\n\nconst setStateIntoSessionStorage = (key: string, state: {}) => {\n sessionStorage.setItem(\n `${SESSION_STORAGE_KEY}_${key}`,\n JSON.stringify(state, (_key, value) =>\n value instanceof Set ? Array.from(value.values()) : value\n )\n );\n};\n\ntype WalletSortAndFilterViewProps = Pick<\n WalletSortAndFilterContext,\n 'result' | 'cardsWithBrand' | 'setViewableCards' | 'shouldResetFilters'\n> & {\n shouldPersistFilter: boolean;\n};\n\nexport const WalletSortAndFilterView = ({\n result,\n cardsWithBrand,\n setViewableCards,\n shouldPersistFilter,\n children,\n}: React.PropsWithChildren<WalletSortAndFilterViewProps>) => {\n const history = useHistory();\n const [initialLocation] = useState(history.location.pathname);\n\n const persistedFilter = useMemo(\n () => (shouldPersistFilter ? getStateFromSessionStorage(initialLocation) : undefined),\n [shouldPersistFilter, initialLocation]\n );\n\n const [resultString, setResult] = useState<string>('00');\n const [activeCardTypeFilter, setActiveCardTypeFilter] = useState<Set<Option>>(\n persistedFilter?.activeCardTypeFilter || new Set<Option>([allCards])\n );\n const [selectedBrands, setSelectedBrands] = useState<Option[]>(\n persistedFilter?.selectedBrands || []\n );\n const [sortedBy, setSortedBy] = useState(\n persistedFilter?.sortedBy || sortOptions.addedRecentlyOption\n );\n const cards = useRef<CardWithBrand[]>([]);\n const c = useRootSelector(selectUserCards);\n\n useEffect(() => {\n cards.current = cardsWithBrand;\n }, [cardsWithBrand]);\n\n // persists the filter state into the sessionStorage\n // so when the user returns the state is preserved.\n useEffect(() => {\n if (!shouldPersistFilter) {\n return;\n }\n\n setStateIntoSessionStorage(initialLocation, {\n activeCardTypeFilter,\n selectedBrands,\n sortedBy,\n } as WalletSortAndFilterContextType);\n }, [activeCardTypeFilter, selectedBrands, sortedBy, shouldPersistFilter, initialLocation]);\n\n useEffect(() => {\n setResult(parseInt(result) < 10 ? `0${result}` : result.toString());\n }, [result]);\n\n useEffect(() => {\n const filterByCardType = (card: CardWithBrand) => {\n return Array.from(activeCardTypeFilter.values()).some(\n (filter: Option) =>\n (filter.value as ProductType) === card?.type || filter.value === 'all'\n );\n };\n\n const filterByBrand = (card: CardWithBrand) => {\n return (\n selectedBrands.some(\n (filter: Option) => filter.value === card.brand?.id.toString()\n ) || selectedBrands.length === 0\n );\n };\n\n const sort = (cardA: CardWithBrand, cardB: CardWithBrand) =>\n sortCards(cardA, cardB, sortedBy);\n\n setViewableCards(cards.current.filter(filterByCardType).filter(filterByBrand).sort(sort));\n }, [activeCardTypeFilter, selectedBrands, setViewableCards, sortedBy, c, cards.current.length]);\n\n const context = {\n sortedBy,\n setSortedBy,\n activeCardTypeFilter,\n setActiveCardTypeFilter,\n selectedBrands,\n setSelectedBrands,\n result: resultString,\n resolveCardTypeActiveFilters,\n };\n return (\n <WalletSortAndFilterContext.Provider value={context}>\n <div>{children} </div>\n </WalletSortAndFilterContext.Provider>\n );\n};\n","import React, { useState, useContext, useCallback, useMemo, useEffect } from 'react';\n\nimport { createStyles, createStyle } from 'utils/createStyle';\nimport { MobileDialog } from 'features/search/components/MobileDialog';\nimport classnames from 'classnames';\nimport { Group, Option, FilterGroup } from './types';\nimport { WalletSortAndFilterContext } from './context';\nimport { allCards } from './util';\nimport { stringSplitByIndex } from 'common/utils';\n\nconst footerBtnStyle = createStyle(\n 'mt-5 w-full py-1 px-10 py-3 rounded-3xl bg-brand text-white font-semibold',\n {\n maxWidth: 280,\n }\n);\n\ninterface ButtonProps {\n active: boolean;\n children: React.ReactNode;\n onClick: React.MouseEventHandler<HTMLButtonElement>;\n className?: string;\n}\n\nconst Button = React.memo(({ active = false, children, onClick, className }: ButtonProps) => {\n const btnStyles = createStyles({\n btnStyles: [\n `text-brand ${active ? 'bg-pale-blue font-semibold' : 'bg-white'}`,\n {\n margin: '5px',\n border: '1px solid #005E9D',\n borderSizing: 'border-box',\n borderRadius: '5px',\n width: '140px',\n height: '50px',\n fontSize: 12,\n ':focus': {\n outline: 'none',\n boxShadow: 'none',\n },\n },\n ],\n });\n\n return (\n <button className={classnames(btnStyles.btnStyles, className)} onClick={onClick}>\n {children}\n </button>\n );\n});\n\ninterface FilterDialogContextProps {\n selections: Option[];\n onClick: (_: Option) => void;\n}\n\nconst FilterDialogContext = React.createContext<FilterDialogContextProps>({\n selections: [],\n onClick: () => null,\n});\n\nconst optionIsSelected = (option: Option, selectedOptions: string[]) => {\n return selectedOptions.some((opt: string) => option.value === opt);\n};\n\nconst CategoryOptionsRenderer = ({ categories }: { categories: Option[] }) => {\n const { selections, onClick } = useContext(FilterDialogContext);\n const selectedOptions = selections.map(({ value }: Option) => value);\n return (\n <div className=\"category-options-container grid grid-flow-rows justify-items-center grid-cols-2 mb-4\">\n {categories.map((category: Option) => {\n const [first, second] = stringSplitByIndex(category.text, 12);\n return (\n <Button\n className={classnames(\n category.imageUrl ? 'flex justify-around items-center px-2' : ''\n )}\n key={category.value}\n active={optionIsSelected(category, selectedOptions)}\n onClick={() => onClick(category)}\n >\n <span>\n {category.imageUrl && <img width=\"40\" src={category.imageUrl} />}\n </span>\n <span className=\"truncate\">\n {first}\n {second && <br />}\n {second}\n </span>\n </Button>\n );\n })}\n </div>\n );\n};\n\nconst CategoryRenderer = ({ group }: { group: Group }) => {\n return (\n <div>\n <p className=\"font-semibold text-center text-grey-1 text-xl\">{group.name}</p>\n <CategoryOptionsRenderer categories={group.options} />\n </div>\n );\n};\n\nconst CategoriesRenderer = ({ groups }: { groups: Group[] }) => {\n return (\n <div>\n {groups.map((group: Group) => (\n <CategoryRenderer key={group.name} group={group} />\n ))}\n </div>\n );\n};\n\ninterface MobileFilterDialogProps {\n groups: Group[];\n}\n\nexport const MobileFilterDialog = ({ groups }: MobileFilterDialogProps) => {\n const {\n result,\n setActiveCardTypeFilter,\n activeCardTypeFilter,\n selectedBrands,\n setSelectedBrands,\n resolveCardTypeActiveFilters,\n } = useContext(WalletSortAndFilterContext);\n const [filters, setFilters] = useState<Option[]>([]);\n\n // just used to satisfy the MobileView interface but we don't need it to do anything\n const onApplyClicked = () => {};\n\n useEffect(() => {\n setFilters([...Array.from(activeCardTypeFilter), ...selectedBrands]);\n }, [activeCardTypeFilter, selectedBrands]);\n\n const onFilterClicked = useCallback(\n (option: Option) => {\n if (option.group === FilterGroup.brand) {\n setSelectedBrands((selectedFilters: Option[]) => {\n if (\n optionIsSelected(\n option,\n selectedFilters.map(({ value }: Option) => value)\n )\n ) {\n // remove it from the set of filters\n return selectedFilters.filter((opt: Option) => opt.value !== option.value);\n }\n\n // otherwise filter hasn't been selected and we should just add it to our selected filters\n return [...selectedFilters, option];\n });\n } else {\n setActiveCardTypeFilter(resolveCardTypeActiveFilters(option as Option));\n }\n },\n [setActiveCardTypeFilter, setSelectedBrands, resolveCardTypeActiveFilters]\n );\n\n const clearAll = useCallback(() => {\n // We set `allCards` as the default filter view if user tries to clear\n // all the filters\n setActiveCardTypeFilter(new Set<Option>([allCards]));\n setSelectedBrands([]);\n }, [setActiveCardTypeFilter, setSelectedBrands]);\n\n const Header = useMemo(\n () => (\n <div>\n <span className=\"text-xs text-brand underline\" onClick={clearAll}>\n Clear All\n </span>\n </div>\n ),\n [clearAll]\n );\n\n return (\n <MobileDialog\n btnName=\"Filter\"\n footer={(onClick: React.MouseEventHandler) => (\n <button className={footerBtnStyle} onClick={onClick}>\n Show {result} Results\n </button>\n )}\n header={Header}\n styles={{ container: 'border-r-0 border-l-0' }}\n onApply={onApplyClicked}\n >\n <FilterDialogContext.Provider\n value={{\n onClick: onFilterClicked,\n selections: filters,\n }}\n >\n <CategoriesRenderer groups={groups} />\n </FilterDialogContext.Provider>\n </MobileDialog>\n );\n};\n","import React, { useState } from 'react';\n\nimport { Radio, RadioOption } from '../../../../components/radio/Radio';\n\nimport { MobileDialog } from 'features/search/components/MobileDialog';\n\nimport { createStyle } from 'utils/createStyle';\nimport { SortByProps, SortByOption } from 'features/search/components/SortBy';\n\nconst btnStyle = createStyle(\n 'mt-8 py-1 px-10 w-full rounded-3xl bg-brand text-white font-semibold',\n {\n maxWidth: 280,\n }\n);\n\nexport const MobileSortView = ({\n options,\n sortedByField,\n onChange = () => null,\n}: Partial<SortByProps>) => {\n const [selectedField, setSelectedField] = useState(sortedByField);\n\n const onApplyClicked = () => {\n onChange(selectedField as SortByOption);\n };\n\n const footer = (onClick: React.MouseEventHandler) => (\n <button className={btnStyle} onClick={onClick}>\n Sort\n </button>\n );\n\n return (\n <MobileDialog\n btnName=\"Sort\"\n header=\"Sort\"\n footer={footer}\n styles={{ container: 'border-r-0' }}\n onApply={onApplyClicked}\n >\n <Radio\n options={options as RadioOption[]}\n onChange={(option: SortByOption) => setSelectedField(option)}\n value={selectedField?.value ?? ''}\n />\n </MobileDialog>\n );\n};\n","import React, { useContext } from 'react';\nimport { MobileFilterDialog } from './MobileFilterView';\nimport { MobileSortView } from './MobileSortView';\nimport { Group } from './types';\nimport { sortOptions } from './util';\nimport { WalletSortAndFilterContext } from './context';\n\ninterface MobileSortAndFilterViewProps {\n groups: Group[];\n}\n\nexport const MobileSortAndFilterView = ({ groups }: MobileSortAndFilterViewProps) => {\n const { sortedBy, setSortedBy } = useContext(WalletSortAndFilterContext);\n const options = Object.values(sortOptions);\n\n return (\n <div className=\"flex justify-evenly\">\n <MobileFilterDialog groups={groups} />\n <MobileSortView options={options} sortedByField={sortedBy} onChange={setSortedBy} />\n </div>\n );\n};\n","import React from 'react';\nimport classnames from 'classnames';\n\ninterface TabProps {\n id: string;\n active: boolean;\n setActiveTab: (_: 'cardType' | 'brand') => void;\n}\n\nconst Tab = ({ id, active, children, setActiveTab }: React.PropsWithChildren<TabProps>) => {\n const onClick = () => {\n setActiveTab(id as 'cardType' | 'brand');\n };\n return (\n <p\n onClick={onClick}\n className={classnames(\n active ? 'border-b-4 border-bonus-pink text-brand-dark' : 'underline text-brand',\n 'cursor-pointer'\n )}\n >\n {children}\n </p>\n );\n};\n\ninterface TabsProps extends Pick<TabProps, 'setActiveTab'> {\n activeTab: 'cardType' | 'brand';\n}\n\nexport const Tabs = ({ activeTab, setActiveTab }: TabsProps) => {\n return (\n <div className=\"flex justify-evenly\">\n <Tab id={'cardType'} setActiveTab={setActiveTab} active={activeTab === 'cardType'}>\n Card Type\n </Tab>\n <Tab id={'brand'} setActiveTab={setActiveTab} active={activeTab === 'brand'}>\n Brand\n </Tab>\n </div>\n );\n};\n","import React, { useContext } from 'react';\nimport classnames from 'classnames';\nimport { TabContent, Option } from './types';\nimport { WalletSortAndFilterContext } from './context';\nimport { OutlinedButton } from 'components/outlined-btn/OutlinedButton';\nimport { allCards, eGift, reload } from './util';\n\nexport const CardTypeTab = ({ isActive }: TabContent) => {\n const { activeCardTypeFilter, setActiveCardTypeFilter, resolveCardTypeActiveFilters } =\n useContext(WalletSortAndFilterContext);\n\n const setActiveCardType = (cardType: Option) => {\n const updatedFilters: Set<Option> = resolveCardTypeActiveFilters(cardType);\n\n setActiveCardTypeFilter(updatedFilters);\n };\n\n return (\n <div className={classnames('flex justify-around mt-7', isActive ? '' : 'hidden')}>\n <OutlinedButton\n active={activeCardTypeFilter.has(allCards)}\n onClick={() => setActiveCardType(allCards)}\n >\n {allCards.text}\n </OutlinedButton>\n <OutlinedButton\n active={activeCardTypeFilter.has(eGift)}\n onClick={() => setActiveCardType(eGift)}\n >\n {eGift.text}\n </OutlinedButton>\n <OutlinedButton\n active={activeCardTypeFilter.has(reload)}\n onClick={() => setActiveCardType(reload)}\n >\n {reload.text}\n </OutlinedButton>\n </div>\n );\n};\n","import React, { useContext, useState, useMemo, useCallback, useRef } from 'react';\nimport classnames from 'classnames';\nimport { TabContent, Option } from './types';\nimport { WalletSortAndFilterContext } from './context';\nimport { OutlinedButton } from 'components/outlined-btn/OutlinedButton';\nimport Slider from 'react-slick';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport { CarouselControl } from 'components/carousel/CarouselControl';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\n\n/* Computes the appropriate amount of slides based on the number of brands passed.\n * Mainly used to show the slides in a nice manner and balancing the amount\n * shown per slide.\n *\n * Returns an array of length 2 where,\n * - the first index is the amount the carousel should render.\n * - the second index is the amount of SLIDES PER ROW\n *\n * These two values map to the rows/slidesPerRow config for the Slider\n */\nconst getSlidesConfig = (brands?: Option[]) => {\n const brands_ = brands as Option[];\n const numberOfBrands = brands_.length;\n\n switch (numberOfBrands) {\n case 1:\n case 2:\n case 3:\n return [1, 3];\n case 4:\n return [2, 2];\n default:\n return [2, 3];\n }\n};\n\nexport const BrandTab = ({ brands, isActive }: TabContent) => {\n const [cardWidth, setCardWidth] = useState(224); // biased towards desktop\n const containerRef = useRef<HTMLDivElement>(null);\n const [rows, slidesPerRow] = useMemo(() => getSlidesConfig(brands), [brands]);\n const [slider, setSlider] = useState<Slider>();\n const { selectedBrands, setSelectedBrands } = useContext(WalletSortAndFilterContext);\n\n // computes the width of the container of the carousel\n // REQUIRED for the carousel to render properly, otherwise wild widths of slides get\n // generated by the Slider component\n const padding = 5;\n const width = (cardWidth + padding) * slidesPerRow;\n\n const setSliderNode = useCallback((node: Slider) => {\n if (node !== null) {\n setSlider(node);\n }\n }, []);\n\n // Adds/Removes selected brand from the selections array\n const onClick = (option: Option) => {\n setSelectedBrands((selections: Option[]) => {\n const isAlreadySelected = selections.some(\n (selection: Option) => option.value === selection.value\n );\n return isAlreadySelected\n ? selections.filter((selection: Option) => option.value !== selection.value)\n : [...selections, option];\n });\n };\n\n const queries = useMemo(\n () => ({\n '(max-width: 767px)': () => {\n setCardWidth(144);\n },\n '(min-width: 768px)': () => {\n setCardWidth(224);\n },\n }),\n []\n );\n\n useMediaQueries(queries);\n\n const settings = useMemo(() => {\n return {\n slidesToShow: 1,\n arrows: false,\n // don't allow dragging on desktop: Bug where click event during the start drag event\n // flows to the card which redirects to the cards details page after the drag event ends\n // Note: There's an inconsistent way to get around this via callbacks to the Slider but\n // does not work very consistently\n draggable: false,\n rows,\n slidesPerRow,\n dots: true,\n appendDots: (dots: React.ReactNode) => (\n <CarouselControl\n prev={slider?.slickPrev}\n next={slider?.slickNext}\n dots={dots}\n showDots={true}\n />\n ),\n };\n }, [rows, slidesPerRow, slider]);\n\n return (\n <div\n className={classnames('mt-7 mx-auto w-screen', isActive ? '' : 'hidden')}\n ref={containerRef}\n style={{ width }}\n >\n <Slider ref={setSliderNode} {...settings}>\n {brands?.map((brand: Option) => (\n <div key={brand.value} className=\"mb-3\">\n <OutlinedButton\n className=\"block m-auto flex items-center\"\n active={selectedBrands.some(\n (option: Option) => option.value === brand.value\n )}\n onClick={() => onClick(brand)}\n >\n {brand.imageUrl && (\n <span className=\"px-2\">\n <img width=\"40\" src={brand.imageUrl} />\n </span>\n )}\n <span>{brand.text}</span>\n </OutlinedButton>\n </div>\n ))}\n </Slider>\n </div>\n );\n};\n","import React, { useContext } from 'react';\nimport { Pills, PillOption } from 'components/pills/Pills';\nimport { Option, FilterGroup } from './types';\nimport { WalletSortAndFilterContext } from './context';\nimport { allCards } from './util';\n\nexport const SelectionPills = () => {\n const { selectedBrands, setSelectedBrands, activeCardTypeFilter, setActiveCardTypeFilter } =\n useContext(WalletSortAndFilterContext);\n const options: PillOption[] = [...Array.from(activeCardTypeFilter), ...selectedBrands];\n const pillsExist = options.length > 0;\n\n const onRemove = (pillOption: PillOption) => {\n const option = pillOption as Option;\n\n if (option.group === FilterGroup.brand) {\n setSelectedBrands((selections: Option[]) => {\n return selections.filter((selection: Option) => selection.value !== option.value);\n });\n } else {\n const updatedCardTypeFilter = new Set<Option>(activeCardTypeFilter);\n\n if (updatedCardTypeFilter.size === 1) {\n // CASE: we only have 1 filter active, we should _remove it_ and add _allCards_\n // as a default\n updatedCardTypeFilter.delete(option);\n updatedCardTypeFilter.add(allCards);\n } else if (option === allCards) {\n // CASE: allCards filter is trying to be checked off\n // we should not allow the user to do that\n } else {\n // BASE CASE: we just want to delete an option\n updatedCardTypeFilter.delete(option);\n }\n setActiveCardTypeFilter(updatedCardTypeFilter);\n }\n };\n\n const clearAll = () => {\n setSelectedBrands([]);\n setActiveCardTypeFilter(new Set<Option>([allCards]));\n };\n\n return (\n <div className=\"my-6 sm:my-6 sm:mx-4 flex items-center\">\n {pillsExist && (\n <button\n className=\"text-xs flex-none underline text-brand font-semibold mr-4\"\n onClick={clearAll}\n >\n Clear All\n </button>\n )}\n <Pills options={options} onRemove={onRemove} />\n </div>\n );\n};\n","import React, { useState, useContext } from 'react';\nimport { Tabs } from './TabsSection';\nimport { Option } from './types';\nimport { CardTypeTab } from './CardTypeTab';\nimport { BrandTab } from './BrandTab';\nimport { SelectionPills } from './SelectionPills';\nimport { WalletSortAndFilterContext } from './context';\nimport { SortByDropdownMenu } from 'features/search/components/SortByDropdownMenu';\nimport { sortOptions } from './util';\n\n/*\n * Renders the Tabs, Results Text and the different tab contents\n */\n\nexport const FilterContent = ({ brands }: { brands: Option[] }) => {\n const [activeTab, setActiveTab] = useState<'cardType' | 'brand'>('cardType');\n return (\n <div className=\"mt-5\">\n <Tabs activeTab={activeTab} setActiveTab={setActiveTab} />\n <CardTypeTab isActive={activeTab === 'cardType'} />\n <BrandTab isActive={activeTab === 'brand'} brands={brands} />\n <SelectionPills />\n </div>\n );\n};\n\nconst FilterHeader = () => {\n const { result } = useContext(WalletSortAndFilterContext);\n return (\n <div>\n <p className=\"text-brand-dark text-2xl font-semibold\">\n Filter & Sort\n <span className=\"text-base font-normal\"> {result} Results</span>\n </p>\n </div>\n );\n};\n\nconst SortHeader = () => {\n const { sortedBy, setSortedBy } = useContext(WalletSortAndFilterContext);\n const options = Object.values(sortOptions);\n\n return (\n <SortByDropdownMenu sortOptions={options} sortedBy={sortedBy} setSortedBy={setSortedBy} />\n );\n};\n\nconst FilterAndSortHeader = () => {\n return (\n <div className=\"border-solid border-b px-6 border-grey-3 flex justify-between\">\n <FilterHeader />\n <SortHeader />\n </div>\n );\n};\n\nexport const FilterAndSortSection = ({ brands }: { brands: Option[] }) => {\n return (\n <div>\n <FilterAndSortHeader />\n <FilterContent brands={brands} />\n </div>\n );\n};\n","import React from 'react';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\n\nimport ResponsiveContainer, {\n ContainerType,\n} from 'components/responsive-containers/ResponsiveContainer';\nimport { MobileSortAndFilterView } from './MobileSortAndFilterView';\nimport { Card, isCardReloadable } from 'common/api/e-comm/models/Card';\nimport { ECommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { WalletSortAndFilterView } from './context';\nimport { CardWithBrand, Option, FilterGroup } from './types';\nimport { FilterAndSortSection } from './FilterAndSortSection';\nimport { allCards as allCardsOption, eGift, reload } from './util';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { createSelector } from 'reselect';\nimport { PartialRecord } from 'common/definitions/PartialRecord';\n\ninterface WalletFilterProps {\n allCards: Card[];\n setViewableCards: React.Dispatch<React.SetStateAction<Card[]>>;\n result: number;\n shouldResetFilters: boolean;\n shouldPersistFilters: boolean;\n}\n\nconst brandExistsInWallet = (allCards: Card[], id: number) => {\n return allCards.some(({ brandId }: Card) => brandId === id);\n};\n\nconst getBrandsAndCards = createSelector(\n (state: RootState) => state.store.brands.brandsById,\n (_: RootState, allCards: Card[]) => allCards,\n (brandsById: PartialRecord<number, ECommBrand>, allCards: Card[]) => {\n const brands_ = Object.values(brandsById || {}) as ECommBrand[];\n return {\n brands: brands_\n .filter(({ id }: ECommBrand) => brandExistsInWallet(allCards, id))\n .sort((brand1: ECommBrand, brand2: ECommBrand) =>\n brand1.name.localeCompare(brand2.name)\n )\n .map(\n ({ name, id, imageUrl }: ECommBrand) =>\n ({\n text: name,\n value: id.toString(),\n imageUrl,\n group: FilterGroup.brand,\n } as Option)\n ) as Option[],\n cardsWithBrand: allCards.map((card: Card) => {\n return {\n ...card,\n type: isCardReloadable(card) ? ProductType.Reload : card.type,\n brand: brandsById[card.brandId],\n };\n }) as CardWithBrand[],\n };\n }\n);\n\nexport const WalletSortAndFilter = (props: WalletFilterProps) => {\n const { allCards, result, setViewableCards, shouldResetFilters, shouldPersistFilters } = props;\n /*\n * Builds 2 data-structures, brands and cardsWithBrand\n * - brands data structure is used to represent the filters in the UI for rendering\n * - cardsWithBrand data structure is used to do the actual filtering when user selects\n * different brands. The Card data structure is insuficient as it only contains the\n * the `brandId`.\n *\n * NOTE: For brands we check if the brand has an associated card. The reason for this\n * is that brands come from `brandsById`, that state slice is actually shared by PDP page.\n * The PDP page _loads_ the brand into the `brandsById`\n */\n const { brands, cardsWithBrand } = useRootSelector((state) =>\n getBrandsAndCards(state, allCards)\n ) as unknown as { brands: Option[]; cardsWithBrand: CardWithBrand[] };\n\n // used for mobile view filters\n const groups = [\n {\n name: 'Card Type',\n options: [allCardsOption, eGift, reload] as Option[],\n },\n {\n name: 'Brands',\n options: brands,\n },\n ];\n\n return (\n <WalletSortAndFilterView\n result={result.toString()}\n cardsWithBrand={cardsWithBrand}\n setViewableCards={setViewableCards}\n shouldResetFilters={shouldResetFilters}\n shouldPersistFilter={shouldPersistFilters}\n >\n <ResponsiveContainer For={ContainerType.desktop}>\n <FilterAndSortSection brands={brands} />\n </ResponsiveContainer>\n <ResponsiveContainer For={ContainerType.mobile}>\n <MobileSortAndFilterView groups={groups} />\n </ResponsiveContainer>\n </WalletSortAndFilterView>\n );\n};\n","import React, { useState } from 'react';\nimport { faTimesCircle } from '@fortawesome/pro-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { Modal, ModalSize } from '../../../components/modal/Modal';\nimport { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\nimport { useHistory } from 'react-router';\nimport { Routes } from 'routes';\nimport { unarchiveCardThunk } from 'common/features/store/duck/wallet/duck';\nimport { useRootSelector } from 'rootStore';\nimport { useDispatch } from 'react-redux';\n\ninterface UnArchiveCardModalProps {\n isOpen: boolean;\n closeModal: () => void;\n cardId: string;\n refreshArchivedCards: (() => void) | undefined;\n}\n\nconst styles = createStyles({\n confirmButton: [\n 'rounded-full bg-brand text-white font-semibold text-lg py-2 mb-2',\n { ':disabled': { backgroundColor: colors.greyAccent, color: colors.grey4 } },\n ],\n});\n\nfunction generateModalMetaData(submitSuccess: boolean): [string, string, string] {\n if (submitSuccess) {\n return [\n 'This card has been Unarchived',\n 'You have successfully moved this card back to your Wallet',\n 'Back to My Cards',\n ];\n }\n\n return [\n 'Unarchive Card',\n 'Are you sure you want to move this card back to your Wallet?',\n 'Cancel',\n ];\n}\n\nconst UnArchiveCardModal = ({\n isOpen,\n closeModal,\n cardId,\n refreshArchivedCards,\n}: UnArchiveCardModalProps) => {\n const [requestError, setRequestError] = useState('');\n const [loading, setLoading] = useState(false);\n const [unArchiveSuccess, setUnarchiveSuccess] = useState(false);\n const [title, caption, buttonText] = generateModalMetaData(unArchiveSuccess);\n const history = useHistory();\n const userId = useRootSelector((r) => r.store.account.userId) as string;\n const dispatch = useDispatch<any>();\n\n const onConfirmArchive = async (): Promise<void> => {\n setLoading(true);\n\n const res = await unarchiveCardThunk(userId, cardId)(dispatch);\n\n setLoading(false);\n\n if (res.error) {\n return setRequestError(\n 'There was an issue unarchiving the card. Please try again later.'\n );\n }\n\n setUnarchiveSuccess(true);\n refreshArchivedCards && refreshArchivedCards();\n };\n\n const onCancelClick = () => {\n if (unArchiveSuccess) {\n history.push(Routes.WalletMyCards);\n }\n\n closeModal();\n };\n\n return (\n <Modal\n title={title}\n isOpen={isOpen}\n onClose={closeModal}\n titleStyles={unArchiveSuccess ? 'text-success' : ''}\n size={[ModalSize.CONTENT_WIDTH, ModalSize.CONTENT_WIDTH]}\n >\n {requestError && (\n <label className=\"flex items-center justify-center text-error text-sm mb-4\">\n <FontAwesomeIcon icon={faTimesCircle} size=\"lg\" className=\"mr-4\" />\n {requestError}\n </label>\n )}\n <h5 className=\"font-light mb-10\">{caption}</h5>\n {!unArchiveSuccess && (\n <button\n onClick={onConfirmArchive}\n disabled={loading || Boolean(requestError.length)}\n className={styles.confirmButton}\n >\n {loading ? 'Unarchiving Card...' : 'Yes'}\n </button>\n )}\n <button\n className=\"text-brand font-semibold underline text-lg py-2\"\n onClick={onCancelClick}\n >\n {buttonText}\n </button>\n </Modal>\n );\n};\n\nexport default UnArchiveCardModal;\n","import React, { useState } from 'react';\n\nimport { Card } from 'common/api/e-comm/models/Card';\nimport { useArchivedCards } from 'common/hooks/useArchivedCards';\nimport WalletCard from '../components/WalletCard';\nimport { WalletSortAndFilter } from './sortAndFilter';\nimport Skeleton from 'react-loading-skeleton';\nimport UnArchiveCardModal from '../components/UnArchiveCardModal';\n\nconst EmptyResultsMessage = () => (\n <div className=\"text-lg py-36 text-brand text-center sm:text-2xl\">\n No matching results. <br />\n Select another filter to view your cards\n </div>\n);\n\nconst useUnArchiveModalControls = () => {\n const [cardToArchive, setCardToArchiveTo] = useState<string | null>(null);\n\n return {\n card: cardToArchive,\n isOpen: Boolean(cardToArchive),\n closeModal: () => setCardToArchiveTo(null),\n openModal: setCardToArchiveTo,\n };\n};\n\nexport const ArchivedView = ({ isActive }: { isActive: boolean }) => {\n const [hasFetchedCards, setHasFetchedCards] = useState<boolean>(false);\n const { archivedCards, refresh } = useArchivedCards(setHasFetchedCards);\n const [cardsToRender, setCardsToRender] = useState<Card[]>([]);\n const { card, isOpen, closeModal, openModal } = useUnArchiveModalControls();\n\n if (!isActive) {\n return null;\n }\n\n if (!hasFetchedCards) {\n return (\n <div className=\"w-4/5 m-auto my-10\">\n <Skeleton className=\"h-20\" />\n <Skeleton className=\"mt-10 h-60\" />\n </div>\n );\n }\n\n return (\n <>\n <div>\n <div className=\"text-3xl text-brand-dark mb-8\">Archived Cards</div>\n </div>\n <WalletSortAndFilter\n allCards={archivedCards}\n setViewableCards={setCardsToRender}\n result={cardsToRender.length || 0}\n shouldResetFilters={isActive}\n shouldPersistFilters={false}\n />\n <UnArchiveCardModal\n isOpen={isOpen}\n closeModal={closeModal}\n cardId={card || ''}\n refreshArchivedCards={refresh}\n />\n {cardsToRender.length > 0 ? (\n cardsToRender.map((card, index) => (\n <WalletCard\n idx={index}\n key={card.id}\n card={card}\n archived={isActive}\n openUnArchiveModal={openModal}\n />\n ))\n ) : (\n <EmptyResultsMessage />\n )}\n </>\n );\n};\n","import { useEffect, useMemo } from 'react';\nimport { useDispatch } from 'react-redux';\nimport keyBy from 'lodash.keyby';\n\nimport { getArchivedWallet } from 'common/api/wallet/cards';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { upsertBrands } from 'common/features/store/duck/brands/duck';\nimport { ECommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { brandLoader } from 'common/api/wallet/cards/utils/brandLoader';\nimport { Card } from 'common/api/e-comm/models/Card';\n\nexport const useArchivedCards = (setHasFetchedCards: (_: boolean) => void) => {\n const [loadArchivedCards, state, result] = useApi(getArchivedWallet);\n const archivedCards: Card[] = useMemo(\n () => (result && result.data ? result.data : []),\n [result]\n );\n const isLoading = state.loading;\n const dispatch = useDispatch();\n\n // Side-Effect [A].\n // Load the suer's archived cards\n useEffect(() => {\n (async () => {\n const response = await loadArchivedCards();\n\n // CASE: user has no archived cards we setHasFetchedcards to true\n // as it won't get called in side effect B. If we do not do this, the archived cards\n // view will have infinite skeleton showing.\n if (!response?.data?.length) {\n setHasFetchedCards(true);\n }\n })();\n }, [loadArchivedCards, setHasFetchedCards]);\n\n // Side-Effect [B].\n // load the brands for each archived card and transform it before saving to redux\n useEffect(() => {\n if (!archivedCards.length) {\n return;\n }\n\n const neededBrandIds = archivedCards.map<number>((card) => card.brandId);\n\n const getArchivedCardsBrands = async () => {\n const response = await brandLoader.loadBrands(neededBrandIds);\n const archivedCardBrands = response.reduce<ECommBrand[]>((aggregateBrands, item) => {\n return item.error ? aggregateBrands : aggregateBrands.concat(item.data);\n }, []);\n dispatch(upsertBrands(keyBy(archivedCardBrands, (brand) => brand.id)));\n setHasFetchedCards(true);\n };\n\n getArchivedCardsBrands();\n }, [archivedCards, dispatch, setHasFetchedCards]);\n\n return {\n archivedCards,\n isLoading,\n refresh: loadArchivedCards,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useHistory } from 'react-router';\nimport { delay } from 'common/utils';\n\n// global variable to keep the scroll positions\nconst scrollPositions: { [key: string]: { scrollY: number } } = {};\n\nexport const useScrollRestore = ({\n restoreOnMount,\n delayMs = 0,\n}: {\n restoreOnMount: boolean;\n delayMs: number;\n}) => {\n const history = useHistory();\n const [initialLocation] = useState(history.location.pathname);\n\n const restore = useCallback(async () => {\n if (scrollPositions[initialLocation]) {\n const { scrollY } = scrollPositions[initialLocation];\n const deltaY = scrollY - window.scrollY;\n\n if (delayMs > 0) {\n await delay(delayMs);\n }\n\n window.scrollBy({ left: 0, top: deltaY, behavior: 'smooth' });\n\n delete scrollPositions[initialLocation];\n }\n }, [initialLocation, delayMs]);\n\n useEffect(() => {\n if (restoreOnMount) {\n restore();\n }\n\n return () => {\n scrollPositions[initialLocation] = { scrollY: window.scrollY };\n };\n }, [initialLocation, restore, restoreOnMount]);\n\n return {\n restore,\n };\n};\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { requestWallet, selectUserCards } from 'common/features/store/duck/wallet/duck';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { Card } from 'common/api/e-comm/models/Card';\n\nimport WalletCard from '../components/WalletCard';\nimport { WalletSortAndFilter } from './sortAndFilter';\n\nimport { delay } from 'common/utils';\n\nimport Skeleton from 'react-loading-skeleton';\nimport { useScrollRestore } from 'hooks/useScrollRestorer';\n\nconst EmptyResultsMessage = ({ hasCards }: { hasCards: boolean }) =>\n !hasCards ? (\n <div className=\"text-lg py-36 text-brand text-center sm:text-2xl\">\n No matching results. <br />\n Select another filter to view your cards\n </div>\n ) : (\n <div>\n <div className=\"h-96\"> </div>\n <div className=\"h-96\"> </div>\n </div>\n );\n\nexport const CardsView = ({ isActive }: { isActive: boolean }) => {\n const dispatch = useDispatch<any>();\n const { userId } = useRootSelector((s) => s.store.account);\n const myCardsState = useRootSelector(selectUserCards);\n const [hasFetchedCards, setHasFetchedCards] = useState<boolean>(\n Boolean(Object.keys(myCardsState).length)\n );\n const [cardsToRender, setCardsToRender] = useState<Card[]>([]);\n\n useScrollRestore({ restoreOnMount: true, delayMs: 1000 });\n\n useEffect(() => {\n if (Object.keys(myCardsState).length > 0) {\n setHasFetchedCards(true);\n }\n }, [myCardsState]);\n\n useEffect(() => {\n // Update cards view when this tab is active -- useful when user happens to\n // `unarchive` a card.\n if (userId && isActive) {\n const prom = new Promise((resolve) => resolve(dispatch(requestWallet(userId))));\n\n prom.finally(async () => {\n await delay(1000);\n setHasFetchedCards(true);\n });\n }\n }, [dispatch, userId, isActive]);\n\n // don't render anything and avoid any work from WalletSortAndFilter\n if (!isActive) {\n return null;\n }\n\n if (!hasFetchedCards) {\n return (\n <div className=\"w-4/5 m-auto my-10\">\n <Skeleton className=\"h-20\" />\n <Skeleton className=\"mt-10 h-60\" />\n </div>\n );\n }\n\n return (\n <>\n <WalletSortAndFilter\n allCards={Object.values(myCardsState) as Card[]}\n setViewableCards={setCardsToRender}\n result={cardsToRender.length || 0}\n shouldResetFilters={isActive}\n shouldPersistFilters={true}\n />\n {cardsToRender.length > 0 ? (\n cardsToRender.map((card, index) => (\n <WalletCard idx={index} key={card.id} card={card} archived={false} />\n ))\n ) : (\n <EmptyResultsMessage hasCards={Object.keys(myCardsState).length > 0} />\n )}\n </>\n );\n};\n","export enum SupportedType {\n GiftCard = 'Gift Card',\n EGiftCard = 'eGift Card',\n Reloadable = 'Reloadable',\n}\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { faCheckCircle, faExclamationTriangle } from '@fortawesome/pro-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Formik, FormikHelpers, useFormikContext } from 'formik';\nimport debounce from 'lodash.debounce';\nimport { useDispatch } from 'react-redux';\nimport classnames from 'classnames';\nimport AsyncSelect from 'react-select/async';\nimport Select from 'react-select/dist/declarations/src/Select';\nimport { StylesConfig } from 'react-select/dist/declarations/src';\nimport { hasOnlySuggestions } from 'components/search/useFormatGroupLabel';\nimport { components } from 'react-select';\n\nimport { Modal, ModalSize } from '../../../components/modal/Modal';\nimport { FormikTextField } from '../../../components/fields/FormikTextField';\nimport { createStyles } from 'utils/createStyle';\nimport { suggestBrands } from 'common/api/search/suggest/getSuggestions';\nimport { includesEq } from 'common/utils/searchFilters';\nimport { SupportedType } from 'common/api/search/models/SupportedType';\nimport { colors } from 'styles/settings';\nimport {\n walletCardNumberValidator,\n walletCardPinValidator,\n walletCardNameValidator,\n} from 'common/modules/form-validation/validators';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { registerCard, validateCard } from 'common/api/wallet/cards';\nimport { getReloadProductThunk, upsertCard } from 'common/features/store/duck/wallet/duck';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { delay } from 'common/utils';\nimport { Brand } from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\nimport { GroupBase, OptionProps } from 'react-select';\nimport { highlightMatchesHtml } from 'utils';\nimport { getProductsByBrand } from 'common/api/e-comm/brands';\nimport { isPinRequiredForReloadOrBalance } from 'common/api/wallet/cards';\nimport { Product } from 'common/api/e-comm/models/Product';\n\ninterface AddNewCardModalProps {\n isOpen?: boolean;\n closeModal: () => void;\n}\n\ninterface AddCardFormValues {\n brand: string;\n number: string;\n pin?: string;\n name?: string;\n}\n\nconst addCardFormInitialValues = {\n brand: '',\n number: '',\n pin: '',\n name: '',\n};\n\nconst styles = createStyles({\n submitButton: [\n 'rounded-full bg-brand text-white font-semibold text-lg py-2 mb-2 w-full',\n { ':disabled': { backgroundColor: colors.greyAccent, color: colors.grey4 } },\n ],\n textInput: [\n 'bg-grey-accent',\n {\n border: 'none',\n minWidth: 275,\n '&::-webkit-calendar-picker-indicator': { display: 'none !important' },\n '&::-webkit-list-button': { display: 'none !important' },\n },\n ],\n});\n\nconst RetryAddingCard = ({\n attempts,\n isSubmitting,\n}: {\n attempts: number;\n isSubmitting: boolean;\n}) => {\n return (\n <div>\n {attempts > 0 && attempts < 3 && (\n <button\n disabled={isSubmitting}\n type=\"submit\"\n className={classnames(styles.submitButton, 'w-full flex justify-center')}\n >\n {!isSubmitting ? (\n <span>Retry</span>\n ) : (\n <span>\n <ActivityIndicator width=\"30\" />\n </span>\n )}\n </button>\n )}\n </div>\n );\n};\n\nconst AddCardModal = ({ isOpen, closeModal }: AddNewCardModalProps) => {\n const dispatch = useDispatch<any>();\n const submitAttempts = useRef<number>(0);\n const [formError, setFormError] = useState('');\n const [submitSuccess, setSubmitSuccess] = useState(false);\n const { userId } = useRootSelector((s) => s.store.account);\n\n const onSubmit = async (\n values: AddCardFormValues,\n actions: FormikHelpers<AddCardFormValues>\n ) => {\n if (!userId) {\n return;\n }\n\n actions.setSubmitting(true);\n const selectedBrandId = parseInt(values.brand, 10);\n const errMsg =\n submitAttempts.current > 1\n ? 'Unable to add card. Please try again later.'\n : 'Unable to add card.';\n\n if (!selectedBrandId) {\n actions.setSubmitting(false);\n setFormError(errMsg);\n return;\n }\n\n try {\n const reloadProduct = await getReloadProductThunk(selectedBrandId)(dispatch);\n\n if (reloadProduct.error || !reloadProduct.data) {\n actions.setSubmitting(false);\n submitAttempts.current += 1;\n setFormError(errMsg);\n return;\n }\n\n const validCardResponse = await validateCard(\n values.number,\n reloadProduct.data.supplierCode\n );\n\n if (validCardResponse.data?.cardEligibilityType === 'InstantActivate') {\n actions.setFieldError(\n 'number',\n 'This card can only be activated in The RaiseRight App.'\n );\n return;\n }\n\n const result = await registerCard({\n brandId: selectedBrandId,\n cardNumber: values.number.trim(),\n pin: values.pin || null,\n name: values.name || null,\n productSku: reloadProduct.data.sku,\n supplierCode: reloadProduct.data.supplierCode,\n });\n\n // add a small delay for better loading responsiveness\n await delay(1000);\n submitAttempts.current += 1;\n\n if (!result.data) {\n actions.setSubmitting(false);\n\n setFormError(errMsg);\n return;\n }\n\n dispatch(upsertCard({ userId, card: result.data }));\n actions.setSubmitting(false);\n setSubmitSuccess(true);\n } catch (err) {\n actions.setSubmitting(false);\n setFormError(errMsg);\n }\n };\n\n const onClose = () => {\n setFormError('');\n submitAttempts.current = 0;\n closeModal();\n setSubmitSuccess(false);\n };\n\n return (\n <Modal\n title=\"Add a New Card\"\n isOpen={isOpen}\n onClose={onClose}\n size={[ModalSize.CONTENT_WIDTH, ModalSize.CONTENT_WIDTH]}\n >\n <Formik<AddCardFormValues> initialValues={addCardFormInitialValues} onSubmit={onSubmit}>\n <AddCardForm\n submitAttempts={submitAttempts.current}\n onClose={onClose}\n submitSuccess={submitSuccess}\n formError={formError}\n />\n </Formik>\n </Modal>\n );\n};\n\nconst AddCardForm = ({\n submitAttempts,\n onClose,\n submitSuccess,\n formError,\n}: {\n submitAttempts: number;\n onClose: () => void;\n submitSuccess: boolean;\n formError: string;\n}) => {\n const [isRequired, setIsRequired] = useState(false);\n const [product, setProduct] = useState<Product | null>(null);\n\n const formikProps = useFormikContext<AddCardFormValues>();\n const brandId = formikProps.values.brand;\n\n useEffect(() => {\n if (brandId) {\n getProductsByBrand(parseInt(brandId)).then((productResponse) => {\n if (productResponse.data && productResponse.data?.length > 0) {\n setProduct(productResponse.data[0]);\n }\n });\n }\n }, [brandId]);\n\n const checkCardValidity = async (cardNumber: string, brandId: string) => {\n const id = parseInt(brandId);\n if (cardNumber.length >= 12 && !isNaN(id) && product) {\n const supplierCode = product.supplierCode;\n const validCardResponse = await validateCard(cardNumber, supplierCode);\n\n if (\n validCardResponse.data &&\n validCardResponse.data.cardEligibilityType === 'InstantActivate'\n ) {\n formikProps.setFieldError(\n 'number',\n 'This card can only be activated in The RaiseRight App.'\n );\n }\n }\n };\n\n const supplierCode = product?.supplierCode;\n useEffect(() => {\n if (supplierCode) {\n isPinRequiredForReloadOrBalance(supplierCode).then((result) => {\n setIsRequired(Boolean(result.data?.isPinRequired));\n });\n }\n }, [supplierCode]);\n\n const validatePin = useCallback(\n (value: string) => {\n if (value.length) {\n return walletCardPinValidator(value);\n } else if (isRequired) {\n return 'Pin is required.';\n }\n },\n [isRequired]\n );\n\n return (\n <form\n className=\"flex flex-col w-auto md:w-96\"\n noValidate\n autoComplete=\"off\"\n onSubmit={formikProps.handleSubmit}\n >\n {formError && (\n <label className=\"flex w-72 sm:w-full flex-col h-60 font-semibold items-center justify-center text-2xl mb-4\">\n <FontAwesomeIcon\n icon={faExclamationTriangle}\n size=\"lg\"\n className=\"text-error mr-4\"\n />\n <span className=\"text-center text-brand mt-4\">{formError}</span>\n <span className=\"text-xl text-sm text-grey-2\">\n Please note, only eligible gift cards purchased through RaiseRight can be\n added to your wallet.\n </span>\n </label>\n )}\n {!submitSuccess && (\n <div\n className={classnames(submitAttempts > 0 ? 'hidden' : 'block')}\n data-recording-disable\n >\n <SearchBrandDropdown />\n <FormikTextField<AddCardFormValues>\n className={styles.textInput}\n wrapperStyles=\"mb-7\"\n placeholder=\"Enter gift card number\"\n label=\"Card Number\"\n name=\"number\"\n disabled={!formikProps.values.brand}\n validate={walletCardNumberValidator}\n onBlur={() =>\n checkCardValidity(formikProps.values.number, formikProps.values.brand)\n }\n data-testid=\"card_number\"\n />\n <FormikTextField<AddCardFormValues>\n className={styles.textInput}\n wrapperStyles=\"mb-7\"\n placeholder=\"Enter security pin\"\n label=\"PIN\"\n name=\"pin\"\n disabled={!formikProps.values.brand}\n validate={validatePin}\n />\n <FormikTextField<AddCardFormValues>\n className={styles.textInput}\n wrapperStyles=\"mb-12\"\n placeholder=\"Enter custom card name\"\n label=\"Name (Optional)\"\n name=\"name\"\n onChange={() => {\n formikProps.setFieldTouched('name');\n }}\n disabled={!formikProps.values.brand}\n validate={(value) => {\n if (value.length) {\n return walletCardNameValidator(value);\n }\n }}\n />\n <button\n type=\"submit\"\n className={styles.submitButton}\n disabled={\n formikProps.isSubmitting ||\n !formikProps.isValid ||\n !formikProps.dirty ||\n submitAttempts > 2 ||\n submitSuccess\n }\n data-testid=\"add_card_submit_button\"\n >\n {formikProps.isSubmitting ? 'Adding Card...' : 'Add Card'}\n </button>\n </div>\n )}\n {submitSuccess ? (\n <React.Fragment>\n <div\n style={{ minWidth: 275 }}\n className=\"text-success flex flex-col items-center mb-10 py-16\"\n >\n <FontAwesomeIcon icon={faCheckCircle} size=\"3x\" />\n <h5\n className=\"font-semibold text-2xl text-center mt-8\"\n data-testid=\"success_message\"\n >\n Card Successfully Added\n </h5>\n </div>\n </React.Fragment>\n ) : (\n <RetryAddingCard\n attempts={submitAttempts}\n isSubmitting={formikProps.isSubmitting}\n />\n )}\n <button\n onClick={(evt: React.SyntheticEvent) => {\n evt.preventDefault();\n formikProps.resetForm();\n onClose();\n }}\n className=\"text-brand font-semibold underline text-lg py-2\"\n data-testid=\"close_button\"\n >\n {!submitSuccess && submitAttempts === 0 ? 'Cancel' : 'Close'}\n </button>\n </form>\n );\n};\n\nconst CustomOption = ({\n innerRef,\n innerProps,\n data,\n isFocused,\n label,\n ...props\n}: OptionProps<Brand, false, GroupBase<Brand>>) => {\n // highligh matches\n const filter = props.selectProps.inputValue?.toLowerCase() as string;\n const highlighted = highlightMatchesHtml(label, filter);\n\n return (\n <div\n {...innerProps}\n data-testid={data.name}\n ref={innerRef}\n key={data.id || 0}\n className={`${\n isFocused\n ? 'border-l-4 border-solid border-brand '\n : 'border-l-4 border-solid border-white '\n }px-4 py-2 no-underline capitalize text-left text-brand hover:underline focus:underline grid`}\n style={{ gridTemplateColumns: 'max-content auto' }}\n title={label}\n >\n {data.imageUrl ? (\n <img src={data.imageUrl} className=\"inline-block w-16\" />\n ) : (\n renderEmpty(data)\n )}\n <a\n href=\"#\"\n className={'no-underline align-top ml-2 hover:underline leading-10 truncate w-full'}\n onClick={(e) => e.preventDefault()}\n >\n {highlighted}\n </a>\n </div>\n );\n};\n\nconst renderEmpty = (data: Brand) => {\n if (Number(data.id) <= 0) {\n return <div />;\n }\n\n return <div className=\"inline-block w-16 bg-grey-3\" />;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Input = (props: any) => {\n return (\n <components.Input\n data-testid=\"brand_name\"\n {...props}\n className={`${0} text-grey-1 border-0`}\n isHidden={false}\n />\n );\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst SingleValue = (props: any) => {\n const children = props.selectProps.menuIsOpen ? null : props.children;\n return <components.SingleValue {...props}>{children}</components.SingleValue>;\n};\n\nconst SearchBrandDropdown = () => {\n const formikProps = useFormikContext();\n const ref = useRef<Select<Brand, false, GroupBase<Brand>>>(null);\n const [term, applyTerm] = useState('');\n const st: StylesConfig<Brand, boolean, GroupBase<Brand>> = {\n control: (base) => ({ ...base, border: 0, background: '#f7f7f7' }),\n placeholder: (base) => ({\n ...base,\n color: '#939598 !important',\n }),\n singleValue: (base) => ({ ...base, color: '#58595b !important' }),\n menu: (base) => ({ ...base, marginTop: 3 }),\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const loadOptions = useCallback(\n debounce((searchString: string, callback: Function) => {\n // using the store object to guarantee that we have the latest state.\n const promise = suggestBrands({\n search: `${searchString}`,\n filter: includesEq('SupportedTypes', SupportedType.Reloadable),\n select: 'Id, Name, ImageUrl',\n });\n\n // waits the request complete, and reducers to run to get the filteredResults from the store.\n promise.then((result) => {\n const value = result.data || [];\n const onlySuggestions = hasOnlySuggestions(\n searchString,\n value as unknown as Brand[]\n );\n\n if (value.length <= 0) {\n return callback([]);\n }\n\n const results = onlySuggestions\n ? [\n {\n label: '',\n options: value,\n },\n ]\n : [\n {\n label: '',\n options: [...value],\n },\n ];\n\n return callback(results);\n });\n }, 500),\n []\n );\n\n const onInputChange = (input: string) => {\n applyTerm(input);\n\n return input;\n };\n\n return (\n <div className=\"pb-7\">\n <label className=\"text-grey-1 font-bold mb-1 block text-xs\">Brand</label>\n <AsyncSelect\n data-testid=\"add-card-dropdown\"\n ref={ref}\n styles={st}\n getOptionValue={(item) => item.id}\n getOptionLabel={(item) => item.name}\n className=\"py-1w-full max-w-xs sm:max-w-lg text-left\"\n inputValue={term}\n isClearable={false}\n placeholder=\"Search for gift-card brand\"\n noOptionsMessage={(_) =>\n !_.inputValue\n ? 'Type something to search for Brands.'\n : `No brands were found with filter: ${_.inputValue}`\n }\n loadingMessage={(_) => `Searching brands: ${_.inputValue}...`}\n loadOptions={loadOptions}\n components={{\n DropdownIndicator: () => null,\n IndicatorSeparator: () => null,\n Option: CustomOption,\n Input,\n SingleValue,\n }}\n onInputChange={(newValue) =>\n newValue.length <= 75 ? onInputChange(newValue) : newValue\n }\n onChange={(item) => {\n const itemSelected = item as Brand;\n if (itemSelected?.id) {\n formikProps.setFieldValue('brand', itemSelected.id);\n setTimeout(() => {\n ref.current?.blur();\n ref.current?.focus();\n ref.current?.blur();\n }, 500);\n }\n }}\n // using fixed to avoid issues with overflow: hidden|auto etc..\n menuPosition=\"fixed\"\n />\n </div>\n );\n};\n\nexport default AddCardModal;\n","import React, { ReactNode, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { Routes } from 'routes';\nimport { createStyles } from 'utils/createStyle';\nimport AddCardModal from './AddCardModal';\n\nconst styles = createStyles({\n main: [\n 'md:grid mt-10 sm:mt-20 px-4',\n {\n gridTemplateColumns: 'auto max-content minmax(350px, 780px) auto',\n },\n ],\n menuSm: ['sm:hidden mb-2', { width: '200px' }],\n});\n\nexport const MainLayout = ({\n section,\n children,\n}: {\n section: 'archived' | 'active' | 'detail';\n children?: ReactNode;\n}) => {\n const archivedCardsRoute = `${Routes.WalletMyCards}?section=archived`;\n const myCardsRoute = `${Routes.WalletMyCards}?section=my-cards`;\n\n const currentLinkStyles = 'no-underline text-brand-dark';\n\n const isMyCards = section === 'active';\n const isArchived = section === 'archived';\n\n const [showModal, setShowModal] = useState(false);\n\n return (\n <div className={styles.main}>\n <div></div>\n <div>\n <div>\n <div>\n <AddCardModal isOpen={showModal} closeModal={() => setShowModal(false)} />\n <h1 className=\"font-light text-brand-dark text-3xl sm:text-5xl mb-6 col-span-2\">\n Wallet\n </h1>\n </div>\n <div className={styles.menuSm}>\n <nav className=\"flex flex-row gap-8\">\n <Link\n className={classNames(\n 'text-xs font-semibold',\n isMyCards && currentLinkStyles\n )}\n to={myCardsRoute}\n >\n My Cards\n </Link>\n <Link\n className={classNames(\n 'text-xs font-semibold',\n isArchived && currentLinkStyles\n )}\n to={archivedCardsRoute}\n >\n Archive\n </Link>\n </nav>\n </div>\n <div className=\"sm:hidden w-full border-t border-grey-5\"></div>\n </div>\n <div className=\"hidden md:block\">\n <nav className=\"flex flex-col gap-4\">\n <Link\n className={classNames(\n 'text-xs font-semibold',\n isMyCards && currentLinkStyles\n )}\n to={myCardsRoute}\n >\n My Cards\n </Link>\n <Link\n className={classNames(\n 'text-xs font-semibold',\n isArchived && currentLinkStyles\n )}\n to={archivedCardsRoute}\n >\n Archive\n </Link>\n </nav>\n </div>\n </div>\n <div>\n <div className=\"w-full items-center mr-auto flex\">\n <button\n className={classNames(\n 'ml-auto mt-2 bg-brand rounded-full text-white py-2 px-7 w-max font-semibold -mt-32 md:mt-0',\n !isMyCards ? 'hidden' : 'visible'\n )}\n disabled={!isMyCards}\n onClick={() => setShowModal(true)}\n >\n Add Card\n </button>\n </div>\n <div className=\"max-w-3xl mt-12 w-full lg:ml-6\">{children}</div>\n </div>\n <div></div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { withAuth } from 'features/auth/components/withAuth';\nimport useQueryParams from 'hooks/useQueryParams';\nimport { ArchivedView } from './ArchivedView';\nimport { CardsView } from './CardsView';\nimport { MainLayout } from '../components/MainLayout';\nimport { getOrdersV2 } from 'common/api/e-comm/orders/service';\nimport { useDispatch } from 'react-redux';\nimport {\n requestAffilateOffersForWalletCards,\n requestWallet,\n selectUserCards,\n} from 'common/features/store/duck/wallet/duck';\nimport { useRootSelector } from 'rootStore';\nimport { useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport { Value } from 'firebase/remote-config';\nimport { selectUserId } from 'common/features/store/duck/account/duck';\nimport { constructorClient } from 'third-party-integrations/constructor';\nimport { selectIsConstructorBrowseEnabledWeb } from 'common/features/store/duck/ffs';\n\nconst parseToMilliseconds = (n: Value) => {\n return n.asNumber() * 1000;\n};\n\nconst usePollingControl = (): [boolean, React.Dispatch<React.SetStateAction<boolean>>] => {\n const [shouldStartPolling, setShouldStartPolling] = useState<boolean>(false);\n const polling_time_trigger = useFirebaseConfigValues(\n 'wallet_elapsed_time_polling_trigger',\n undefined,\n parseToMilliseconds\n );\n\n useEffect(() => {\n if (polling_time_trigger) {\n const checkIfShouldStartPolling = async () => {\n const startDate = new Date();\n const endDate = new Date();\n endDate.setDate(endDate.getDate() + 1);\n\n const result = await getOrdersV2(\n startDate.toISOString().split('T')[0],\n endDate.toISOString().split('T')[0]\n );\n\n if (result.data && result.data.length > 0) {\n const [order] = result.data;\n const orderDate: Date = new Date(order.orderDate);\n\n return startDate.getTime() - orderDate.getTime() <= polling_time_trigger;\n }\n\n return false;\n };\n checkIfShouldStartPolling()\n .then((shouldStartPolling: boolean) => {\n setShouldStartPolling(shouldStartPolling);\n })\n .catch(() => {\n console.error('failed to start wallet polling');\n });\n }\n }, [polling_time_trigger]);\n\n return [shouldStartPolling, setShouldStartPolling];\n};\n\nexport const useRefreshWalletPolling = (): boolean => {\n const cardsById = useRootSelector(selectUserCards);\n const [shouldStartPolling, setContinuePolling] = usePollingControl();\n const userId = useRootSelector(selectUserId);\n const dispatch = useDispatch<any>();\n const showAffiliateBonuses = useRootSelector(selectIsConstructorBrowseEnabledWeb);\n\n const pollInterval = useFirebaseConfigValues(\n 'wallet_refresh_interval',\n 22000,\n parseToMilliseconds\n ) as number;\n const pollingMaxTime = useFirebaseConfigValues(\n 'wallet_polling_max_time',\n 5 * 60 * 1000,\n parseToMilliseconds\n ) as number;\n\n useEffect(() => {\n if (!showAffiliateBonuses) {\n return;\n }\n\n const brandIds = Object.keys(cardsById)\n .map((key) => (cardsById as any)[key]?.brandId)\n .filter((id, index, array) => index === array.indexOf(id));\n if (brandIds && brandIds.length > 0 && constructorClient) {\n dispatch(requestAffilateOffersForWalletCards(brandIds, constructorClient));\n }\n }, [cardsById]);\n\n useEffect(() => {\n const poll = () => {\n if (userId) {\n dispatch(requestWallet(userId));\n }\n };\n\n let pollingSoFar = 0;\n let timer: NodeJS.Timeout;\n\n if (shouldStartPolling && pollingMaxTime > 0) {\n timer = setInterval(() => {\n poll();\n pollingSoFar += pollInterval;\n\n if (pollingSoFar >= pollingMaxTime) {\n clearInterval(timer);\n setContinuePolling(false);\n return;\n }\n }, pollInterval);\n }\n return () => {\n // NOTE: clear the timer in case user leaves page before timer gets cleared above.\n if (timer) {\n clearInterval(timer);\n }\n };\n }, [shouldStartPolling, pollingMaxTime, pollInterval, setContinuePolling, dispatch, userId]);\n\n return shouldStartPolling;\n};\n\nconst WalletScreen = withAuth()(() => {\n const params = useQueryParams();\n const section = params.get('section');\n const isArchived = section === 'archived';\n useRefreshWalletPolling();\n\n return (\n <ShopScreen>\n <MainLayout section={isArchived ? 'archived' : 'active'}>\n <ArchivedView isActive={isArchived} />\n <CardsView isActive={!isArchived} />\n </MainLayout>\n </ShopScreen>\n );\n});\n\nexport default WalletScreen;\n","import React, { useMemo, useEffect, useState } from 'react';\nimport { Redirect, useParams, Link } from 'react-router-dom';\n\nimport { OrderScreen } from '../OrderScreen';\nimport { OrderSuccessGrid, OrderSuccessGridData } from '../components/success/OrderSuccessGrid';\nimport { ReactComponent as ConfettiImg } from '../../../media/images/confetti.svg';\nimport { getRoktAttributes, AttributesType } from 'third-party-integrations/rokt/getRoktAttributes';\n\nimport { createStyles } from 'utils/createStyle';\nimport { Routes } from 'routes';\nimport { useRoktLauncher } from 'third-party-integrations/rokt';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport RemoteConfigWeb from 'config/RemoteConfigWeb';\nimport { requestRecommendedCategories } from 'common/features/store/duck/categories/duck';\nimport { useDispatch } from 'react-redux';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { ShopOnlineBanner } from 'features/wallet/components/ShopOnlineBanner';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport {\n requestAffilateOffersForWalletCards,\n selectWalletAffiliateBonuses,\n} from 'common/features/store/duck/wallet/duck';\nimport { useRefreshWalletPolling } from 'features/wallet/screens/MyCards';\nimport { constructorClient } from 'third-party-integrations/constructor';\n\ntype BrandDedupeList = { [key: number]: string[] };\n\nconst indexByBrandId = (\n config: {\n brandId: number;\n categoryNames: string[];\n }[]\n): BrandDedupeList => {\n const dedupeList = {} as BrandDedupeList;\n for (const element of config) {\n const item = element;\n dedupeList[item.brandId] = item.categoryNames;\n }\n return dedupeList;\n};\n\nconst styles = createStyles({\n confettiContainer: [\n 'absolute hidden xl:block',\n {\n top: '-130px',\n left: '-190px',\n zIndex: -1,\n },\n ],\n});\n\nexport type OrderSuccessScreenContentProps = {\n orderId: string;\n};\n\nexport const OrderSuccessScreenContent = ({ orderId }: OrderSuccessScreenContentProps) => {\n const allCategories = useRootSelector(\n (state) => state.store.categories.recommendedCategory?.categories ?? []\n );\n const profile = useRootSelector((state) => state?.store?.home?.homeDetails?.profile);\n const orderData = useMemo(() => {\n const placedOrderJSON = sessionStorage.getItem(`placed_order_${orderId}`);\n if (placedOrderJSON) {\n return JSON.parse(placedOrderJSON) as OrderSuccessGridData;\n }\n }, [orderId]);\n\n const { isEnabled } = useFeatureFlags();\n const [attributes, setAttributes] = useState<AttributesType | null>(null);\n const affiliateBrandOffersSelector = useRootSelector(selectWalletAffiliateBonuses);\n const brandId =\n orderData?.cart.lineItems.length === 1 &&\n orderData.cart.lineItems[0].product.type === ProductType.EGiftCard\n ? orderData.cart.lineItems[0].brand?.id\n : null;\n\n useRefreshWalletPolling();\n\n const affiliateOffers = useMemo(() => {\n if (brandId && affiliateBrandOffersSelector) {\n return affiliateBrandOffersSelector(`${brandId}`);\n }\n }, [brandId, affiliateBrandOffersSelector]);\n\n /*\n * FIXES Bug where the ShopOnlineBanner _does not_ render due to the `brand`\n * that was just currently purchased not appearing in the user's wallet.\n *\n * The user's wallet is used to fetch brand data, this is done inside\n * `useRefreshWalletPolling`\n *\n * Note: Do we _really_ need to use the hook here?\n */\n useEffect(() => {\n if (brandId) {\n // Fetches the brand data for the user's pucharsed gift card\n dispatch(requestAffilateOffersForWalletCards([brandId], constructorClient));\n }\n }, [brandId]);\n\n const dispatch = useDispatch<any>();\n\n const launcher = useRoktLauncher();\n\n const dedupeList = useMemo(() => {\n return indexByBrandId(\n JSON.parse(RemoteConfigWeb.getRemoteValue('rokt_categories_dedupe_list').asString())\n );\n }, []);\n\n useEffect(() => {\n if (!isEnabled(FeatureFlagTypes.enable_rokt_web)) {\n return;\n }\n if (!profile || !allCategories.length || !dedupeList || !orderData) {\n return;\n }\n\n if (!attributes) {\n setAttributes(\n getRoktAttributes({\n amount: orderData?.total ?? 0,\n profile,\n cartItems: orderData?.cart.lineItems ?? [],\n allCategories,\n dedupeList,\n })\n );\n }\n }, [allCategories, dedupeList, profile, orderData, isEnabled]);\n\n useEffect(() => {\n const fetchData = async () => {\n await requestRecommendedCategories()(dispatch);\n };\n fetchData();\n }, [dispatch]);\n\n useEffect(() => {\n if (orderData) {\n const { data, cart } = orderData;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window.cnstrcPurchaseData = {\n items: [\n ...cart.lineItems.map((item) => {\n return {\n item_id: item.brand?.id,\n quantity: item.quantity,\n };\n }),\n ],\n\n order_id: data.orderId,\n revenue: cart.subtotal,\n };\n }\n }, [orderData]);\n\n useEffect(() => {\n if (!launcher || !attributes) {\n return;\n }\n\n const selectionPromise = launcher\n .selectPlacements({\n attributes: attributes,\n // instead of using the identifier, it was created an rule in the rokt dashboard\n // identifier: 'confirmation.page',\n })\n .catch(console.error);\n\n return () => {\n setAttributes(null);\n if (selectionPromise) {\n // When the page closes, remove all the Rokt placements\n selectionPromise.then((selection: { close: () => void }) => selection.close());\n }\n };\n }, [launcher, attributes]);\n\n return (\n <div>\n <div className=\"text-center\">\n <div className=\"text-center text-3xl lg:text-5xl text-brand-dark mb-8\">\n <p>Your order has been received</p>\n <p className=\"text-xl font-semibold\">\n An order confirmation has been sent to your email.\n </p>\n </div>\n <div className=\"relative inline-block text-left\">\n <div className={styles.confettiContainer}>\n <ConfettiImg />\n </div>\n {affiliateOffers && affiliateOffers.canDoubleDip && (\n <div>\n <ShopOnlineBanner\n brandId={brandId!}\n affiliateOffer={affiliateOffers}\n atRaiseRight={false}\n />\n <div className=\"text-xs text-grey-2 mt-2\">\n When you buy through the link on RaiseRight, we may earn a\n commission.\n </div>\n </div>\n )}\n <div>\n <div className=\"text-right mb-1\">\n <a\n href=\"#\"\n className=\"text-xs font-bold underline text-grey-1\"\n onClick={(e) => {\n print();\n e.preventDefault();\n }}\n >\n Print Receipt\n </a>\n </div>\n {orderData ? (\n <OrderSuccessGrid data={orderData} />\n ) : (\n <Redirect to={Routes.ShopAccountSettingsOrderHistoryTab} />\n )}\n </div>\n <div className=\"max-w-3xl text-sm pl-5 mt-5 text-grey-2\">\n <ul className=\"list-disc\">\n <li>\n Physical gift cards: Your coordinator can tell you when your gift\n cards will arrive. Not sure who your coordinator is? You can contact\n them via your{' '}\n <Link to={Routes.ShopAccountSettingsDashboardTab}>Dashboard</Link>.\n </li>\n <li>\n eGift cards: Your gift cards will be available in a few minutes. To\n view and use your eGift cards, check your{' '}\n <Link to={Routes.WalletMyCards}>Wallet</Link>.\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div className=\"mb-5\" />\n <div id=\"rokt-placeholder\" className=\"max-w-3xl mr-auto ml-auto\" />\n </div>\n );\n};\n\nexport type OrderPaymentSuccessParams = {\n orderId: string;\n};\n\nexport const OrderSuccessScreen = () => {\n const { orderId } = useParams<OrderPaymentSuccessParams>();\n\n return (\n <OrderScreen\n title=\"Order Success\"\n orderStep=\"review\"\n className=\"py-4 px-6 lg:px-8 sm:py-20 xl:mx-24 pt-20\"\n showSummary={false}\n showMobileSummary={false}\n hideHeader={true}\n noMaxWidth={true}\n embedView={false}\n >\n <OrderSuccessScreenContent orderId={orderId} />\n </OrderScreen>\n );\n};\n","import { Family } from 'common/api/crm/models/Family';\nimport { CartLineItem } from 'common/api/e-comm/models/CartLineItem';\nimport { CategoryData } from 'common/api/categories/models/CategoryData';\n\ntype RoktCartItem = {\n majorCat: string;\n majorCatID: string | number;\n minorCat1: string;\n minorCat1ID: string;\n sku: string;\n productName: string;\n quantity: number;\n price: number;\n numberOfProducts: number;\n};\n\nexport type AttributesType = {\n email: string;\n firstname: string;\n confirmationref: string;\n amount: number;\n country: string;\n language: string;\n currency: string;\n cartItems: RoktCartItem[];\n};\n\nfunction mapCartItemsToRoktCartItems(\n cartItems: CartLineItem[],\n categories: Pick<CategoryData, 'id' | 'name' | 'iconUrl'>[],\n dedupeList: { [key: number]: string[] } | string\n): RoktCartItem[] {\n return cartItems.map((cartItem) => {\n const majorCat =\n (dedupeList[cartItem.product.brandId] as string) ||\n (categories || []).find((c) => c.id === cartItem.product.categories[0])?.name ||\n '';\n const majorCatID =\n categories.find((category) => category.name === majorCat[0])?.id ??\n '' + cartItem.product.categories[0];\n\n return {\n // if the brandId on the cart item is in the dedupe list, then use that\n // otherwise use the first category id to lookup in categories\n majorCat: majorCat,\n majorCatID,\n minorCat1: cartItem.product.type,\n minorCat1ID: cartItem.product.type,\n sku: cartItem.product.sku,\n productName: cartItem.product.name,\n quantity: 1,\n numberOfProducts: cartItem.quantity,\n price: cartItem.price,\n };\n });\n}\n\nexport const getRoktAttributes = ({\n amount,\n profile,\n cartItems,\n allCategories,\n dedupeList,\n}: {\n amount: number;\n profile: Family;\n cartItems: CartLineItem[];\n allCategories: Pick<CategoryData, 'id' | 'name' | 'iconUrl'>[];\n dedupeList: { [key: number]: string[] } | string;\n}): AttributesType => {\n const roktCartItems = mapCartItemsToRoktCartItems(cartItems, allCategories, dedupeList);\n return {\n email: profile?.email || '',\n firstname: profile?.firstName || '',\n confirmationref: '',\n amount: amount,\n currency: 'USD',\n country: 'US',\n language: 'EN',\n cartItems: roktCartItems,\n };\n};\n","import { useEffect } from 'react';\n\nfunction useIframeHeight(targetOrigin: string) {\n useEffect(() => {\n // Function to calculate and send the height to the parent\n const sendHeight = () => {\n // Use document.documentElement.scrollHeight for overall height\n const height = (document.body.scrollHeight || 200) + 10;\n window.parent.postMessage({ type: 'setHeight', height }, targetOrigin);\n };\n\n // Send initial height on mount\n sendHeight();\n\n // Create a MutationObserver to monitor DOM changes that might affect height\n const observer = new MutationObserver(() => {\n sendHeight();\n });\n\n // Observe changes in the body\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n\n // Also listen for window resize events, which might affect layout\n window.addEventListener('resize', sendHeight);\n\n sendHeight();\n\n // Cleanup: disconnect the observer and remove event listener when unmounting\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', sendHeight);\n };\n }, [targetOrigin]);\n}\n\nexport default useIframeHeight;\n","import React, { useState } from 'react';\nimport { Route, Switch, Redirect, useLocation } from 'react-router-dom';\n\nimport { Routes } from 'routes';\n\nimport { OrderReviewScreen } from 'features/order-summary/screens/OrderReviewScreen';\nimport { OrderSummaryScreen } from 'features/order-summary/screens/OrderSummaryScreen';\nimport { OrderPaymentScreen } from 'features/order-summary/screens/OrderPaymentScreen';\nimport { OrderShippingScreen } from 'features/order-summary/screens/OrderShippingScreen';\nimport { CartInfoState, initialState } from 'features/order-summary/CartInfoState';\nimport {\n CartInfoDetails,\n emptyCartInfoDetails,\n useCartDetails,\n} from 'features/order-summary/utils/useCartDetails';\nimport { OrderSuccessScreen } from 'features/order-summary/screens/OrderSuccessScreen';\nimport { noop } from 'common/utils';\nimport useIframeHeight from '../components/useIframeHeight';\nimport { mainWebsiteOrigin } from 'utils';\n\nexport enum CheckoutFlowState {\n ENABLED = 'ENABLED',\n DISABLED = 'DISABLED',\n}\n\nexport interface OrderScreenContextType {\n cartInfo: CartInfoState;\n cartInfoDetails: CartInfoDetails;\n setCartInfo: React.Dispatch<React.SetStateAction<CartInfoState>>;\n checkoutFlowState: CheckoutFlowState;\n setCheckoutFlowState: (_: CheckoutFlowState) => void;\n showFincen: boolean;\n setShowFincen: React.Dispatch<React.SetStateAction<boolean>>;\n updatingLineItem: boolean;\n setUpdatingLineItem: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport const OrderScreenContext = React.createContext<OrderScreenContextType>({\n cartInfo: initialState,\n cartInfoDetails: emptyCartInfoDetails,\n setCartInfo: () => {\n throw new Error('NotImplemented');\n },\n checkoutFlowState: CheckoutFlowState.DISABLED,\n setCheckoutFlowState: noop,\n showFincen: true,\n setShowFincen: noop,\n updatingLineItem: false,\n setUpdatingLineItem: noop,\n});\n\nconst CheckoutView = ({ children }: React.PropsWithChildren) => {\n useIframeHeight(mainWebsiteOrigin());\n const { state: locationState } = useLocation<CartInfoState>();\n const [cartInfo, setCartInfo] = useState(locationState || initialState);\n const cartInfoDetails = useCartDetails(cartInfo);\n const [checkoutFlowState, setCheckoutFlowState] = useState<CheckoutFlowState>(\n CheckoutFlowState.DISABLED\n );\n const [showFincen, setShowFincen] = useState<boolean>(true);\n const [updatingLineItem, setUpdatingLineItem] = useState<boolean>(false);\n\n return (\n <OrderScreenContext.Provider\n value={{\n cartInfo,\n cartInfoDetails,\n setCartInfo,\n checkoutFlowState,\n setCheckoutFlowState,\n showFincen,\n setShowFincen,\n updatingLineItem,\n setUpdatingLineItem,\n }}\n >\n {children}\n </OrderScreenContext.Provider>\n );\n};\n\nexport const CheckoutScreen = () => {\n return (\n <CheckoutView>\n <Switch>\n <Route path={Routes.ShopOrderScreen} exact>\n <Redirect to={Routes.ShopOrderSummary} />\n </Route>\n <Route path={Routes.ShopOrderSummary} component={OrderSummaryScreen} />\n <Route path={Routes.ShopOrderPayment} component={OrderPaymentScreen} />\n <Route path={Routes.ShopOrderShipping} component={OrderShippingScreen} />\n <Route path={Routes.ShopOrderReview} component={OrderReviewScreen} />\n <Route path={Routes.ShopOrderSuccess} exact component={OrderSuccessScreen} />\n </Switch>\n </CheckoutView>\n );\n};\n","import React, { useState, useContext, useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { noop } from 'common/utils';\nimport { useOutsideClick } from 'hooks/useOutsideClick';\nimport { Checkbox } from 'components/checkbox/Checkbox';\nimport { Routes } from 'routes';\n\nexport enum TabNames {\n Dashboard = 'personal-dashboard',\n OrderHistory = 'order-history',\n Settings = 'settings',\n CoordinatorDashboard = 'coordinator-dashboard',\n}\n\nexport interface TabState {\n activeTab: TabNames;\n setActiveTab: (_: TabNames) => void;\n}\n\nexport interface AccountSettingsState extends TabState {\n pageIsLoading: boolean;\n setPageIsLoading: (_: boolean) => void;\n}\n\nconst initialState = {\n // page loading controls\n pageIsLoading: true, // initialize to true because we need to fetch org data\n setPageIsLoading: noop, // function to signal the account settings page has loaded all resources\n\n // tabs\n activeTab: TabNames.Settings, // default our tab to settings\n setActiveTab: noop, // update function to set the active tab\n};\n\nexport const AccountSettingsContext = React.createContext<AccountSettingsState>(initialState);\n\nexport const AccountSettingsView = ({ children }: React.PropsWithChildren) => {\n const [pageIsLoading, setPageIsLoading] = useState<boolean>(true);\n const [activeTab, setActiveTab] = useState<TabNames>(TabNames.Settings);\n const location = useLocation();\n\n useEffect(() => {\n const { pathname } = location;\n const tab = pathname.split('/');\n\n // CASE: settings is not a single path but composed of 3 paths\n if (\n pathname === Routes.ShopAccountSettingsPersonalInformationTab ||\n pathname === Routes.ShopAccountSettingsSecurityTab ||\n pathname === Routes.ShopAccountSettingsPaymentOptionsTab ||\n pathname === Routes.ShopAccountSettingsNotificationsTab ||\n pathname === Routes.ShopAccountSettingsInviteFriendsFamilyOptionsTab\n ) {\n setActiveTab(TabNames.Settings);\n } else {\n setActiveTab(tab[tab.length - 1] as TabNames);\n }\n }, [location]);\n\n const contextValues = {\n pageIsLoading,\n setPageIsLoading,\n activeTab,\n setActiveTab,\n };\n\n return (\n <AccountSettingsContext.Provider value={contextValues}>\n {children}\n </AccountSettingsContext.Provider>\n );\n};\n\nexport const DebugView = ({ forceRender }: { forceRender?: boolean }) => {\n const { activeTab, pageIsLoading } = useContext(AccountSettingsContext);\n const [isDebugOpen, setIsDebugOpen] = useState<boolean>(false);\n const [pinned, setPinned] = useState<boolean>(false);\n const ref = useOutsideClick<HTMLDivElement>(() => setIsDebugOpen(false));\n\n const state = JSON.stringify({ activeTab, pageIsLoading }, null, 2);\n\n return forceRender ? (\n <div className=\"fixed top-0 z-10 max-w-lg text-sm\">\n <button onClick={() => setIsDebugOpen(true)}>Debug</button>\n {(isDebugOpen || pinned) && (\n <div ref={ref} className=\"bg-white shadow-lg overflow-x-hidden\">\n <Checkbox\n checked={pinned}\n onChange={setPinned}\n id=\"pinDebugView\"\n text=\"Pin Debug View\"\n labelClassName=\"pl-1\"\n />\n <pre>\n <code>{state}</code>\n </pre>\n </div>\n )}\n </div>\n ) : null;\n};\n","import React, { useEffect, useMemo, useState, useContext } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { organizationTypeCodes } from 'common/utils/organizationTypeCodes';\nimport { AccountSettingsContext } from '../screens/context';\n\nimport { useContentfulOrganizationDefaultContent } from 'common/api/contentful/organization';\nimport {\n CoordinatorData,\n getCoordinatorInfoByOrganizationCode,\n} from 'common/api/crm/organization/coordinator';\nimport { createStyles } from 'utils/createStyle';\nimport { waitPromise } from 'utils/promiseHelpers';\nimport { useRootSelector } from 'rootStore';\nimport { selectHomeDetailsAsyncState } from 'common/features/store/duck/home/duck';\n\nconst styles = createStyles({\n headerLogoContainer: [\n 'flex-shrink-0',\n {\n minHeight: '200px',\n },\n ],\n headerLogoImg: {\n borderRadius: '0 0 10px 10px',\n height: '100%',\n maxHeight: '200px',\n },\n text2: [\n 'flex w-full',\n {\n maxWidth: '20rem',\n },\n ],\n});\n\nexport const AccountSettingsHeader = () => {\n const { content: orgDefaultContent, isLoading: isLoadingOrgDefaultContent } =\n useContentfulOrganizationDefaultContent();\n const { setPageIsLoading } = useContext(AccountSettingsContext);\n const defaultOrg = useRootSelector((s) => s.store.home.homeDetails?.defaultOrganization);\n const homeDetailsAsyncState = useRootSelector((s) => selectHomeDetailsAsyncState(s));\n\n const [coordinator, setCoordinator] = useState<CoordinatorData>();\n\n const [isLoadingCoordinator, setIsLoadingCoordinator] = useState(false);\n\n const organizationInfo = useMemo(() => {\n if (!orgDefaultContent || !defaultOrg) {\n return;\n }\n const code = organizationTypeCodes[defaultOrg.id];\n return orgDefaultContent.items.find((it) => it.fields.id === code);\n }, [orgDefaultContent, defaultOrg]);\n\n useEffect(() => {\n (async () => {\n if (defaultOrg) {\n const organizationId = defaultOrg.id;\n const coordinatorInfo = await waitPromise(\n getCoordinatorInfoByOrganizationCode(organizationId),\n setIsLoadingCoordinator\n );\n setCoordinator(coordinatorInfo.data || undefined);\n } else {\n setCoordinator(undefined);\n }\n })();\n }, [defaultOrg, setCoordinator]);\n\n const isLoading = isLoadingOrgDefaultContent || !defaultOrg || homeDetailsAsyncState.loading;\n\n useEffect(() => {\n /* Side effect that sets the `pageIsLoading` value to false once\n * org content & contentful resources are loaded.\n * `pageIsLoading` is used to control the rendering of `AccountSettingsContent`\n */\n if (defaultOrg && !homeDetailsAsyncState.loading && !isLoadingOrgDefaultContent) {\n // NOTE: this will be called twice -- once to update the value from true -> false\n // the 2nd time due to `setPageIsLoading`. However because the value of\n // `pageIsLoading` is `false` on the 2nd time, then it won't trigger another re-render\n setPageIsLoading(false);\n }\n }, [isLoadingOrgDefaultContent, homeDetailsAsyncState.loading, setPageIsLoading, defaultOrg]);\n\n const headerImageUrl = useMemo(() => {\n return organizationInfo?.fields.headerImage.fields.file.url || '';\n }, [organizationInfo]);\n\n // NOTE: Don't render anything until data comes back\n if (isLoading) {\n return (\n <div className=\"px-8 md:px-16 lg:px-32\">\n <Skeleton className=\"h-56 w-full\" />\n </div>\n );\n }\n\n const renderHeader = () => (\n <div className={styles.headerLogoContainer}>\n {!isLoadingOrgDefaultContent && organizationInfo && (\n <img className={styles.headerLogoImg} src={headerImageUrl} />\n )}\n {isLoadingOrgDefaultContent && (\n <div className=\"max-w-xs\">\n <Skeleton height=\"12rem\" />\n </div>\n )}\n </div>\n );\n\n const renderCoordinatorInfo = () => (\n <>\n {!isLoadingCoordinator && coordinator && (\n <div className=\"mt-2\">\n <div className=\"text-xs text-grey-2\">Your coordinator is</div>\n <div className=\"text-sm text-brand-dark truncate\">\n {coordinator.firstName} {coordinator.lastName}\n </div>\n <div className=\"text-sm underline text-brand-dark truncate\">\n {coordinator.email}\n </div>\n </div>\n )}\n {isLoadingCoordinator && (\n <div className=\"max-w-xs my-4\">\n <Skeleton height=\"1rem\" />\n <Skeleton />\n <Skeleton />\n </div>\n )}\n </>\n );\n\n return (\n <div className=\"px-8 md:px-16 lg:px-32\">\n <div className=\"md:flex gap-4 relative\">\n {renderHeader()}\n <div className=\"w-full\">\n {!isLoading && (\n <div className=\"text-xl text-brand font-bold py-2\">{defaultOrg?.name}</div>\n )}\n {renderCoordinatorInfo()}\n </div>\n </div>\n </div>\n );\n};\n","import { OrganizationDefaultContent } from '../models/OrganizationDefaultContent';\nimport { useFromContentful } from '../utils';\n\nexport const useContentfulOrganizationDefaultContent = () =>\n useFromContentful<OrganizationDefaultContent>('organizationDefaultContent');\n","import React, { ReactNode, useMemo } from 'react';\nimport * as Tabs from '@radix-ui/react-tabs';\nimport Skeleton from 'react-loading-skeleton';\nimport classNames from 'classnames';\n\nimport { createStyles } from 'utils/createStyle';\nimport { Tab } from 'features/product/components/ProductDetailScreenTab';\n\nconst styles = createStyles({\n tabs: ['flex flex-col w-full'],\n tabList: ['flex', { marginBottom: '10px' }],\n tabsContent: ['text-grey-1 text-sm lg:text-base'],\n tabClasses: [\n '',\n {\n flex: '1 1 33%',\n },\n ],\n});\n\nexport interface TabContent {\n name: string;\n title: string;\n content?: React.ReactNode;\n className?: string;\n}\n\nexport interface TabsContainerProps {\n tabItems: TabContent[];\n selectedTabName: string;\n setSelectedTabName: (name: string) => void;\n isLoading?: boolean;\n children?: ReactNode;\n tabsListClasses?: string;\n}\n\nexport const TabsContainer = ({\n tabItems,\n selectedTabName,\n setSelectedTabName,\n isLoading,\n children,\n tabsListClasses = 'border-b border-solid border-grey-3',\n}: TabsContainerProps) => {\n const selectedTab = useMemo(\n () => tabItems.find((ti) => ti.name === selectedTabName),\n [selectedTabName, tabItems]\n );\n\n if (isLoading) {\n return (\n <div>\n <Skeleton height=\"10rem\" />\n </div>\n );\n }\n\n return (\n <Tabs.Root\n className={styles.tabs}\n value={selectedTabName}\n onValueChange={setSelectedTabName}\n >\n <Tabs.List className={classNames(styles.tabList, tabsListClasses)}>\n {tabItems.map((tabItem) => (\n <Tab\n key={tabItem.name}\n selected={tabItem.name === selectedTabName}\n tabId={tabItem.name}\n title={tabItem.title}\n className={classNames(styles.tabClasses, tabItem.className)}\n noUnderline={true}\n noUpperBorder={true}\n />\n ))}\n </Tabs.List>\n {/* Render Children or content */}\n <div className={styles.tabsContent}>{children ? children : selectedTab?.content}</div>\n </Tabs.Root>\n );\n};\n","export const MONTHS: string[] = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n","import React, { useState } from 'react';\nimport _round from 'lodash/round';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTag, faGift } from '@fortawesome/pro-light-svg-icons';\n\nimport { BarCode, PhysicalCard, Reload as ReloadIcon } from '../../../components/custom-icons';\n\nimport { ProcessingBuyAgain, sumByLineItemMoneyProp } from './RecentPurchase';\n\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { Order, OrderLineItem } from 'common/api/e-comm/models/Order';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { createStyles } from 'utils/createStyle';\nimport { PaymentType } from 'common/api/e-comm/payment-types';\nimport { FeatureFlag } from 'components/feature-flag';\nimport { LinkBtn } from 'components/link-btn';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { Btn } from 'components/btn/Btn';\n\nconst styles = createStyles({\n buyAgainButton: ['w-full text-white bg-brand', { paddingTop: 10, paddingBottom: 10 }],\n detailTotalEarnings: [\n 'text-lg md:text-xl text-success text-center md:border-none border-b border-grey-light border-solid md:pb-4 md:pt-4 pb-5 pt-5',\n ],\n detailHeaderContainer: [\n 'hidden md:grid grid-cols-6 border-solid border-b border-grey-light',\n { paddingRight: 20, paddingLeft: 20 },\n ],\n detailColumnHeader: [\n 'text-brand-dark text-center',\n { fontSize: 12, lineHeight: '16px', fontWeight: 600, paddingBottom: 7 },\n ],\n detailBrandImage: [\n { maxHeight: 40, maxWidth: 40, paddingTop: 7.5, paddingBottom: 7.5, marginRight: 12.5 },\n ],\n mobileBrandImage: [{ maxWidth: 35 }],\n localProductMobile: [{ minWidth: 35 }],\n localProduct: [{ minWidth: 40, minHeight: 40, marginRight: 12.5 }],\n detailBrandName: [\n 'text-brand-dark font-bold truncate w-full',\n { fontSize: 14, lineHeight: '19px' },\n ],\n detailCardType: [\n 'text-grey-1 truncate ',\n { fontSize: 12, lineHeight: '14px', fontWeight: 400 },\n ],\n detailLineItemContainer: [\n 'border-b border-solid border-grey-light md:pl-5 md:pr-5 pl-0 pr-0 pb-3 mt-3',\n ],\n detailLineItem: ['hidden md:grid grid-cols-6 flex flex-row items-center', { minHeight: 60 }],\n mobileLineItem: [\n 'grid md:hidden grid-cols-6 text-grey-1 grid-auto-rows',\n { fontSize: 12, lineHeight: '14px', fontWeight: 400, padding: '5px 10px' },\n ],\n detailLineItemText: [\n 'text-grey-1 text-center',\n { fontSize: 14, lineHeight: '19px', fontWeight: 400 },\n ],\n detailEarningPercent: ['text-grey-1', { fontSize: 12, lineHeight: '14px', weight: 400 }],\n detailEarningAmount: ['text-success font-bold'],\n detailValueAmount: [\n 'text-brand-dark font-bold text-center',\n { fontSize: 14, lineHeight: '19px' },\n ],\n link: [{ fontSize: 12, lineHeight: '16px', fontWeight: 600, textDecoration: 'underline' }],\n mobileLineItemAmount: [\n 'text-brand-dark',\n { fontSize: 14, lineHeight: '19px', fontWeight: 400 },\n ],\n detailFooter: [\n 'text-grey-1 grid grid-cols-6',\n {\n padding: '10px 20px',\n fontSize: 14,\n lineHeight: '19px',\n fontWeight: 400,\n rowGap: 5,\n },\n ],\n detailShippingInfo: [\n 'col-span-6 list-disc',\n { paddingLeft: 25, fontSize: 12, lineHeight: '14px' },\n ],\n detailShippingLineItems: [\n {\n '&:first-child': { paddingTop: 0 },\n '&last-child': { paddingBottom: 0 },\n paddingTop: 2.5,\n paddingBottom: 2.5,\n },\n ],\n detailTotalDivider: [\n 'grid grid-cols-6 border-t border-b border-grey-light border-solid text-brand-dark flex flex-row items-center bg-grey-accent',\n { padding: '5px 20px' },\n ],\n detailTotalLabel: ['font-semibold text-center', { fontSize: 12, lineHeight: '16px' }],\n detailTotalAmount: [\n 'font-bold col-span-2 md:col-span-1 text-right md:text-center md:text-sm text-lg',\n ],\n detailFooterClose: ['cursor-pointer text-center', { paddingTop: 10, paddingBottom: 10 }],\n});\n\nconst calculateTotalQuantity = (lineItems: OrderLineItem[]) => {\n return lineItems.reduce((sum, lineItem) => sum + lineItem.quantity, 0);\n};\n\nconst calculateEarnPercent = (lineItem: OrderLineItem): string => {\n const percent = (lineItem.totalEarnings / lineItem.totalValue) * 100;\n return `${_round(percent, 2).toFixed(2)}%`;\n};\n\nconst calculateOrderTotal = (order: Order): string => {\n const lineItemTotal = order.lineItems.reduce((sum, lineItem) => sum + lineItem.totalValue, 0);\n const shippingCost = order.shippingInformation?.cost || 0;\n\n const total = lineItemTotal + order.orderFees + shippingCost;\n return monetizeWithDecimal(total);\n};\n\nconst determineCardType = (order: Order, lineItem: OrderLineItem): string => {\n if (lineItem.productType === ProductType.Reload) {\n return 'Reload';\n }\n\n if (lineItem.productType === ProductType.EGiftCard) {\n return 'eGift';\n }\n\n if (order.isShipToHome) {\n return 'Physical - Ship to home';\n }\n\n return 'Physical - Ship to coordinator';\n};\n\nconst determineCardIcon = (order: Order, lineItem: OrderLineItem) => {\n const cardType = determineCardType(order, lineItem);\n\n switch (cardType) {\n case 'Reload':\n return <ReloadIcon height=\"15px\" style={{ minHeight: 15, minWidth: 16.66 }} />;\n case 'eGift':\n return <BarCode height=\"15px\" style={{ minHeight: 15, minWidth: 23.33 }} />;\n case 'Physical - Ship to home':\n case 'Physical - Ship to coordinator':\n default:\n return <PhysicalCard height=\"15px\" style={{ minHeight: 15, minWidth: 17.72 }} />;\n }\n};\n\nconst orderFeeLabel = (order: Order) => {\n switch (order.paymentType) {\n case PaymentType.BankAccount:\n case PaymentType.CreditCard:\n return 'Convenience Fee';\n default:\n return null;\n }\n};\n\ninterface RecentPurchaseDetailProps {\n order: Order;\n expand: boolean;\n setExpand: (expand: boolean) => void;\n getBrandSrcUrl: (brandId: number) => string;\n onBuyAgain: () => void;\n isBuyAgainRunning: boolean;\n}\n\nexport const RecentPurchaseDetail = ({\n order,\n expand,\n setExpand,\n getBrandSrcUrl,\n onBuyAgain,\n isBuyAgainRunning,\n}: RecentPurchaseDetailProps) => {\n const totalEarnings = sumByLineItemMoneyProp(order.lineItems, 'totalEarnings');\n\n const [giftDetailsModalInfo, setGiftDetailsModalInfo] = useState<OrderLineItem>();\n\n const showGiftDetails = (lineItem: OrderLineItem) => {\n setGiftDetailsModalInfo(lineItem);\n };\n\n const hideGiftDetailsModal = () => {\n setGiftDetailsModalInfo(undefined);\n };\n\n return (\n <React.Fragment>\n <section className={classNames(expand ? 'block' : 'hidden')}>\n {!isBuyAgainRunning ? (\n <button\n className={classNames(styles.link, styles.buyAgainButton)}\n onClick={onBuyAgain}\n >\n Buy Again\n </button>\n ) : (\n <ProcessingBuyAgain orientation=\"horizontal\" />\n )}\n <div>\n <h4 className={classNames(styles.detailTotalEarnings)}>\n - You earned <span className=\"font-bold\">{totalEarnings}</span> on this\n order -\n </h4>\n <div className={styles.detailHeaderContainer}>\n <span className={classNames('col-span-2', styles.detailColumnHeader)}>\n Product\n </span>\n <span className={classNames(styles.detailColumnHeader)}>Earnings</span>\n <span className={classNames(styles.detailColumnHeader)}>Value</span>\n <span className={classNames(styles.detailColumnHeader)}>Quantity</span>\n <span className={classNames(styles.detailColumnHeader)}>Dollar Amount</span>\n </div>\n <div className={classNames(styles.detailLineItemContainer)}>\n {order.lineItems.map((lineItem, idx) => {\n return (\n <React.Fragment key={`${order.orderNumber}-${idx}`}>\n <article className={classNames(styles.mobileLineItem)}>\n {!lineItem.isLocalProduct ? (\n <img\n className={classNames(styles.mobileBrandImage)}\n src={getBrandSrcUrl(lineItem.brandId)}\n />\n ) : (\n <span className={styles.localProductMobile}>\n <FontAwesomeIcon\n className={classNames('text-brand')}\n icon={faTag}\n size=\"lg\"\n />\n </span>\n )}\n <div className=\"col-span-3 flex flex-col\">\n <div className=\"flex flex-row items-center mb-1 w-full\">\n <span className={styles.detailBrandName}>\n {!lineItem.isLocalProduct\n ? lineItem.brandName\n : 'Local Product'}\n </span>\n </div>\n <FeatureFlag flagKey=\"enable_custom_card_names\">\n {lineItem.cardName ? (\n <span\n className={classNames(\n 'mb-1',\n styles.detailCardType\n )}\n >\n {`- ${lineItem.cardName}`}\n </span>\n ) : null}\n </FeatureFlag>\n {lineItem.giftDetails ? (\n <div className=\"mb-1\">\n <div className=\"flex flex-row items-center\">\n <LinkBtn\n className=\"text-xs text-brand\"\n onClick={() =>\n showGiftDetails(lineItem)\n }\n >\n <FontAwesomeIcon\n icon={faGift}\n className=\"mr-1\"\n />\n <span>Gift Details</span>\n </LinkBtn>\n </div>\n </div>\n ) : null}\n <span className=\"mb-1\">\n <span className=\"font-semibold\">Earn </span>\n {calculateEarnPercent(lineItem)} ={' '}\n <span className=\"text-success\">\n {monetizeWithDecimal(lineItem.totalEarnings)}\n </span>\n </span>\n <span className=\"col-span-2\">\n <span className=\"font-semibold\">Value </span>\n {monetizeWithDecimal(lineItem.faceValue)} x\n {lineItem.quantity}\n </span>\n </div>\n <span className=\"col-span-6\" />\n <div className=\"flex flex-row justify-end col-span-6\">\n <span className={styles.mobileLineItemAmount}>\n Amount {monetizeWithDecimal(lineItem.totalValue)}\n </span>\n </div>\n </article>\n <article\n className={classNames(styles.detailLineItem)}\n key={`${order.orderNumber}-${idx}`}\n >\n <div className=\"flex flex-row col-span-2 items-center\">\n {!lineItem.isLocalProduct ? (\n <img\n className={styles.detailBrandImage}\n src={getBrandSrcUrl(lineItem.brandId)}\n />\n ) : (\n <span className={styles.localProduct}>\n <FontAwesomeIcon\n className=\"text-brand\"\n icon={faTag}\n size=\"lg\"\n />\n </span>\n )}\n <div className=\"w-9/12 xl:w-11/12 pr-3\">\n <div className=\"flex flex-row items-center\">\n <h4 className={styles.detailBrandName}>\n {!lineItem.isLocalProduct\n ? lineItem.brandName\n : 'Local Product'}\n </h4>\n </div>\n {lineItem.giftDetails ? (\n <div className=\"mt-1\">\n <div className=\"flex flex-row items-center\">\n <LinkBtn\n className=\"text-sm text-brand\"\n onClick={() =>\n showGiftDetails(lineItem)\n }\n >\n <FontAwesomeIcon\n icon={faGift}\n className=\"mr-1\"\n />\n <span>Gift Details</span>\n </LinkBtn>\n </div>\n <div className=\"text-xs text-dark-grey truncate mt-1\">\n {lineItem.giftDetails.toName}\n </div>\n </div>\n ) : null}\n <span\n className={classNames(\n 'mt-1.5 block pr-2 pb-1',\n styles.detailCardType\n )}\n >\n <FeatureFlag flagKey=\"enable_custom_card_names\">\n {lineItem.cardName\n ? `- ${lineItem.cardName}`\n : ''}\n </FeatureFlag>\n </span>\n </div>\n </div>\n <div className=\"text-center\">\n <span\n className={classNames(styles.detailEarningPercent)}\n >\n Earn {calculateEarnPercent(lineItem)} =\n <span className={styles.detailEarningAmount}>\n {' '}\n {monetizeWithDecimal(lineItem.totalEarnings)}\n </span>\n </span>\n </div>\n <span className={classNames(styles.detailLineItemText)}>\n {monetizeWithDecimal(lineItem.faceValue)}\n </span>\n <span className={classNames(styles.detailLineItemText)}>\n {lineItem.quantity}\n </span>\n <span className={classNames(styles.detailValueAmount)}>\n {monetizeWithDecimal(lineItem.totalValue)}\n </span>\n </article>\n </React.Fragment>\n );\n })}\n </div>\n </div>\n <div className={classNames(styles.detailFooter)}>\n <span className=\"col-span-4\">Subtotal</span>\n <span className=\"text-center md:visible invisible\">\n {calculateTotalQuantity(order.lineItems)}\n </span>\n <span className=\"text-center text-brand-dark\">\n {sumByLineItemMoneyProp(order.lineItems, 'totalValue')}\n </span>\n <span className=\"col-span-5\">{orderFeeLabel(order)}</span>\n <span className=\"text-center text-brand-dark\">\n {monetizeWithDecimal(order.orderFees)}\n </span>\n {order.shippingInformation && (\n <>\n <span className={'col-span-5'}>Shipping & Handling</span>\n <span className=\"text-center text-brand-dark\">\n {monetizeWithDecimal(order.shippingInformation?.cost || 0)}\n </span>\n </>\n )}\n <ul\n className={classNames(\n styles.detailShippingInfo,\n order.shippingInformation ? 'block' : 'hidden'\n )}\n >\n <li className={classNames(styles.detailShippingLineItems)}>\n <div className=\"flex flex-col md:flex-row\">\n <span className=\"font-semibold\">Ship To: </span>\n {order.shippingInformation?.shippingAddress.address1}\n </div>\n </li>\n <li className={classNames(styles.detailShippingLineItems)}>\n <div className=\"flex flex-col md:flex-row\">\n <span className=\"font-semibold\">Shipping Method: </span>\n {order.shippingInformation?.shippingMethod}\n </div>\n </li>\n <li className={classNames(styles.detailShippingLineItems)}>\n <div className=\"flex flex-col md:flex-row\">\n <span className=\"font-semibold\">Tracking Number: </span>\n <a\n href={order.shippingInformation?.trackingUrl}\n className={classNames('text-brand cursor-pointer', styles.link)}\n >\n {order.shippingInformation?.trackingNumber}\n </a>\n </div>\n </li>\n </ul>\n </div>\n <div className={classNames(styles.detailTotalDivider)}>\n <span className=\"col-span-3 md:col-span-4\" />\n <span className={classNames(styles.detailTotalLabel)}>Total  </span>\n <span className={classNames(styles.detailTotalAmount)}>\n {calculateOrderTotal(order)}\n </span>\n </div>\n </section>\n <section\n onClick={() => setExpand(false)}\n className={classNames(\n styles.detailFooterClose,\n styles.link,\n expand ? 'block' : 'hidden'\n )}\n >\n Close\n </section>\n {giftDetailsModalInfo ? (\n <GiftDetailsModal\n isOpen={giftDetailsModalInfo !== undefined}\n onClose={hideGiftDetailsModal}\n lineItem={giftDetailsModalInfo}\n logoURL={getBrandSrcUrl(giftDetailsModalInfo?.brandId)}\n />\n ) : null}\n </React.Fragment>\n );\n};\n\ninterface GiftDetailsModalProps {\n isOpen: boolean;\n onClose: () => void;\n lineItem: OrderLineItem;\n logoURL: string;\n}\n\nconst giftDetailsModalStyles = createStyles({\n title: 'text-center font-semibold text-brand-dark text-2xl sm:text-29px',\n});\n\nexport const GiftDetailsModal = ({ isOpen, onClose, lineItem, logoURL }: GiftDetailsModalProps) => {\n const renderLine = (property: string, value: string) => {\n return (\n <div className=\"text-grey-medium text-sm sm:text-base flex mt-1\">\n <span>{property}</span>\n <span className=\"ml-auto\">{value}</span>\n </div>\n );\n };\n\n return (\n <Modal\n title=\"\"\n isOpen={isOpen}\n onClose={onClose}\n size={[ModalSize.CONTENT_WIDTH, ModalSize.MEDIUM]}\n >\n <div className={giftDetailsModalStyles.title}>Gift Details</div>\n\n <div className=\"flex justify-center mt-4\">\n <div className=\"flex items-center justify-center border border-grey-light inline-block rounded-2xl overflow-hidden w-44 sm:w-48 h-28 sm:h-32\">\n <img src={logoURL} />\n </div>\n </div>\n\n <div className=\"mt-9\">\n <div className=\"\">\n <div className=\"font-semibold\">Recipient</div>\n {renderLine('Name', (lineItem.giftDetails as any)?.toName || '')}\n {renderLine('Email', (lineItem.giftDetails as any)?.toEmail || '')}\n </div>\n\n {(lineItem.giftDetails as any)?.fromName ? (\n <div className=\"mt-4\">\n <div className=\"font-semibold\">Sender</div>\n {renderLine('Name', (lineItem.giftDetails as any)?.fromName || '')}\n </div>\n ) : null}\n\n {(lineItem.giftDetails as any)?.message ? (\n <div className=\"mt-4 \">\n <div className=\"font-semibold\">Message</div>\n <div className=\"text-grey-medium text-base\">\n {(lineItem.giftDetails as any)?.message || ''}\n </div>\n </div>\n ) : null}\n </div>\n\n <div className=\"text-center mt-8\">\n <div className=\"text-base font-semibold text-grey-medium\">{lineItem.brandName}</div>\n <div className=\" text-grey-dark font-semibold text-lg sm:text-2xl\">{`$${Math.trunc(\n lineItem.totalValue\n )} eGift Card`}</div>\n </div>\n\n <div className=\"text-center mt-6 mb-5\">\n <Btn onClick={onClose} isSecondary>\n <span className=\"px-12\">Close</span>\n </Btn>\n </div>\n </Modal>\n );\n};\n","import { Product } from '../models/Product';\n\nimport { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\nimport { E_COMM_PRODUCTS_URL } from 'common/api/config';\n\nexport const getProduct = (productId: number) =>\n withTokensIfNeeded<Product>(`${E_COMM_PRODUCTS_URL}/${productId}`);\n","import React, { useEffect, useState } from 'react';\nimport { faTimes } from '@fortawesome/pro-light-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport { useDispatch, useSelector } from 'react-redux';\nimport uniq from 'lodash/uniq';\nimport uniqBy from 'lodash/uniqBy';\nimport { faTag } from '@fortawesome/pro-light-svg-icons';\n\nimport { MONTHS } from '../utils/months';\n\nimport { RecentPurchaseDetail } from './RecentPurchaseDetail';\n\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { createStyles } from 'utils/createStyle';\nimport { getBrandsThunk, selectBrandId } from 'common/features/store/duck/brands/duck';\nimport { useRootSelector } from 'rootStore';\nimport { Order, OrderLineItem } from 'common/api/e-comm/models/Order';\nimport { getProduct } from 'common/api/e-comm/products';\nimport {\n Product,\n ProductVariant,\n ProductType,\n ProductVariantOption,\n} from 'common/api/e-comm/models/Product';\nimport { APIResponse } from 'common/api/models';\nimport { addItemToCart } from 'common/api/e-comm/cart/lineitem';\nimport { requestCartItems } from 'common/features/store/duck/cart/duck';\nimport { useNavMenu } from 'components/nav/context';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { useAlert } from 'modules/alerts';\nimport { selectIsShipToCoordinatorEnabled } from 'common/features/store/duck/organization/duck';\n\nconst styles = createStyles({\n additionalBrandsBadge: [\n 'flex items-center justify-center bg-pale-blue rounded-full text-brand-dark font-semibold self-center',\n {\n minHeight: 25,\n minWidth: 25,\n maxHeight: 25,\n maxWidth: 25,\n fontSize: 10,\n lineHeight: '15px',\n },\n ],\n brandContainer: ['md:mb-0', { marginBottom: 10 }],\n container: ['border-solid border-brand border rounded-md flex flex-col text-brand-dark'],\n closeIcon: ['text-xl text-brand-dark cursor-pointer', { marginRight: 20, marginTop: 15 }],\n header: ['justify-between flex flex-row'],\n headerDateContainer: [{ padding: 10 }],\n headerDate: [{ fontSize: 17, lineHeight: '24px', fontWeight: 400 }],\n orderNumber: ['text-grey-1', { fontSize: 12, lineHeight: '14px', fontWeight: 400 }],\n link: [{ fontSize: 12, lineHeight: '16px', fontWeight: 600, textDecoration: 'underline' }],\n summaryBuyAgain: ['flex cursor-pointer items-center', { paddingRight: 20, paddingLeft: 20 }],\n summary: [\n 'md:pl-5 md:pr-5 md:pb-5 md:pt-5 pl-3 pr-3 pb-3 pt-3 flex flex-col md:justify-between md:flex-row border-t border-solid border-grey-light border-b ',\n ],\n summaryLabel: ['text-grey-1 block', { fontSize: 10, lineHeight: '15px' }],\n summaryBrandContainer: ['flex flex-row', { maxHeight: 35 }],\n summaryBrandImage: ['max-h-6 md:max-h-9 md:pr-4 md:pl-4 pr-3'],\n totalsContainer: ['flex flex-row', { fontSize: 17, lineHeight: '24px', fontWeight: 400 }],\n totalDivider: ['flex flex-col md:flex-grow justify-between', { marginRight: 50 }],\n footer: ['text-center', { padding: 10, cursor: 'pointer' }],\n localProduct: [\n 'text-brand-dark font-bold whitespace-nowrap md:whitespace-normal text-xs sm:text-sm',\n ],\n localProductContainer: ['flex gap-2 items-center h-6 sm:h-9'],\n});\n\nexport const sumByLineItemMoneyProp = (lineItems: OrderLineItem[], sumBy: string): string => {\n const propSum = lineItems.reduce((sum, lineItem) => {\n const lineItemValue = lineItem[sumBy];\n\n if (typeof lineItemValue !== 'number') {\n throw new Error(`Cannot sum ${typeof lineItemValue} with number`);\n }\n\n return sum + lineItemValue;\n }, 0);\n\n return monetizeWithDecimal(propSum);\n};\n\nexport const formatISODate = (date: string): string => {\n const jsDate = new Date(date);\n const [year, monthNbr, day] = [jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate()];\n\n return `${MONTHS[monthNbr]} ${day}, ${year}`;\n};\n\ninterface RecentPurchaseProps {\n order: Order;\n}\n\ninterface AdditionalBrandsProps {\n count: number;\n}\n\nconst AdditionalBrands = ({ count }: AdditionalBrandsProps) => {\n return (\n <div className={classNames(styles.additionalBrandsBadge, count > 0 ? 'block' : 'hidden')}>\n <span>+{count}</span>\n </div>\n );\n};\n\ninterface ProductsById {\n [key: string]: Product;\n}\n\nconst computeCanBuyAgain = (lines: OrderLineItem[]) => {\n const linesWithoutReload = lines.filter(\n (line: OrderLineItem) => line.productType !== ProductType.Reload\n );\n return lines.length > 0 && linesWithoutReload.length > 0;\n};\n\nconst useBuyAgainFlow = (order: Order) => {\n const [canBuyAgain] = useState<boolean>(computeCanBuyAgain(order.lineItems));\n const isShipToCoordinatorEnabled = useSelector(selectIsShipToCoordinatorEnabled);\n const dispatch = useDispatch<any>();\n const [isRunning, setIsRunning] = useState(false);\n\n const triggerBuyAgain = async () => {\n try {\n setIsRunning(true);\n\n const lines = order.lineItems.filter(\n (line: OrderLineItem) => line.productType !== ProductType.Reload\n );\n // NOTE: Filter the line-items first to make sure we don't fetch the same product more than once\n const products: ProductsById = await Promise.all(\n lines.map((line: OrderLineItem) => {\n return getProduct(line.productId);\n })\n )\n .then((response: APIResponse<Product, null>[]): Product[] => {\n return response\n .map((productResponse: APIResponse<Product, null>) => productResponse?.data)\n .filter((p: Product | null | undefined) => Boolean(p)) as Product[];\n })\n .then((products: Product[]) => {\n return products\n .filter(({ isAvailable, isVisible }: Product) => isAvailable && isVisible)\n .reduce((acc: ProductsById, product: Product) => {\n acc[product.id] = product;\n return acc;\n }, {} as ProductsById);\n })\n .catch(() => ({} as ProductsById));\n\n // NOTE: Because we don't have the __selectedOption__ available in OrderLineItem\n // we need to cross reference the __OrderLineItem.faceValue__ to the product variants.\n // It will allow us to construct the selectedOption\n\n const addItemsToCart = async () => {\n const result: { product: Product; addedSuccessfully: boolean }[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const product = products[line.productId];\n\n // skip if product is not found\n if (!product) {\n result.push({ product, addedSuccessfully: false });\n continue;\n }\n\n // skip lineItem if the product cannot be shipped to the user\n if (\n product.type === ProductType.GiftCard &&\n !isShipToCoordinatorEnabled &&\n !product?.isShipToHomeEligible\n ) {\n result.push({ product, addedSuccessfully: false });\n continue;\n }\n\n const productData = {\n productId: product.id,\n selectedOptions: {},\n quantity: line.quantity,\n priceOverride: line.faceValue,\n };\n\n // NOTE: Turn this into a reduce instead of FILTER\n // Step 1: we must cross reference the __line.productId__ with our __products__\n if (product.options.length > 0) {\n // NOTE: For Step 2\n // - We should check __variant__ for product-type GIFT-CARD\n // - use __line.faceValue__ as the priceOverride when setting up the addToCart for EGIFT-CARD\n\n // Step 2: cross reference the __line.faceValue__ against the product variants\n const variant = product.variants.find((variant: ProductVariant) => {\n return (\n variant.price === line.faceValue &&\n variant.isAvailable &&\n variant.isVisible\n );\n });\n\n const optionExists = (variant?.options ?? []).find(\n (option: ProductVariantOption) => {\n return option.value === monetizeWithDecimal(line.faceValue);\n }\n );\n\n // CASE: Variant not found OR if the option no longer exists -- then skip adding to cart\n if (!variant || !optionExists) {\n result.push({ product, addedSuccessfully: false });\n continue;\n }\n const option = optionExists as ProductVariantOption;\n\n productData.selectedOptions = {\n [option.optionId]: option.value,\n };\n productData.priceOverride = null as unknown as number;\n }\n\n try {\n const addItemToCartResult = await addItemToCart(productData);\n result.push({\n product,\n addedSuccessfully: Boolean(addItemToCartResult.response?.ok),\n });\n } catch {\n result.push({ product, addedSuccessfully: false });\n }\n }\n\n return result;\n };\n\n const results = await addItemsToCart();\n\n // NOTE: for each available items we should call the addProductToCart to add it to the cart\n dispatch(requestCartItems());\n\n return results;\n } finally {\n setIsRunning(false);\n }\n };\n\n return { triggerBuyAgain, canBuyAgain, isRunning };\n};\n\nexport const RecentPurchase = ({ order }: RecentPurchaseProps) => {\n const brandsById = useRootSelector((store) => selectBrandId(store));\n const dispatch = useDispatch<any>();\n const [expand, setExpand] = useState(false);\n const { triggerBuyAgain, isRunning } = useBuyAgainFlow(order);\n const alert = useAlert();\n const { setOpenMenu } = useNavMenu();\n\n useEffect(() => {\n // Only fetch brands that have not already been fetched and aren't in the store\n const brandIds = uniq(\n order.lineItems\n .map((lineItem) => lineItem.brandId)\n .filter((brandId) => !brandsById[brandId] || !brandId)\n );\n dispatch(getBrandsThunk(brandIds));\n // only run this on initial mount\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const getBrandSrcUrl = (brandId: number): string => {\n const brand = brandsById[brandId];\n return brand ? brand.imageUrl : '';\n };\n\n // We only want to show the first 4 brands in the summary\n const uniqueBrands = uniqBy(order.lineItems, 'brandId');\n\n const summaryBrands = uniqueBrands.slice(0, 4);\n const remainingBrands = uniqueBrands.length - summaryBrands.length;\n\n const totalEarnings = sumByLineItemMoneyProp(order.lineItems, 'totalEarnings');\n\n const onBuyAgain = async () => {\n // NOTE: We require the productId to be in the `lineItem` otherwise we cannot add the item to cart\n // NOTE: Use the `common/api/e-comm/products/index.ts::getProduct` endpoint to fetch product detail\n // in order to see if the items are available or not.\n // NOTE: Look into `web/src/features/product/ProductDetailScreen.tsx::handleAddItemToCart` as an\n // example on how to add items to cart.\n\n const result = await triggerBuyAgain();\n const isEmpty = result.length <= 0;\n const addedSomeItemSuccessfully = result.some((r) => r.addedSuccessfully);\n const hasSomeError = result.some((r) => !r.addedSuccessfully);\n\n if (hasSomeError || isEmpty) {\n alert({\n title: 'Buy Again Notice',\n message: (\n <span className=\"text-grey-1\">\n Some items are not available and cannot be added to your cart at this time.\n </span>\n ),\n onClose: () => {\n if (addedSomeItemSuccessfully) {\n setOpenMenu('cart');\n }\n },\n });\n } else {\n setOpenMenu('cart');\n }\n };\n\n return (\n <article className={styles.container}>\n <section className={styles.header}>\n <div className={styles.headerDateContainer}>\n <h4 className={styles.headerDate}>{formatISODate(order.orderDate)}</h4>\n <span className={styles.orderNumber}>Reference # {order.orderNumber}</span>\n </div>\n {!isRunning ? (\n <button\n className={`order_history_buy_again_button ${classNames(\n styles.summaryBuyAgain,\n styles.link,\n expand ? 'invisible' : 'visible'\n )}`}\n onClick={onBuyAgain}\n >\n Buy Again\n </button>\n ) : (\n <div className={expand ? 'hidden' : ''}>\n <ProcessingBuyAgain orientation=\"vertical\" />\n </div>\n )}\n <FontAwesomeIcon\n icon={faTimes}\n onClick={() => setExpand(false)}\n className={classNames(styles.closeIcon, expand ? 'block' : 'hidden')}\n />\n </section>\n <section className={classNames(styles.summary, expand ? 'hidden' : 'block')}>\n <div className={classNames(styles.brandContainer)}>\n <span className={styles.summaryLabel}>Brands</span>\n <div className={styles.summaryBrandContainer}>\n {summaryBrands.map((lineItem) =>\n lineItem.isLocalProduct ? (\n <span\n key={lineItem.brandId}\n className={styles.localProductContainer}\n >\n <FontAwesomeIcon\n className={'text-brand'}\n icon={faTag}\n size=\"sm\"\n />\n <span className={styles.localProduct}>Local Product</span>\n </span>\n ) : (\n <img\n key={lineItem.brandId}\n className={styles.summaryBrandImage}\n src={getBrandSrcUrl(lineItem.brandId)}\n />\n )\n )}\n <AdditionalBrands count={remainingBrands} />\n </div>\n </div>\n <div className={styles.totalsContainer}>\n <div className={styles.totalDivider}>\n <span className={styles.summaryLabel}>Total</span>\n <span className=\"text-brand-dark\">\n {sumByLineItemMoneyProp(order.lineItems, 'totalValue')}\n </span>\n </div>\n <div className=\"flex-col flex flex-grow justify-between\">\n <span className={styles.summaryLabel}>Earnings</span>\n <span className=\"text-success\">{totalEarnings}</span>\n </div>\n </div>\n </section>\n <section\n onClick={() => setExpand(true)}\n className={classNames(styles.footer, expand ? 'hidden' : 'block')}\n >\n <span className={styles.link}>Click for more details</span>\n </section>\n <RecentPurchaseDetail\n order={order}\n expand={expand}\n setExpand={setExpand}\n getBrandSrcUrl={getBrandSrcUrl}\n onBuyAgain={onBuyAgain}\n isBuyAgainRunning={isRunning}\n />\n </article>\n );\n};\n\nexport const ProcessingBuyAgain = ({ orientation }: { orientation: 'horizontal' | 'vertical' }) => {\n return (\n <div className=\"flex items-center px-2 justify-center h-full\">\n <div\n className={`flex items-center ${\n orientation == 'vertical' ? 'flex-col' : 'flex-row gap-2'\n }`}\n >\n <ActivityIndicator width={32} />\n <div className=\"text-xs text-brand\">Adding to cart...</div>\n </div>\n </div>\n );\n};\n","import React, { useEffect } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { RecentPurchase } from './RecentPurchase';\n\nimport { Order } from 'common/api/e-comm/models/Order';\nimport { getOrdersV2 } from 'common/api/e-comm/orders/service';\nimport { useApi } from 'common/modules/async-actions/useApi';\n\ninterface PurchasesProps {\n orders: Order[];\n loading: boolean;\n}\n\nconst Purchases = ({ orders, loading }: PurchasesProps) => {\n if (loading) {\n return <Skeleton className=\"w-full h-full\" />;\n }\n\n // NOTE: We only show the last 3 orders\n const recentOrders = orders.slice(0, 3);\n\n return (\n <div>\n {recentOrders.map((order: Order) => (\n <div key={order.orderNumber} className=\"mb-5\">\n <RecentPurchase order={order} />\n </div>\n ))}\n </div>\n );\n};\n\nconst NUMBER_OF_MONTHS_TO_LOOK_BACK = 3;\nconst RecentPurchases = () => {\n const [fetchOrders, { loading }, orders] = useApi(getOrdersV2);\n const today = new Date();\n today.setMonth(today.getMonth() - NUMBER_OF_MONTHS_TO_LOOK_BACK);\n\n useEffect(() => {\n // NOTE: we'll want to cache this in the context\n fetchOrders(today.toISOString().split('T')[0]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <p className=\"parti_dash_recent_purchase text-brand-dark font-semibold text-lg mb-2.5\">\n Recent Purchases\n </p>\n <Purchases loading={loading} orders={orders?.data ?? []} />\n </div>\n );\n};\n\nexport default RecentPurchases;\n","import React, { useMemo } from 'react';\n\nimport { AdSidebar } from 'common/api/contentful/models/AdSidebar';\nimport { useFromContentful } from 'common/api/contentful/utils';\nimport { createStyles } from 'utils/createStyle';\nimport ResponsiveContainer, {\n ContainerType,\n} from 'components/responsive-containers/ResponsiveContainer';\n\nexport const AdSidebarComponent = () => {\n const adSidebar = useFromContentful<AdSidebar>('adSidebar');\n\n const styles = createStyles({\n container: {\n width: '200px',\n },\n });\n\n const banners = useMemo(\n () => adSidebar.content?.items.filter((it) => it.fields.adImage) || [],\n [adSidebar]\n );\n const randomBanner = useMemo(\n () =>\n banners.length > 0 ? banners[Math.trunc(Math.random() * banners.length)] : undefined,\n [banners]\n );\n\n return (\n <>\n {randomBanner && (\n <ResponsiveContainer For={ContainerType.desktop}>\n <div className={styles.container}>\n <div>\n <img\n src={randomBanner.fields.adImage.fields.file.url}\n title={randomBanner.fields.adImage.fields.description}\n />\n </div>\n </div>\n </ResponsiveContainer>\n )}\n </>\n );\n};\n","import { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\nimport { EARNINGS_URL } from 'common/api/config';\n\nexport interface EarningsEntry {\n months: number;\n value: number;\n}\n\nexport const getDashboardEarningsData = () => {\n return withTokensIfNeeded<EarningsEntry[]>(`${EARNINGS_URL}?api-version=1`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n};\n","import React, { useEffect, useState } from 'react';\nimport _round from 'lodash/round';\nimport { BarChart, Bar, XAxis, YAxis } from 'recharts';\n\nimport RecentPurchases from './RecentPurchases';\nimport { AdSidebarComponent } from './AdSidebarComponent';\n\nimport { colors } from 'styles/settings';\nimport { EarningsEntry, getDashboardEarningsData } from 'common/api/users/dashboard';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { useWindowInnerSize } from 'hooks/useWindowSize';\nimport { faExternalLink } from '@fortawesome/pro-regular-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Link } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { FeatureFlag } from 'components/feature-flag';\n\nconst Container = 'div';\nexport interface CustomLabelProps {\n x?: number;\n y?: number;\n fill: string;\n value?: number;\n width?: number;\n}\nexport interface CustomXAxis extends EarningsEntry {\n monthsLabel: string;\n}\n\nconst CustomizedLabel = (props: CustomLabelProps) => {\n const { x, y, value = 0, width, fill } = props;\n return (\n <text\n x={x}\n y={y}\n dy={-5}\n dx={width ? width - 64.5 : 24}\n fontSize=\"12\"\n fontFamily=\"sans-serif\"\n fill={fill}\n textAnchor=\"start\"\n >\n {`$ ${_round(value, 2).toFixed(2)}`}\n </text>\n );\n};\n\nconst HeaderAndAdSection = () => {\n return (\n <Container className=\"flex flex-col w-full md:w-48\">\n <p className=\"text-brand-dark text-3xl mb-5 font-light sm:font-normal\">\n Your Dashboard\n </p>\n <AdSidebarComponent />\n </Container>\n );\n};\n\nconst EarningsAndPurchasesSection = () => {\n const [earningData, setEarningData] = useState<Array<CustomXAxis>>([]);\n const [loadEarningsData] = useApi(getDashboardEarningsData);\n const { width } = useWindowInnerSize();\n\n useEffect(() => {\n loadEarningsData().then(({ data }) => {\n if (data) {\n setEarningData(\n data.map((dt) => ({\n ...dt,\n monthsLabel: dt.months !== 12 ? `${dt.months} mo` : `1 yr`,\n }))\n );\n return;\n }\n });\n }, [loadEarningsData]);\n\n return (\n <Container className=\"py-2 w-full md:pl-20\">\n <div\n className=\"parti_dash_earnings_summary max-w-full mb-12\"\n style={{ width: width > 800 ? width - width * 0.45 : width }}\n >\n <div className=\"flex flex-col sm:flex-row justify-between py-2\">\n <h6 className=\"text-brand-dark font-semibold text-lg pb-2 sm:pb-0\">\n Earnings Summary\n </h6>\n </div>\n <div\n className=\"max-w-3/5 mt-2 pt-1 pb-0\"\n style={{ borderWidth: 0.5, borderColor: '#eaeaea', borderRadius: 5 }}\n >\n {!earningData?.length ? (\n <p className=\"p-4\" />\n ) : (\n <>\n <BarChart\n width={width > 800 ? width - width * 0.45 : width - 70}\n height={200}\n data={earningData.sort((a, b) => a.months - b.months)}\n className=\"max-w-full\"\n >\n <XAxis tickLine dataKey=\"monthsLabel\" fontSize=\"12\" />\n <YAxis padding={{ top: 20 }} hide />\n <Bar\n dataKey=\"value\"\n barSize={width > 800 ? 90 : undefined}\n fill={colors.brandDark}\n radius={[5, 5, 0, 0]}\n label={<CustomizedLabel fill={colors.brandDark} />}\n />\n </BarChart>\n </>\n )}\n </div>\n </div>\n <FeatureFlag flagKey=\"enable_family_reporting\">\n <div className=\"mb-11\">\n <Link\n to={Routes.FamilyEarningsSummary}\n target=\"_blank\"\n style={{ textDecoration: 'none' }}\n className=\"cursor-pointer\"\n >\n <span className=\"text-brand text-lg underline\">Earning Summary Report</span>\n <FontAwesomeIcon\n icon={faExternalLink}\n className=\"inline-block text-brand ml-2.5\"\n />\n <div className=\"text-grey-1\">\n High level look at order count, total card value, and earnings for a\n timeframe.\n </div>\n </Link>\n </div>\n </FeatureFlag>\n <RecentPurchases />\n </Container>\n );\n};\n\nexport const Dashboard = () => {\n return (\n <Container className=\"flex flex-col md:flex-row\">\n <HeaderAndAdSection />\n <EarningsAndPurchasesSection />\n </Container>\n );\n};\n","import React, { MouseEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTimes } from '@fortawesome/pro-solid-svg-icons';\n\nimport { DatePicker } from 'components/date-picker';\nimport { Btn } from 'components/btn/Btn';\nimport { useFocusMonitor } from 'hooks/useFocusMonitor';\nimport MaskedInput, { MaskedInputProps } from 'react-text-mask';\nimport { MASK_DATE } from 'common/modules/mask-text/masks';\nimport { getDaysInMonth } from 'common/utils/utils';\nimport { createStyles } from 'utils/createStyle';\nimport { LinkBtn } from 'components/link-btn';\n\nexport type CustomRangeDatePickerProps = {\n open: boolean;\n onChange: (startDate: Date | undefined, endDate: Date | undefined) => void;\n onClose: () => void;\n applyFilterBtn?: string;\n};\n\nconst styles = createStyles({\n dataPickerInput: [\n 'text-center border border-grey-3 rounded',\n {\n width: '120px',\n },\n ],\n});\n\n// NOTE: controls datepicker available months and dates to pick from\nconst maxDate = new Date();\nconst minDate = new Date();\nminDate.setMonth(minDate.getMonth() - 18);\nminDate.setDate(minDate.getDate() + 1);\n\nexport const CustomRangeDatePicker = ({\n open,\n onChange,\n onClose,\n applyFilterBtn = 'Apply Filter',\n}: CustomRangeDatePickerProps) => {\n const [start, setStart] = useState<Date | null>();\n const [end, setEnd] = useState<Date | null>();\n\n const clearAll = (e: MouseEvent) => {\n setStart(undefined);\n setEnd(undefined);\n e.preventDefault();\n };\n\n const onDateRangeChanged =\n (isMobile: boolean) =>\n ([newStart, newEnd]: [Date | null, Date | null]) => {\n setStart(newStart);\n setEnd(newEnd);\n\n if (!isMobile && newStart && newEnd) {\n onChange(newStart, newEnd);\n }\n };\n\n const selectedRange = useMemo(() => {\n const startDate = start?.toLocaleDateString();\n const endDate = end?.toLocaleDateString();\n\n if (!startDate) {\n return 'Select start date';\n }\n if (!endDate) {\n return 'Select end date';\n }\n\n return `Start: ${startDate}<br />End: ${endDate}`;\n }, [start, end]);\n\n const applyFilter = useCallback(() => {\n if (start && end) {\n onChange(start, end);\n onClose();\n }\n }, [start, end, onChange, onClose]);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (open && containerRef.current) {\n const el = containerRef.current.querySelector('.customBtn') as HTMLInputElement;\n el?.focus();\n }\n }, [open, containerRef]);\n\n const onStartDateChange = useCallback(\n (date: Date) => {\n setStart(date);\n },\n [setStart]\n );\n\n const onEndDateChange = useCallback(\n (date: Date) => {\n setEnd(date);\n },\n [setEnd]\n );\n\n const onApply = useCallback(() => {\n if (start && end) {\n onChange(start, end);\n onClose();\n }\n }, [start, end, onChange, onClose]);\n\n const [isStartDatePickerOpen, setIsStartDatePickerOpen] = useState(false);\n const [isEndDatePickerOpen, setIsEndDatePickerOpen] = useState(false);\n\n const dtStartRef = useRef<HTMLDivElement | null>(null);\n const dtEndRef = useRef<HTMLDivElement | null>(null);\n\n const startDatePickerHasFocus = useFocusMonitor(dtStartRef);\n const endDatePickerHasFocus = useFocusMonitor(dtEndRef);\n\n const isValidRange = useMemo(() => {\n if (!start || !end) {\n return false;\n }\n\n if (start > end) {\n return false;\n }\n\n if (start > maxDate || end > maxDate) {\n return false;\n }\n\n return true;\n }, [start, end]);\n\n return (\n <>\n {open && (\n <div ref={containerRef}>\n <div className=\"block sm:hidden\">\n <div className=\"react-datepicker__portal select-none\">\n <div className=\"relative bg-white/80 p-4 rounded\">\n <DatePicker\n inline\n onChange={onDateRangeChanged(true)}\n selectsRange\n startDate={start}\n endDate={end}\n maxDate={maxDate}\n minDate={minDate}\n customInput={<span>Custom...</span>}\n />\n <div\n className=\"block text-center text-lg text-brand-dark font-bold py-2\"\n dangerouslySetInnerHTML={{ __html: selectedRange }}\n />\n <div className=\"block text-center\">\n <div className=\"inline-block\">\n <div className=\"block mb-2 mt-4\">\n <Btn disabled={!start || !end} onClick={applyFilter}>\n {applyFilterBtn}\n </Btn>\n </div>\n <LinkBtn className=\"py-4\" onClick={clearAll}>\n Clear all dates\n </LinkBtn>\n </div>\n </div>\n <div className=\"absolute top-0 right-0\">\n <button\n onClick={onClose}\n aria-label=\"Close date picker\"\n className=\"px-3 py-2 bg-white rounded transform translate-x-3 -translate-y-3\"\n >\n <FontAwesomeIcon\n className=\"bg-white text-brand rounded-full\"\n icon={faTimes}\n />\n </button>\n </div>\n </div>\n </div>\n </div>\n <div className=\"hidden sm:block py-1\">\n <div className=\"flex gap-2\">\n <div ref={dtStartRef} id=\"dt-start\">\n <div className=\"text-sm text-left\">Start date:</div>\n <DatePicker\n selected={start}\n onChange={onStartDateChange}\n selectsStart\n startDate={start}\n endDate={end}\n minDate={minDate}\n maxDate={new Date()}\n customInput={<MaskedDateInput />}\n open={isStartDatePickerOpen && startDatePickerHasFocus}\n onCalendarOpen={() => setIsStartDatePickerOpen(true)}\n onCalendarClose={() => setIsStartDatePickerOpen(false)}\n />\n </div>\n <div ref={dtEndRef}>\n <div className=\"text-sm text-left\">End date:</div>\n <DatePicker\n selected={end}\n onChange={onEndDateChange}\n selectsEnd\n startDate={start}\n endDate={end}\n minDate={minDate}\n maxDate={!start ? new Date() : maxDate}\n customInput={<MaskedDateInput />}\n open={isEndDatePickerOpen && endDatePickerHasFocus}\n onCalendarOpen={() => setIsEndDatePickerOpen(true)}\n onCalendarClose={() => setIsEndDatePickerOpen(false)}\n />\n </div>\n <div className=\"flex items-end\">\n <Btn\n className=\"border border-brand rounded p-2 bg-brand text-white hover:bg-white hover:text-brand-dark\"\n disabled={!isValidRange}\n isSmall={true}\n onClick={onApply}\n >\n Apply\n </Btn>\n <Btn\n className=\"border border-grey-3 rounded p-2 text-grey-1 hover:text-brand-dark ml-1\"\n isSmall={true}\n isSecondary={true}\n onClick={() => onClose()}\n >\n Cancel\n </Btn>\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst MaskedDateInput = ({ value, ...props }: Omit<MaskedInputProps, 'mask'>) => {\n const valueStr = (value ?? '').toString().replace(/_/g, '');\n\n const [monthStr = null, dateStr = null, yearStr = null] = valueStr\n .split('/')\n .map((t) => t.trim());\n\n const month = useMemo(() => (monthStr ? parseInt(monthStr, 10) : null), [monthStr]);\n const date = useMemo(() => (dateStr ? parseInt(dateStr, 10) : null), [dateStr]);\n const year = useMemo(() => (yearStr ? parseInt(yearStr, 10) : null), [yearStr]);\n\n const isValidMonth = useMemo(() => month === null || (month > 0 && month <= 12), [month]);\n const isValidDate = useMemo(\n () =>\n date !== null && month !== null && year !== null\n ? date > 0 && date <= getDaysInMonth(month, year)\n : date === null || (date > 0 && date <= 31),\n [date, month, year]\n );\n const isValidYear = useMemo(() => year === null || year > 0, [year]);\n\n const isValid = useMemo(\n () => isValidDate && isValidMonth && isValidYear,\n [isValidDate, isValidMonth, isValidYear]\n );\n\n return (\n <MaskedInput\n guide={true}\n value={value}\n keepCharPositions={true}\n style={{\n border: `${isValid ? '' : '1px solid red'}`,\n outline: `${isValid ? '' : '1px solid red'}`,\n }}\n {...props}\n mask={MASK_DATE}\n className={`customBtn inline-block ${styles.dataPickerInput}`}\n placeholder=\"mm/dd/yyyy\"\n />\n );\n};\n","import classNames from 'classnames';\nimport React, { ReactNode } from 'react';\n\nexport interface HorizontalPillsItem {\n text: ReactNode;\n value: string;\n isNew?: boolean;\n}\n\nexport interface HorizontalPillsStyle {\n container: string;\n itemSelected: string;\n itemInactive?: string;\n item: string;\n text: string;\n newText: string;\n}\n\nexport type HorizontalPillsProps = {\n items: HorizontalPillsItem[];\n value: string;\n onChange: (value: string) => void;\n style: HorizontalPillsStyle;\n};\n\nexport const HorizontalPills = ({ items, value, onChange, style }: HorizontalPillsProps) => {\n return (\n <ul className={style.container}>\n {items.map((item) => (\n <li\n key={item.value}\n className={classNames(\n style.item,\n value === item.value ? style.itemSelected : style.itemInactive\n )}\n >\n <button\n onClick={(e) => {\n onChange(item.value);\n e.preventDefault();\n }}\n className=\"rounded-full\"\n >\n <span className={style.text}>{item.text}</span>\n\n {item.isNew && <span className={style.newText}>{'New!'}</span>}\n </button>\n </li>\n ))}\n </ul>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { CustomRangeDatePicker } from './CustomRangeDatePicker';\nimport { HorizontalPills } from './HorizontalPills';\nimport { Routes } from 'routes';\nimport { createStyles } from 'utils/createStyle';\n\nexport type DateRangeSelectorProps = {\n onChange: (start: Date | undefined, end: Date | undefined) => void;\n hideOrderHistoryReportCopy?: boolean;\n};\n\nconst formatDisplayDate = (date: Date) => {\n const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' };\n return new Intl.DateTimeFormat('en-US', options).format(date);\n};\n\nconst styles = createStyles({\n container: 'text-xs',\n item: 'inline-block border border-brand-dark rounded-full ml-1',\n itemSelected: 'bg-pale-blue font-bold',\n text: 'px-2 inline-block text-brand',\n});\n\nconst useOrderHistoryDateRangeSelectorControls = (onChange: DateRangeSelectorProps['onChange']) => {\n const [selectedValue, setSelectedValue] = useState('');\n const [startDate, setStartDate] = useState<Date>();\n const [endDate, setEndDate] = useState<Date>();\n\n const onDateRangeChange = useCallback(\n (s: Date | undefined, e: Date | undefined) => {\n setStartDate(s);\n setEndDate(e);\n onChange(s, e);\n },\n [setStartDate, setEndDate, onChange]\n );\n\n const [openDatePicker, setOpenDatePicker] = useState(false);\n\n const onCustomClicked = useCallback(() => {\n setOpenDatePicker(true);\n }, []);\n\n const items = [\n { text: '3 months', value: '3' },\n { text: '6 months', value: '6' },\n { text: '12 months', value: '12' },\n { text: <span onClick={onCustomClicked}>Custom...</span>, value: 'custom' },\n ];\n\n const selectedRange = useMemo(() => {\n if (startDate && endDate) {\n return `${formatDisplayDate(startDate)} - ${formatDisplayDate(endDate)}`;\n }\n return '';\n }, [startDate, endDate]);\n\n const onItemChange = useCallback(\n (item: string) => {\n setSelectedValue(item);\n\n if (item === 'custom') {\n onChange(startDate, endDate);\n } else {\n const months = parseInt(item, 10);\n\n const newStartDate = new Date();\n const newEndDate = new Date();\n\n newStartDate.setMonth(newStartDate.getMonth() - months);\n\n setStartDate(newStartDate);\n setEndDate(newEndDate);\n\n onChange(newStartDate, newEndDate);\n }\n },\n [onChange, startDate, endDate]\n );\n\n useEffect(() => {\n onItemChange('3');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n selectedRange,\n items,\n selectedValue,\n onItemChange,\n openDatePicker,\n onDateRangeChange,\n setOpenDatePicker,\n };\n};\n\nexport const OrderHistoryDateRangeSelector = ({ onChange }: DateRangeSelectorProps) => {\n const {\n selectedRange,\n items,\n selectedValue,\n onItemChange,\n openDatePicker,\n onDateRangeChange,\n setOpenDatePicker,\n } = useOrderHistoryDateRangeSelectorControls(onChange);\n return (\n <div>\n <div className=\"block md:flex\">\n <div className=\"text-base sm:text-base text-brand-dark truncate flex items-center\">\n {selectedRange}\n </div>\n <div className=\"flex flex-col items-end ml-auto truncate my-4\">\n <HorizontalPills\n style={styles as any}\n items={items}\n value={selectedValue}\n onChange={onItemChange}\n />\n <p className=\"whitespace-normal text-grey-1 text-xs mt-2\">\n <a\n target=\"_blank\"\n href={Routes.FamilyOrderHistory}\n className=\"cursor-pointer\"\n >\n Order History report\n </a>{' '}\n for orders older than 18 months.\n </p>\n </div>\n </div>\n <div className=\"block text-right\">\n <div className=\"inline-block\">\n {selectedValue === 'custom' && (\n <CustomRangeDatePicker\n open={openDatePicker}\n onChange={onDateRangeChange}\n onClose={() => setOpenDatePicker(false)}\n applyFilterBtn=\"Filter Orders by Date\"\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport const NewOrderHistoryDateRangeSelector = ({\n onChange,\n hideOrderHistoryReportCopy = false,\n}: DateRangeSelectorProps) => {\n const {\n selectedRange,\n items,\n selectedValue,\n onItemChange,\n openDatePicker,\n onDateRangeChange,\n setOpenDatePicker,\n } = useOrderHistoryDateRangeSelectorControls(onChange);\n\n return (\n <div>\n <div className=\"block md:flex md:flex-col lg:items-end md:ml-auto\">\n <div className=\"text-base sm:text-base text-brand-dark truncate\">\n {selectedRange}\n </div>\n <div className=\"flex flex-col md:items-end ml-auto truncate my-4\">\n <HorizontalPills\n style={styles as any}\n items={items}\n value={selectedValue}\n onChange={onItemChange}\n />\n\n {!hideOrderHistoryReportCopy && (\n <p className=\"whitespace-normal text-grey-1 text-xs mt-2\">\n <a\n target=\"_blank\"\n href={Routes.FamilyOrderHistory}\n className=\"cursor-pointer\"\n >\n Order History report\n </a>{' '}\n for orders older than 18 months.\n </p>\n )}\n </div>\n </div>\n <div className=\"block text-right\">\n <div className=\"inline-block\">\n {selectedValue === 'custom' && (\n <CustomRangeDatePicker\n open={openDatePicker}\n onChange={onDateRangeChange}\n onClose={() => setOpenDatePicker(false)}\n applyFilterBtn=\"Filter Orders by Date\"\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport * as Progress from '@radix-ui/react-progress';\n\nimport { RecentPurchase } from './RecentPurchase';\n\nimport { getOrdersV2 } from 'common/api/e-comm/orders/service';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { Order } from 'common/api/e-comm/models/Order';\nimport { createStyles } from 'utils/createStyle';\n\ntype PurchaseHistoryProps = { startDate: Date; endDate: Date };\n\nexport const PurchaseHistory = ({ startDate, endDate }: PurchaseHistoryProps) => {\n const [fetchOrders, { loading }, orders] = useApi(getOrdersV2);\n\n useEffect(() => {\n // NOTE: we'll want to cache this in the context\n const startDateStr = startDate.toISOString().split('T')[0];\n let endDateStr = endDate.toISOString().split('T')[0];\n\n // if dates are the same, add 1 day to the end date to retrieve all orders for that day.\n if (startDateStr === endDateStr) {\n endDate.setDate(endDate.getDate() + 1);\n endDateStr = endDate.toISOString().split('T')[0];\n }\n\n fetchOrders(startDateStr, endDateStr);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [startDate, endDate]);\n\n return (\n <div>\n <PurchaseHistoryList loading={loading} orders={orders?.data ?? []} />\n </div>\n );\n};\n\ninterface PurchaseHistoryListProps {\n orders: Order[];\n loading: boolean;\n}\n\nconst RESULTS_PER_LOAD = 50;\nconst RESULTS_INITIAL_LOAD = 20;\n\nconst styles = createStyles({\n loadMore: [\n 'py-2 px-10 rounded-3xl bg-brand text-white font-semibold mt-8',\n { fontSize: 18, lineHeight: '20px' },\n ],\n totalText: ['text-grey-1', { fontSize: 14, lineHeight: '22px' }],\n indicator: ['rounded-3xl bg-bonus-pink h-2'],\n root: ['rounded-3xl bg-grey-5 h-2 inline-block'],\n loading: ['w-full mb-4', { height: '12rem' }],\n});\n\nconst PurchaseHistoryList = ({ orders, loading }: PurchaseHistoryListProps) => {\n const [pageSize, setPageSize] = useState(RESULTS_PER_LOAD);\n\n const loadMore = useCallback(() => {\n setPageSize(pageSize + RESULTS_PER_LOAD);\n }, [pageSize, setPageSize]);\n\n const total = useMemo(() => orders.length, [orders]);\n const to = useMemo(() => Math.min(pageSize, total), [pageSize, total]);\n\n useEffect(() => {\n setPageSize(RESULTS_INITIAL_LOAD);\n }, [orders, setPageSize]);\n\n if (loading) {\n return (\n <>\n <Skeleton className={styles.loading} />\n <Skeleton className={styles.loading} />\n <Skeleton className={styles.loading} />\n </>\n );\n }\n\n return (\n <div>\n {orders.slice(0, to).map((order: Order) => (\n <div key={order.orderNumber} className=\"mb-5\">\n <RecentPurchase order={order} />\n </div>\n ))}\n {total > 0 && (\n <div className=\"text-center mt-16\">\n <p className={styles.totalText}>\n Viewing <span className=\"font-bold text-brand\">{to}</span> of{' '}\n <span className=\"font-bold text-brand\">{total}</span> Results\n </p>\n <Progress.Root\n className={styles.root}\n style={{ width: 180 }}\n value={to}\n max={total}\n >\n <Progress.Indicator\n className={styles.indicator}\n style={{ width: `${(to / total) * 100}%` }}\n />\n </Progress.Root>\n <div>\n {to < total && (\n <button className={styles.loadMore} onClick={loadMore}>\n Load More Items\n </button>\n )}\n </div>\n </div>\n )}\n {total <= 0 && <div>No orders found.</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { LocalDiningHistoryRecord } from 'common/api/clo-history/mock-api/useLocalDiningHistory';\nimport { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\nimport { formatISODate } from './RecentPurchase';\n\nexport interface LocalDiningHistoryItemProps {\n item: LocalDiningHistoryRecord;\n}\n\nconst style = createStyles({\n historyItem: [\n 'my-3',\n {\n borderRadius: '5px',\n borderColor: colors.darkBlue,\n borderWidth: '1px',\n },\n ],\n headerDate: 'text-17px text-brand-dark pl-3 pt-2 pb-1',\n referenceNumber: 'text-12px text-dark-grey pl-3 pb-2',\n cardHeader: 'p-1',\n table: 'w-full',\n headerRow: { borderBottom: '1px solid', borderBottomColor: colors.lightGrey },\n firstHeaderText: ['text-left px-2 text-12px text-brand-dark pl-4 pb-1 font-semibold'],\n headerNumbers: [\n 'text-right text-12px text-brand-dark pb-1 font-semibold px-3',\n { width: '15%', maxWidth: '15%' },\n ],\n cellText: 'text-left py-5 text-14px font-semibold pl-4 pr-3',\n cellEarnings: [\n 'text-right px-3 text-14px text-success font-bold',\n { width: '15%', maxWidth: '15%' },\n ],\n cellTotal: [\n 'text-right px-3 text-14px text-brand-dark font-bold',\n { width: '15%', maxWidth: '15%' },\n ],\n restaurantField: [\n 'text-brand-dark font-bold',\n {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignItems: 'center',\n gap: '15px',\n },\n ],\n});\n\nexport const LocalDiningHistoryItem = (props: LocalDiningHistoryItemProps): React.ReactElement => {\n const item: LocalDiningHistoryRecord = props.item;\n\n return (\n <div className={style.historyItem} key={item.transactionId}>\n <div className={style.cardHeader}>\n <h4 className={style.headerDate}>{formatISODate(item.transactionDateTime)}</h4>\n <div className={style.referenceNumber}>Reference # {item.transactionId}</div>\n </div>\n\n <table className={style.table}>\n <thead className={style.headerRow}>\n <tr>\n <th className={style.firstHeaderText}>Restaurant</th>\n\n <th className={style.headerNumbers}>Earnings</th>\n\n <th className={style.headerNumbers}>Total</th>\n </tr>\n </thead>\n\n <tbody>\n <tr>\n <td className={style.cellText}>\n <div className={style.restaurantField}>\n {/* <img src=\"\" width=\"58\" height=\"36\" /> */}\n <div>{item.merchantName}</div>\n </div>\n </td>\n\n <td className={[style.cellEarnings].join()}>\n {item.organizationBenefitAmount}\n </td>\n\n <td className={[style.cellTotal].join()}>{item.transactionAmount}</td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n};\n","import { LocalDiningHistoryRecord } from '../useLocalDiningHistory';\n\n// fake restaurants generated with an LLM\nexport const mockResponses: LocalDiningHistoryRecord[] = [\n {\n transactionDateTime: '2024-01-01',\n organizationBenefitAmount: '$5.25',\n transactionId: '1234567890',\n merchantName: \"Joe's Diner\",\n transactionAmount: '$35.00',\n },\n {\n transactionDateTime: '2024-01-02',\n organizationBenefitAmount: '$3.80',\n transactionId: '1234567891',\n merchantName: 'Taco Haven',\n transactionAmount: '$22.50',\n },\n {\n transactionDateTime: '2024-01-03',\n organizationBenefitAmount: '$6.40',\n transactionId: '1234567892',\n merchantName: 'Bella Pasta',\n transactionAmount: '$42.75',\n },\n {\n transactionDateTime: '2024-01-04',\n organizationBenefitAmount: '$4.25',\n transactionId: '1234567893',\n merchantName: 'Sushi Zen',\n transactionAmount: '$30.00',\n },\n {\n transactionDateTime: '2024-01-05',\n organizationBenefitAmount: '$7.50',\n transactionId: '1234567894',\n merchantName: 'Burger Barn',\n transactionAmount: '$50.00',\n },\n {\n transactionDateTime: '2024-01-06',\n organizationBenefitAmount: '$5.75',\n transactionId: '1234567895',\n merchantName: 'Pizza Palace',\n transactionAmount: '$38.25',\n },\n {\n transactionDateTime: '2024-01-07',\n organizationBenefitAmount: '$2.90',\n transactionId: '1234567896',\n merchantName: 'Healthy Bites',\n transactionAmount: '$19.95',\n },\n {\n transactionDateTime: '2024-01-08',\n organizationBenefitAmount: '$4.90',\n transactionId: '1234567897',\n merchantName: 'Steakhouse 101',\n transactionAmount: '$32.40',\n },\n {\n transactionDateTime: '2024-01-09',\n organizationBenefitAmount: '$3.60',\n transactionId: '1234567898',\n merchantName:\n 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Inventore commodi necessitatibus, odio est iusto ut? Eveniet laborum officiis harum unde mollitia fugiat adipisci! Error inventore sint, at amet voluptate cium!',\n transactionAmount: '$24.00',\n },\n {\n transactionDateTime: '2024-01-09',\n organizationBenefitAmount: '$3.60',\n transactionId: '1234567898',\n merchantName: 'Curry Corner',\n transactionAmount: '$24.00',\n },\n {\n transactionDateTime: '2024-01-10',\n organizationBenefitAmount: '$6.10',\n transactionId: '1234567899',\n merchantName: 'BBQ Nation',\n transactionAmount: '$45.00',\n },\n {\n transactionDateTime: '2024-01-10',\n organizationBenefitAmount: '$6.10',\n transactionId: '1234567899',\n merchantName:\n ' BBQ Nation BBQ Nation BBQ Nation BBQ Nation BBQ Nation BBQ Nation BBQ Nation BBQ Nation BBQ Nation BBQ Nation',\n transactionAmount: '$45.00',\n },\n {\n transactionDateTime: '2024-01-11',\n organizationBenefitAmount: '$5.20',\n transactionId: '1234567900',\n merchantName: 'The Green Fork',\n transactionAmount: '$36.75',\n },\n {\n transactionDateTime: '2024-01-12',\n organizationBenefitAmount: '$3.40',\n transactionId: '1234567901',\n merchantName: 'Submarine Subs',\n transactionAmount: '$21.50',\n },\n {\n transactionDateTime: '2024-01-13',\n organizationBenefitAmount: '$8.10',\n transactionId: '1234567902',\n merchantName: 'Fancy Feast',\n transactionAmount: '$60.00',\n },\n {\n transactionDateTime: '2024-01-14',\n organizationBenefitAmount: '$4.00',\n transactionId: '1234567903',\n merchantName: 'Pancake House',\n transactionAmount: '$28.90',\n },\n {\n transactionDateTime: '2024-01-15',\n organizationBenefitAmount: '$5.65',\n transactionId: '12345679043',\n merchantName: 'Taco Time',\n transactionAmount: '$37.80',\n },\n {\n transactionDateTime: '2024-01-15',\n organizationBenefitAmount: '$5.65',\n transactionId: '1234567904',\n merchantName:\n 'Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time Taco Time',\n transactionAmount: '$37.80',\n },\n {\n transactionDateTime: '2024-01-16',\n organizationBenefitAmount: '$3.90',\n transactionId: '1234567905',\n merchantName: 'Mediterranean Delights',\n transactionAmount: '$26.00',\n },\n {\n transactionDateTime: '2024-01-17',\n organizationBenefitAmount: '$6.75',\n transactionId: '1234567906',\n merchantName: 'Gourmet Burgers',\n transactionAmount: '$48.90',\n },\n {\n transactionDateTime: '2024-01-18',\n organizationBenefitAmount: '$2.80',\n transactionId: '1234567907',\n merchantName: 'Quick Bites',\n transactionAmount: '$18.25',\n },\n {\n transactionDateTime: '2024-01-19',\n organizationBenefitAmount: '$7.00',\n transactionId: '1234567908',\n merchantName: 'The Seafood Spot',\n transactionAmount: '$52.40',\n },\n {\n transactionDateTime: '2024-01-20',\n organizationBenefitAmount: '$4.50',\n transactionId: '1234567909',\n merchantName: 'Comfort Kitchen',\n transactionAmount: '$34.20',\n },\n];\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport { CARD_LINKED_OFFERS_TRANSACTION_URL } from 'common/api/config';\nimport { APIResponse } from 'common/api/models';\nimport { monetizeWithDecimal } from 'common/utils/strings';\nimport { withTokensIfNeeded } from 'common/api/utils/withTokensIfNeeded';\n\n// TODO: remove these mock entries\nimport { mockResponses } from './__fixtures__/mockLocalDiningHistoryResponses';\n\nconst PAGE_SIZE = 20;\n\nexport interface LocalDiningHistoryRecord {\n merchantName: string;\n organizationBenefitAmount: string;\n transactionAmount: string;\n transactionDateTime: string;\n transactionId: string;\n}\n\nfunction mockApi(start: string, end: string): Promise<LocalDiningHistoryRecord[]> {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n // TODO: mock a bad response?\n const limit = Math.random() / 2;\n const result = mockResponses\n .filter(() => Math.random() < limit)\n .sort(() => Math.random() - 0.5);\n resolve(result);\n }, Math.random() * 1500 + 1000);\n });\n\n // return Promise.reject(new Error('example error'));\n}\n\nconst requestOrderHistory = async (start: string, end: string) => {\n const _start = start.split('T')[0];\n const _end = end.split('T')[0];\n\n const request = await withTokensIfNeeded<LocalDiningHistoryRecord[]>(\n `${CARD_LINKED_OFFERS_TRANSACTION_URL}?startDate=${_start}&endDate=${_end}&api-version=1`\n );\n\n return request;\n};\n\nexport function useLocalDiningHistory() {\n const [state, setState] = useState<{\n loading: boolean;\n fullResults: LocalDiningHistoryRecord[];\n uiResults: LocalDiningHistoryRecord[];\n canLoadMoreResults: boolean;\n error: null | string;\n }>({\n loading: false,\n fullResults: [],\n error: null,\n uiResults: [],\n canLoadMoreResults: false,\n });\n const latestApiRequest = useRef<Promise<APIResponse<LocalDiningHistoryRecord[], null>>>();\n\n const setViewedDateRange = useCallback(\n (range: { start: string; end: string } | null): Promise<LocalDiningHistoryRecord[]> => {\n if (!range) {\n setState({\n loading: false,\n fullResults: [],\n error: null,\n uiResults: [],\n canLoadMoreResults: false,\n });\n return Promise.resolve([]);\n }\n\n const { start, end } = range;\n if (end < start) {\n setState({\n loading: false,\n fullResults: [],\n error: null,\n uiResults: [],\n canLoadMoreResults: false,\n });\n return Promise.resolve([]);\n }\n\n setState({\n loading: true,\n fullResults: [],\n error: null,\n uiResults: [],\n canLoadMoreResults: false,\n });\n const apiRequest = requestOrderHistory(start, end);\n latestApiRequest.current = apiRequest;\n\n return apiRequest\n .then((response) => {\n if (apiRequest === latestApiRequest.current) {\n if (response.data && response.data.length > 0) {\n const results = response.data.map((d) => ({\n ...d,\n transactionAmount: monetizeWithDecimal(\n d.transactionAmount as unknown as number\n ),\n organizationBenefitAmount: monetizeWithDecimal(\n d.organizationBenefitAmount as unknown as number\n ),\n }));\n\n const uiResults = results.slice(0, PAGE_SIZE);\n setState({\n loading: false,\n fullResults: results,\n uiResults,\n error: null,\n canLoadMoreResults: results.length > PAGE_SIZE,\n });\n } else {\n setState({\n loading: false,\n fullResults: [],\n error: null,\n uiResults: [],\n canLoadMoreResults: false,\n });\n }\n }\n return state.fullResults;\n })\n .catch((errorMessage) => {\n setState({\n loading: false,\n fullResults: [],\n error: errorMessage,\n uiResults: [],\n canLoadMoreResults: false,\n });\n return [];\n });\n },\n [mockApi]\n );\n\n const loadMore = useCallback(() => {\n const nextStartIndex = state.uiResults.length;\n const nextEndIndex = nextStartIndex + PAGE_SIZE;\n\n const previous = state.uiResults;\n const nextSegment = state.fullResults.slice(nextStartIndex, nextEndIndex);\n const nextUiResults = [...previous, ...nextSegment];\n\n setState((prev) => ({\n ...prev,\n uiResults: nextUiResults,\n canLoadMoreResults: prev.fullResults.length > nextUiResults.length,\n }));\n }, [state, setState]);\n\n const result = useMemo(\n () => ({\n setViewedDateRange,\n loadMore,\n canLoadMoreResults: state.canLoadMoreResults,\n loading: state.loading,\n results: state.uiResults,\n error: state.error,\n }),\n [state, setViewedDateRange]\n );\n\n return result;\n}\n","import React, { useEffect } from 'react';\nimport { LocalDiningHistoryItem } from './LocalDiningHistoryItem';\nimport { createStyles } from 'utils/createStyle';\nimport Skeleton from 'react-loading-skeleton';\nimport { useLocalDiningHistory } from 'common/api/clo-history/mock-api/useLocalDiningHistory';\n\nconst style = createStyles({\n container: 'mt-4',\n datePickerContainer: 'block md:flex md:flex-col lg:items-end md:ml-auto',\n contentContainer: '',\n loadMore: [\n 'py-2 px-10 rounded-3xl bg-brand text-white font-semibold mt-8',\n { fontSize: 18, lineHeight: '20px' },\n ],\n buttonRow: ['text-center'],\n});\n\nexport interface LocalDiningHistoryProps {\n dateRange?:\n | {\n start: Date;\n end: Date;\n }\n | undefined\n | null;\n}\n\nexport const LocalDiningHistory = (props: LocalDiningHistoryProps) => {\n const { error, loading, results, setViewedDateRange, loadMore, canLoadMoreResults } =\n useLocalDiningHistory();\n\n useEffect(() => {\n if (props.dateRange) {\n const { start, end } = props.dateRange;\n setViewedDateRange({ start: start.toISOString(), end: end.toISOString() });\n }\n }, [props.dateRange]);\n\n const renderBody = () => {\n if (error) {\n return <LocalDiningHistoryLoadingError />;\n }\n\n if (loading) {\n return <LocalDiningHistoryLoader />;\n }\n\n if (results) {\n if (results.length === 0) {\n return <LocalDiningHistoryNoOrders />;\n }\n\n return (\n <>\n {results.map((result) => {\n return <LocalDiningHistoryItem key={result.transactionId} item={result} />;\n })}\n\n {canLoadMoreResults && (\n <div className={style.buttonRow}>\n <button className={style.loadMore} onClick={loadMore}>\n Load More Items\n </button>\n </div>\n )}\n </>\n );\n }\n };\n\n return (\n <div className={style.container}>\n <div className={style.contentContainer}>{renderBody()}</div>\n </div>\n );\n};\n\nconst noOrdersStyle = createStyles({\n header: 'text-brand-dark font-semibold text-lg mb-2.5 text-xl',\n loading: ['w-full mb-4 text-base', { height: '162px', fontSize: '16px' }],\n});\n\nexport const LocalDiningHistoryLoader = () => {\n return (\n <>\n <Skeleton className={noOrdersStyle.loading} />\n <Skeleton className={noOrdersStyle.loading} />\n <Skeleton className={noOrdersStyle.loading} />\n </>\n );\n};\n\nexport const LocalDiningHistoryLoadingError = () => {\n return (\n <div>\n <h3 className={noOrdersStyle.header}>Something went wrong</h3>\n\n <p>\n We’re sorry, your order history for local dining is currently unavailable. Please\n try refreshing the page.\n </p>\n </div>\n );\n};\n\nexport const LocalDiningHistoryNoOrders = () => {\n return (\n <div>\n <h3 className={noOrdersStyle.header}>No orders yet</h3>\n\n <p>\n Only available on the RaiseRight app. Earn 5% for your organization every time you\n dine at participating local restaurants and pay with a linked credit or debit card.\n </p>\n </div>\n );\n};\n","var _circle, _path, _circle2, _path2, _circle3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgDollarCircle(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 60,\n height: 60,\n viewBox: \"0 0 60 60\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 30,\n cy: 30,\n r: 30,\n fill: \"#A5DDF3\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32.25 37.25C32.5312 37.25 32.8125 37.5312 32.8125 37.8125C32.8125 38.1641 32.5312 38.375 32.25 38.375H27.75C27.3984 38.375 27.1875 38.1641 27.1875 37.8125C27.1875 37.5312 27.3984 37.25 27.75 37.25H29.3672V28.25H27.75C27.3984 28.25 27.1875 28.0391 27.1875 27.6875C27.1875 27.4062 27.3984 27.125 27.75 27.125H30C30.2812 27.125 30.4922 27.4062 30.4922 27.7578V37.25H32.25ZM29.9297 24.875C29.3672 24.875 28.8047 24.3828 28.8047 23.75C28.8047 23.1875 29.3672 22.625 29.9297 22.625C30.5625 22.625 31.0547 23.1875 31.0547 23.75C31.0547 24.3828 30.5625 24.875 29.9297 24.875ZM30 12.5C39.9141 12.5 48 20.5859 48 30.5C48 40.4844 39.9141 48.5 30 48.5C20.0156 48.5 12 40.4844 12 30.5C12 20.5859 20.0156 12.5 30 12.5ZM30 47.375C39.2812 47.375 46.875 39.8516 46.875 30.5C46.875 21.2188 39.2812 13.625 30 13.625C20.6484 13.625 13.125 21.2188 13.125 30.5C13.125 39.8516 20.6484 47.375 30 47.375Z\",\n fill: \"black\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 30,\n cy: 30.5,\n r: 17,\n fill: \"white\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.4688 24.8516C32.418 24.957 33.2969 25.1328 33.9648 25.2734C34.4219 25.4141 34.7031 25.8359 34.5977 26.293C34.4922 26.75 34.0352 27.0312 33.5781 26.9258C32.4883 26.6797 30.9062 26.3633 29.5703 26.5039C28.9023 26.5391 28.375 26.6797 27.9883 26.9258C27.6367 27.1719 27.3555 27.4883 27.2852 28.0156C27.1797 28.4023 27.25 28.6836 27.3555 28.8594C27.4258 29.0703 27.6367 29.2812 27.9531 29.457C28.6211 29.8789 29.6055 30.1602 30.8008 30.4414L30.9062 30.4766C31.9961 30.7578 33.2266 31.0742 34.1758 31.6367C34.668 31.9531 35.0898 32.3398 35.3711 32.9023C35.6875 33.4648 35.7227 34.1328 35.6172 34.8359C35.3711 36.1016 34.457 36.9102 33.332 37.332C32.7695 37.543 32.1367 37.6836 31.4688 37.7188V39.4062C31.4688 39.8984 31.082 40.25 30.625 40.25C30.1328 40.25 29.7812 39.8984 29.7812 39.4062V37.6836C29.6406 37.6484 29.5352 37.6484 29.4297 37.6484L29.3945 37.6133C28.5508 37.5078 27.0039 37.1562 26.0547 36.7344C25.6328 36.5234 25.4219 36.0312 25.6328 35.6094C25.8086 35.1875 26.3008 34.9766 26.7227 35.1875C27.4609 35.5039 28.8672 35.8555 29.6406 35.9609C30.9062 36.1367 31.9609 36.0312 32.7344 35.75C33.4727 35.4688 33.8594 35.0469 33.9297 34.5195C34.0352 34.0977 33.9648 33.8516 33.8594 33.6758C33.7891 33.4648 33.5781 33.2539 33.2617 33.0781C32.5938 32.6562 31.6094 32.375 30.4141 32.0938L30.3086 32.0586C29.2188 31.7773 27.9883 31.4609 27.0391 30.8984C26.5469 30.582 26.125 30.1953 25.8438 29.6328C25.5273 29.0352 25.4922 28.4023 25.5977 27.6992C25.8086 26.6797 26.3359 25.9766 27.0742 25.5195C27.7773 25.0625 28.6211 24.8867 29.4297 24.8164C29.5352 24.8164 29.6406 24.7812 29.7812 24.7812V23.0938C29.7812 22.6367 30.1328 22.25 30.625 22.25C31.082 22.25 31.4688 22.6367 31.4688 23.0938V24.8516Z\",\n fill: \"black\"\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 30,\n cy: 30.5,\n r: 15,\n stroke: \"white\",\n strokeWidth: 3\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDollarCircle);\nexport default __webpack_public_path__ + \"static/media/dollar-circle.670a2c0f5b7a84d7998961bf6e39f173.svg\";\nexport { ForwardRef as ReactComponent };","export interface FAQEntry {\n question: string;\n answer: string[];\n}\n\nexport const FAQsData = [\n {\n question: 'What is my Online Order History?',\n answer: [\n 'Your Online Order History keeps track of all your online earnings and online shopping activity through RaiseRight.',\n 'Each time you click \"Shop Now\" on a brand detail page on RaiseRight, it\\'s recorded in your Online Order History, even if you don\\'t make a purchase.',\n ],\n },\n {\n question: 'What are online earnings?',\n answer: [\n 'Online earnings are complementary to gift card earnings and are received by shopping online through RaiseRight. Click the “Shop Now” button on a brand detail page to shop directly on the brand’s website and complete a purchase to receive online earnings.',\n ],\n },\n {\n question: 'Do I need to claim my online earnings?',\n answer: [\n 'No, if you complete a purchase on a brand\\'s website after clicking through from RaiseRight, your earnings will display in your Online Order History once the \"Earn by\" date has passed.',\n 'If your online earnings do not display, and the \"Earn by\" date has passed, then you can submit a claim by tapping the \"Claim\" button.',\n ],\n },\n {\n question: 'What is the ‘Earn by’ date?',\n answer: [\n 'The \"Earn by\" date listed next to each shopping trip is when you need to complete a purchase on that brand\\'s website in order to receive online earnings (typically within 24-48 hours). Once the retailer verifies your purchase, the \"Earn by\" date is replaced with your earnings amount for that shopping trip.',\n 'If you completed an online purchase with a brand and online earnings do not display after the \"Earn by\" date, select the \"Claim\" button to submit a claim.',\n ],\n },\n {\n question: 'I’m missing online earnings—what can I do?',\n answer: [\n 'If online earnings do not display after you complete an online purchase by the \"Earn by\" date, you can submit a claim by selecting the \"Claim\" button next to the shopping trip. Keep in mind that purchases made with rewards, loyalty points, or third-party coupons and promo codes may void eligibility for online earnings.',\n '(Please note: For categories like hotels, travel, car rentals, and ticket-related transactions, online earnings may be issued up to 2 weeks after the stay or event has been completed.)',\n ],\n },\n {\n question:\n 'I returned an item that I already received online earnings for. What happens next?',\n answer: [\n \"If you've returned an item that was purchased and has pending earnings, those earnings will be removed (either for the full purchase or the returned portion of your full purchase) before those earnings are transferred to your organization. Earnings are no longer considered pending 45 days after your transaction and can take up to 90 days to be deposited to your organization. \",\n ],\n },\n {\n question: 'How long does it take for my online earnings to transfer to my organization?',\n answer: [\n \"It typically takes 45-90 days for online earnings to transfer to your organization. This timeline accounts for each brand's return window and RaiseRight's monthly payout schedule. \",\n ],\n },\n {\n question:\n 'I see the term ‘cashback’ within my confirmation emails and order history. What is that?',\n answer: [\n '‘Cashback’ is another term sometimes used to reference your online earnings that go back to your organization when you shop online through RaiseRight.',\n ],\n },\n];\n","import React from 'react';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { Accordion } from 'features/product/components/Accordion';\nimport DollarCircle from 'media/images/dollar-circle.svg';\nimport { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\nimport { FAQsData } from 'common/modules/online-shopping-faqs';\n\nexport interface OnlineHistoryFAQProps {\n modalOpen: boolean;\n setModalOpen: (isOpen: boolean) => void;\n}\n\nconst styles = createStyles({\n modalTop: ['flex flex-col justify-center items-center'],\n modalIcon: [{ width: '60px', height: '60px' }],\n modalTitle: ['mt-8 mb-4 font-semibold text-24px center text-brand-dark'],\n modalCopy: [\n 'text-center text-16px',\n { color: colors.darkestGrey, lineHeight: '24px', paddingBottom: '22px' },\n ],\n modalSubheader: ['text-brand-dark text-18px mb-2 font-semibold', { marginTop: '40px' }],\n modalAccordianTitle: ['text-grey hover:underline'],\n modalAccordianContent: ['p-3'],\n modalAccordianContentParagraph: ['w-full text-sm mt-1 text-grey-1 font-normal'],\n});\n\nexport const OnlineHistoryFAQ = (props: OnlineHistoryFAQProps) => {\n const items = FAQsData.map((item) => {\n return item;\n });\n\n return (\n <Modal\n title=\"\"\n isOpen={props.modalOpen}\n onClose={() => props.setModalOpen(false)}\n showCloseButton={true}\n size={[ModalSize.MEDIUM, ModalSize.MEDIUM]}\n >\n <>\n <div className={styles.modalTop}>\n <img className={styles.modalIcon} src={DollarCircle} alt=\"Dollar sign\" />\n\n <h3 className={styles.modalTitle}>Online Order History</h3>\n\n <p className={styles.modalCopy}>\n Online earnings automatically display with an 'Earn by' date, which is when\n the brand confirms that you've made a purchase.\n </p>\n\n <p className={styles.modalCopy}>\n If you made a purchase and do not see your earnings by the ‘Earn by’ date,\n tap the ‘Claim’ button to request your earnings.\n </p>\n </div>\n\n <h4 className={styles.modalSubheader}>FAQs</h4>\n\n <Accordion\n multipleEntriesOpen\n items={items.map((item) => {\n return {\n title: (\n <>\n <div className={styles.modalAccordianTitle}>\n {item.question}\n </div>\n </>\n ),\n value: item.question.trim(),\n content: (\n <>\n <div className={styles.modalAccordianContent}>\n {item.answer.map((answer) => (\n <p\n className={styles.modalAccordianContentParagraph}\n key={answer}\n >\n {answer}\n </p>\n ))}\n </div>\n </>\n ),\n };\n })}\n />\n </>\n </Modal>\n );\n};\n","import { faExternalLink } from '@fortawesome/pro-regular-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { FeatureFlag } from 'components/feature-flag';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { createStyles } from 'utils/createStyle';\n\nimport {\n DateRangeSelectorProps,\n NewOrderHistoryDateRangeSelector,\n OrderHistoryDateRangeSelector,\n} from './OrderHistoryDateRangeSelector';\nimport { PurchaseHistory } from './PurchaseHistory';\nimport { useRootSelector } from 'rootStore';\nimport {\n selectIsCardLinkedOffersWebEnabled,\n selectIsConstructorBrowseEnabledWeb,\n} from 'common/features/store/duck/ffs';\nimport { HorizontalPills, HorizontalPillsItem } from './HorizontalPills';\nimport { useConfigureUrlWithAffiliateToken } from 'common/hooks/useGetAffiliateActivationUrl';\nimport { FLIPGIVE_ORDERHISTORY_URL } from 'common/env';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { LocalDiningHistory } from './LocalDiningHistory';\nimport { colors } from 'styles/settings';\nimport { OnlineHistoryFAQ } from './OnlineHistoryFAQ';\n\nconst styles = createStyles({\n headline: ['text-brand-dark text-lg mb-2'],\n linkContainer: ['border-solid border-grey-3 border-t mb-4'],\n icon: ['inline-block text-brand ml-2.5'],\n subHeader: ['text-brand underline'],\n subHeaderContainer: ['mt-3'],\n body: ['text-grey-2'],\n link: ['cursor-pointer', { textDecoration: 'none' }],\n reportContainer: ['flex flex-col w-full md:w-48'],\n reportTitle: ['text-brand-dark text-3xl mb-5 font-light sm:font-normal'],\n historyContainer: ['flex flex-col md:flex-row'],\n sectionContainer: ['py-2 w-full md:pl-20'],\n subsectionContainer: ['flex flex-col justify-center items-center mb-8 mt-12'],\n subsectionHeaderTitle: ['text-brand-dark text-20px font-semibold'],\n subsectionHeaderLink: [\n 'text-brand text-16px font-semibold',\n {\n marginTop: '9px',\n marginBottom: '1px',\n textDecoration: 'none',\n borderBottom: `2px solid ${colors.brand}`,\n },\n ],\n});\n\nconst OrderHistoryReports = () => {\n return (\n <div>\n <div className={styles.headline}>Reports</div>\n <div className={styles.linkContainer}>\n <Link to={Routes.FamilyOrderDetail} target=\"_blank\" className={styles.link}>\n <div className={styles.subHeaderContainer}>\n <span className={styles.subHeader}>Order Detail</span>\n <FontAwesomeIcon icon={faExternalLink} className={styles.icon} />\n </div>\n <span className={styles.body}>\n All orders within a specified timeframe, includes details for each card.\n </span>\n </Link>\n </div>\n <div className={styles.linkContainer}>\n <Link to={Routes.FamilyOrderHistory} target=\"_blank\" className={styles.link}>\n <div className={styles.subHeaderContainer}>\n <span className={styles.subHeader}>Order History</span>\n <FontAwesomeIcon icon={faExternalLink} className={styles.icon} />\n </div>\n <span className={styles.body}>\n All orders within a specified timeframe excluding card details.\n </span>\n </Link>\n </div>\n </div>\n );\n};\n\nconst OrderHistoryReportContainer = () => {\n return (\n <div className={styles.reportContainer}>\n <p className={styles.reportTitle}>Order History</p>\n <FeatureFlag flagKey=\"enable_family_reporting\">\n <OrderHistoryReports />\n </FeatureFlag>\n </div>\n );\n};\n\nenum OrderHistoryTabs {\n GiftCards = 'Gift Cards',\n Online = 'Online',\n LocalDining = 'Local Dining',\n}\n\nfunction getTabs(includeOnlineOrders = false) {\n return [\n { text: OrderHistoryTabs.GiftCards, value: OrderHistoryTabs.GiftCards },\n { text: OrderHistoryTabs.Online, value: OrderHistoryTabs.Online },\n includeOnlineOrders && {\n text: OrderHistoryTabs.LocalDining,\n value: OrderHistoryTabs.LocalDining,\n isNew: true,\n },\n ].filter((item) => item) as HorizontalPillsItem[];\n}\n\nexport const OrderHistorySection = () => {\n const [startDate, setStartDate] = useState<Date>();\n const [endDate, setEndDate] = useState<Date>();\n const [cloDateRange, setCloDateRange] = useState<{ start: Date; end: Date } | null>(null);\n const isAffiliateEnabled = useRootSelector(selectIsConstructorBrowseEnabledWeb);\n const isLocalDiningEnabled = useRootSelector(selectIsCardLinkedOffersWebEnabled);\n\n const [tabs, setTabs] = useState<HorizontalPillsItem[]>(getTabs(isAffiliateEnabled));\n useEffect(() => {\n setTabs(getTabs(isLocalDiningEnabled));\n }, [isLocalDiningEnabled]);\n\n const [selectedValue, setValue] = useState((tabs[0] as any).value);\n const onItemChange = (value: string) => {\n setValue(value as OrderHistoryTabs);\n };\n\n const onChange = useCallback(\n (start?: Date, end?: Date) => {\n setStartDate(start);\n setEndDate(end);\n\n if (start && end) {\n setCloDateRange({ start, end });\n }\n },\n [setStartDate, setEndDate]\n );\n\n return (\n <div className={styles.sectionContainer}>\n <div>\n <div>\n {isAffiliateEnabled ? (\n <NewOrderHistoryHeader\n onChange={onChange}\n tabs={tabs}\n selectedValue={selectedValue}\n onTabChange={onItemChange}\n />\n ) : (\n <OrderHistoryDateRangeSelector onChange={onChange} />\n )}\n </div>\n <div>\n {OrderHistoryTabs.GiftCards === selectedValue && startDate && endDate && (\n <PurchaseHistory startDate={startDate} endDate={endDate} />\n )}\n {OrderHistoryTabs.Online === selectedValue ? <OnlineOrderHistory /> : null}\n {OrderHistoryTabs.LocalDining === selectedValue ? (\n <LocalDiningHistory dateRange={cloDateRange} />\n ) : null}\n </div>\n </div>\n </div>\n );\n};\n\nconst OnlineOrderHistory = () => {\n const [modalOpen, setModalOpen] = useState(false);\n\n const [url, isLoading] = useConfigureUrlWithAffiliateToken(\n '<token>',\n FLIPGIVE_ORDERHISTORY_URL\n );\n\n if (isLoading) {\n return <ActivityIndicator />;\n }\n\n if (!url) {\n return <p>Unable to load</p>;\n }\n\n return (\n <div>\n <div className={styles.subsectionContainer}>\n <h4 className={styles.subsectionHeaderTitle}>Online Order History</h4>\n <button className={styles.subsectionHeaderLink} onClick={() => setModalOpen(true)}>\n Learn More\n </button>\n </div>\n\n <iframe\n src={url}\n className=\"mt-8 bg-contain bg-no-repeat bg-center w-full\"\n style={{ height: '750px' }}\n />\n\n <OnlineHistoryFAQ\n modalOpen={modalOpen}\n setModalOpen={(nextOpenValue) => setModalOpen(nextOpenValue)}\n />\n </div>\n );\n};\n\nconst OrderTypeStyles = createStyles({\n container: 'text-xs mb-2 sm:mb-0 flex whitespace-nowrap overflow-x-auto no-scrollbar',\n item: 'text-base inline-block border rounded-full ml-1 mr-2 cursor-pointer font-semibold mb-2',\n itemSelected: 'bg-pale-blue-50 o:border-2 border-brand text-brand',\n itemInactive: 'border-grey-light text-brand-dark hover:border-brand hover:text-brand',\n text: 'px-4 py-2 inline-block font-semibold',\n newText: [\n 'mr-2 px-3 py-1 mr-1 bg-orange rounded-full text-13px text-white relative font-semibold',\n { bottom: '1px' },\n ],\n});\n\ninterface NewOrderHistoryHeader extends DateRangeSelectorProps {\n tabs: HorizontalPillsItem[];\n selectedValue: string;\n onTabChange: (_: string) => void;\n}\n\nconst NewOrderHistoryHeader = ({\n tabs,\n onChange,\n selectedValue,\n onTabChange,\n}: NewOrderHistoryHeader) => {\n const showDateSelector =\n selectedValue === tabs[0].value || (tabs.length > 2 && selectedValue === tabs[2].value);\n const hideInstructionsOnDateSelector = tabs.length > 2 && selectedValue === tabs[2].value;\n\n return (\n <div className=\"flex flex-col lg:flex-row justify-between md:items-center md:items-baseline\">\n <div className=\"flex flex-col\">\n <p className=\"text-2xl text-brand-dark font-semibold mb-4 ml-1 mt-8\">Order Type</p>\n <HorizontalPills\n style={OrderTypeStyles}\n items={tabs}\n value={selectedValue}\n onChange={onTabChange}\n />\n </div>\n <div className=\"\">\n {showDateSelector ? (\n <NewOrderHistoryDateRangeSelector\n onChange={onChange}\n hideOrderHistoryReportCopy={hideInstructionsOnDateSelector}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nexport const OrderHistory = () => {\n return (\n <div className={styles.historyContainer}>\n <OrderHistoryReportContainer />\n <OrderHistorySection />\n </div>\n );\n};\n","import React, { useContext } from 'react';\nimport { animated, useTransition } from 'react-spring';\n\nimport { EditableFieldsContext } from '../context';\n\nimport { noop } from 'common/utils';\n\nexport interface EditableFieldProps {\n isEditing: boolean;\n editMode: boolean;\n FieldDisplayComponent: React.ElementType;\n FieldEditComponent: React.ElementType;\n className?: string;\n}\n\nexport const EditableField = <T extends EditableFieldProps>({\n editMode,\n isEditing,\n className,\n FieldDisplayComponent,\n FieldEditComponent,\n ...props\n}: T) => {\n const transitions = useTransition(isEditing, {\n from: { opacity: 0, transform: 'translate2d(0%, 0%)', maxHeight: '0px' },\n enter: { opacity: 1, transform: 'translate2d(0%, 100%)', maxHeight: '1000px' },\n leave: { opacity: 0, transform: 'translate2d(0%, 0%)', maxHeight: '0px' },\n });\n\n return (\n <div className={className}>\n <div className={editMode && !isEditing ? 'opacity-20' : 'opacity-100'}>\n <FieldDisplayComponent isEditing={isEditing} {...props} />\n </div>\n {transitions((styles, item) => {\n return (\n item && (\n <animated.div style={styles}>\n <FieldEditComponent isEditing={isEditing} {...props} />\n </animated.div>\n )\n );\n })}\n </div>\n );\n};\n\nexport interface FieldProps extends EditableFieldProps {\n id: string;\n}\n\nexport interface ToggleEditViewRendererProps {\n isEditing: boolean;\n onClick?: React.MouseEventHandler<HTMLParagraphElement>;\n}\n\nexport const ToggleEditViewRenderer = ({ isEditing, onClick }: ToggleEditViewRendererProps) => (\n <p onClick={onClick} className=\"font-semibold underline text-brand text-xs cursor-pointer\">\n {isEditing ? 'Cancel' : 'Edit'}\n </p>\n);\n\nexport const LabelRenderer = ({ label }: { label: React.ReactNode }) => (\n <label className=\"text-grey-2 text-sm\">{label}</label>\n);\n\nexport interface BaseFieldDisplayProps {\n label: React.ReactNode;\n isEditing: boolean;\n id: string;\n children: React.ReactNode;\n onClick: () => void;\n renderers?: { [key: string]: React.ElementType };\n}\n\nconst defaultRenderers = {\n ToggleEditViewRenderer,\n LabelRenderer,\n};\n\nexport const BaseFieldDisplay = ({\n label,\n isEditing,\n id,\n children,\n onClick,\n renderers = {},\n}: BaseFieldDisplayProps) => {\n const { fieldToEdit } = useContext(EditableFieldsContext);\n const components = { ...defaultRenderers, ...renderers };\n\n const notBeingEdited = fieldToEdit && id !== fieldToEdit;\n\n return (\n <div className=\"flex flex-col\">\n <div className=\"flex justify-between mb-2.5\">\n <components.LabelRenderer label={label} />\n <components.ToggleEditViewRenderer\n isEditing={isEditing}\n onClick={notBeingEdited ? undefined : onClick}\n />\n </div>\n\n <div className=\"text-lg text-brand-dark\">{children}</div>\n </div>\n );\n};\n\ninterface FieldDisplayProps extends Omit<BaseFieldDisplayProps, 'onClick'> {\n onToggle?: () => void;\n}\n\nexport const FieldDisplay = ({ onToggle = noop, ...props }: FieldDisplayProps) => {\n const { fieldToEdit, setFieldToEdit } = useContext(EditableFieldsContext);\n\n const onClick = () => {\n setFieldToEdit(fieldToEdit === props.id ? '' : props.id);\n onToggle();\n };\n\n return <BaseFieldDisplay {...props} onClick={onClick} />;\n};\n","import React, { useState, useContext } from 'react';\nimport { Formik, Form } from 'formik';\nimport { useDispatch } from 'react-redux';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { EditableFieldsContext } from '../context';\n\nimport { FieldDisplay } from './utils';\n\nimport { FormikTextField } from 'components/fields/FormikTextField';\nimport { Btn } from 'components/btn/Btn';\nimport { firstNameValidator, lastNameValidator } from 'common/modules/form-validation/validators';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { Family } from 'common/api/crm/models/Family';\nimport { updateUserThunk } from 'common/features/store/duck/home/duck';\n\nexport const NameFieldDisplay = ({ isEditing, id }: { isEditing: boolean; id: string }) => {\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const shouldDisable = !profile?.firstName;\n\n return (\n <FieldDisplay id={id} label=\"Name\" isEditing={isEditing}>\n {profile?.firstName} {profile?.lastName}\n {shouldDisable && <Skeleton className=\"h-10\" />}\n </FieldDisplay>\n );\n};\n\ninterface NameFieldValues {\n firstName: string;\n lastName: string;\n}\n\nexport const NameFieldEditComponent = () => {\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const initialValues = {\n firstName: profile?.firstName ?? '',\n lastName: profile?.lastName ?? '',\n };\n\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const [errorExists, setErrorExists] = useState(false);\n const dispatch = useDispatch<any>();\n\n const onSubmit = async (values: NameFieldValues) => {\n const payload = {\n ...profile,\n ...values,\n };\n\n try {\n await updateUserThunk(payload as Family)(dispatch);\n setFieldToEdit('');\n } catch (e) {\n // renders a common message declaring that it's unable to update information at this point\n setErrorExists(true);\n }\n };\n\n return (\n <div className=\"mt-5\">\n <Formik initialValues={initialValues} onSubmit={onSubmit}>\n <Form>\n <div className=\"flex flex-col sm:flex-row\">\n <div className=\"mb-5 sm:mr-5\">\n <FormikTextField\n name=\"firstName\"\n label=\"First Name\"\n validate={firstNameValidator}\n />\n </div>\n\n <div className=\"mb-5\">\n <FormikTextField\n name=\"lastName\"\n label=\"Last Name\"\n validate={lastNameValidator}\n />\n </div>\n </div>\n {errorExists && (\n <p className=\"text-sm mb-3 text-error\">\n Unable to update your information at this time\n </p>\n )}\n <Btn type=\"submit\">Save</Btn>\n </Form>\n </Formik>\n </div>\n );\n};\n","import React, { useState, useContext, useMemo } from 'react';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useDispatch } from 'react-redux';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { EditableFieldsContext } from '../context';\n\nimport { FieldDisplay } from './utils';\n\nimport { FormikTextField } from 'components/fields/FormikTextField';\nimport { Btn } from 'components/btn/Btn';\nimport { sameEmailValidator } from 'common/modules/form-validation/validators';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { Family } from 'common/api/crm/models/Family';\nimport { updateUserThunk } from 'common/features/store/duck/home/duck';\nimport { StatusCode } from 'common/api/config';\n\nexport const EmailFieldDisplay = ({ isEditing, id }: { isEditing: boolean; id: string }) => {\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const shouldDisable = !profile?.firstName;\n\n return (\n <FieldDisplay id={id} isEditing={isEditing} label=\"Email\">\n {isEditing ? (\n <p className=\"text-sm text-brand-dark\">\n This email update will become your new username for signing in.\n </p>\n ) : (\n profile?.email\n )}\n {shouldDisable && <Skeleton className=\"h-10\" />}\n </FieldDisplay>\n );\n};\n\ninterface EmailFieldValues {\n email: string;\n}\n\nexport const EmailFieldEditComponent = () => {\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const initialValues = { email: profile?.email ?? '' };\n\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const [errorExists, setErrorExists] = useState(false);\n const dispatch = useDispatch<any>();\n\n const emailValidator_ = useMemo(() => {\n return sameEmailValidator(profile?.email || '');\n }, [profile?.email]);\n\n const onSubmit = async (\n values: EmailFieldValues,\n formikContext: FormikHelpers<{ email: string }>\n ) => {\n const payload = {\n ...profile,\n ...values,\n };\n\n try {\n const response = await updateUserThunk(payload as Family)(dispatch);\n if (response?.response?.status === StatusCode.Conflict) {\n formikContext.setFieldError(\n 'email',\n 'Sorry that user name / email address is not available.'\n );\n } else {\n setFieldToEdit('');\n }\n } catch (e) {\n // renders a common message declaring that it's unable to update information at this point\n setErrorExists(true);\n }\n };\n\n return (\n <div className=\"mt-5\">\n <Formik initialValues={initialValues} onSubmit={onSubmit} validateOnMount>\n {(helpers) => {\n return (\n <Form>\n <div className=\"flex sm:flex-row\">\n <div className=\"mb-5 sm:mr-5 w-full max-w-xs\">\n <FormikTextField\n name=\"email\"\n label=\"Email\"\n validate={emailValidator_}\n />\n </div>\n </div>\n {errorExists && (\n <p className=\"text-sm mb-3 text-error\">\n Unable to update your information at this time\n </p>\n )}\n <Btn disabled={!helpers.isValid} type=\"submit\">\n Save\n </Btn>\n </Form>\n );\n }}\n </Formik>\n </div>\n );\n};\n","import React, { useState, useContext, useEffect, useRef } from 'react';\nimport { Formik, Form } from 'formik';\nimport Skeleton from 'react-loading-skeleton';\nimport classnames from 'classnames';\nimport * as RadioGroup from '@radix-ui/react-radio-group';\nimport * as Label from '@radix-ui/react-label';\nimport { animated, useTransition } from 'react-spring';\n\nimport { EditableFieldsContext } from '../context';\n\nimport { FieldDisplay, EditableField, FieldProps } from './utils';\n\nimport { FormikTextField } from 'components/fields/FormikTextField';\nimport { Btn } from 'components/btn/Btn';\nimport {\n addressLine2Validator,\n addressLine1Validator,\n cityValidator,\n stateValidator,\n zipCodeValidator,\n} from 'common/modules/form-validation/validators';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { useAddresses } from 'common/hooks/useAddresses';\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\nimport { createStyles } from 'utils/createStyle';\nimport { useDefaultAddress } from 'common/hooks/useDefaultAddress';\nimport { FormikSelectField } from 'components/fields/FormikSelectField';\nimport { stateOptions } from 'common/modules/form-validation/utils/stateOptions';\nimport { addAddress, deleteAddress, editAddress } from 'common/api/crm/family/address';\nimport { LoadingOverlay, openLoader, closeLoader } from 'components/loading-overlay/LoadingOverlay';\nimport { useAlert } from 'modules/alerts';\nimport { SERVICE_UNAVAILABLE_MESSAGE } from 'config';\nimport { Modal, ModalFooter, ModalSecondaryBtn } from 'components/modal/Modal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExclamationTriangle } from '@fortawesome/pro-light-svg-icons';\nimport { colors } from 'styles/settings';\n\nconst styles = createStyles({\n defaultBox: [\n 'border border-1 text-center px-3 cursor-pointer rounded rounded-1 ml-2 sm:mt-0 mt-2',\n {\n lineHeight: '15px',\n height: 15,\n fontSize: 10,\n },\n ],\n defaultBoxActive: ['border-brand bg-brand text-white'],\n address: ['', { fontSize: 17 }],\n styledIndicator: [\n 'bg-black text-brand block',\n {\n width: 7,\n height: 7,\n borderRadius: '50%',\n backgroundColor: 'dodgerblue',\n },\n ],\n styledRadio: [\n 'align-middle mr-2 cursor-pointer',\n {\n appearance: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n padding: 0,\n borderRadius: '50%',\n boxShadow: 'inset 0 0 0 1px gainsboro',\n minWidth: 15,\n width: 15,\n height: 15,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& ~ &': { marginLeft: 5 },\n\n '&:focus': {\n outline: 'none',\n boxShadow: 'inset 0 0 0 1px dodgerblue, 0 0 0 1px dodgerblue',\n },\n },\n ],\n});\n\ninterface AddressEditableProps extends FieldProps {\n loading: boolean;\n addresses?: FamilyAddress[];\n addressBeingEdited?: string;\n setAddressBeingEdited: (_?: string) => void;\n createMode: boolean;\n setCreateMode: (_: boolean) => void;\n refreshAddresses: Function;\n}\n\ninterface AddressProps {\n address: FamilyAddress;\n isDefaultAddress: boolean | null;\n fieldBeingEdited: boolean;\n createModeOn: boolean;\n setDefaultAddress: (_: FamilyAddress) => Promise<boolean>;\n isAnyFieldBeingEdited: boolean;\n refreshAddresses: Function;\n}\n\nconst Address = ({\n address,\n isDefaultAddress,\n fieldBeingEdited,\n createModeOn,\n setDefaultAddress,\n refreshAddresses,\n}: AddressProps) => {\n const fullAddress = `${address.address1} ${address.address2}, ${address.city}, ${address.state} ${address.zipCode}`;\n const alert = useAlert();\n\n const setAddressAsDefault = async () => {\n // setDefaultAddress returns `true` on success and `false` for unsunccessful calls\n const successfulUpdate = await setDefaultAddress(address);\n\n if (!successfulUpdate) {\n alert({ message: SERVICE_UNAVAILABLE_MESSAGE });\n return;\n }\n\n refreshAddresses();\n };\n\n const AddressInfo = () => (\n <div className=\"flex sm:items-center items-start w-full sm:w-auto justify-between\">\n <p className={styles.address}>{fullAddress}</p>\n <p\n className={classnames(\n styles.defaultBox,\n isDefaultAddress ? styles.defaultBoxActive : null\n )}\n onClick={setAddressAsDefault}\n >\n Default\n </p>\n </div>\n );\n\n return (\n <div className=\"flex items-center mb-3 \">\n {fieldBeingEdited && !createModeOn && (\n <>\n <RadioGroup.Item\n id={address.id}\n value={address.id}\n className={styles.styledRadio}\n arial-label={`Selecting: ${fullAddress}`}\n >\n <RadioGroup.Indicator className={styles.styledIndicator} />\n </RadioGroup.Item>\n <Label.Root className=\"sm:w-auto w-full\">\n <AddressInfo />\n </Label.Root>\n </>\n )}\n {(!fieldBeingEdited || createModeOn) && <AddressInfo />}\n </div>\n );\n};\n\ninterface AddressListProps\n extends Pick<AddressEditableProps, 'id' | 'addressBeingEdited' | 'setAddressBeingEdited'> {\n addresses: FamilyAddress[];\n createModeOn: boolean;\n refreshAddresses: Function;\n}\n\nexport const AddressList = ({\n id,\n addresses,\n setAddressBeingEdited,\n addressBeingEdited,\n createModeOn,\n refreshAddresses,\n}: AddressListProps) => {\n const { isDefaultAddress, refreshDefaultAddress, setDefaultAddress } = useDefaultAddress();\n const { fieldToEdit } = useContext(EditableFieldsContext);\n\n useEffect(() => {\n refreshDefaultAddress();\n }, [refreshDefaultAddress]);\n\n if (addresses.length === 0) {\n return <div>No Addresses found.</div>;\n }\n\n const onValueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n const selectedAddress = addresses.find((address: FamilyAddress) => address.id === value);\n setAddressBeingEdited(selectedAddress?.id ?? undefined);\n };\n\n return (\n <div>\n <RadioGroup.Root\n tabIndex={undefined}\n value={addressBeingEdited}\n onValueChange={onValueChange}\n >\n {addresses.map((address: FamilyAddress) => (\n <Address\n key={address.id}\n address={address}\n isDefaultAddress={isDefaultAddress(address)}\n fieldBeingEdited={fieldToEdit === id}\n isAnyFieldBeingEdited={Boolean(fieldToEdit)}\n createModeOn={createModeOn}\n setDefaultAddress={setDefaultAddress}\n refreshAddresses={refreshAddresses}\n />\n ))}\n </RadioGroup.Root>\n </div>\n );\n};\n\nexport const AddressFieldDisplay = (props: AddressEditableProps) => {\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n if (props.loading) {\n return <Skeleton className=\"h-10\" />;\n }\n\n const addNewAddress = () => {\n setFieldToEdit(props.id);\n props.setCreateMode(true);\n };\n\n const onToggle = () => {\n props.setAddressBeingEdited('');\n props.setCreateMode(false);\n };\n\n return (\n <FieldDisplay label=\"Address\" onToggle={onToggle} {...props}>\n <AddressList\n id={props.id}\n addresses={props.addresses || []}\n addressBeingEdited={props.addressBeingEdited}\n setAddressBeingEdited={props.setAddressBeingEdited}\n createModeOn={props.createMode}\n refreshAddresses={props.refreshAddresses}\n />\n {!props.isEditing && (\n <p onClick={addNewAddress} className=\"underline text-brand text-xs cursor-pointer\">\n Add Address\n </p>\n )}\n </FieldDisplay>\n );\n};\n\ninterface AddressFields {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zipCode: string;\n}\n\nexport const AddressFieldEditComponent = (props: AddressEditableProps) => {\n const address =\n (props.addresses as FamilyAddress[]).find(\n (address_: FamilyAddress) => address_.id === props.addressBeingEdited\n ) || null;\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const [errorExists, setErrorExists] = useState(false);\n const ref = useRef<LoadingOverlay>(null);\n const { isDefaultAddress, refreshDefaultAddress } = useDefaultAddress();\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n\n useEffect(() => {\n refreshDefaultAddress();\n }, [refreshDefaultAddress, props.addresses]);\n\n const showForm = props.createMode || (props.isEditing && props.addressBeingEdited);\n const transitions = useTransition(showForm, {\n from: { opacity: 0, transform: 'translate2d(0%, 0%)', maxHeight: '0px' },\n enter: { opacity: 1, transform: 'translate2d(0%, 100%)', maxHeight: '1000px' },\n leave: { opacity: 0, transform: 'translate2d(0%, 0%)', maxHeight: '0px' },\n });\n\n const initialValues = {\n id: '',\n address1: '',\n address2: '',\n city: '',\n state: '',\n zipCode: '',\n ...address,\n };\n\n const onDeleteClicked = () => {\n setShowDeleteModal(true);\n };\n\n const onDeleteDismiss = () => {\n setShowDeleteModal(false);\n };\n\n const doDeleteAddress = async () => {\n if (!address) {\n return;\n }\n try {\n openLoader(ref.current);\n await deleteAddress(address.id);\n closeLoader(ref.current);\n props.refreshAddresses();\n onDeleteDismiss();\n setFieldToEdit('');\n } catch (e) {\n setErrorExists(true);\n }\n };\n\n const onSubmit = async (values: AddressFields) => {\n const payload = {\n ...values,\n id: initialValues.id || '',\n firstName: profile?.firstName,\n lastName: profile?.lastName,\n phoneNumber: '', // we don't have access of the phoneNumber, where should we get it from?\n };\n\n try {\n openLoader(ref.current);\n await (props.createMode\n ? addAddress(payload as FamilyAddress)\n : editAddress(payload as FamilyAddress));\n closeLoader(ref.current);\n props.refreshAddresses();\n props.setCreateMode(false);\n setFieldToEdit('');\n props.setAddressBeingEdited(undefined);\n } catch (e) {\n setErrorExists(true);\n }\n };\n\n const getAddressToShowOnDelete = () => {\n if (!address) {\n return '';\n }\n const { address1, address2, city, state, zipCode } = address;\n return `${address1}${address2 ? `, ${address2}, ` : ', '}${city}, ${state} ${zipCode}`;\n };\n\n return transitions(\n (styles_, item) =>\n item && (\n <animated.div style={styles_} className=\"mt-5\">\n <Formik enableReinitialize initialValues={initialValues} onSubmit={onSubmit}>\n <Form>\n <div className=\"flex flex-col mb-5\">\n <div className=\"mb-5 flex flex-row\">\n <div className=\"mr-2 flex-1\">\n <FormikTextField\n name=\"address1\"\n label=\"Address\"\n validate={addressLine1Validator}\n />\n </div>\n <div className=\"w-16\">\n <FormikTextField\n name=\"address2\"\n label=\"Ste/Apt/Attn\"\n validate={addressLine2Validator}\n />\n </div>\n </div>\n <div className=\"flex flex-row mb-5\">\n <div className=\"flex-1 mr-2\">\n <FormikTextField\n name=\"city\"\n label=\"City\"\n validate={cityValidator}\n />\n </div>\n <div className=\"w-16\">\n <FormikSelectField\n label=\"State\"\n name=\"state\"\n validate={stateValidator}\n >\n <option value=\"\" />\n {stateOptions.map((o) => (\n <option key={o.value}>{o.value}</option>\n ))}\n </FormikSelectField>\n </div>\n </div>\n <div>\n <FormikTextField\n label=\"Zip\"\n name=\"zipCode\"\n validate={zipCodeValidator}\n />\n </div>\n </div>\n {errorExists && (\n <p className=\"text-sm mb-3 text-error\">\n Unable to update your information at this time\n </p>\n )}\n <div className=\"flex\">\n {address ? (\n <Btn\n className=\"mr-2\"\n isSecondary\n disabled={!!address && !!isDefaultAddress(address)}\n type=\"button\"\n onClick={onDeleteClicked}\n >\n Delete\n </Btn>\n ) : (\n <Btn\n isSecondary\n type=\"button\"\n className=\"mr-2\"\n onClick={() => setFieldToEdit('')}\n >\n Cancel\n </Btn>\n )}\n <Btn type=\"submit\">Save</Btn>\n </div>\n </Form>\n </Formik>\n <Modal title=\"\" isOpen={showDeleteModal} onClose={onDeleteDismiss}>\n <div className=\"flex flex-col items-center\">\n <FontAwesomeIcon\n color={colors.error}\n icon={faExclamationTriangle}\n size=\"2x\"\n />\n <div className=\"mt-6 text-center w-auto sm:w-9/12 \">\n <p className=\"text-2xl font-semibold mb-4\">\n Are you sure you want to delete this address?\n </p>\n <p className=\"text-grey-2 font-regular text-sm\">\n {getAddressToShowOnDelete()}\n </p>\n </div>\n </div>\n <ModalFooter>\n <Btn type=\"button\" onClick={doDeleteAddress} className=\"px-2\">\n Yes\n </Btn>\n <ModalSecondaryBtn isSecondary onClick={onDeleteDismiss}>\n Cancel\n </ModalSecondaryBtn>\n </ModalFooter>\n </Modal>\n </animated.div>\n )\n );\n};\n\n// NOTE: probably better to lift the state into a context to share state much better.\n// For now it'll do.\nexport const AddressEditableField = ({ fieldToEdit }: { fieldToEdit: string }) => {\n const [addressBeingEdited, setAddressBeingEdited] = useState<string | undefined>();\n const [createMode, setCreateMode] = useState<boolean>(false);\n const { addresses, refreshAddresses } = useAddresses();\n const [loading, setIsLoading] = useState<boolean>(true);\n\n useEffect(() => {\n refreshAddresses().finally(() => {\n setIsLoading(false);\n });\n }, [refreshAddresses, createMode]);\n\n return (\n <EditableField<AddressEditableProps>\n id=\"addressField\"\n className=\"mb-8\"\n editMode={Boolean(fieldToEdit)}\n isEditing={fieldToEdit === 'addressField'}\n FieldDisplayComponent={AddressFieldDisplay}\n FieldEditComponent={AddressFieldEditComponent}\n addressBeingEdited={addressBeingEdited}\n setAddressBeingEdited={setAddressBeingEdited}\n addresses={addresses || []}\n loading={loading}\n createMode={createMode}\n setCreateMode={setCreateMode}\n refreshAddresses={refreshAddresses}\n />\n );\n};\n","import React, { useState, useContext } from 'react';\nimport { Formik, Form } from 'formik';\nimport { useDispatch } from 'react-redux';\n\nimport { EditableFieldsContext } from '../context';\n\nimport { FieldDisplay } from './utils';\n\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport {\n fundraisingGroupValidator,\n studentNameValidator,\n} from 'common/modules/form-validation/validators';\nimport { FormikTextField } from 'components/fields/FormikTextField';\nimport { updateUserThunk } from 'common/features/store/duck/home/duck';\nimport { Family } from 'common/api/crm/models/Family';\nimport { Btn } from 'components/btn/Btn';\n\ninterface FunraisingForFieldProps {\n isEditing: boolean;\n id: string;\n}\n\nexport const FundRaisingField = (props: FunraisingForFieldProps) => {\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const textSeparator = profile?.studentName && profile?.fundraisingGroup ? ' - ' : '';\n const text = `${profile?.studentName || ''}${textSeparator}${profile?.fundraisingGroup || ''}`;\n return (\n <FieldDisplay\n id={props.id}\n label=\"Who are you fundraising for?\"\n isEditing={props.isEditing}\n >\n {text}\n </FieldDisplay>\n );\n};\n\nexport const FundRaisingEditComponent = () => {\n const dispatch = useDispatch<any>();\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const [errorExists, setErrorExists] = useState<boolean>(false);\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const initialValues = {\n studentName: profile?.studentName ?? '',\n fundraisingGroup: profile?.fundraisingGroup ?? '',\n };\n\n const onSubmit = async (values: { studentName: string; fundraisingGroup: string }) => {\n const payload = {\n ...profile,\n ...values,\n };\n\n try {\n await updateUserThunk(payload as Family)(dispatch);\n setFieldToEdit('');\n } catch (e) {\n setErrorExists(true);\n }\n };\n\n return (\n <div className=\"mt-5\">\n <Formik initialValues={initialValues} onSubmit={onSubmit}>\n <Form>\n <div className=\"flex flex-col sm:flex-row\">\n <div className=\"mb-5 sm:mr-5\">\n <FormikTextField\n name=\"studentName\"\n label=\"Full Name\"\n validate={studentNameValidator}\n />\n </div>\n\n <div className=\"mb-5\">\n <FormikTextField\n name=\"fundraisingGroup\"\n label=\"Classroom/Group\"\n validate={fundraisingGroupValidator}\n />\n </div>\n </div>\n {errorExists && (\n <p className=\"text-sm mb-3 text-error\">\n Unable to update your information at this time\n </p>\n )}\n <Btn type=\"submit\">Save</Btn>\n </Form>\n </Formik>\n </div>\n );\n};\n","import { faCheckCircle } from '@fortawesome/pro-regular-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { AccountDashboard } from 'common/api/contentful/models/AccountDashboard';\nimport { useFromContentful } from 'common/api/contentful/utils';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { Btn } from 'components/btn/Btn';\nimport React, { useMemo } from 'react';\n\nexport const SuccessMessage = ({ orgName, onClose }: { orgName: string; onClose: () => void }) => {\n const accountDashboard = useFromContentful<AccountDashboard>('accountDashboard');\n const successTexts = useMemo(\n () => accountDashboard?.content?.items[0].fields,\n [accountDashboard]\n );\n\n if (accountDashboard.isLoading) {\n return (\n <div className=\"p-16 flex self-center\">\n <ActivityIndicator width=\"80px\" />\n </div>\n );\n }\n return (\n <div className=\"p-4 pt-0\">\n <div className=\"flex justify-center mb-4\">\n <FontAwesomeIcon\n className=\"text-success font-semibold text-5xl\"\n icon={faCheckCircle}\n />\n </div>\n <div className=\"text-base text-brand text-center\">\n <div className=\"text-22px sm:text-29px font-semibold\">\n {successTexts?.joinSuccessTitle}\n </div>\n <div className=\"text-lg text-grey-2 flex flex-col items-center mt-2\">\n <div>\n {successTexts?.joinSuccessSubtitle} {orgName}\n </div>\n </div>\n {successTexts?.joinOrgSuccessBody ? (\n <div className=\"text-lg text-grey-2 flex flex-col items-center mt-10\">\n {successTexts?.joinOrgSuccessBody}\n </div>\n ) : null}\n {successTexts?.joinOrgSuccessImage.fields.file.url ? (\n <div className=\"text-lg text-grey-2 flex flex-col items-center mt-2\">\n <img\n className=\"max-w-lg max-h-72\"\n src={successTexts?.joinOrgSuccessImage.fields.file.url}\n />\n </div>\n ) : null}\n {successTexts?.joinOrgSuccessTextLinkCopy ? (\n <div className=\"text-lg text-grey-2 flex flex-col items-center mt-10\">\n <Btn onClick={onClose}>{successTexts?.joinOrgSuccessTextLinkCopy}</Btn>\n </div>\n ) : null}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { SuccessMessage } from './SuccessMessage';\n\nimport { createStyles } from 'utils/createStyle';\nimport { Btn } from 'components/btn/Btn';\nimport { EASE_OUT_QUART, fadeIn, fadeOut } from 'styles/easing';\nimport {\n addUserToOrgThunk,\n resetOrgJoin,\n selectOrgJoinAsyncState,\n} from 'common/features/store/duck/home/duck';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport { TextField } from 'components/fields/TextField';\n\nconst styles = createStyles({\n popover: [\n 'border border-solid border-grey-5 bg-white px-4 py-3 duration-200',\n {\n '&[data-state=\"open\"]': { animation: `${fadeIn} 200ms ${EASE_OUT_QUART}` },\n '&[data-state=\"closed\"]': { animation: `${fadeOut} 200ms ${EASE_OUT_QUART}` },\n },\n ],\n container: [\n 'flex flex-col items-top w-full px-2 md:px-10',\n {\n maxWidth: '650px',\n },\n ],\n title: ['font-bold pb-2 md:px-4 px-0 text-xl md:text-3xl', { lineHeight: '35px' }],\n subTitle: ['text-center text-grey-1 text-md', { lineHeight: '24px' }],\n buttonCancel: ['text-brand underline mt-2 font-semibold', { height: 40 }],\n});\n\ntype JoinAnotherOrganizationContentProps = {\n onFinish: () => void;\n};\n\nconst JoinAnotherOrganizationContent = ({ onFinish }: JoinAnotherOrganizationContentProps) => {\n const [enrollmentCode, setEnrollmentCode] = useState('');\n const dispatch = useDispatch<any>();\n const { loading, error, lastUpdate, args } = useSelector(selectOrgJoinAsyncState);\n const newOrgName = args && args[0];\n const [displaySuccess, setDisplaySuccess] = useState<boolean>(false);\n\n const clickHandler = () => {\n dispatch(addUserToOrgThunk(enrollmentCode));\n };\n\n const onCancel = () => {\n onFinish();\n dispatch(resetOrgJoin(null));\n };\n\n /**\n * Effect: When loading is complete and we have a lastUpdate timestamp\n * 1) Display success message.\n * 2) Set a timer for 2 seconds that will hide the success message, reset the orgJoin state\n * and call the onFinish callback which refreshes the parent component and fetches a current\n * list of orgs containing the org that was just joined.\n */\n useEffect(() => {\n if (!loading && lastUpdate > 0 && !error) {\n setDisplaySuccess(true);\n }\n }, [loading, lastUpdate, error]);\n\n /**\n * Effect: clears enrollment code input on error\n */\n useEffect(() => {\n if (error) {\n setEnrollmentCode('');\n }\n }, [error]);\n\n if (displaySuccess) {\n return <SuccessMessage orgName={newOrgName} onClose={() => onCancel()} />;\n }\n\n return (\n <div className={styles.container}>\n <div className=\"flex flex-col items-center mb-10 \">\n <h1 className={styles.title}>Join another organization</h1>\n <h4 className={styles.subTitle}>\n Enter enrollment code to join another organization\n </h4>\n </div>\n <div className=\"px-0\">\n <TextField\n error={error as string}\n label=\"Enrollment Code\"\n className=\"w-full border-grey-3\"\n errorClassName=\"text-xs pt-2\"\n value={enrollmentCode}\n onChange={(e) => {\n setEnrollmentCode(e.target.value);\n }}\n />\n {!error && (\n <span className=\"text-grey-1 font-normal text-xs pt-1\">\n Organization coordinator has the enrollment code.\n </span>\n )}\n <div className=\"flex flex-col items-center mt-12\">\n {loading && (\n <div className=\"flex justify-end\">\n <ActivityIndicator />\n </div>\n )}\n {!loading && (\n <>\n <Btn\n disabled={!enrollmentCode}\n type=\"button\"\n className=\"w-full md:w-32 max-w-xs md:py-1.5\"\n onClick={clickHandler}\n >\n Join\n </Btn>\n <button\n type=\"button\"\n className={styles.buttonCancel}\n onClick={onCancel}\n >\n Cancel\n </button>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n\ninterface JoinAnotherOrganizationProps {\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n orgJoinCompleteCallback: Function;\n}\n\nexport const JoinAnotherOrganization = ({\n disabled = false,\n className = 'hidden md:block',\n children,\n orgJoinCompleteCallback,\n}: React.PropsWithChildren<JoinAnotherOrganizationProps>) => {\n const [open, setOpen] = useState<boolean>(false);\n const dispatch = useDispatch<any>();\n\n const onClick = () => {\n if (!disabled) {\n setOpen(true);\n }\n };\n\n const orgJoinComplete = (setOpenState: Function) => {\n setOpenState(false);\n orgJoinCompleteCallback();\n };\n\n /**\n * Effect: when the flyout is closed, reset the org join state\n * which resets the error state of the form.\n */\n useEffect(() => {\n if (!open) {\n dispatch(resetOrgJoin(null));\n }\n }, [dispatch, open]);\n\n return (\n <div className=\"inline-block\">\n <div className={className}>\n <div className=\"block\">\n <span className=\"cursor-pointer\" onClick={onClick}>\n {children}\n </span>\n </div>\n <Modal\n title=\"\"\n isOpen={open}\n onClose={() => setOpen(false)}\n showCloseButton\n size={[ModalSize.EXTRA_SMALL, ModalSize.MEDIUM]}\n >\n <JoinAnotherOrganizationContent onFinish={() => orgJoinComplete(setOpen)} />\n </Modal>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState, ReactNode } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCheckCircle } from '@fortawesome/pro-light-svg-icons';\n\nimport { createStyles } from 'utils/createStyle';\nimport { Btn } from 'components/btn/Btn';\nimport { FormBtn } from 'components/form-btn';\nimport { EASE_OUT_QUART, fadeIn, fadeOut } from 'styles/easing';\nimport { Radio, RadioOption } from 'components/radio/Radio';\nimport { OrganizationMembership } from 'common/api/crm/models/OrganizationMembership';\nimport { removeUserFromOrgThunk } from 'common/features/store/duck/home/duck';\nimport { useDispatch } from 'react-redux';\nimport { StatusCode } from 'common/api/config';\nimport { useAlert } from 'modules/alerts';\nimport { Modal, ModalSize } from 'components/modal/Modal';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport { Alert, AlertType } from 'components/alerts/sticky/Alert';\n\nconst styles = createStyles({\n popover: [\n 'border border-solid border-grey-5 bg-white px-4 py-3 duration-200',\n {\n '&[data-state=\"open\"]': { animation: `${fadeIn} 200ms ${EASE_OUT_QUART}` },\n '&[data-state=\"closed\"]': { animation: `${fadeOut} 200ms ${EASE_OUT_QUART}` },\n },\n ],\n container: ['flex flex-col items-top w-full whitespace-normal ', {}],\n back: ['absolute left-0 top-0 ml-1 mt-1 text-xs text-brand'],\n btnCancelLeave: 'w-full text-brand underline font-semibold',\n});\n\nconst SuccessMessage = ({ orgName }: { orgName: string }) => {\n return (\n <div className=\"p-4\">\n <div className=\"flex justify-center mb-4\">\n <FontAwesomeIcon\n className=\"text-success font-semibold text-5xl\"\n icon={faCheckCircle}\n />\n </div>\n <div className=\"text-base text-center\">\n <div className=\"text-brand-dark text-22px sm:text-29px font-semibold\">Success</div>\n <div className=\"text-lg text-grey-2 flex flex-col items-center mt-5\">\n <p>You have successfully left</p>\n <p>{orgName}</p>\n </div>\n </div>\n </div>\n );\n};\n\nexport interface LeaveOrganizationProps {\n defaultOrganization: string;\n memberships: OrganizationMembership[];\n children?: ReactNode;\n}\n\ntype LeaveOrganizationContentProps = LeaveOrganizationProps & {\n onFinish: () => void;\n confirmedOrganization: string;\n setConfirmedOrganization: (value: string) => void;\n setSuccessfullyLeftOrg: (value: boolean) => void;\n};\n\nconst LeaveOrganizationContent = ({\n onFinish,\n defaultOrganization,\n memberships,\n confirmedOrganization,\n setConfirmedOrganization,\n setSuccessfullyLeftOrg,\n}: LeaveOrganizationContentProps) => {\n const [selectedOrganization, setSelectedOrganization] = useState<RadioOption | null>(null);\n const [leaveOrganization, setLeaveOrganization] = useState('');\n const [isLeavingOrg, setIsLeavingOrg] = useState<boolean>(false);\n const dispatch = useDispatch<any>();\n const alert = useAlert();\n\n const options = useMemo(() => {\n return memberships.reduce((acc: RadioOption[], m: OrganizationMembership) => {\n const isDefaultOrganization = m.organization.id === defaultOrganization;\n if (isDefaultOrganization) {\n // special case push to head of the list\n return [\n {\n text: m.organization.name + ' - Default',\n value: m.organization.id,\n disabled: true,\n },\n ...acc,\n ];\n } else {\n acc.push({\n text: m.organization.name,\n value: m.organization.id,\n disabled: !m.isActive,\n } as RadioOption);\n }\n return acc;\n }, []);\n }, [memberships, defaultOrganization]);\n\n const cancel = () => {\n onFinish();\n };\n\n const confirmLeave = async () => {\n setIsLeavingOrg(true);\n const response = await removeUserFromOrgThunk(confirmedOrganization)(dispatch);\n if (response.response?.status !== StatusCode.Ok) {\n alert({ message: 'Unable to leave organization try again later.' });\n } else {\n setLeaveOrganization(confirmedOrganization);\n setSuccessfullyLeftOrg(true);\n }\n setIsLeavingOrg(false);\n };\n\n useEffect(() => {\n if (confirmedOrganization && leaveOrganization) {\n const timeout = setTimeout(() => onFinish(), 3000);\n return () => clearTimeout(timeout);\n }\n }, [confirmedOrganization, leaveOrganization, onFinish]);\n\n return (\n <div className={styles.container}>\n {!leaveOrganization && <Title />}\n {/* STEP 1: Choose Organization */}\n {!leaveOrganization && (\n <div>\n <div className=\"px-1\">\n <Radio\n options={options}\n value={selectedOrganization?.value ?? ''}\n onChange={(opt) => setSelectedOrganization(opt)}\n extraStyles=\"text-sm text-grey-1 font-normal\"\n />\n {!confirmedOrganization && (\n <div className=\"text-center md:text-right mt-12\">\n <Btn\n disabled={!selectedOrganization}\n type=\"button\"\n className=\"mx-auto block w-32 md:w-auto max-w-xs md:px-8 md:py-1 mb-5\"\n onClick={() =>\n setConfirmedOrganization(selectedOrganization?.value ?? '')\n }\n >\n Leave\n </Btn>\n <button\n type=\"button\"\n className={styles.btnCancelLeave}\n onClick={cancel}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* STEP 2: Confirm leave from Organization */}\n {confirmedOrganization && !leaveOrganization && (\n <DeletionConfirmationAlert\n isSubmitting={isLeavingOrg}\n orgName={selectedOrganization?.text ?? ''}\n onConfirm={confirmLeave}\n cancel={cancel}\n />\n )}\n {/* STEP 3: Leave Organization Successfully */}\n {confirmedOrganization && leaveOrganization && (\n <div>\n <SuccessMessage orgName={selectedOrganization?.text ?? ''} />\n </div>\n )}\n </div>\n );\n};\n\nconst DeletionConfirmationAlert = ({\n orgName,\n onConfirm,\n cancel,\n isSubmitting,\n}: {\n orgName: string;\n onConfirm: () => void;\n cancel: () => void;\n isSubmitting: boolean;\n}) => {\n return (\n <div className=\"mt-8\">\n <Alert type={AlertType.ERROR} title={`Are you sure you want to leave ${orgName}`}>\n <p className=\"text-grey-2 text-xs\">\n Order history with this organization will still be available but you’ll no\n longer be associated or able to apply earnings.\n </p>\n <div className=\"mx-auto w-max sm:w-auto flex items-center flex-col-reverse gap-5 sm:flex-row mt-5 sm:ml-14\">\n <button\n disabled={isSubmitting}\n className=\"text-lg text-brand font-semibold underline\"\n onClick={cancel}\n >\n No, Cancel\n </button>\n <FormBtn isSubmitting={isSubmitting} onClick={onConfirm}>\n Yes, Leave\n </FormBtn>\n </div>\n </Alert>\n </div>\n );\n};\n\nexport const LeaveOrganization = ({ defaultOrganization, memberships }: LeaveOrganizationProps) => {\n const [open, setOpen] = useState(false);\n const [confirmedOrganization, setConfirmedOrganization] = useState('');\n const [successfullyLeftOrg, setSuccessfullyLeftOrg] = useState<boolean>(false);\n\n const reset = () => {\n setOpen(false);\n setConfirmedOrganization('');\n setSuccessfullyLeftOrg(false);\n };\n\n const onFinish = () => {\n reset();\n };\n\n return (\n <div className=\"inline-block\">\n <div>\n <p\n className=\"leave_org_cta text-brand text-xs underline font-semibold cursor-pointer\"\n onClick={() => setOpen(true)}\n >\n Leave Organization\n </p>\n <Modal\n title=\"\"\n isOpen={open}\n onClose={() => reset()}\n showCloseButton={!successfullyLeftOrg}\n size={[\n ModalSize.EXTRA_SMALL,\n successfullyLeftOrg ? ModalSize.SMALL : ModalSize.MEDIUM,\n ]}\n >\n <LeaveOrganizationContent\n onFinish={onFinish}\n defaultOrganization={defaultOrganization}\n memberships={memberships}\n confirmedOrganization={confirmedOrganization}\n setConfirmedOrganization={setConfirmedOrganization}\n setSuccessfullyLeftOrg={setSuccessfullyLeftOrg}\n />\n </Modal>\n </div>\n </div>\n );\n};\n\nconst Title = () => {\n const classes = useStyles();\n return (\n <div className={classes.container}>\n <h1 className={classes.title}>Select an organization to leave</h1>\n <h4 className={classes.subTitle}>You cannot leave your default organization</h4>\n </div>\n );\n};\n\nconst useStyles = () => {\n const [styles, setStyles] = useState(\n createStyles({\n container: ['text-center flex gap-2 flex-col mb-3'],\n title: ['font-semibold text-brand-dark', { fontSize: 29 }],\n subTitle: ['text-grey-2'],\n })\n );\n\n const query = useMemo(\n () => ({\n '(max-width: 648px)': () => {\n setStyles(\n createStyles({\n container: ['text-center flex gap-2 flex-col mb-3'],\n title: ['font-semibold text-brand-dark', { fontSize: 22 }],\n subTitle: ['text-grey-2', { fontSize: 16, lineHeight: '22px' }],\n })\n );\n },\n '(min-width: 647px)': () => {\n setStyles(\n createStyles({\n container: ['text-center flex gap-2 flex-col mb-3'],\n title: ['font-semibold text-brand-dark', { fontSize: 29 }],\n subTitle: ['text-grey-2', { fontSize: 17, lineHeight: '24px' }],\n })\n );\n },\n }),\n []\n );\n\n useMediaQueries(query);\n return styles;\n};\n","import React, { useContext, useEffect, useMemo } from 'react';\nimport classnames from 'classnames';\n\nimport { JoinAnotherOrganization } from '../../JoinAnotherOrganization';\nimport { LeaveOrganization } from '../../LeaveOrganization';\nimport { EditableFieldsContext } from '../context';\n\nimport { OrganizationMembership } from 'common/api/crm/models/OrganizationMembership';\nimport { createStyles } from 'utils/createStyle';\nimport { useRootSelector, FeaturesState } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport { Value } from '@firebase/remote-config';\nimport { useSelector } from 'react-redux';\n\nconst styles = createStyles({\n container: ['flex flex-col'],\n enabledContainer: ['opacity-100'],\n disabledContainer: ['opacity-20'],\n defaultBox: [\n 'border border-1 text-center px-3 rounded rounded-1 ml-2',\n {\n lineHeight: '15px',\n height: 15,\n fontSize: 10,\n },\n ],\n defaultBoxActive: ['border-brand bg-brand text-white'],\n organization: ['', { fontSize: 17 }],\n label: [\n 'text-grey-2 mb-2',\n {\n fontSize: '14px',\n },\n ],\n});\n\nconst useOrgMemberships = () => {\n const homeDetails = useSelector((state: FeaturesState) => state.store.home.homeDetails);\n const memberships = homeDetails?.organizations;\n\n return useMemo(() => {\n return Object.values(memberships || {}).filter(\n ({ isActive }: OrganizationMembership) => isActive\n );\n }, [memberships]);\n};\n\nexport const DefaultOrgField = () => {\n const memberships = useOrgMemberships();\n const defaultOrgId = useRootSelector(\n (state: RootState) => state.store.home.homeDetails?.defaultOrganization?.id\n );\n const { fieldToEdit: isAnyFieldBeingEdited } = useContext(EditableFieldsContext);\n const disableLeaveOrganization = useFirebaseConfigValues<boolean>(\n 'disable_leave_organization',\n false,\n (value: Value) => value.asBoolean()\n );\n\n const orgJoinComplete = () => null;\n\n // reassign the #hash to move the focus to the organizations area.\n useEffect(() => {\n if (location.hash === '#organizations') {\n location.hash = '';\n location.hash = '#organizations';\n }\n }, []);\n\n return (\n <div\n id=\"organizations\"\n className={classnames(\n styles.container,\n isAnyFieldBeingEdited ? styles.disabledContainer : styles.enabledContainer\n )}\n >\n <label className={styles.label}>Your Organizations</label>\n <div className=\"text-lg\">\n {memberships.map((membership: OrganizationMembership) => (\n <div className=\"flex items-center\" key={membership.organization.id}>\n <p className={styles.organization}>{membership.organization.name}</p>\n <p\n className={classnames(\n styles.defaultBox,\n defaultOrgId === membership.organization.id\n ? styles.defaultBoxActive\n : 'hidden'\n )}\n >\n Default\n </p>\n </div>\n ))}\n </div>\n <div>\n <JoinAnotherOrganization\n disabled={Boolean(isAnyFieldBeingEdited)}\n className=\"block relative\"\n orgJoinCompleteCallback={orgJoinComplete}\n >\n <span className=\"join_another_org_cta text-brand text-xs font-bold underline\">\n Join another organization\n </span>\n </JoinAnotherOrganization>\n {!disableLeaveOrganization && (\n <>\n <span className=\"text-grey-3\"> | </span>\n <LeaveOrganization\n defaultOrganization={defaultOrgId as string}\n memberships={memberships}\n >\n <span className=\"text-brand text-xs font-bold underline\">\n Leave an organization\n </span>\n </LeaveOrganization>\n </>\n )}\n </div>\n </div>\n );\n};\n","import React, { useCallback } from 'react';\nimport { LabelRenderer } from './utils';\nimport { Link } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { updateEnrollmentProgress } from 'common/api/crm/organization/enrollment';\nimport { ProgressState } from 'common/api/crm/enums/ProgressState';\n\nexport interface CreateOrganizationFieldProps {\n editMode: boolean;\n}\n\nexport const CreateOrganizationField = (props: CreateOrganizationFieldProps) => {\n const onClick = useCallback(async () => {\n // sets the orgEnrollmentLog to redirect to the OrgCreation Step\n await updateEnrollmentProgress({\n state: ProgressState.EnrollmentStartedExistingAccount,\n version: 1,\n });\n }, []);\n\n const getOpacity = () => (props.editMode ? 'opacity-20' : 'opacity-100');\n\n return (\n <div className={`flex flex-col mt-8 mb-4 ${getOpacity()}`}>\n <LabelRenderer label=\"Interested in starting your own organization?\" />\n <Link to={`${Routes.StartProgramContinue}?newOrgEnrollment=true`} onClick={onClick}>\n Start new program\n </Link>\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { FieldDisplay } from './utils';\n\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { getAccount } from 'common/api/users/service';\n\nexport const UserNameFieldDisplay = ({ isEditing, id }: { isEditing: boolean; id: string }) => {\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const shouldDisable = !profile?.email;\n const [userName, setUserName] = useState<string | null>(null);\n\n const fetchUsername = useCallback(async () => {\n const res = await getAccount();\n if (res.data) {\n setUserName(res.data.username);\n }\n }, []);\n\n useEffect(() => {\n fetchUsername();\n }, [fetchUsername, profile?.email]);\n\n return (\n <FieldDisplay\n id={id}\n label=\"Username\"\n isEditing={isEditing}\n renderers={{\n ToggleEditViewRenderer: () => null,\n }}\n >\n {userName || <Skeleton className=\"h-10\" />}\n {shouldDisable && <Skeleton className=\"h-10\" />}\n </FieldDisplay>\n );\n};\n","import React, { useContext } from 'react';\n\nimport { EditableFieldsView, EditableFieldsContext } from '../context';\n\nimport { NameFieldDisplay, NameFieldEditComponent } from './NameField';\nimport { EmailFieldDisplay, EmailFieldEditComponent } from './EmailField';\nimport { AddressEditableField } from './AddressField';\nimport { FundRaisingField, FundRaisingEditComponent } from './FundRaisingField';\nimport { DefaultOrgField } from './DefaultOrgField';\nimport { CreateOrganizationField } from './CreateOrganizationField';\nimport { EditableField, FieldProps } from './utils';\nimport { PromotionalNotificationsField } from './PromotionalNotificationsField';\nimport { UserNameFieldDisplay } from './UserNameField';\n\nconst PersonalSettingsFields = () => {\n const { fieldToEdit } = useContext(EditableFieldsContext);\n return (\n <div>\n <EditableField<FieldProps>\n id=\"namefield\"\n className=\"mb-8\"\n editMode={Boolean(fieldToEdit)}\n isEditing={fieldToEdit === 'namefield'}\n FieldDisplayComponent={NameFieldDisplay}\n FieldEditComponent={NameFieldEditComponent}\n />\n <EditableField<FieldProps>\n id=\"usernamefield\"\n className=\"mb-8\"\n editMode={Boolean(fieldToEdit)}\n isEditing={fieldToEdit === 'username'}\n FieldDisplayComponent={UserNameFieldDisplay}\n FieldEditComponent={() => null}\n />\n <EditableField<FieldProps>\n id=\"emailfield\"\n className=\"mb-8\"\n editMode={Boolean(fieldToEdit)}\n isEditing={fieldToEdit === 'emailfield'}\n FieldDisplayComponent={EmailFieldDisplay}\n FieldEditComponent={EmailFieldEditComponent}\n />\n <AddressEditableField fieldToEdit={fieldToEdit} />\n <EditableField<FieldProps>\n id=\"fundraising-for\"\n className=\"mb-8\"\n editMode={Boolean(fieldToEdit)}\n isEditing={fieldToEdit === 'fundraising-for'}\n FieldDisplayComponent={FundRaisingField}\n FieldEditComponent={FundRaisingEditComponent}\n />\n <DefaultOrgField />\n <CreateOrganizationField editMode={Boolean(fieldToEdit)} />\n </div>\n );\n};\n\nexport const PersonalSettingsContent = () => {\n return (\n <EditableFieldsView>\n <PersonalSettingsFields />\n </EditableFieldsView>\n );\n};\n","import { faExternalLink } from '@fortawesome/pro-light-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { useEffect, useMemo } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { getAccount } from 'common/api/users/service';\nimport { getPhonesByUser } from 'common/api/users/twofactor/phone';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { useAlert } from 'modules/alerts';\nimport { colors } from 'styles/settings';\nimport { createStyles } from 'utils/createStyle';\n\nconst styles = createStyles({\n title: 'text-xs text-grey-1 font-bold',\n title2: 'flex items-center text-xs',\n defaultBtn: [\n 'text-brand border border-brand',\n {\n fontSize: '10px',\n borderRadius: '3px',\n padding: '0 10px',\n lineHeight: '15px',\n \"[data-selected='true']\": {\n backgroundColor: colors.brandDark,\n color: 'white',\n },\n },\n ],\n subtitle: ['text-xs text-grey-3'],\n});\n\nconst DEFAULT_ERR_MSG =\n \"It wasn't possible to retrieve your security information at this moment. Please try again in a few minutes.\";\n\nexport const SecuritySettingsContent = () => {\n const userId = useRootSelector((r) => r.store.account.userId);\n const alert = useAlert();\n\n const [doGetPhonesByUser, phonesAsyncState, phones] = useApi(getPhonesByUser);\n const [doGetAccount, accountAsyncState, account] = useApi(getAccount);\n\n useEffect(() => {\n if (userId) {\n (async () => {\n await doGetPhonesByUser(userId);\n await doGetAccount();\n })();\n }\n }, [userId, doGetPhonesByUser, doGetAccount]);\n\n useEffect(() => {\n if (phonesAsyncState.error || accountAsyncState.error) {\n alert({\n message: DEFAULT_ERR_MSG,\n title: 'Error',\n });\n return;\n }\n }, [alert, phonesAsyncState.error, accountAsyncState.error]);\n\n const formattedLastPasswordUpdate = useMemo(() => {\n if (!account?.data?.lastPasswordUpdate) {\n return 'Password has never been reset';\n }\n return `Last updated ${new Date(account.data.lastPasswordUpdate).toLocaleDateString(\n 'en-US'\n )}`;\n }, [account]);\n\n const changePasswordUrl = process.env.REACT_APP_PASSWORD_CHANGE_URL;\n const manage2FA = `${process.env.REACT_APP_MANAGE_2FA_URL}?returnUrl=${window.location.href}`;\n\n return (\n <div>\n <div>\n <div className={styles.title2}>\n <span className={styles.title}>Password</span>\n <a className=\"ml-auto font-bold\" href={changePasswordUrl}>\n Change \n <span className=\"inline-block\">\n <FontAwesomeIcon icon={faExternalLink} />\n </span>\n </a>\n </div>\n <div className=\"text-lg text-brand-dark\">\n {!accountAsyncState.loading && account?.data && (\n <>\n <div>(Password Hidden)</div>\n <div className={styles.subtitle}>{formattedLastPasswordUpdate}</div>\n </>\n )}\n {accountAsyncState.loading && <Skeleton />}\n </div>\n </div>\n <div className=\"mt-14\">\n <div className={styles.title2}>\n <span className={styles.title}>2-Factor Recovery</span>\n <a className=\"ml-auto font-bold\" href={manage2FA}>\n Edit \n <span className=\"inline-block\">\n <FontAwesomeIcon icon={faExternalLink} />\n </span>\n </a>\n </div>\n <div className=\"text-lg text-brand-dark\">\n {!phonesAsyncState.loading && phones?.data && (\n <SetDefaultItemList\n items={phones.data.map(({ id, maskedPhoneNumber, enrollmentDate }) => ({\n id,\n phone: maskedPhoneNumber,\n registrationDate: enrollmentDate ? new Date(enrollmentDate) : null,\n }))}\n />\n )}\n {phonesAsyncState.loading && <Skeleton />}\n </div>\n </div>\n </div>\n );\n};\n\ninterface DefaultPhoneItem {\n id: string;\n phone: string;\n registrationDate: Date | null;\n}\n\nconst formatRegisteredDate = (d: Date) => {\n return `Registered ${d.toLocaleDateString()}`;\n};\n\nconst SetDefaultItemList = ({ items }: { items: DefaultPhoneItem[] }) => {\n return (\n <ul>\n {items.map((item) => (\n <li key={item.id} className=\"mb-5\">\n <div className=\"flex items-center\">\n <div className=\"text-brand-dark\">\n <div>{item.phone}</div>\n {item.registrationDate && (\n <div className={styles.subtitle}>\n {formatRegisteredDate(item.registrationDate)}\n </div>\n )}\n </div>\n </div>\n </li>\n ))}\n </ul>\n );\n};\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgSuccessCheckMark(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.6875 10C19.6875 15.3503 15.3503 19.6875 10 19.6875C4.64973 19.6875 0.3125 15.3503 0.3125 10C0.3125 4.64973 4.64973 0.3125 10 0.3125C15.3503 0.3125 19.6875 4.64973 19.6875 10ZM8.87945 15.1295L16.067 7.94195C16.311 7.69789 16.311 7.30215 16.067 7.05809L15.1831 6.17422C14.939 5.93012 14.5433 5.93012 14.2992 6.17422L8.4375 12.0359L5.70082 9.29918C5.45676 9.05512 5.06102 9.05512 4.81691 9.29918L3.93305 10.183C3.68898 10.4271 3.68898 10.8229 3.93305 11.0669L7.99555 15.1294C8.23965 15.3735 8.63535 15.3735 8.87945 15.1295Z\",\n fill: \"#388200\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgSuccessCheckMark);\nexport default __webpack_public_path__ + \"static/media/success-check-mark.808c59a1960f6fe00236808f4501717e.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useCallback, useContext, useMemo, useState } from 'react';\nimport { SavedCreditCard } from 'common/api/e-comm/models/CreditCard';\nimport { createStyles } from 'utils/createStyle';\nimport {\n deleteCreditCardThunk,\n selectPaymentCreditCards,\n} from 'common/features/store/duck/account/duck';\nimport { useDispatch } from 'react-redux';\nimport { EditableFieldsContext } from '../context';\nimport { Btn } from 'components/btn/Btn';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { ReactComponent as CheckMark } from '../../../../../media/images/success-check-mark.svg';\nimport { Radio, RadioOption } from 'components/radio/Radio';\nimport classnames from 'classnames';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { FeatureFlagTypes, useFeatureFlags } from 'common/hooks/useFeatureFlags';\n\ninterface CreditCardFieldProps {\n isEditing: boolean;\n}\n\nconst styles = createStyles({\n container: ['flex flex-col'],\n enabledContainer: ['opacity-100'],\n disabledContainer: ['opacity-20'],\n styledIndicator: [\n 'bg-black text-brand block',\n {\n width: 7,\n height: 7,\n borderRadius: '50%',\n backgroundColor: 'dodgerblue',\n },\n ],\n styledRadio: [\n 'align-middle mr-2 cursor-pointer',\n {\n appearance: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n padding: 0,\n borderRadius: '50%',\n boxShadow: 'inset 0 0 0 1px gainsboro',\n minWidth: 15,\n width: 15,\n height: 15,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& ~ &': { marginLeft: 5 },\n\n '&:focus': {\n outline: 'none',\n boxShadow: 'inset 0 0 0 1px dodgerblue, 0 0 0 1px dodgerblue',\n },\n },\n ],\n text: [\n 'text-grey-1',\n {\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontSize: '14px',\n lineHeight: '20px',\n },\n ],\n header: ['text-grey-2 text-sm mb-2.5'],\n delete: [\n 'text-brand text-xs',\n { fontWeight: 600, textDecoration: 'underline', cursor: 'pointer' },\n ],\n card: ['text-lg text-brand-dark mb-3', {}],\n});\n\nconst createCreditCardTitle = (card: SavedCreditCard) => {\n if (!card.maskedCardNumber) {\n return '';\n }\n\n return card.creditCardType + ' **' + card.maskedCardNumber.slice(2);\n};\nexport const CreditCardField = ({ isEditing }: CreditCardFieldProps) => {\n const dispatch = useDispatch<any>();\n const { isEnabled } = useFeatureFlags();\n\n const { setFieldToEdit, fieldToEdit } = useContext(EditableFieldsContext);\n const savedCreditCards = useRootSelector(selectPaymentCreditCards);\n\n const [selectedCard, setSelectedCard] = useState<string | undefined>(undefined);\n const [selectedCardTitle, setSelectedCardTitle] = useState<string | undefined>('');\n const [deleteText, setDeleteText] = useState<string>('Delete a card');\n const [smallButtons, setSmallButtons] = useState<boolean>(false);\n const [deleteSuccess, setDeleteSuccess] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const endEditMode = useCallback(() => {\n setFieldToEdit('');\n setSelectedCard(undefined);\n setDeleteSuccess(false);\n }, [setFieldToEdit, setSelectedCard, setDeleteSuccess]);\n\n const confirmDelete = useCallback(async () => {\n setIsLoading(true);\n const res = await deleteCreditCardThunk(parseInt(selectedCard as string))(dispatch);\n setIsLoading(false);\n\n if (res.error) {\n return;\n }\n setDeleteSuccess(true);\n setTimeout(() => {\n endEditMode();\n }, 3000);\n }, [selectedCard, dispatch, endEditMode]);\n\n const startEditMode = () => {\n setFieldToEdit('creditcardfield');\n };\n\n const onValueChange = (option: RadioOption) => {\n const { value } = option;\n const card = savedCreditCards?.find((card) => card.id.toString() === value);\n if (card) {\n setSelectedCardTitle(createCreditCardTitle(card));\n setSelectedCard(card.id.toString());\n }\n };\n\n const queries = useMemo(\n () => ({\n '(min-width: 769px)': () => {\n setDeleteText('Delete a card');\n setSmallButtons(false);\n },\n '(max-width: 768px)': () => {\n setDeleteText('Delete');\n setSmallButtons(true);\n },\n }),\n []\n );\n\n useMediaQueries(queries);\n\n if (!savedCreditCards || savedCreditCards.length < 1) {\n return (\n <div>\n <div className={styles.header}>\n {isEnabled(FeatureFlagTypes.enable_debit_web)\n ? 'Debit and Credit Cards'\n : 'Credit Card'}\n </div>\n <div className={styles.text}>\n {isEnabled(FeatureFlagTypes.enable_debit_web) ? 'Debit and c' : 'C'}redit cards\n can only be added during checkout.\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={`payment_options_credit_card_section ${classnames(\n styles.container,\n fieldToEdit && fieldToEdit !== 'creditcardfield'\n ? styles.disabledContainer\n : styles.enabledContainer\n )}`}\n >\n <div className=\"flex flex-row justify-between mb-2\">\n <div className={styles.header}>\n {isEnabled(FeatureFlagTypes.enable_debit_web)\n ? 'Credit and Debit Cards'\n : 'Credit Card'}\n </div>\n\n {isEditing ? (\n <div onClick={endEditMode} className={styles.delete}>\n Cancel\n </div>\n ) : (\n <div onClick={startEditMode} className={styles.delete}>\n {deleteText}\n </div>\n )}\n </div>\n <div>\n {isEditing ? (\n <div data-recording-sensitive>\n <Radio\n options={savedCreditCards.map((card) => {\n return {\n value: card.id.toString(),\n text: isEnabled(FeatureFlagTypes.enable_debit_web)\n ? `${\n card.cardSubType === 'Debit'\n ? 'Debit Card '\n : 'Credit Card '\n } (${createCreditCardTitle(card)})`\n : createCreditCardTitle(card),\n };\n })}\n value={selectedCard || ''}\n onChange={onValueChange}\n ></Radio>\n </div>\n ) : (\n <>\n {savedCreditCards.map((card) => {\n return (\n <div data-recording-sensitive key={card.id} className={styles.card}>\n <div className=\"\">\n <span className=\"text-lg text-brand-dark font-semibold\">\n {card.cardSubType === 'Debit' ? 'Debit' : 'Credit'} Card{' '}\n </span>\n <span className=\"text-lg text-grey-1\">\n ({createCreditCardTitle(card)})\n </span>\n </div>\n </div>\n );\n })}\n </>\n )}\n </div>\n {!deleteSuccess ? (\n <div\n className=\"border-t border-r-0 border-l-0 border-b-0 border-grey-5\"\n hidden={!isEditing}\n >\n {selectedCard && (\n <div>\n {!isLoading ? (\n <>\n <div className=\"mt-5 mb-5 text-error\">\n Are you sure you want to delete{' '}\n <span data-recording-sensitive>{selectedCardTitle}</span>\n {'?'}\n </div>\n <Btn\n className=\"mr-3\"\n isSmall={smallButtons}\n isSecondary\n onClick={endEditMode}\n >\n No, Cancel\n </Btn>\n <Btn\n className=\"ml-3\"\n isSmall={smallButtons}\n onClick={confirmDelete}\n >\n Yes, Delete\n </Btn>\n </>\n ) : (\n <div className=\"w-full flex justify-center\">\n <ActivityIndicator />\n </div>\n )}\n </div>\n )}\n </div>\n ) : (\n <div className=\"flex border-t border-r-0 border-l-0 border-b-0 border-grey-5 pt-2\">\n <CheckMark />\n <div className=\"ml-2\">\n Successfully deleted\n <span data-recording-sensitive>{selectedCardTitle}</span>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React, { useState } from 'react';\n\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\nimport { LoadingOverlay } from 'components/loading-overlay/LoadingOverlay';\nimport { noop } from 'common/utils';\n\nexport interface PaymentOptionsContextProps {\n addresses: FamilyAddress[];\n selectedAddress: string;\n setSelectedAddress: (_: string) => void;\n createMode: boolean;\n setCreateMode: (_: boolean) => void;\n refreshAddresses: () => void;\n loader: React.RefObject<LoadingOverlay> | null;\n reloadAchInfo: () => Promise<void>;\n\n // debug props\n showBankAccountMode?: boolean;\n debugMode?: boolean;\n}\n\nexport const PaymentOptionsContext = React.createContext<PaymentOptionsContextProps>({\n addresses: [] as FamilyAddress[],\n selectedAddress: '',\n setSelectedAddress: noop,\n createMode: false,\n setCreateMode: noop,\n refreshAddresses: noop,\n loader: null,\n reloadAchInfo: () => Promise.resolve(),\n\n // debug props\n showBankAccountMode: true,\n debugMode: true,\n});\n\nexport const PaymentOptionsView = ({\n addresses,\n children,\n loader,\n refreshAddresses,\n reloadAchInfo,\n}: React.PropsWithChildren<\n Pick<PaymentOptionsContextProps, 'addresses' | 'reloadAchInfo' | 'refreshAddresses' | 'loader'>\n>) => {\n const [selectedAddress, setSelectedAddress] = useState<string>('');\n const [createMode, setCreateMode] = useState<boolean>(false);\n\n const context = {\n addresses,\n showBankAccountMode: true,\n debugMode: true,\n selectedAddress,\n setSelectedAddress,\n createMode,\n setCreateMode,\n refreshAddresses,\n loader,\n reloadAchInfo,\n };\n return (\n <PaymentOptionsContext.Provider value={context}>{children}</PaymentOptionsContext.Provider>\n );\n};\n","import React from 'react';\n\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\nimport * as RadioGroup from '@radix-ui/react-radio-group';\nimport * as Label from '@radix-ui/react-label';\nimport { createStyles } from 'utils/createStyle';\nimport { PaymentOptionsContextProps } from './context';\n\nconst styles = createStyles({\n styledRadio: [\n 'align-middle mr-2 cursor-pointer',\n {\n appearance: 'none',\n backgroundColor: 'transparent',\n border: 'none',\n padding: 0,\n borderRadius: '50%',\n boxShadow: 'inset 0 0 0 1px gainsboro',\n minWidth: 15,\n width: 15,\n height: 15,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& ~ &': { marginLeft: 5 },\n\n '&:focus': {\n outline: 'none',\n boxShadow: 'inset 0 0 0 1px dodgerblue, 0 0 0 1px dodgerblue',\n },\n },\n ],\n styledIndicator: [\n 'bg-black text-brand block',\n {\n width: 7,\n height: 7,\n borderRadius: '50%',\n backgroundColor: 'dodgerblue',\n },\n ],\n address: ['', { fontSize: 17 }],\n});\n\nconst getFullAddress = (address: FamilyAddress) =>\n `${address.address1} ${address.address2}, ${address.city}, ${address.state} ${address.zipCode}`;\n\nexport const AddressList = ({\n addresses,\n selectedAddress,\n setSelectedAddress,\n}: PaymentOptionsContextProps) => {\n const onValueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n setSelectedAddress(value);\n // NOTE: we __need__ to save our selected address into local-storage in the case\n // where user enters the `oauth` flow and gets redirected away from the page\n localStorage.setItem('addr', value);\n };\n\n return (\n <RadioGroup.Root tabIndex={undefined} value={selectedAddress} onValueChange={onValueChange}>\n {addresses.map((address: FamilyAddress) => (\n <div key={address.id} className=\"flex items-center mb-2\">\n <RadioGroup.Item\n id={address.id}\n value={address.id}\n className={styles.styledRadio}\n >\n <RadioGroup.Indicator className={styles.styledIndicator} />\n </RadioGroup.Item>\n <Label.Root htmlFor={address.id}>\n <div className=\"flex items-center cursor-pointer\">\n <p className={styles.address}>{getFullAddress(address)}</p>\n </div>\n </Label.Root>\n </div>\n ))}\n </RadioGroup.Root>\n );\n};\n","import React, { useEffect, useContext } from 'react';\nimport { EditableFieldsContext } from '../../../context';\nimport { PaymentOptionsContext } from '../context';\nimport { AddressList } from '../AddressList';\n\n/* Purpose: Allows the user to link an ACH account through PLAID\n *\n * Assumptions: user does not have a linked ACH account\n *\n * Users with no ACH account will go through 2 flows depending on their addresses:\n *\n * Flow 1: User _has_ addresses\n * 1. Allow the user to select a billing address\n * 1.a. If they wish to add a new one they can press the `add address` button\n * 1.a.1 They will be shown an address form which will return them back to the\n billing address selection once form is _completed_ or _canceled_\n */\ninterface BaseAddBankAccountFlowProps {\n id: string;\n children: React.ReactNode;\n}\nexport const BaseAddBankAccountFlow = ({ id, children }: BaseAddBankAccountFlowProps) => {\n const { fieldToEdit } = useContext(EditableFieldsContext);\n const contextProps = useContext(PaymentOptionsContext);\n const fieldBeingEdited = id === fieldToEdit;\n const { setCreateMode, addresses } = contextProps;\n\n useEffect(() => {\n if (addresses.length === 0) {\n setCreateMode(true);\n } else {\n setCreateMode(false);\n }\n }, [setCreateMode, addresses]);\n\n const addNewAddress = (e: React.MouseEvent<HTMLParagraphElement>) => {\n e.preventDefault();\n setCreateMode(true);\n };\n\n if (!fieldBeingEdited) {\n return <>{children}</>;\n } else if (contextProps.addresses.length > 0) {\n // CASE: prompt user to select an address to begin plaid flow\n return (\n <div>\n <p className=\"text-grey-1 text-sm mb-2\">Select the address tied to your account</p>\n <AddressList {...contextProps} />\n {!contextProps.createMode && (\n <p\n onClick={addNewAddress}\n className=\"underline text-brand text-xs cursor-pointer\"\n >\n Add New Address\n </p>\n )}\n </div>\n );\n } else {\n // CASE: user does not have any address in their account\n // prompt to add a new one.\n return (\n <p className=\"text-grey-1 text-sm mb-2\">Add the address tied to your bank account</p>\n );\n }\n};\n","import React, { useContext } from 'react';\nimport { EditableFieldsContext } from '../../../context';\nimport { Node } from '@contentful/rich-text-types';\n\nimport { Btn } from 'components/btn/Btn';\nimport { useContentfulGlobalContent } from 'common/api/contentful/global';\nimport { renderContent } from 'features/homepage/sections/components/HeroSectionTextBlock';\nimport Skeleton from 'react-loading-skeleton';\nimport { BaseAddBankAccountFlow } from './BaseAddBankAccountFlow';\n\nexport const AddBankAccountPromptSection = ({ id }: { id: string }) => {\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const globalContent = useContentfulGlobalContent();\n const linkABankAccount = () => {\n // turn on editMode here to show case the address selection\n setFieldToEdit(id);\n };\n\n if (!globalContent) {\n return <Skeleton height={100} />;\n }\n\n return (\n <BaseAddBankAccountFlow id={id}>\n <div className=\"text-grey-1\">\n {renderContent(globalContent?.noAchLinkedPrompt as Node)}\n <Btn className=\"payment_options_add_bank_button\" onClick={linkABankAccount}>\n Link a Bank Account\n </Btn>\n </div>\n </BaseAddBankAccountFlow>\n );\n};\n","import React from 'react';\n\nexport const AddBankAccountPromptText = ({ children }: React.PropsWithChildren) => (\n <div className=\"text-grey-2 mb-5 text-sm\">\n RaiseRight uses <a href=\"#\">Plaid</a> to link your bank account. By selecting this option, I\n acknowledge I have read and agree to the <a href=\"#\">terms and conditions</a> and{' '}\n <a href=\"#\">privacy policy</a>.{children}\n </div>\n);\n","import React from 'react';\nimport { AddBankAccountPromptText } from './AddBankAccountPromptText';\n\nexport const AutomatedVerificationFlow = () => {\n return (\n <div>\n <AddBankAccountPromptText>\n <ul className=\"list-disc list-inside text-sm text text-grey-1 p-3\">\n <li>\n Automatic small deposits from RaiseRight have been sent to your linked bank\n account. Depending on your bank, the deposits will take 1-2 business days to\n process.\n </li>\n <li>\n If you encounter issues, please call Customer Support at 1-800-727-4715\n Option 3.\n </li>\n </ul>\n </AddBankAccountPromptText>\n </div>\n );\n};\n","import React, { useContext, useState } from 'react';\nimport { LoadingOverlay, openLoader, closeLoader } from 'components/loading-overlay/LoadingOverlay';\n\nimport { Btn } from 'components/btn/Btn';\nimport { SERVICE_UNAVAILABLE_MESSAGE } from 'config';\nimport { UserPlaidWrapper } from 'features/coordinator/enrollment/steps/PlaidButton/PlaidButton';\nimport { setUserAchAccountStatus } from 'common/api/e-comm/ach';\nimport { useBlackBoxValues } from 'modules/fraud-force/fraudForce';\nimport { useLocation } from 'react-router-dom';\nimport { PaymentOptionsContext } from '../context';\n\nexport const MicroTransactionsFlow = () => {\n const { loader, reloadAchInfo } = useContext(PaymentOptionsContext);\n const { retrieveBlackBox } = useBlackBoxValues();\n const params = new URLSearchParams(useLocation().search);\n const [isOAuth, setIsOAuth] = useState(Boolean(params.get('oauth_state_id')));\n\n const onPlaidLinkSuccess = async () => {\n openLoader(loader?.current as LoadingOverlay);\n const bbv = await retrieveBlackBox();\n const response = await setUserAchAccountStatus(bbv.blackBoxValue ?? '');\n await reloadAchInfo();\n closeLoader(loader?.current as LoadingOverlay);\n\n if (response.error) {\n alert({ message: SERVICE_UNAVAILABLE_MESSAGE });\n }\n };\n\n return (\n <div>\n <ul className=\"list-disc list-outside text-sm text text-grey-1 p-3 pl-0 ml-7\">\n <li>\n A $0.01 deposit from Plaid should appear in your bank account after 1-2 business\n days. Return here to complete your setup by entering the code. (Hint: your code\n is the first 3 letters after the #.)\n </li>\n <li>\n If you encounter issues, please call Customer Support at 1-800-727-4715 Option\n 3.\n </li>\n </ul>\n <div className=\"mt-3\">\n <UserPlaidWrapper\n addressId={''}\n onSuccess={onPlaidLinkSuccess}\n isOAuth={isOAuth}\n onExit={() => setIsOAuth(false)}\n >\n {(openPlaid, isPlaidReady: boolean) => (\n <Btn onClick={openPlaid} disabled={!isPlaidReady}>\n Complete Setup\n </Btn>\n )}\n </UserPlaidWrapper>\n </div>\n </div>\n );\n};\n","import React, { useContext, useState } from 'react';\nimport { LoadingOverlay, openLoader, closeLoader } from 'components/loading-overlay/LoadingOverlay';\n\nimport { Btn } from 'components/btn/Btn';\nimport { useAlert } from 'modules/alerts';\nimport { SERVICE_UNAVAILABLE_MESSAGE } from 'config';\nimport { UserPlaidWrapper } from 'features/coordinator/enrollment/steps/PlaidButton/PlaidButton';\nimport { SetUserAchAccountBody, setUserAchAccount, AchAccountBody } from 'common/api/e-comm/ach';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { PaymentOptionsContext } from '../context';\nimport { AddBankAccountPromptText } from './AddBankAccountPromptText';\n\nexport const OAuthFlow = () => {\n const { loader, reloadAchInfo } = useContext(PaymentOptionsContext);\n\n const params = new URLSearchParams(useLocation().search);\n const [isOAuth, setIsOAuth] = useState(Boolean(params.get('oauth_state_id')));\n const alert = useAlert();\n const history = useHistory();\n\n const onPlaidLinkSuccess = async <T,>(payload: T) => {\n // NOTE: Remove addr from local-storage in case we have one stored\n // not needed for this step.\n const selectedAddress = localStorage.getItem('addr');\n\n // CASE: selected address was lost from local-storage for some reason\n if (!selectedAddress) {\n // we should clear the `oauth_state_id` and show some error message\n history.replace(Routes.ShopAccountSettingsPaymentOptionsTab);\n alert({ message: SERVICE_UNAVAILABLE_MESSAGE });\n return;\n }\n\n const userAchPayload: SetUserAchAccountBody = {\n ...(payload as unknown as AchAccountBody),\n addressId: selectedAddress,\n };\n\n openLoader(loader?.current as LoadingOverlay);\n const response = await setUserAchAccount(userAchPayload);\n await reloadAchInfo();\n closeLoader(loader?.current as LoadingOverlay);\n\n if (response.error) {\n alert({ message: SERVICE_UNAVAILABLE_MESSAGE });\n }\n history.replace(Routes.ShopAccountSettingsPaymentOptionsTab);\n };\n\n return (\n <div>\n <AddBankAccountPromptText />\n <div>\n <UserPlaidWrapper\n addressId={''}\n onSuccess={onPlaidLinkSuccess}\n isOAuth={isOAuth}\n onExit={() => setIsOAuth(false)}\n >\n {(openPlaid, isPlaidReady: boolean) => (\n <Btn onClick={openPlaid} disabled={!isPlaidReady}>\n Continue with Plaid\n </Btn>\n )}\n </UserPlaidWrapper>\n </div>\n </div>\n );\n};\n","import React, { useContext } from 'react';\nimport { LoadingOverlay, openLoader, closeLoader } from 'components/loading-overlay/LoadingOverlay';\nimport { useDispatch } from 'react-redux';\nimport { deleteUserAchAccountThunk } from 'common/features/store/duck/account/duck';\nimport { SERVICE_UNAVAILABLE_MESSAGE } from 'config';\nimport { hasErrorWithStatus } from 'common/api/utils/hasErrorWithStatus';\nimport { StatusCode } from 'common/api/config';\nimport { PaymentOptionsContext } from '../context';\nimport { useAlert } from 'modules/alerts';\n\nconst CannotDeleteAchAccountMessage = () => (\n <p>\n You cannot delete this bank account right now because it's tied to an order that is being\n processed. When processing is complete, you can remove this account.\n </p>\n);\n\nexport const useAchControls = () => {\n const dispatch = useDispatch<any>();\n const { loader } = useContext(PaymentOptionsContext);\n const alert = useAlert();\n\n const deleteAch = async () => {\n await openLoader(loader?.current as LoadingOverlay);\n\n const response = await deleteUserAchAccountThunk(dispatch);\n await closeLoader(loader?.current as LoadingOverlay);\n\n // if we could not delete the account\n if (response.error) {\n // case where user cannot delete their account because\n // order is being processed\n if (hasErrorWithStatus(response, StatusCode.MethodNotAllowed)) {\n alert({\n message: <CannotDeleteAchAccountMessage />,\n });\n return;\n }\n alert({ message: SERVICE_UNAVAILABLE_MESSAGE });\n }\n };\n return { deleteAch };\n};\n","import React, { useContext } from 'react';\n\nimport { useAchControls } from './useAchControls';\nimport { BaseAddBankAccountFlow } from './BaseAddBankAccountFlow';\nimport { EditableFieldsContext } from '../../../context';\nimport { AddBankAccountPromptText } from './AddBankAccountPromptText';\nimport { Btn } from 'components/btn/Btn';\n\nexport const VerificationExpiredFlow = ({ id }: { id: string }) => {\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const { deleteAch } = useAchControls();\n\n const retryLinking = async () => {\n await deleteAch();\n setFieldToEdit(id);\n };\n\n return (\n <BaseAddBankAccountFlow id={id}>\n <div>\n <p className=\"text-brand-dark\">\n We've encountered an issue trying to link your bank account. Please try again.\n </p>\n <p className=\"text-grey-1 text-sm\">\n Continue to have issues? Contact Customer Support team at 1-800-727-4715, Option\n 3.\n </p>\n <Btn className=\"my-4\" onClick={retryLinking}>\n Retry\n </Btn>\n <AddBankAccountPromptText />\n </div>\n </BaseAddBankAccountFlow>\n );\n};\n","import React, { useContext } from 'react';\nimport {\n FieldProps,\n BaseFieldDisplayProps,\n BaseFieldDisplay,\n ToggleEditViewRendererProps,\n LabelRenderer,\n} from 'features/account-settings/components/SettingsTab/PersonalSettings/utils';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { EditableFieldsContext } from '../../context';\nimport { useAlert } from 'modules/alerts';\nimport {\n AchVerificationStatus,\n isVerified,\n verficationExpiredOrFailed,\n} from 'common/api/e-comm/ach/models/AchAccount';\nimport { useLocation } from 'react-router-dom';\nimport { PaymentOptionsContext } from './context';\nimport { ReactComponent as NotificationBell } from '../../../../../../media/images/notif-bell.svg';\nimport { AddBankAccountPromptSection } from './components/AddBankAccountPromptSection';\nimport { AutomatedVerificationFlow } from './components/AutomatedVerificationFlow';\nimport { MicroTransactionsFlow } from './components/MicroTransactionsFlow';\nimport { OAuthFlow } from './components/OAuthFlow';\nimport { VerificationExpiredFlow } from './components/VerificationExpiredFlow';\nimport { useAchControls } from './components/useAchControls';\n\ninterface BankFieldProps extends FieldProps {}\n\ninterface BankFieldDisplayProps extends Omit<BaseFieldDisplayProps, 'onClick'> {}\n\nconst LabelRendererWithNotificationBell = ({ label }: { label: React.ReactNode }) => {\n const ach = useRootSelector((state: RootState) => state.store.account.achAccount);\n const verificationHasExpiredOrFailed = ach && verficationExpiredOrFailed(ach);\n\n return (\n <div className=\"flex gap-1\">\n <LabelRenderer label={label} />\n {verificationHasExpiredOrFailed && <NotificationBell width={18} height={18} />}\n </div>\n );\n};\n\nconst ToggleEditViewRenderer = ({ isEditing, onClick }: ToggleEditViewRendererProps) => {\n const ach = useRootSelector((state: RootState) => state.store.account.achAccount);\n const { addresses, createMode } = useContext(PaymentOptionsContext);\n\n const verificationHasExpiredOrFailed = ach && verficationExpiredOrFailed(ach);\n if (verificationHasExpiredOrFailed) {\n // CASE: if a user's verification has expired or failed\n // we don't want to render any buttons\n return null;\n }\n\n const hasAchAccount = ach !== null;\n const userHasAddresses = addresses.length > 0;\n\n const isPendingVerification = ach && !isVerified(ach);\n const btnText = isPendingVerification\n ? 'Cancel Bank Account Setup'\n : 'Delete this bank account';\n\n return (\n <p onClick={onClick} className=\"font-semibold underline text-brand text-xs cursor-pointer\">\n {!createMode && hasAchAccount && !ach?.isOnHold && !ach?.isLocked ? btnText : null}\n {!createMode && !hasAchAccount && (isEditing || !userHasAddresses) ? 'Cancel' : null}\n </p>\n );\n};\n\nconst BankFieldDisplay = (props: BankFieldDisplayProps) => {\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const ach = useRootSelector((state: RootState) => state.store.account.achAccount);\n const { setSelectedAddress } = useContext(PaymentOptionsContext);\n const hasBankLinked = Boolean(ach);\n const alert = useAlert();\n\n const { deleteAch } = useAchControls();\n\n const onClick = () => {\n // Case: We have a bank account -- user is pressing `delete bank account`\n if (hasBankLinked) {\n const isPendingVerification = ach && !isVerified(ach);\n\n const lastFour = ach?.accountNumber?.replace(/[x|-]+/g, '');\n\n const title = (\n <p className=\"text-error text-2xl\">\n {isPendingVerification ? 'Cancel Bank Account Setup?' : 'Delete Bank Account'}\n </p>\n );\n\n const message = isPendingVerification\n ? 'If you do not complete setup, any stored information will be cleared. \\n\\n Are you sure you want to cancel?'\n : `Are you sure you want to delete bank account ending in ${lastFour}`;\n\n alert({\n title,\n message,\n buttons: [\n {\n text: 'Yes',\n onClick: deleteAch,\n },\n {\n text: 'Cancel',\n className: 'underline',\n },\n ],\n });\n }\n // Case: User is editing is pressing `cancel` should turn off edit-mode\n // and unselect addresses if any were chosen\n else if (props.isEditing) {\n setFieldToEdit('');\n setSelectedAddress('');\n }\n };\n\n return (\n <BaseFieldDisplay\n {...props}\n renderers={{\n ToggleEditViewRenderer,\n LabelRenderer: LabelRendererWithNotificationBell,\n }}\n onClick={onClick}\n />\n );\n};\n\nexport const BankField = ({ id, isEditing }: BankFieldProps) => {\n const ach = useRootSelector((state: RootState) => state.store.account.achAccount);\n const params = new URLSearchParams(useLocation().search);\n const isOAuth = Boolean(params.get('oauth_state_id'));\n\n const renderDisplayField = () => {\n // CASE: Handle the different views that need to render depending on the\n // ACH account status(not to be confused with verificationStatus).\n // The `status` encompasses:\n //\n // - verificationStatus :: all of it's possible states\n // - isLocked\n // - isOnHold\n // - isOAuth :: when user is connecting through plaid via oauth flow\n if (\n Boolean(ach) &&\n ach?.verificationStatus === AchVerificationStatus.PendingManualVerification\n ) {\n return <MicroTransactionsFlow />;\n } else if (\n Boolean(ach) &&\n ach?.verificationStatus === AchVerificationStatus.PendingAutomatedVerification\n ) {\n // CASE: Verification status is AutomatedVerification\n return <AutomatedVerificationFlow />;\n } else if (isOAuth) {\n // CASE: we're in OAUTH flow\n return <OAuthFlow />;\n } else if (!ach) {\n // CASE: User has no ACH account we should prompt them to add one\n return <AddBankAccountPromptSection id={id} />;\n } else if (ach && ach?.isLocked) {\n return (\n <div>\n <p className=\"text-sm text-grey-1\">\n Your online payment account has been locked.\n </p>\n <p className=\"text-sm text-grey-1\">\n Please ask your coordinator to call the Customer Support team at\n 1-800-727-4715, option 3, to unlock your account.\n </p>\n </div>\n );\n }\n if (\n ach?.verificationStatus === AchVerificationStatus.VerificationExpired ||\n ach?.verificationStatus === AchVerificationStatus.VerificationFailed\n ) {\n return <VerificationExpiredFlow id={id} />;\n } else if (ach && ach?.isOnHold) {\n return (\n <p className=\"text-sm text-grey-1\">\n Thank you for enrolling in Online ACH Payments. We need a few days to finalize\n your account, so please check back in 1-2 business days\n </p>\n );\n }\n\n // CASE: user has an ach account -- we should just show it\n return <span data-recording-sensitive>{ach?.accountNumber}</span>;\n };\n\n return (\n <BankFieldDisplay id={id} label=\"Bank Account\" isEditing={isEditing}>\n {renderDisplayField()}\n </BankFieldDisplay>\n );\n};\n","import React, { useEffect, useContext, useState, useRef } from 'react';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { RootState } from 'rootStore';\nimport { EditableFieldsContext } from '../../context';\nimport { FamilyAddress } from 'common/api/crm/family/address/models/FamilyAddress';\nimport { LoadingOverlay, openLoader, closeLoader } from 'components/loading-overlay/LoadingOverlay';\nimport { animated, useTransition } from 'react-spring';\nimport { addAddress } from 'common/api/crm/family/address';\nimport { Formik, Form } from 'formik';\nimport { FormikTextField } from 'components/fields/FormikTextField';\nimport { FormikSelectField } from 'components/fields/FormikSelectField';\nimport {\n addressLine2Validator,\n addressLine1Validator,\n cityValidator,\n stateValidator,\n zipCodeValidator,\n} from 'common/modules/form-validation/validators';\nimport { stateOptions } from 'common/modules/form-validation/utils/stateOptions';\n\nimport { Btn } from 'components/btn/Btn';\nimport { useAlert } from 'modules/alerts';\nimport { SERVICE_UNAVAILABLE_MESSAGE } from 'config';\nimport { UserPlaidWrapper } from 'features/coordinator/enrollment/steps/PlaidButton/PlaidButton';\nimport { SetUserAchAccountBody, setUserAchAccount, AchAccountBody } from 'common/api/e-comm/ach';\nimport { PaymentOptionsContext, PaymentOptionsContextProps } from './context';\n\ninterface AddressFields {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zipCode: string;\n}\n\nconst NewAddressForm = ({\n setCreateMode,\n createMode,\n refreshAddresses,\n loader,\n}: Pick<\n PaymentOptionsContextProps,\n 'setCreateMode' | 'createMode' | 'refreshAddresses' | 'loader'\n>) => {\n const profile = useRootSelector((state: RootState) => state.store.home.homeDetails?.profile);\n const [errorExists, setErrorExists] = useState(false);\n\n const transitions = useTransition(createMode, {\n from: { opacity: 0, transform: 'translate2d(0%, 0%)', maxHeight: '0px' },\n enter: { opacity: 1, transform: 'translate2d(0%, 100%)', maxHeight: '1000px' },\n leave: { opacity: 0, transform: 'translate2d(0%, 0%)', maxHeight: '0px' },\n });\n\n const initialValues = {\n id: '',\n address1: '',\n address2: '',\n city: '',\n state: '',\n zipCode: '',\n };\n\n const onSubmit = async (values: AddressFields) => {\n const payload = {\n ...values,\n id: initialValues.id || '',\n firstName: profile?.firstName,\n lastName: profile?.lastName,\n phoneNumber: '', // we don't have access of the phoneNumber, where should we get it from?\n };\n\n try {\n openLoader(loader?.current as LoadingOverlay);\n await addAddress(payload as FamilyAddress);\n refreshAddresses();\n closeLoader(loader?.current as LoadingOverlay);\n setCreateMode(false);\n } catch (e) {\n setErrorExists(true);\n }\n };\n\n return transitions(\n (styles_, item) =>\n item && (\n <animated.div style={styles_}>\n <Formik enableReinitialize initialValues={initialValues} onSubmit={onSubmit}>\n <Form>\n <div className=\"flex flex-col mb-5\">\n <div className=\"mb-5 flex flex-row\">\n <div className=\"mr-2 flex-1\">\n <FormikTextField\n name=\"address1\"\n label=\"Address\"\n validate={addressLine1Validator}\n />\n </div>\n <div className=\"w-16\">\n <FormikTextField\n name=\"address2\"\n label=\"Ste/Apt/Attn\"\n validate={addressLine2Validator}\n />\n </div>\n </div>\n <div className=\"flex flex-row mb-5\">\n <div className=\"flex-1 mr-2\">\n <FormikTextField\n name=\"city\"\n label=\"City\"\n validate={cityValidator}\n />\n </div>\n <div className=\"w-16\">\n <FormikSelectField\n label=\"State\"\n name=\"state\"\n validate={stateValidator}\n >\n <option value=\"\" />\n {stateOptions.map((o) => (\n <option key={o.value}>{o.value}</option>\n ))}\n </FormikSelectField>\n </div>\n </div>\n <div>\n <FormikTextField\n label=\"Zip\"\n name=\"zipCode\"\n validate={zipCodeValidator}\n />\n </div>\n </div>\n {errorExists && (\n <p className=\"text-sm mb-3 text-error\">\n Unable to update your information at this time\n </p>\n )}\n <Btn type=\"submit\">Save New Address</Btn>\n </Form>\n </Formik>\n </animated.div>\n )\n );\n};\n\n/*\n * Renders the Address form when `createMode` is true.\n * It renders a border-top with a `close` button given that user has _addresses_.\n * However, this is not the case when the user _does not have_ addresses.\n */\nexport const BankEditFieldComponent = () => {\n const { setFieldToEdit } = useContext(EditableFieldsContext);\n const {\n selectedAddress,\n createMode,\n setCreateMode,\n refreshAddresses,\n addresses,\n loader,\n reloadAchInfo,\n } = useContext(PaymentOptionsContext);\n const hasNoAddressSelected = !selectedAddress;\n const hasNoAddresses = addresses.length === 0;\n const selectedAddressRef = useRef<string>('');\n const alert = useAlert();\n\n useEffect(() => {\n selectedAddressRef.current = selectedAddress;\n }, [selectedAddress]);\n\n const close = () => {\n setCreateMode(false);\n };\n\n const onPlaidLinkSuccess = async <T,>(payload: T) => {\n const userAchPayload: SetUserAchAccountBody = {\n ...(payload as unknown as AchAccountBody),\n addressId: selectedAddressRef.current,\n };\n\n openLoader(loader?.current as LoadingOverlay);\n const response = await setUserAchAccount(userAchPayload);\n await reloadAchInfo();\n closeLoader(loader?.current as LoadingOverlay);\n\n // NOTE: Remove addr from local-storage in case we have one stored\n // not needed for this step.\n localStorage.removeItem('addr');\n setFieldToEdit(''); // no longer show edit-mode\n\n if (response.error) {\n alert({ message: SERVICE_UNAVAILABLE_MESSAGE });\n }\n };\n\n return (\n <div className={!hasNoAddresses && createMode ? 'border-t mt-5 max-w-lg' : 'max-w-lg'}>\n {!hasNoAddresses && createMode && (\n <div className=\"flex justify-end py-5\">\n <p\n onClick={close}\n className=\"font-semibold underline text-brand text-xs cursor-pointer\"\n >\n Close\n </p>\n </div>\n )}\n <NewAddressForm\n setCreateMode={setCreateMode}\n createMode={createMode}\n refreshAddresses={refreshAddresses}\n loader={loader}\n />\n {!createMode && (\n <div className=\"mt-5\">\n <UserPlaidWrapper\n addressId={selectedAddress}\n onSuccess={onPlaidLinkSuccess}\n isOAuth={false}\n onExit={() => null}\n >\n {(openPlaid, isPlaidReady) => (\n <Btn\n onClick={openPlaid}\n disabled={!isPlaidReady || hasNoAddressSelected}\n >\n Continue With Plaid\n </Btn>\n )}\n </UserPlaidWrapper>\n </div>\n )}\n </div>\n );\n};\n","import React, { useEffect, useContext, useState, useRef } from 'react';\nimport { usePaymentOptions } from 'common/hooks/usePaymentOptions';\nimport Skeleton from 'react-loading-skeleton';\nimport {\n FieldProps,\n EditableField,\n} from 'features/account-settings/components/SettingsTab/PersonalSettings/utils';\nimport { EditableFieldsContext } from '../../context';\nimport { useAddresses } from 'common/hooks/useAddresses';\nimport { LoadingOverlay } from 'components/loading-overlay/LoadingOverlay';\n\nimport { BankField as BankFieldDisplay } from './BankFieldDisplay';\nimport { BankEditFieldComponent } from './BankFieldEdit';\nimport { PaymentOptionsView } from './context';\n\ninterface BankFieldProps extends FieldProps {}\n\nconst BankEditableFields = () => {\n const { fieldToEdit } = useContext(EditableFieldsContext);\n\n return (\n <div>\n <EditableField<BankFieldProps>\n id=\"bank-account\"\n className=\"mb-8\"\n editMode={Boolean(fieldToEdit)}\n isEditing={fieldToEdit === 'bank-account'}\n FieldDisplayComponent={BankFieldDisplay}\n FieldEditComponent={BankEditFieldComponent}\n />\n </div>\n );\n};\n\nexport const AchManagementSection = () => {\n const { loadPaymentOptionsData: loadPaymentOptions } = usePaymentOptions();\n const loader = useRef<LoadingOverlay>(null);\n\n const { addresses, refreshAddresses } = useAddresses();\n const [dataLoading, setDataLoadingTo] = useState<boolean>(true);\n\n useEffect(() => {\n (async () => {\n await refreshAddresses();\n setDataLoadingTo(false);\n })();\n }, [refreshAddresses]);\n\n if (dataLoading) {\n return <Skeleton className=\"h-40\" />;\n }\n\n return (\n <div className=\"payment_options_bank_account_section\">\n <PaymentOptionsView\n loader={loader}\n refreshAddresses={refreshAddresses}\n addresses={addresses ?? []}\n reloadAchInfo={loadPaymentOptions}\n >\n <BankEditableFields />\n </PaymentOptionsView>\n <LoadingOverlay ref={loader} />\n </div>\n );\n};\n","import React, { useContext, useState, useEffect, useMemo } from 'react';\nimport { CreditCardField } from './CreditCardField';\nimport { EditableFieldsContext, EditableFieldsView } from '../context';\nimport { AchManagementSection } from 'features/account-settings/components/SettingsTab/PaymentOptions/ach/AddAchSection';\nimport { usePaymentOptions } from 'common/hooks/usePaymentOptions';\nimport Skeleton from 'react-loading-skeleton';\nimport { useRootSelector } from 'rootStore';\nimport { PaymentType } from 'common/api/e-comm/payment-types';\nimport { FieldDisplay } from '../PersonalSettings/utils';\nimport { Accordion } from 'features/product/components/Accordion';\nimport { useFromContentful } from 'common/api/contentful/utils';\n\ntype ContentfulFaqItem = {\n title: string;\n content: string;\n faqType: string;\n};\n\nconst PAYMENT_FAQ_TYPE = 'payment-settings';\n\nexport const PaymentOptionsFields = () => {\n const { fieldToEdit } = useContext(EditableFieldsContext);\n return (\n <div className=\"mb-8\">\n <CreditCardField isEditing={fieldToEdit === 'creditcardfield'} />\n </div>\n );\n};\n\nexport const PaymentSettingsContent = () => {\n const { loadPaymentOptionsData: loadPaymentOptions } = usePaymentOptions();\n const [dataLoading, setDataLoadingTo] = useState<boolean>(true);\n const { paymentTypes } = useRootSelector((s) => s.store.organization);\n const paymentSettingsFaq = useFromContentful<ContentfulFaqItem>('faqItem');\n\n const faqAccordionItems = useMemo(() => {\n const filteredFaqs =\n paymentSettingsFaq?.content?.items.filter((value) => {\n return value.fields.faqType === PAYMENT_FAQ_TYPE;\n }) || [];\n\n const items = filteredFaqs.map((item) => ({\n value: item.fields.title,\n title: <span className=\"font-semibold text-xs leading-1\">{item.fields.title}</span>,\n content: item.fields.content ? (\n <div className=\"px-3 text-grey-1 text-sm\">\n <span>{item.fields.content}</span>\n </div>\n ) : (\n ''\n ),\n }));\n return items;\n }, [paymentSettingsFaq]);\n\n const achPaymentAllowed = (paymentTypes || []).some(\n (pt) => pt === PaymentType.BankAccount,\n paymentTypes\n );\n const creditCardPaymentAllowed = (paymentTypes || []).some(\n (pt) => pt === PaymentType.CreditCard,\n paymentTypes\n );\n const checkPaymentAllowed = (paymentTypes || []).some(\n (pt) => pt === PaymentType.Check,\n paymentTypes\n );\n\n useEffect(() => {\n (async () => {\n await loadPaymentOptions();\n setDataLoadingTo(false);\n })();\n }, [loadPaymentOptions]);\n\n if (dataLoading) {\n return <Skeleton className=\"h-40\" />;\n }\n return (\n <>\n <EditableFieldsView>\n {achPaymentAllowed && <AchManagementSection />}\n {creditCardPaymentAllowed && <PaymentOptionsFields></PaymentOptionsFields>}\n {checkPaymentAllowed && <CheckFieldDisplay />}\n </EditableFieldsView>\n {faqAccordionItems?.length > 0 && (\n <div className=\"account_payment_options_FAQ\">\n <span className=\"text-xl font-semibold text-brand-dark block mb-6\">\n Frequently Asked Questions\n </span>\n <Accordion items={faqAccordionItems} />\n </div>\n )}\n </>\n );\n};\n\nexport const CheckFieldDisplay = () => (\n <div className=\"payment_options_pay_coordinator_section mb-8\">\n <FieldDisplay\n id={'check_msg'}\n label=\"Pay Coordinator Directly\"\n isEditing={false}\n renderers={{\n ToggleEditViewRenderer: () => null,\n }}\n >\n Pay your coordinator with cash, check, or a money transfer app.\n </FieldDisplay>\n </div>\n);\n","import { contentfulApi } from 'common/api/utils/contentful';\nimport { Subscription } from 'common/api/crm/family/types';\nimport { Notifications } from 'common/api/contentful/models/Notifications';\nimport { Entry } from 'contentful';\n\nexport const getContentfulEntriesForNotifications = async (): Promise<Entry<Notifications>[]> => {\n const result = await contentfulApi.getEntries<Notifications, unknown>({\n content_type: 'notifications',\n });\n if (result.data) {\n return result.data.items;\n }\n return [];\n};\n\nexport const addSubtextToSubscriptions = (\n data: Subscription[],\n items: Entry<Notifications>[]\n): Subscription[] => {\n return data.map((sub: Subscription) => {\n const entry = items.find((entry) => entry.fields.messageTypeId === sub.id);\n if (entry) {\n sub.subText = entry.fields.messageTypeDescription;\n }\n return sub;\n });\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { createStyles } from 'utils/createStyle';\nimport { Checkbox } from 'components/checkbox/Checkbox';\nimport { Btn } from 'components/btn/Btn';\nimport { ModalControls, useModalControls } from 'hooks/useModalControls';\nimport { Modal, ModalSecondaryBtn } from 'components/modal/Modal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExclamationTriangle, faCheck } from '@fortawesome/pro-solid-svg-icons';\nimport { colors } from 'styles/settings';\nimport {\n getFamilySubscriptions,\n updateFamilySubscriptions,\n groupBySubscribedAndUnSubscribed,\n normalizePreferences,\n} from 'common/api/crm/family/service';\nimport {\n Channels,\n FamilySubscriptionResponse,\n MessageMedium,\n MessageTypes,\n Subscription,\n} from 'common/api/crm/family/types';\nimport {\n addSubtextToSubscriptions,\n getContentfulEntriesForNotifications,\n} from 'common/api/contentful/notifications/utils';\n\nconst styles = createStyles({\n header: 'text-brand-dark font-semibold text-2xl mb-10',\n subHeader: 'text-brand-dark font-semibold text-xl mb-1',\n itemHeader: 'text-grey-darkest font-semibold mb-1',\n itemdark: 'p-5 bg-grey-accent border rounded-lg border-grey-accent',\n itemlight: 'p-5',\n itemSubText: 'text-grey-medium',\n btn: ['w-full sm:w-auto mt-10 sm:mt-12 mb-5'],\n successMessage: [\n 'flex gap-3 text-success rounded-lg text-sm font-normal',\n {\n background: 'rgba(56, 130, 0, 0.08)',\n padding: '12px 26px',\n width: 'fit-content',\n maxWidth: 500,\n },\n ],\n errorMessage: [\n 'flex gap-3 text-error rounded-lg text-sm font-normal',\n {\n background: 'rgba(214, 0, 0, 0.08)',\n padding: '12px 26px',\n width: 'fit-content',\n maxWidth: 500,\n },\n ],\n});\n\nconst Notifications = () => {\n const {\n preferences,\n updatePreferences,\n savePreferences,\n updateLastPreference,\n showSuccessMessage,\n requestMeta,\n } = useEmailPreferences();\n const modalProps = useModalControls();\n const updatePreference = (idx: number) => {\n const checked = preferences.reduce(\n (acc: number, p: Subscription) => (p.checked ? acc + 1 : acc),\n 0\n );\n const isUnchecking = preferences[idx].checked;\n if (checked === 1 && isUnchecking) {\n modalProps.toggleModalVisibility();\n return;\n }\n updatePreferences(idx);\n };\n\n const confirm = () => {\n updateLastPreference();\n modalProps.toggleModalVisibility();\n };\n\n if (requestMeta.hasError) {\n return null;\n }\n\n return (\n <div>\n <h1 className={styles.header}>Notifications</h1>\n <div>\n <div className=\"mb-8\">\n <h3 className={styles.subHeader}>Email</h3>\n <p className=\"text-grey-medium text-base\">\n Only receive the emails you want in your inbox. Select from the options\n below and we’ll update your preferences.\n </p>\n </div>\n <Preferences preferences={preferences} updatePreference={updatePreference} />\n </div>\n <Btn onClick={() => savePreferences(preferences)} className={styles.btn}>\n Save Preferences\n </Btn>\n <SuccessMessage\n show={showSuccessMessage === true}\n text=\"Your preferences have been saved successfully\"\n />\n <ErrorMessage\n show={showSuccessMessage === false}\n text=\"There was an error confirming your changes. Please try again or call Customer Support at 800-727-4715 (option 3) for assistance.\"\n />\n <UncheckWarningModal {...modalProps} confirm={confirm} />\n </div>\n );\n};\n\nexport const Preferences = ({\n preferences,\n updatePreference,\n}: {\n preferences: Subscription[];\n updatePreference: (_: number) => void;\n}) => (\n <ul>\n {preferences.map((preference: Subscription, idx: number) => (\n <li className={idx % 2 > 0 ? styles.itemlight : styles.itemdark} key={idx}>\n <div className=\"flex items-start gap-4\">\n <Checkbox\n text=\"\"\n checked={preference.checked}\n onChange={() => {\n updatePreference(idx);\n }}\n />\n <div className=\"text-base\">\n <p className={styles.itemHeader}>{preference.title}</p>\n <p className={styles.itemSubText}>{preference.subText}</p>\n </div>\n </div>\n </li>\n ))}\n </ul>\n);\n\ntype Message = {\n show: boolean;\n text: string;\n};\n\nconst SuccessMessage = ({ show, text }: Message) => {\n if (!show) {\n return null;\n }\n\n return (\n <div className={styles.successMessage}>\n <span>\n <FontAwesomeIcon icon={faCheck} />\n </span>\n <p>{text}</p>\n </div>\n );\n};\n\nconst ErrorMessage = ({ show, text }: Message) => {\n if (!show) {\n return null;\n }\n\n return (\n <div className={styles.errorMessage}>\n <span>\n <FontAwesomeIcon icon={faExclamationTriangle} />\n </span>\n <p>{text}</p>\n </div>\n );\n};\n\ntype VoidFn<T = void> = (d: T) => void;\ntype EmailPreferencesHook = {\n preferences: Subscription[];\n updatePreferences: VoidFn<number>;\n savePreferences: VoidFn<Subscription[]>;\n updateLastPreference: VoidFn;\n showSuccessMessage: boolean | null;\n requestMeta: RequestMeta;\n};\n\ntype RequestMeta = {\n hasError: boolean;\n loading: boolean | null;\n};\n\nconst useEmailPreferences = (): EmailPreferencesHook => {\n const originalPreferences = useRef<Subscription[]>([]);\n const [showSuccessMessage, setShowSuccessMessage] = useState<boolean | null>(null);\n const [preferences, setPreferences] = useState<Subscription[]>([]);\n const [request, setRequest] = useState<RequestMeta>({ hasError: false, loading: null });\n const pushSubscriptions = useRef<MessageMedium[]>([]);\n\n const updatePreferences = (index: number) => {\n setPreferences((preferences: Subscription[]) => {\n const p = [...preferences];\n p[index] = { ...p[index], checked: !p[index].checked };\n return p;\n });\n };\n\n async function savePreferences(prefs: Subscription[]) {\n const updatedPreferences = mergeEmailPreferences(pushSubscriptions.current, prefs);\n const payload = groupBySubscribedAndUnSubscribed(updatedPreferences);\n\n const result = await updateFamilySubscriptions(payload);\n\n if (!result.error) {\n setPreferences(prefs);\n setShowSuccessMessage(true);\n originalPreferences.current = prefs; // override the old original value to the updated set.\n } else {\n // revert to the previous changes in case the request failed\n setShowSuccessMessage(false);\n setPreferences(originalPreferences.current);\n }\n }\n\n const updateLastPreference = async () => {\n const i = preferences.findIndex((p) => p.checked);\n\n const newPrefs = [...preferences];\n newPrefs[i] = { ...newPrefs[i], checked: !newPrefs[i].checked };\n await savePreferences(newPrefs);\n };\n\n useEffect(() => {\n (async () => {\n setRequest((req) => ({ ...req, loading: true }));\n const result = await getFamilySubscriptions();\n if (result.data) {\n const prefs = normalizePreferences(result.data);\n const res = transformToEmailSubscriptions(result.data);\n pushSubscriptions.current = prefs;\n if (res) {\n const data = res;\n const prefs = addSubtextToSubscriptions(\n data,\n await getContentfulEntriesForNotifications()\n );\n setPreferences(prefs);\n originalPreferences.current = prefs;\n }\n }\n setRequest({ loading: false, hasError: !result });\n })();\n }, []);\n\n return {\n preferences,\n updatePreferences,\n savePreferences,\n updateLastPreference,\n showSuccessMessage,\n requestMeta: request,\n };\n};\n\nconst mergeEmailPreferences = (mediums: MessageMedium[], emailPrefs: Subscription[]) => {\n for (let i = 0; i < mediums.length; ++i) {\n const medium = mediums[i];\n\n for (let j = 0; j < medium.channels.length; ++j) {\n const channel = medium.channels[j];\n if (channel.channelName === 'Marketing Channel') {\n channel.messageTypes = emailPrefs.map((k) => {\n return {\n messageTypeId: k.id,\n messageTypeName: k.title,\n isSubscribed: k.checked,\n };\n });\n }\n }\n }\n return mediums;\n};\n\nconst transformToEmailSubscriptions = (\n data: FamilySubscriptionResponse | undefined | null\n): Subscription[] | undefined => {\n if (data) {\n const emailSubs = data.messageMediums.find(\n (medium: MessageMedium) => medium.messageMedium === 'Email'\n );\n const emailChannels = emailSubs?.channels.find(\n (channel: Channels) => channel.channelName === 'Marketing Channel'\n );\n const subscriptions = emailChannels?.messageTypes.map((messageType: MessageTypes) => {\n return {\n id: messageType.messageTypeId,\n title: messageType.messageTypeName,\n subText: '',\n checked: messageType.isSubscribed && emailChannels.isSubscribed,\n };\n });\n\n return subscriptions || [];\n }\n};\n\nconst UncheckWarningModal = ({\n isVisible,\n toggleModalVisibility,\n confirm,\n}: ModalControls & { confirm: () => void }) => {\n return (\n <Modal title=\"\" isOpen={isVisible} onClose={toggleModalVisibility}>\n <FontAwesomeIcon\n color={colors.warningDark}\n icon={faExclamationTriangle}\n className=\"text-4xl mx-auto\"\n />\n <h1 className=\"text-brand-dark text-2xl sm:text-29px font-semibold mt-4 sm:mt-6 mx-auto\">\n Are you sure?\n </h1>\n <p className=\"text-grey-medium text-center mt-2.5 sm:mt-4 text-17px\">\n You will be unsubscribed from all RaiseRight marketing emails. If you are an active\n participant, you will still receive transactional emails such as account and order\n related updates.\n </p>\n <div className=\"flex flex-col gap-7 w-full sm:w-40 mx-auto mt-7\">\n <Btn onClick={confirm}>Confirm</Btn>\n <ModalSecondaryBtn onClick={toggleModalVisibility}>Cancel</ModalSecondaryBtn>\n </div>\n </Modal>\n );\n};\n\nexport default Notifications;\n","import React, { useState, useEffect } from 'react';\nimport { Switch, Route, Redirect, useParams } from 'react-router-dom';\n\nimport { noop } from 'common/utils';\nimport { Routes } from 'routes';\nimport { PersonalSettingsContent } from './PersonalSettings/PersonalSettingsContent';\nimport { SecuritySettingsContent } from './SecuritySettingsContent';\nimport { PaymentSettingsContent } from 'features/account-settings/components/SettingsTab/PaymentOptions/PaymentSettingsContent';\nimport NotificationsContent from './Notifications';\nimport InviteFriendsFamilyContent from './InviteFriendsFamily';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\n\nconst Container = 'div';\n\ninterface SettingsContextProps {\n activeMenuItem: string;\n setActiveMenuItem: (_: string) => void;\n}\n\nconst initialState = {\n activeMenuItem: 'personal',\n setActiveMenuItem: noop,\n};\n\nexport const SettingsContext = React.createContext<SettingsContextProps>(initialState);\n\nexport const SettingsView = ({ children }: React.PropsWithChildren) => {\n const [activeMenuItem, setActiveMenuItem] = useState('personal-information');\n const { tab: activeTab } = useParams<{ tab: string }>();\n const { isEnabled, loadingFlags } = useFeatureFlags();\n\n useEffect(() => {\n if (activeTab) {\n setActiveMenuItem(activeTab);\n } else {\n setActiveMenuItem('personal-information');\n }\n }, [activeTab]);\n\n const context = {\n activeMenuItem,\n setActiveMenuItem,\n };\n\n return (\n <SettingsContext.Provider value={context}>\n <Container className=\"flex flex-col sm:flex-row\">\n {children}\n <div className=\"w-full py-7 sm:px-24\">\n <Switch>\n <Route\n path={Routes.ShopAccountSettingsInviteFriendsFamilyOptionsTab}\n component={InviteFriendsFamilyContent}\n />\n <Route\n path={Routes.ShopAccountSettingsPersonalInformationTab}\n component={PersonalSettingsContent}\n />\n <Route\n path={Routes.ShopAccountSettingsSecurityTab}\n component={SecuritySettingsContent}\n />\n <Route\n path={Routes.ShopAccountSettingsPaymentOptionsTab}\n component={PaymentSettingsContent}\n />\n {!loadingFlags && isEnabled(FeatureFlagTypes.enable_iterable) ? (\n <Route\n path={Routes.ShopAccountSettingsNotificationsTab}\n component={NotificationsContent}\n />\n ) : null}\n <Route path={Routes.ShopAccountSettingsTab}>\n <Redirect to={Routes.ShopAccountSettingsPersonalInformationTab} />\n </Route>\n </Switch>\n </div>\n </Container>\n </SettingsContext.Provider>\n );\n};\n\ninterface EditableFieldsContextProps {\n fieldToEdit: string;\n setFieldToEdit: (_: string) => void;\n}\n\nconst initialPersonalSettingsState = {\n fieldToEdit: '',\n setFieldToEdit: noop,\n};\n\nexport const EditableFieldsContext = React.createContext<EditableFieldsContextProps>(\n initialPersonalSettingsState\n);\n\nexport const EditableFieldsView = ({ children }: React.PropsWithChildren) => {\n const [fieldToEdit, setFieldToEdit] = useState<string>('');\n const context = { fieldToEdit, setFieldToEdit };\n return (\n <EditableFieldsContext.Provider value={context}>{children}</EditableFieldsContext.Provider>\n );\n};\n","import React, { useContext } from 'react';\nimport classNames from 'classnames';\n\nimport { SettingsContext } from './context';\nimport { useHistory } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { useHackReRenderForFeatureFlags } from 'common/hooks/useHackReRenderForFeatureFlags';\nimport { useP2PInviteSettings } from '../coordinator-dashboard/p2p-invite-settings/P2PInviteSettings';\n\nconst isActiveMenuItem = (menuItem: string, activeMenuItem: string) => menuItem === activeMenuItem;\n\nconst computeClassNames = (activeMenuItem: string) => {\n const menuItems = [\n 'personal-information',\n 'security',\n 'payment-options',\n 'notifications',\n 'invite-friends-family',\n ];\n\n return menuItems.reduce((acc: { [key: string]: string }, menuItem) => {\n acc[menuItem] = classNames(\n 'font-semibold text-xs text-brand underline cursor-pointer mb-5',\n isActiveMenuItem(menuItem, activeMenuItem)\n ? 'no-underline text-brand-dark cursor-default'\n : undefined\n );\n\n return acc;\n }, {});\n};\n\nconst SidebarMenu = () => {\n const { activeMenuItem } = useContext(SettingsContext);\n const history = useHistory();\n const classes = computeClassNames(activeMenuItem);\n const { isEnabled, loadingFlags } = useFeatureFlags();\n const { isP2PInviteEnabled } = useP2PInviteSettings();\n\n return (\n <ul className=\"flex flex-row flex-wrap justify-between gap-3 border-b border-r-0 border-l-0 border-t-0 border-grey-5 sm:flex-col\">\n <li\n onClick={() => history.push(Routes.ShopAccountSettingsPersonalInformationTab)}\n className={classes['personal-information']}\n >\n Personal Information\n </li>\n <li\n onClick={() => history.push(Routes.ShopAccountSettingsSecurityTab)}\n className={classes.security}\n >\n Security\n </li>\n <li\n onClick={() => history.push(Routes.ShopAccountSettingsPaymentOptionsTab)}\n className={`settings_payment_options ${classes['payment-options']}`}\n >\n Payment Options\n </li>\n {isP2PInviteEnabled ? (\n <li\n onClick={() =>\n history.push(Routes.ShopAccountSettingsInviteFriendsFamilyOptionsTab)\n }\n className={classes['invite-friends-family']}\n >\n Invite Friends & Family\n </li>\n ) : null}\n {!loadingFlags && isEnabled(FeatureFlagTypes.enable_iterable) ? (\n <li\n className={`settings_payment_options ${classes['notifications']}`}\n onClick={() => history.push(Routes.ShopAccountSettingsNotificationsTab)}\n >\n Notifications\n </li>\n ) : null}\n </ul>\n );\n};\n\nexport const HeaderAndMenu = () => {\n const key = useHackReRenderForFeatureFlags();\n\n return (\n <div className=\"settings_nav_menu flex flex-col w-full md:w-48\">\n <p className=\"text-brand-dark text-3xl mb-5 font-light sm:font-normal\">Settings</p>\n\n <SidebarMenu key={key} />\n </div>\n );\n};\n","import { useEffect, useState } from 'react';\nimport useFeatureFlags from './useFeatureFlags';\n\nexport const useHackReRenderForFeatureFlags = () => {\n const { loadingFlags, flags } = useFeatureFlags();\n const [key, setKey] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n if (loadingFlags || Object.keys(flags).length < 1) {\n setKey(key + 1);\n } else {\n clearInterval(intervalId);\n }\n }, 500);\n\n return () => {\n if (intervalId) {\n clearInterval(intervalId);\n }\n };\n });\n\n return key;\n};\n","import React from 'react';\n\nimport { SettingsView } from './context';\nimport { HeaderAndMenu } from './HeaderAndMenu';\n\nexport const Settings = () => {\n return (\n <SettingsView>\n <HeaderAndMenu />\n </SettingsView>\n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { Btn } from 'components/btn/Btn';\nimport { createStyles } from 'utils/createStyle';\nimport { OrganizationDetail } from 'common/api/crm/models/OrganizationDetail';\nimport { REACT_APP_LAUNCH_SCRIPWARE_URL } from 'common/env';\nimport { formatPhoneNumber } from 'utils';\nimport { useFirebaseConfigValues } from 'hooks/useFirebaseConfigValues';\nimport { Value } from 'firebase/remote-config';\nimport { appcuesSelectors } from './sectionConstants';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCopy, faDownload, faCheck } from '@fortawesome/pro-regular-svg-icons';\nimport { colors } from 'styles/settings';\nimport { useCopyToClipboard } from 'hooks/useCopyToClipboard';\nimport { Root, Trigger, Content } from 'components/popover/Popover';\nimport { faInfoCircle } from '@fortawesome/pro-solid-svg-icons';\nimport QRCode from 'qrcode';\nimport { logGetCoordinatorInvite } from 'config/analytics';\nimport { getEnrollmentUrl, getEnrollmentUrlQR } from 'utils/getEnrollmentUrl';\n\nconst styles = createStyles({\n btnStyles: ['my-4 sm:m-0', { width: 'fit-content' }],\n infoContainer: [\n 'w-full md:w-4/5 h-auto mb-5 rounded-xl p-6 pt-0',\n {\n boxShadow: '0 5px 10px rgba(0, 0, 0, 0.1)',\n },\n ],\n title: ['mt-5 mb-2 text-sm font-semibold'],\n blueStyle: 'text-brand text-md',\n popoverContent: ['text-grey-1 text-xs focus:outline-0 focus:transition-none'],\n resourceButton: [\n 'font-semibold text-sm mt-2 py-3.5 px-5 text-brand text-left border border-brand rounded-xl w-full transition-shadow',\n {\n '&:disabled': {\n color: colors.success,\n borderColor: colors.white,\n pointerEvents: 'none',\n },\n '&:active': {\n transition: 'none',\n boxShadow: 'none',\n },\n '&:focus': {\n transition: 'none',\n boxShadow: 'none',\n outline: 'none',\n },\n },\n ],\n});\n\nconst toBoolean = (v: Value) => v.asBoolean();\n\nexport const SideMenu = ({\n showScripWareBtn,\n organizationInfo,\n}: {\n showScripWareBtn: boolean;\n organizationInfo?: OrganizationDetail;\n}) => {\n const [showCode, setShowCode] = useState<boolean>(false);\n const [helperOpen, setHelperOpen] = useState<boolean>(false);\n const [isCopied, copyText] = useCopyToClipboard(5000);\n\n const showEnrollmentResources = useFirebaseConfigValues(\n 'enable_coordinator_enrollment_code_resources_web',\n undefined,\n toBoolean\n );\n\n const { btnStyles, infoContainer, blueStyle, title, popoverContent } = styles;\n const enrollmentCodeEmail = useFirebaseConfigValues<string>(\n 'enrollment_code_reset_email',\n '',\n (value: Value) => value.asString()\n );\n\n const goToScripware = () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).location.href = REACT_APP_LAUNCH_SCRIPWARE_URL;\n };\n\n const getEnrollmentCode = useCallback(\n (enrollmentCode: string) => {\n const charsToHide = enrollmentCode.length - 4;\n const hideString = `${'*'.repeat(charsToHide)}${enrollmentCode.slice(charsToHide)}`;\n return showCode ? enrollmentCode : hideString;\n },\n [showCode]\n );\n\n const onCopyCode = useCallback(\n (text: string) => {\n const urlWithCode = getEnrollmentUrl(text);\n copyText(urlWithCode);\n logGetCoordinatorInvite('code');\n },\n [copyText]\n );\n\n const onDownloadQrCode = async (text: string) => {\n const urlWithCode = getEnrollmentUrlQR(text);\n let dataUrl;\n try {\n dataUrl = await QRCode.toDataURL(urlWithCode, { width: 1000 });\n } catch (err) {\n console.error(err);\n }\n\n if (dataUrl) {\n logGetCoordinatorInvite('qr');\n const linkQrCode = document.createElement('a');\n linkQrCode.style.display = 'none';\n linkQrCode.href = dataUrl;\n linkQrCode.download = 'RR-QRCode.png';\n document.body.appendChild(linkQrCode);\n linkQrCode.click();\n document.body.removeChild(linkQrCode);\n window.URL.revokeObjectURL(dataUrl);\n }\n };\n\n const onOpenChangeHelper = (isOpen: boolean) => {\n setHelperOpen(isOpen);\n };\n\n const InfoContainer = () => {\n if (!organizationInfo) {\n return null;\n }\n const { name, phoneNumber, enrollmentCode } = organizationInfo;\n\n return (\n <div className={infoContainer}>\n <div className=\"border-b border-grey-light pb-6\">\n <p className={title}>{name}</p>\n\n <p className={title}>Organization Phone Number</p>\n <p className={blueStyle}>\n {phoneNumber ? formatPhoneNumber(phoneNumber) : 'Not available'}\n </p>\n </div>\n <p className={title}>Enrollment Code</p>\n <div className=\"w-4/5 sm:w-auto flex justify-between align-center\">\n <span className={blueStyle}>\n {enrollmentCode ? getEnrollmentCode(enrollmentCode) : 'Not available'}\n </span>\n <button\n className=\"text-brand underline text-sm\"\n onClick={() => setShowCode(!showCode)}\n >\n {showCode ? 'Hide' : 'Show'}\n </button>\n </div>\n {showEnrollmentResources && (\n <>\n <div className=\"flex align-center mt-3\">\n <p className={title}>Enrollment Code Resources</p>\n <Root open={helperOpen} onOpenChange={onOpenChangeHelper}>\n <Trigger className=\"h-4 sm:mt-4 mt-6 ml-1 flex\">\n <FontAwesomeIcon\n color={helperOpen ? colors.brandDark : colors.brand}\n className=\"sm:text-sm text-md\"\n icon={faInfoCircle}\n />\n </Trigger>\n <Content\n align=\"end\"\n alignOffset={-93}\n side=\"top\"\n className={popoverContent}\n sideOffset={5}\n >\n <div className=\"font-semibold pb-1\">Copy Invite Link:</div>\n <p>\n Paste this unique link in emails, social media posts to\n private groups, texts, or direct messages to participants.\n Those who access the link can enroll directly in your\n program and start earning.\n </p>\n <br />\n <div className=\"font-semibold pb-1\">Download QR Code:</div>\n <p>\n Add your custom QR code to flyers or other promotional\n materials for participants. Those who scan the code can\n enroll directly in your program and start earning.\n </p>\n <br />\n <div className=\"font-semibold pb-1\">Note:</div>\n <p>\n Ensure that the invite link and QR code are only shared with\n participants associated with your organization. Sharing\n these resources on public social media pages or websites can\n result in unwanted or fraudulent enrollments.\n </p>\n </Content>\n </Root>\n </div>\n\n <div className=\"w-4/5 sm:w-auto flex flex-col item-center\">\n <button\n disabled={isCopied}\n className={styles.resourceButton}\n onClick={() => onCopyCode(enrollmentCode!)}\n >\n <FontAwesomeIcon\n style={{ fontSize: '15px' }}\n icon={isCopied ? faCheck : faCopy}\n />\n <span className=\"ml-2\">\n {isCopied ? 'Copied to clipboard' : 'Copy Invite Link'}\n </span>\n </button>\n <button\n className={styles.resourceButton}\n onClick={() => onDownloadQrCode(enrollmentCode!)}\n >\n <FontAwesomeIcon style={{ fontSize: '15px' }} icon={faDownload} />\n <span className=\"ml-2\">Download QR Code</span>\n </button>\n </div>\n </>\n )}\n\n <div className=\"border-t border-grey-light pt-3 mt-7\">\n <div className=\"flex flex-col items-center mt-4 text-xs bg-pale-blue py-4 px-3 rounded-lg\">\n <div>Need a new Enrollment Code?</div>\n <div>Email us at</div>\n <a className=\"text-sm\" href={`mailto:${enrollmentCodeEmail}`}>\n {enrollmentCodeEmail}\n </a>\n <div className=\"py-2\">OR</div>\n <div>contact Customer Support</div>\n <a className=\"text-sm no-underline\" href=\"tel:1-800-727-4715\">\n 1-800-727-4715, option 3\n </a>\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <div className={`${appcuesSelectors.sideMenu} flex flex-col`}>\n <p className=\"md:max-w-xs text-brand-dark text-3xl mb-5 font-light sm:font-normal\">\n Coordinator Dashboard\n </p>\n\n <InfoContainer />\n\n {showScripWareBtn && (\n <Btn isSecondary onClick={goToScripware} className={btnStyles}>\n Launch SCRIPWARE\n </Btn>\n )}\n </div>\n );\n};\n","import React from 'react';\nexport interface CoordinatorDashboardContextProps {\n isScripWare: boolean;\n}\n\nexport const CoordinatorDashboardContext = React.createContext<CoordinatorDashboardContextProps>({\n isScripWare: false,\n});\n","import React, { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport { commonSections, ISection, ISectionEntries } from './sectionConstants';\nimport { createStyles } from 'utils/createStyle';\nimport { CoordinatorDashboardContext } from './context';\nimport { useRootSelector } from 'rootStore';\nimport { ReactComponent as NotificationBell } from 'media/images/notif-bell.svg';\nimport { Link } from 'react-router-dom';\n\nconst [orders, reports, participants, organization, payments, resources, inventory] =\n commonSections;\n\nexport const sections = {\n Orders: () => <Section section={orders} />,\n Reports: () => <Section section={reports} />,\n Participants: () => <Section section={participants} />,\n Organization: (props: { isEnabled: (key: string) => boolean }) => (\n <Section section={organization} isEnabled={props.isEnabled} />\n ),\n Payments: () => <Section section={payments} />,\n Resources: () => <Section section={resources} />,\n Inventory: () => <Section section={inventory} />,\n};\n\ninterface TitleProps {\n secondary?: boolean;\n}\n\nconst Title = ({ children, secondary }: React.PropsWithChildren<TitleProps>) => (\n <span className={secondary ? 'text-brand-dark text-lg' : 'text-grey-2 text-sm'}>\n {children}\n </span>\n);\n\nconst Section = ({\n section,\n isEnabled,\n}: {\n section: ISection<ISectionEntries>;\n isEnabled?: (key: string) => boolean;\n}) => {\n // hides section entries for specific roles\n const roleId = useRootSelector((s) => s.store.account.role);\n const entries = section.entries.filter((entry) => {\n const shouldShow = !entry.hideForRoles || !entry.hideForRoles.includes(roleId);\n\n if (shouldShow && isEnabled && entry.featureFlags?.length) {\n return entry.featureFlags?.some(isEnabled);\n }\n\n return shouldShow;\n });\n\n if (entries.length <= 0) {\n return null;\n }\n\n const id = section.id ?? '';\n\n return (\n <div className={`${id} mb-8`}>\n <Title>{section.title}\n \n
    \n );\n};\n\nconst Entries = ({ entries }: { entries: ISectionEntries[] }) => {\n const { isScripWare } = useContext(CoordinatorDashboardContext);\n\n return (\n
    \n {entries.map((entry: ISectionEntries, index: number) => {\n return (\n \n {!isScripWare || entry.forScripWare ? : null}\n \n );\n })}\n
    \n );\n};\n\nconst Entry = ({ entry }: { entry: ISectionEntries }) => {\n const hasNotifications = useSelector(entry?.checkNotifications || (() => false));\n const styles = genStyles();\n const id = entry.id ?? '';\n\n const Wrapper = ({ children }: React.PropsWithChildren) => {\n if (entry.internalLink) {\n return (\n \n {children}\n \n );\n }\n\n return (\n \n {children}\n \n );\n };\n\n return (\n
    \n \n
    \n \n {entry.title}\n {hasNotifications && (\n <NotificationBell className={styles.title} width=\"15px\" />\n )}\n \n
    Link
    \n
    \n
    {entry.description}
    \n
    \n
    \n );\n};\n\nconst genStyles = () => {\n return createStyles({\n // entry styles\n entryContainer: [\n 'py-6 border-b border-grey-1',\n {\n '&:first-child': { paddingTop: 0 },\n '&:last-child': { borderBottom: 0 },\n },\n ],\n entryDescription: ['text-grey-2 text-lg'],\n entryLink: ['flex items-center gap-2 text-xs'],\n title: ['inline ml-2', { verticalAlign: 'sub' }],\n });\n};\n","import React from 'react';\nimport { Btn } from 'components/btn/Btn';\nimport classname from 'classnames';\n\nexport interface BaseNotificationProps {\n title: React.ReactNode;\n buttonTitle?: string;\n buttonAction?: () => void;\n className?: string;\n}\n\nexport const BaseNotification = ({\n title,\n buttonTitle,\n buttonAction,\n className = '',\n}: BaseNotificationProps) => {\n return (\n \n
    {title}
    \n {buttonTitle && (\n
    \n \n {buttonTitle}\n \n
    \n )}\n
    \n );\n};\n","import React from 'react';\nimport classname from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faExclamationCircle } from '@fortawesome/pro-light-svg-icons';\n\nimport { BaseNotification, BaseNotificationProps } from './BaseNotification';\n\nexport enum NotificationType {\n INFO = 'info',\n ERROR = 'error',\n SUCCESS = 'success',\n}\n\ninterface NotificationProps extends Omit {\n title: string;\n subtitle?: string;\n type: NotificationType;\n}\n\nconst classes = {\n [NotificationType.INFO]: { containerClasses: 'border-brand', titleClasses: 'text-brand' },\n [NotificationType.ERROR]: { containerClasses: 'border-error', titleClasses: 'text-error' },\n [NotificationType.SUCCESS]: {\n containerClasses: 'border-success',\n titleClasses: 'text-success',\n },\n};\n\nexport const Notification = (props: NotificationProps) => {\n return (\n \n }\n className={classes[props.type].containerClasses}\n />\n );\n};\n\nconst Title = ({\n title,\n subtitle,\n className,\n}: {\n title: string;\n subtitle?: string;\n className: string;\n}) => {\n return (\n
    \n \n
    \n

    {title}

    \n

    {subtitle}

    \n
    \n
    \n );\n};\n","import React from 'react';\nimport { useNavMenu } from 'components/nav/context';\nimport { Notification, NotificationType } from 'components/alerts/notifications/Notification';\nimport { NotificationDataType } from 'hooks/useNotifications';\nimport { useIsScripware } from 'hooks/useIsScripware';\nimport { ReactComponent as NotificationBell } from '../../../../media/images/notif-bell.svg';\n\ninterface PendingOrderNotificationProps {\n notification: NotificationDataType;\n}\nexport const PendingOrderNotification = ({ notification }: PendingOrderNotificationProps) => {\n const { title, subtitle, actionName, action } = notification;\n const isScripware = useIsScripware();\n\n return (\n
    \n action({ isScripware })}\n />\n
    \n );\n};\n\nexport const Notifications = () => {\n const { notifications } = useNavMenu();\n\n if (!notifications.hasNotifications) {\n return null;\n }\n\n return (\n
    \n
    \n Notifications\n {notifications.hasNotifications && }\n
    \n
    \n {notifications.notifications.map((notification: NotificationDataType) => (\n \n ))}\n
    \n
    \n );\n};\n","import React from 'react';\nimport { sections } from './sections';\nimport { CoordinatorDashboardContext } from './context';\nimport { Notifications } from './DashboardNotifications';\nimport useFeatureFlags from 'common/hooks/useFeatureFlags';\n\nexport const DashboardContent = ({ isScripWare }: { isScripWare: boolean }) => {\n const { isEnabled } = useFeatureFlags();\n\n return (\n
    \n \n \n {!isScripWare && }\n \n \n \n \n {!isScripWare && }\n \n \n
    \n );\n};\n","import React, { useEffect } from 'react';\nimport { SideMenu } from 'features/account-settings/components/coordinator-dashboard/SideMenu';\nimport { DashboardContent } from 'features/account-settings/components/coordinator-dashboard/DashboardContent';\nimport { useRootSelector, FeaturesState } from 'common/features/featuresReducer';\nimport { OrganizationMembership } from 'common/api/crm/models/OrganizationMembership';\nimport Skeleton from 'react-loading-skeleton';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { getOrganizationDetail } from 'common/api/crm/organization/service';\nimport { selectDefaultOrganization } from 'common/features/store/duck/home/duck';\nimport { Switch, Route } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { OrganizationSettings } from './OrganizationSettings';\n\nconst isScripWareOrg = (\n orgId: string,\n organizations?: Record\n): [boolean, OrganizationMembership | null] => {\n if (!organizations || !orgId) {\n return [false, null];\n }\n\n const org = organizations[orgId];\n return [org.organization.isScripWareOrg, org];\n};\n\nexport const CoordinatorDashboard = () => {\n const defaultOrganization = useRootSelector(selectDefaultOrganization);\n const selectedOrganizationId = defaultOrganization?.id as string;\n\n const organizations = useRootSelector(\n (state: FeaturesState) => state.store.home.homeDetails?.organizations\n );\n const [isScripWare] = isScripWareOrg(selectedOrganizationId, organizations);\n const [loadOrgDetailData, , orgDetailRes] = useApi(getOrganizationDetail);\n\n useEffect(() => {\n if (selectedOrganizationId) {\n loadOrgDetailData(selectedOrganizationId);\n }\n }, [selectedOrganizationId, loadOrgDetailData]);\n\n // CASE: page still loading -- we shouldn't render coordinator dashboard\n if (!selectedOrganizationId) {\n return ;\n }\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n
    \n );\n};\n","import React, { useContext, useEffect } from 'react';\nimport { Switch, Route, useHistory, Redirect } from 'react-router-dom';\n\nimport { AccountSettingsContext, TabNames, AccountSettingsState } from '../screens/context';\n\nimport { TabsContainer } from './Tabs';\nimport { Dashboard } from './Dashboard';\nimport { OrderHistory } from './OrderHistory';\nimport { Settings } from './SettingsTab/Settings';\nimport { CoordinatorDashboard } from './coordinator-dashboard/CoordinatorDashboard';\n\nimport { Routes } from 'routes';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { useFeatureFlags, FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\n\ninterface Tabs extends Pick {\n isCoordinator: boolean | null;\n}\n\nconst Tabs = ({ pageIsLoading, activeTab, setActiveTab, isCoordinator }: Tabs) => {\n const history = useHistory();\n const { isEnabled } = useFeatureFlags();\n\n const showCoordinatorDashboard =\n isCoordinator && !isEnabled(FeatureFlagTypes.enable_unified_coordinator_dashboard);\n\n useEffect(() => {\n if (isCoordinator !== null && activeTab === TabNames.CoordinatorDashboard) {\n if (!isCoordinator) {\n history.replace(Routes.ShopAccountSettingsDashboardTab);\n } else if (!showCoordinatorDashboard) {\n history.replace(Routes.CoordinatorDashboardHome);\n }\n }\n }, [showCoordinatorDashboard, activeTab, isCoordinator]);\n\n const setSelectedTab = (tab: string) => {\n setActiveTab(tab as TabNames);\n // do routing here\n switch (tab) {\n case TabNames.Dashboard: {\n history.replace(Routes.ShopAccountSettingsDashboardTab);\n return;\n }\n case TabNames.OrderHistory: {\n history.replace(Routes.ShopAccountSettingsOrderHistoryTab);\n return;\n }\n case TabNames.Settings: {\n history.replace(Routes.ShopAccountSettingsPersonalInformationTab);\n return;\n }\n case TabNames.CoordinatorDashboard: {\n history.replace(Routes.ShopAccountSettingsCoordinatorTab);\n return;\n }\n default:\n return;\n }\n };\n return (\n
    \n \n {showCoordinatorDashboard && (\n
    \n \n
    \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n {showCoordinatorDashboard && (\n \n \n \n )}\n \n \n
    \n );\n};\n\nexport const AccountSettingsContent = () => {\n const { pageIsLoading, activeTab, setActiveTab } = useContext(AccountSettingsContext);\n const isCoordinator = useRootSelector((s) => {\n const activeOrg = s.store.home.homeDetails?.defaultOrganization?.isActive;\n const loading = s.store.account.accountAsyncState.loading;\n\n if (activeOrg === undefined || loading) {\n return null;\n }\n\n return s.store.account.isCoordinator && activeOrg;\n });\n\n return (\n
    \n \n
    \n );\n};\n","import React from 'react';\n\nimport { AccountSettingsHeader } from '../components/AccountSettingsHeader';\nimport { AccountSettingsContent } from '../components/AccountSettingsContent';\n\nimport { AccountSettingsView } from './context';\n\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { withAuth } from 'features/auth/components/withAuth';\nimport useFeatureFlags, { FeatureFlagTypes } from 'common/hooks/useFeatureFlags';\nimport { LoadingScreen } from 'components/loading-screen/LoadingScreen';\nimport { Routes } from 'routes';\nimport { Redirect, useRouteMatch } from 'react-router-dom';\n\nexport const AccountSettingsScreen = withAuth()(() => {\n const { isEnabled, loadingFlags } = useFeatureFlags();\n const enableUnifiedCoordinatorDashboard = isEnabled(\n FeatureFlagTypes.enable_unified_coordinator_dashboard\n );\n\n const routeMatchWithCoordinatorDashboard = useRouteMatch(\n Routes.ShopAccountSettingsCoordinatorTab\n );\n\n if (loadingFlags) {\n return ;\n }\n\n if (enableUnifiedCoordinatorDashboard && routeMatchWithCoordinatorDashboard) {\n return ;\n }\n\n return (\n \n \n \n \n \n \n );\n});\n","import React from 'react';\n\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { withAuth } from 'features/auth/components/withAuth';\n\nconst ArchivedCardScreen = withAuth()(() => (\n \n

    Archived Cards

    \n
    \n));\n\nexport default ArchivedCardScreen;\n","import React, { useState } from 'react';\nimport { faTimesCircle } from '@fortawesome/pro-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { Modal, ModalSize } from '../../../components/modal/Modal';\nimport { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\nimport { useHistory } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { useDispatch } from 'react-redux';\nimport { deleteCardThunk } from 'common/features/store/duck/wallet/duck';\nimport { useRootSelector } from 'rootStore';\n\ninterface ArchiveCardModalProps {\n isOpen: boolean;\n closeModal: () => void;\n cardId: string;\n cardType: ProductType;\n}\n\ntype StringMap = {\n [key in ProductType]: {\n successText: [string, string, string];\n promptText: [string, string, string];\n verb: string;\n capitalVerb: string;\n };\n};\n\nconst stringMap: StringMap = {\n [ProductType.EGiftCard]: {\n successText: [\n 'This card has been Archived',\n 'You have successfully removed this card. You can access this card in the Archive section.',\n 'Close',\n ],\n promptText: [\n 'Archive Card',\n 'This will remove the card from the My Cards section. You can still access this card from the Archive section.',\n 'Cancel',\n ],\n verb: 'archiving',\n capitalVerb: 'Archiving',\n },\n [ProductType.GiftCard]: {\n successText: [\n 'This Card has been Removed',\n 'You have successfully deleted this card from your wallet.',\n 'Close',\n ],\n promptText: [\n 'Remove This Card',\n 'This will delete the card. You will not be able to access this card again unless you Add Card back to your wallet.',\n 'Cancel',\n ],\n verb: 'removing',\n capitalVerb: 'Removing',\n },\n [ProductType.Reload]: {\n successText: ['', '', ''],\n promptText: ['', '', ''],\n verb: '',\n capitalVerb: '',\n },\n};\n\nconst styles = createStyles({\n confirmButton: [\n 'ml-auto mr-auto w-2/3 rounded-full bg-brand text-white font-semibold text-lg py-2 mb-2',\n { ':disabled': { backgroundColor: colors.greyAccent, color: colors.grey4 } },\n ],\n});\n\nfunction generateModalMetaData(\n submitSuccess: boolean,\n cardType: ProductType\n): [string, string, string] {\n if (submitSuccess) {\n return stringMap[cardType].successText;\n }\n\n return stringMap[cardType].promptText;\n}\n\nconst ArchiveCardModal = ({ isOpen, closeModal, cardId, cardType }: ArchiveCardModalProps) => {\n const [requestError, setRequestError] = useState('');\n const [loading, setLoading] = useState(false);\n const [archiveSuccess, setArchiveSuccess] = useState(false);\n const [title, caption, buttonText] = generateModalMetaData(archiveSuccess, cardType);\n const history = useHistory();\n const dispatch = useDispatch();\n const userId = useRootSelector((r) => r.store.account.userId) as string;\n\n const onConfirmArchive = async (): Promise => {\n setLoading(true);\n\n const res = await deleteCardThunk(userId, cardId)(dispatch);\n\n setLoading(false);\n\n if (res.error) {\n return setRequestError(\n `There was an issue ${stringMap[cardType].verb} the card. Please try again later.`\n );\n }\n\n setArchiveSuccess(true);\n };\n\n const onCloseModal = () => {\n closeModal();\n archiveSuccess && history.push(Routes.WalletMyCards);\n };\n\n return (\n \n {requestError && (\n \n )}\n
    {caption}
    \n {!archiveSuccess && (\n \n {loading ? `${stringMap[cardType].capitalVerb} Card...` : 'Yes'}\n \n )}\n \n {buttonText}\n \n \n );\n};\n\nexport default ArchiveCardModal;\n","import React, { useRef, useState } from 'react';\nimport { faCheckCircle, faExclamationTriangle } from '@fortawesome/pro-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classnames from 'classnames';\nimport { useDispatch } from 'react-redux';\n\nimport { upsertCard } from 'common/features/store/duck/wallet/duck';\nimport { Card } from 'common/api/e-comm/models/Card';\nimport { Modal, ModalSize } from '../../../components/modal/Modal';\nimport { Formik, FormikHelpers } from 'formik';\nimport { FormikTextField } from '../../../components/fields/FormikTextField';\nimport { ActivityIndicator } from 'components/activity-indicator/ActivityIndicator';\nimport { createStyles } from 'utils/createStyle';\nimport { colors } from 'styles/settings';\nimport { editCardDetails } from 'common/api/wallet/cards';\nimport { delay } from 'common/utils';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport {\n walletCardPinValidator,\n walletCardNameValidator,\n} from 'common/modules/form-validation/validators';\n\ninterface EditCardModalProps {\n isOpen?: boolean;\n closeModal: () => void;\n card: Card;\n}\n\ninterface EditCardFormValues {\n number: string;\n pin?: string;\n name?: string;\n}\n\nconst styles = createStyles({\n submitButton: [\n 'rounded-full bg-brand text-white font-semibold text-lg py-2 mb-2 w-full',\n { ':disabled': { backgroundColor: colors.greyAccent, color: colors.grey4 } },\n ],\n textInput: [\n 'bg-grey-accent',\n {\n border: 'none',\n minWidth: 275,\n '&::-webkit-calendar-picker-indicator': { display: 'none !important' },\n '&::-webkit-list-button': { display: 'none !important' },\n },\n ],\n cardNumberInput: [{ ':disabled': { color: colors.grey3 } }],\n});\n\nconst RetryUpdateCard = ({\n attempts,\n isSubmitting,\n}: {\n attempts: number;\n isSubmitting: boolean;\n}) => {\n return (\n
    \n {attempts > 0 && attempts < 3 && (\n \n {!isSubmitting ? (\n Retry\n ) : (\n \n \n \n )}\n \n )}\n
    \n );\n};\n\nconst EditCardModal = ({ isOpen, closeModal, card }: EditCardModalProps) => {\n const dispatch = useDispatch();\n const submitAttempts = useRef(0);\n const [formError, setFormError] = useState('');\n const [submitSuccess, setSubmitSuccess] = useState(false);\n const { userId } = useRootSelector((s) => s.store.account);\n\n const editCardFormInitialValues = {\n number: (card && card.cardNumber) || '',\n pin: (card && card.pin) || '',\n name: (card && card.name) || '',\n };\n\n const onSubmit = async (\n values: EditCardFormValues,\n actions: FormikHelpers\n ) => {\n if (!userId) {\n return;\n }\n\n actions.setSubmitting(true);\n\n const errMsg =\n submitAttempts.current > 1\n ? 'Unable to update card. Please try again later.'\n : 'Unable to update card.';\n\n try {\n const result = await editCardDetails(card.id, values.name || '', values.pin || '');\n\n // add a small delay for better loading responsiveness\n await delay(1000);\n submitAttempts.current += 1;\n\n if (result.error) {\n actions.setSubmitting(false);\n setFormError(errMsg);\n return;\n }\n\n const updatedCard: Card = {\n ...card,\n pin: values.pin || '',\n name: values.name || '',\n };\n\n dispatch(upsertCard({ userId, card: updatedCard }));\n actions.setSubmitting(false);\n setSubmitSuccess(true);\n } catch (err) {\n actions.setSubmitting(false);\n setFormError(errMsg);\n }\n };\n\n const onClose = () => {\n setFormError('');\n setSubmitSuccess(false);\n submitAttempts.current = 0;\n closeModal();\n };\n\n return (\n \n \n initialValues={editCardFormInitialValues}\n onSubmit={onSubmit}\n >\n {(formikProps) => (\n \n {formError && (\n \n )}\n {!submitSuccess && (\n 0 ? 'hidden' : 'block'\n )}\n >\n \n className={classnames(styles.textInput, styles.cardNumberInput)}\n wrapperStyles=\"mb-7\"\n placeholder=\"Enter gift card number\"\n label=\"Card Number\"\n name=\"number\"\n disabled\n />\n \n className={styles.textInput}\n wrapperStyles=\"mb-7\"\n placeholder=\"Enter security pin if available\"\n label=\"PIN\"\n name=\"pin\"\n validate={(value) => {\n if (value.length) {\n return walletCardPinValidator(value);\n }\n }}\n />\n \n className={styles.textInput}\n wrapperStyles=\"mb-12\"\n placeholder=\"Enter custom card name\"\n label=\"Card Name (Optional)\"\n name=\"name\"\n onChange={() => {\n formikProps.setFieldTouched('name');\n }}\n validate={(value) => {\n if (value.length) {\n return walletCardNameValidator(value);\n }\n }}\n />\n 2 ||\n submitSuccess\n }\n >\n {formikProps.isSubmitting ? 'Updating Card...' : 'Save'}\n \n
    \n )}\n {submitSuccess ? (\n \n \n \n
    \n Card Successfully Updated\n
    \n
    \n \n ) : (\n \n )}\n {\n evt.preventDefault();\n formikProps.resetForm();\n onClose();\n }}\n className=\"text-brand font-semibold underline text-lg py-2\"\n >\n {!submitSuccess && submitAttempts.current === 0 ? 'Cancel' : 'Close'}\n \n \n )}\n \n \n );\n};\n\nexport default EditCardModal;\n","import React, { useEffect, useState } from 'react';\nimport { getCardBarcode, getRemoteCardDetails } from 'common/api/wallet/cards';\nimport { Card } from 'common/api/e-comm/models/Card';\nimport { BarCode } from 'components/custom-icons';\nimport { ECommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { getCardName } from 'common/api/utils/getCardName';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { useDispatch } from 'react-redux';\nimport { upsertBarcodes } from 'common/features/store/duck/wallet/duck';\nimport { X } from 'react-feather';\nimport { useSpring, animated } from 'react-spring';\nimport { createStyles } from 'utils/createStyle';\nimport { ProductType } from 'common/api/e-comm/models/Product';\nimport { RemoteCardDetails } from 'common/api/e-comm/models/RemoteCardDetails';\nimport { useAlert } from 'modules/alerts';\n\ninterface IMobileBarCodeViewer {\n brand?: ECommBrand;\n card?: Card | null;\n shouldHideCardBarCode?: boolean;\n}\n\nconst styles = createStyles({\n barcode: [\n 'mx-auto',\n {\n width: 315,\n },\n ],\n cardname: ['', { height: 75, width: 120 }],\n});\n\nexport const MobileBarCodeViewer = (props: IMobileBarCodeViewer) => {\n const [showBarcodeViewer, setShowBarcodeViewer] = useState(false);\n const [remoteCardDetails, setRemoteCardDetails] = useState<\n RemoteCardDetails | null | undefined\n >(null);\n const alert = useAlert();\n const { card, shouldHideCardBarCode } = props;\n\n const openBarcodeViewer = () => {\n setShowBarcodeViewer((state: boolean) => !state);\n };\n\n useEffect(() => {\n if (card?.settings?.useRemoteCardStorage) {\n const fetchRemoteCard = async () => {\n try {\n const { data } = await getRemoteCardDetails(card.id);\n setRemoteCardDetails(data);\n } catch (e) {\n alert({ message: 'Unable to fetch card details.' });\n }\n };\n fetchRemoteCard();\n }\n }, [card, alert]);\n\n // CASE: we __only__ want to render the barcode viewer for eGift cards\n if ((props.card && props.card.type !== ProductType.EGiftCard) || shouldHideCardBarCode) {\n return null;\n }\n\n return (\n
    \n \n \n
    \n

    Use Card

    \n {!remoteCardDetails && (\n \n )}\n {remoteCardDetails && (\n \n )}\n
    \n );\n};\n\ninterface IBarCodeViewer extends Pick {\n isOpen: boolean;\n onClose: React.Dispatch>;\n}\n\ninterface ISchModal {\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst SchModal = ({ isOpen, onClose, children }: React.PropsWithChildren) => {\n const styles = useSpring({\n opacity: isOpen ? 1 : 0,\n });\n\n if (!isOpen) {\n return null;\n }\n\n return (\n
    \n
    \n \n
    \n \n
    \n
    {children}
    \n
    \n
    \n
    \n );\n};\n\nconst BarCodeViewer = (props: IBarCodeViewer) => {\n const onClose_ = () => {\n props.onClose(false);\n };\n\n if (!props.card) {\n return null;\n }\n\n return (\n \n
    \n \n \n \n \n
    \n
    \n );\n};\n\ninterface RemoteCardViewerProps extends IBarCodeViewer {\n remoteCardDetails: RemoteCardDetails;\n}\n\nconst RemoteCardViewer = ({\n card,\n brand,\n isOpen,\n onClose,\n remoteCardDetails,\n}: RemoteCardViewerProps) => {\n const onClose_ = () => onClose(false);\n\n return (\n \n
    \n \n {card && }\n
    \n
    \n

    CardNumber

    \n

    {remoteCardDetails.cardNumber}

    \n
    \n
    \n

    Pin

    \n

    {remoteCardDetails.pin}

    \n
    \n
    \n
    \n
    \n );\n};\n\nconst CardImage = ({ brand }: { brand?: ECommBrand }) => (\n
    \n {brand ? (\n \n ) : (\n
     
    \n )}\n
    \n);\n\nconst CardName = ({ card, brand }: { card: Card; brand?: ECommBrand }) => (\n

    {getCardName(card, brand)}

    \n);\n\nconst shouldUseBarcode = (card: Card): boolean => {\n return Boolean(\n card.settings &&\n card.settings.cardNumber &&\n card.settings.cardNumber.isBarcodeVisible &&\n card.settings.barcodeType != null\n );\n};\n\nconst CardBarcode = ({ card }: { card: Card }) => {\n const barcode = useRootSelector((s) => s.store.wallet.barcodesById[card.id]);\n const dispatch = useDispatch();\n\n useEffect(() => {\n const fetchBarCode = async () => {\n const response = await getCardBarcode(card.id);\n if (response.data) {\n dispatch(upsertBarcodes({ [card.id]: response.data }));\n }\n };\n\n if (card && shouldUseBarcode(card) && !barcode) {\n fetchBarCode();\n }\n }, [barcode, card, dispatch]);\n\n if (!barcode) {\n return null;\n }\n\n return (\n
    \n \n
    \n );\n};\n\nconst ExtraInfo = ({ card }: { card: Card }) => {\n return (\n
    \n \n \n \n
    \n );\n};\n\nconst CardNumberRenderer = ({ card }: { card: Card }) => {\n // NOTE: do not render anything if cardNumber isn't visible\n if (!(card?.settings?.cardNumber?.isVisible || card?.formattedCardNumber)) {\n return null;\n }\n\n return (\n
    \n

    \n {card?.settings?.cardNumber?.label || 'Card Number'}\n

    \n

    {card.formattedCardNumber}

    \n
    \n );\n};\n\nconst PinRenderer = ({ card }: { card: Card }) => {\n if (!card?.settings?.pin || !card?.settings?.pin?.isVisible || !card?.pin) {\n return null;\n }\n\n return (\n
    \n

    {card?.settings?.pin?.label || 'PIN'}

    \n

    {card.pin}

    \n
    \n );\n};\n\nconst AdditionalLabelRenderer = ({ card }: { card: Card }) => {\n if (!card?.settings?.extraField?.isVisible || !card.extraFieldValue) {\n return null;\n }\n\n return (\n
    \n

    \n {card?.settings?.extraField?.label || 'Event Number'}\n

    \n

    {card.extraFieldValue}

    \n
    \n );\n};\n","import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react';\nimport { Form, Formik, FormikHelpers, FormikProps } from 'formik';\nimport { useParams } from 'react-router';\nimport { NavLink } from 'react-router-dom';\nimport classNames from 'classnames';\n\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { withAuth } from 'features/auth/components/withAuth';\nimport { MainLayout } from '../components/MainLayout';\nimport {\n getDetailsAndExclusionsFilter,\n ProductDetailTerms,\n} from 'features/product/ProductDetailTerms';\nimport Skeleton from 'react-loading-skeleton';\nimport { getWalletCardById, getRemoteCardDetails } from 'common/api/wallet/cards';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { createStyles } from 'utils/createStyle';\nimport { getBrand, getProductsByBrand } from 'common/api/e-comm/brands';\nimport { ProductAmountInput } from 'features/product/components/ProductAmountInput';\nimport { ReloadableProductAmountFormData } from 'features/product/components/ReloadTabPanel';\nimport { sortOptionValuesAscending } from 'features/product/components/utils';\nimport { Btn } from 'components/btn/Btn';\nimport { FormBtn } from 'components/form-btn';\nimport { useAddProductToCart } from 'hooks/useAddProductToCart';\nimport { Product, ProductType } from 'common/api/e-comm/models/Product';\nimport { Routes } from 'routes';\nimport { Card, EGiftCard } from 'common/api/e-comm/models/Card';\nimport { useCardBalance } from 'common/hooks/useCardBalance';\nimport { CardBalance, CardBalanceErrorType } from '../components/CardBalance';\nimport { useScrollToTop } from 'hooks/useScrollToTop';\nimport { copyTextToClipboard } from 'utils';\nimport { faEdit } from '@fortawesome/pro-regular-svg-icons';\nimport { faCheckCircle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport ArchiveCardModal from '../components/ArchiveCardModal';\nimport EditCardModal from '../components/EditCardModal';\nimport { LinkBtn } from 'components/link-btn';\nimport { MobileBarCodeViewer } from './BarcodeViewer';\nimport { RemoteCardDetails } from 'common/api/e-comm/models/RemoteCardDetails';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { StatusCode } from 'common/api/config';\nimport { useAlert } from 'modules/alerts';\nimport { waitPromise } from 'utils/promiseHelpers';\nimport {\n selectWalletAffiliateBonuses,\n viewCardThunk,\n} from 'common/features/store/duck/wallet/duck';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectUserId } from 'common/features/store/duck/account/duck';\nimport { useThirdPartyViewerUrl } from 'common/hooks/useThirdPartyViewerUrl';\nimport { ShopOnlineBanner } from '../components/ShopOnlineBanner';\nimport { useRefreshWalletPolling } from './MyCards';\n\nconst styles = createStyles({\n termsSkeleton: ['w-full mt-4', { height: '11rem', minWidth: '100%' }],\n title: 'w-full block text-3xl text-brand-dark font-bold mb-5',\n informations: ['flex justify-between w-full items-center gap-2 lg:gap-8 pb-4'],\n brandImageContainer: [\n 'hidden sm:flex w-40 items-center justify-center \\\n rounded-xl overflow-hidden p-2 border border-grey-5',\n {\n minWidth: '160px',\n minHeight: '120px',\n },\n ],\n brandImageContainerMobile: [\n 'flex sm:hidden w-40 flex items-center justify-center \\\n rounded-md overflow-hidden p-1 border border-grey-5',\n {\n width: '60px',\n height: '60px',\n },\n ],\n giftCardDetails: ['w-full sm:w-extra-small rounded-xl p-2 bg-white border border-dark-blue'],\n cardDetailContainer: [\n 'font-semibold text-xs leading-4 block text-center h-fit rounded-xl py-4 sm:py-2 p-2 bg-pale-blue border border-brand w-full sm:w-extra-small',\n ],\n addMoneyToThisCard: 'text-xl text-brand-dark font-bold mb-5',\n separator: ['w-full border-t mt-5 sm:mt-8 mb-4', { borderColor: '#C4C4C4' }],\n});\n\nconst canAddProductToCart = (response?: Response | null) => {\n return !(StatusCode.Gone === response?.status || StatusCode.NotFound === response?.status);\n};\n\nconst getProduct = (products: Product[], card: Card) => {\n const isPhysicalCard = card?.type === 'GiftCard';\n\n // get the reloadable product for physical card.\n if (isPhysicalCard) {\n return products.find((product) => product.type === 'Reload');\n }\n\n // get the product that matches the card type\n return products.find((p) => card?.type && p.type === card?.type);\n};\n\nexport const MyCardDetailsContent = () => {\n useScrollToTop();\n\n const addMoneyContainer = useRef(null);\n const { cardId } = useParams<{ cardId: string }>();\n const [showEditModal, setShowEditModal] = useState(false);\n const [loadCardById, , loadCardByIdResponse] = useApi(getWalletCardById);\n const [loadBrand, loadBrandAsyncState, loadBrandResponse] = useApi(getBrand);\n const [showArchiveModal, setShowArchiveModal] = useState(false);\n const [pageLoading, setPageLoading] = useState(true);\n const [remoteCardDetails, setRemoteCardDetails] = useState<\n RemoteCardDetails | null | undefined\n >(null);\n const [loadProductsByBrand, loadProductsByBrandAsyncState, loadProductsByBrandResponse] =\n useApi(getProductsByBrand);\n const alert = useAlert();\n const dispatch = useDispatch();\n const userId = useSelector(selectUserId);\n\n const card = useMemo(() => loadCardByIdResponse?.data, [loadCardByIdResponse]);\n const brand = useMemo(() => loadBrandResponse?.data || undefined, [loadBrandResponse]);\n const product = useMemo(\n () => (card ? getProduct(loadProductsByBrandResponse?.data || [], card) : null),\n [loadProductsByBrandResponse, card]\n );\n const affiliateBrandOffersSelector = useRootSelector(selectWalletAffiliateBonuses);\n\n useRefreshWalletPolling();\n\n const affiliateOffers = useMemo(() => {\n if (card?.brandId && affiliateBrandOffersSelector) {\n return affiliateBrandOffersSelector(`${card.brandId}`);\n }\n }, [card?.brandId, affiliateBrandOffersSelector]);\n\n const shouldHideCardInfo = useMemo(() => !!card?.isThirdPartyViewerFlow, [card]);\n\n const responseThirdPartyViewerUrl = useThirdPartyViewerUrl({\n cardId: card?.id ?? null,\n shouldHideCardInfo: shouldHideCardInfo,\n });\n\n const defaultOrg = useRootSelector((s) => {\n const homeDetails = s.store.home.homeDetails;\n\n if (homeDetails?.organizations && homeDetails?.defaultOrganization) {\n return homeDetails?.organizations[homeDetails?.defaultOrganization?.id];\n }\n });\n\n const canCheckout = Boolean(defaultOrg?.isActive && defaultOrg?.organization?.isActive);\n\n const { addProductToCart } = useAddProductToCart();\n const [addingToCart, setAddingToCart] = useState(false);\n\n const {\n isLoading: isCardBalanceLoading,\n data: cardBalanceData,\n error: cardBalanceError,\n } = useCardBalance(card);\n\n const cardBalance = useMemo(() => {\n if (card && card.settings?.canCheckBalance) {\n return cardBalanceData?.cardBalance || 0;\n }\n return card?.cardBalance || 0;\n }, [cardBalanceData, card]);\n\n useEffect(() => {\n if (cardId) {\n loadCardById(cardId).finally(() => {\n setPageLoading(false);\n });\n }\n }, [cardId, loadCardById]);\n\n useEffect(() => {\n if (userId && cardId) {\n viewCardThunk(userId, cardId)(dispatch);\n }\n }, [userId, cardId, dispatch]);\n\n useEffect(() => {\n if (card?.settings?.useRemoteCardStorage) {\n const fetchRemoteCard = async () => {\n try {\n const { data } = await getRemoteCardDetails(card.id);\n setRemoteCardDetails(data);\n } catch (e) {\n alert({ message: 'Unable to fetch card details.' });\n }\n };\n fetchRemoteCard();\n }\n }, [card, alert]);\n\n useEffect(() => {\n if (card && !loadProductsByBrandResponse?.data) {\n loadBrand(card.brandId);\n loadProductsByBrand(card.brandId);\n }\n }, [card, loadBrand, loadProductsByBrand, loadProductsByBrandResponse]);\n\n const initialValues: ReloadableProductAmountFormData = {\n cardId: card?.id || '',\n selectedOptions: product\n ? Object.fromEntries(\n product.options.map((opt) => [\n opt.id,\n sortOptionValuesAscending(opt.values)[0].value,\n ])\n )\n : {},\n priceOverride: product?.minValue || 0,\n quantity: 1,\n };\n\n const onEditModalClose = () => {\n setShowEditModal(false);\n\n if (cardId) {\n loadCardById(cardId);\n }\n };\n\n const onSubmit = useCallback(\n async (\n data: ReloadableProductAmountFormData,\n formik: FormikHelpers\n ) => {\n const isValid = await formik.validateForm(data);\n if (isValid && product) {\n let canAddToCart = ProductType.EGiftCard === product.type;\n\n // CASE: The card is type Reload -- we should check if the card is still `active`\n // block from adding to cart if it is __not__ active.\n if (product?.type === ProductType.Reload) {\n canAddToCart = canAddProductToCart(cardBalanceError?.response);\n }\n\n if (canAddToCart) {\n waitPromise(addProductToCart(product, data, brand), setAddingToCart);\n } else {\n // CASE: Product type is Reload and their card is not active\n alert({\n title: 'Inactive Reload',\n message: 'This reload card is inactive and cannot be added to cart.',\n showCloseButton: true,\n });\n }\n }\n },\n [product, addProductToCart, brand, alert, cardBalanceError]\n );\n\n const isLoading = useMemo(\n () => pageLoading || loadBrandAsyncState.loading || loadProductsByBrandAsyncState.loading,\n [pageLoading, loadBrandAsyncState, loadProductsByBrandAsyncState]\n );\n\n const amountInputLabel = useMemo(() => {\n if (product?.isReloadable) {\n return 'Reload amount';\n }\n if (card?.type === ProductType.GiftCard) {\n return 'Card Amount';\n }\n if (card?.type === ProductType.EGiftCard) {\n return 'eGift Value';\n }\n return '';\n }, [card, product]);\n\n const scrollToAddMoney = () => {\n if (!addMoneyContainer || !addMoneyContainer.current) {\n return;\n }\n\n const targetY = addMoneyContainer.current.offsetTop;\n window.scrollTo({\n top: targetY,\n left: 0,\n behavior: 'smooth',\n });\n };\n\n const [cardBalanceErrorType, setCardBalanceErrorType] = useState();\n\n return (\n \n \n
    \n
    \n

    {card?.name || brand?.name}

    \n setShowEditModal(true)}\n >\n \n \n Edit Card Details\n \n \n
    \n {!isLoading && (\n <>\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n {card && !shouldHideCardInfo ? (\n setShowEditModal(true)}\n cardBalanceErrorType={cardBalanceErrorType}\n setCardBalanceErrorType={setCardBalanceErrorType}\n />\n ) : null}\n
    \n
    \n {card && !shouldHideCardInfo ? (\n \n ) : null}\n
    \n
    \n {card && !shouldHideCardInfo ? (\n \n ) : null}\n {card && shouldHideCardInfo ? (\n \n ) : null}\n
    \n
    \n
    \n {card && !shouldHideCardInfo ? (\n setShowEditModal(true)}\n cardBalanceErrorType={cardBalanceErrorType}\n setCardBalanceErrorType={setCardBalanceErrorType}\n />\n ) : null}\n
    \n {card && !shouldHideCardInfo ? (\n \n ) : null}\n {card && shouldHideCardInfo ? (\n \n ) : null}\n
    \n
    \n \n )}\n {isLoading && (\n
    \n \n
    \n )}\n {affiliateOffers && affiliateOffers.canDoubleDip ? (\n \n ) : (\n
    \n )}\n {!isLoading && product && (\n
    \n {product.isReloadable && (\n
    Add money to this card
    \n )}\n {!product.isReloadable && (\n
    Buy again
    \n )}\n \n {({ isValid }: FormikProps) => (\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n Add to Cart\n \n
    \n {product?.isOvernightReload && (\n

    \n Funds will be available the next business day.\n

    \n )}\n
    \n )}\n
    \n
    \n )}\n {isLoading && (\n
    \n \n
    \n )}\n {card ? (\n
    \n \n
    \n ) : null}\n {!isLoading && (\n
    \n
    \n
    \n {card ? (\n setShowArchiveModal(true)}\n >\n {`${\n card.type === ProductType.GiftCard\n ? 'Remove'\n : 'Archive'\n } This Card`}\n \n ) : null}\n
    \n
    \n \n Go Back to My Cards\n \n
    \n
    \n
    \n )}\n {isLoading && (\n
    \n \n
    \n )}\n
    \n {card ? (\n setShowArchiveModal(false)}\n cardId={card?.id}\n cardType={card.type}\n />\n ) : null}\n
    \n );\n};\n\nconst CardActivationCodes = ({\n card,\n remoteCardDetails,\n shouldHideCardInfo,\n}: {\n card: Card;\n remoteCardDetails: RemoteCardDetails | null | undefined;\n shouldHideCardInfo: boolean;\n}): JSX.Element => {\n const [isNumberCopied, setIsNumberCopied] = useState(false);\n const [isPinCopied, setIsPinCopied] = useState(false);\n const [isExtraFieldCopied, setIsExtraFieldCopied] = useState(false);\n const { cardNumber: remoteCardNumber = '', pin: remotePin = '' } = remoteCardDetails || {};\n const cardNumber =\n (card?.settings?.useRemoteCardStorage ? remoteCardNumber : card.cardNumber) || '';\n const cardPin = (card?.settings?.useRemoteCardStorage ? remotePin : card.pin) || '';\n\n enum RestrictionTypeTexts {\n PrintedCardRequired = 'This card may only be redeemed as a physical printout.',\n PinRequired = 'This retailer requires the PIN when making a purchase.',\n PhysicalCardRequired = 'This retailer requires you to use your physical gift card for in-store purchases.',\n HomeDepotDelayed = '',\n Unknown = '',\n }\n\n const onCopyNumber = useCallback(() => {\n if (cardNumber) {\n copyTextToClipboard(cardNumber);\n setIsNumberCopied(true);\n setIsPinCopied(false);\n setIsExtraFieldCopied(false);\n\n setTimeout(() => {\n setIsNumberCopied(false);\n }, 3000);\n }\n }, [cardNumber]);\n\n const onCopyPin = useCallback(() => {\n const pinToCopy = cardPin || '0000';\n copyTextToClipboard(pinToCopy);\n setIsPinCopied(true);\n setIsNumberCopied(false);\n setIsExtraFieldCopied(false);\n\n setTimeout(() => {\n setIsPinCopied(false);\n }, 3000);\n }, [cardPin]);\n\n const onCopyExtraField = useCallback(() => {\n const value = card.extraFieldValue || '0000';\n copyTextToClipboard(value);\n setIsExtraFieldCopied(true);\n setIsNumberCopied(false);\n setIsPinCopied(false);\n\n setTimeout(() => {\n setIsExtraFieldCopied(false);\n }, 3000);\n }, [card.extraFieldValue]);\n\n const renderPinCopyInfo = (pin: string | null) => {\n if (pin) {\n return isPinCopied ? (\n \n ) : (\n \n Copy PIN\n \n );\n }\n };\n\n const renderExtraFieldCopyInfo = (value: string | null, label: string | null) => {\n if (value) {\n return isExtraFieldCopied ? (\n \n ) : (\n \n Copy {label}\n \n );\n }\n };\n\n if (shouldHideCardInfo) {\n return <>;\n }\n\n return (\n
    \n {card.settings?.restrictionType &&\n RestrictionTypeTexts[card.settings?.restrictionType] !== '' ? (\n

    \n {RestrictionTypeTexts[card.settings?.restrictionType]}\n

    \n ) : null}\n
    \n
    \n {card?.settings?.cardNumber?.label || 'Gift Code'}\n
    \n\n
    \n
    \n {cardNumber || '0000 0000 0000 0000 0000'}\n
    \n\n {isNumberCopied ? (\n \n ) : (\n \n Copy Code\n \n )}\n
    \n\n {((card.settings?.useRemoteCardStorage && remotePin) ||\n card.settings?.pin?.isVisible) && (\n <>\n
    \n {card?.settings?.pin?.label ?? 'PIN'}\n
    \n
    \n
    {cardPin || '----'}
    \n {renderPinCopyInfo(cardPin)}\n
    \n \n )}\n\n {card.settings?.extraField?.isVisible && (\n <>\n
    \n {card.settings.extraField.label}\n
    \n
    \n
    {card.extraFieldValue || '----'}
    \n {renderExtraFieldCopyInfo(\n card.extraFieldValue,\n card.settings.extraField.label\n )}\n
    \n \n )}\n\n {card.type === ProductType.EGiftCard && (card as EGiftCard)?.viewerUrl && (\n
    \n \n Generate Print View\n \n
    \n )}\n
    \n
    \n );\n};\n\nconst ThirdPartyUrlAction = ({ url }: { url?: string }) => {\n return (\n \n );\n};\n\nconst MyCardDetails = withAuth()(() => (\n \n \n \n));\n\nexport default MyCardDetails;\n","import { useEffect, useState } from 'react';\nimport { getThirdPartyViewUrl } from 'common/api/wallet/cards';\n\nexport const useThirdPartyViewerUrl = ({\n cardId,\n shouldHideCardInfo,\n}: {\n cardId: string | null;\n shouldHideCardInfo: boolean;\n}) => {\n const [thirdPartyViewerUrl, setThirdPartyViewerUrl] = useState('');\n\n useEffect(() => {\n if (shouldHideCardInfo && cardId) {\n getThirdPartyViewUrl(cardId).then((r) => {\n if (r.data?.url) {\n setThirdPartyViewerUrl(r.data?.url);\n }\n });\n } else {\n setThirdPartyViewerUrl('');\n }\n }, [cardId, shouldHideCardInfo]);\n\n return { thirdPartyViewerUrl };\n};\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { Routes } from '../../routes';\n\nimport MyCards from './screens/MyCards';\nimport ArchivedCards from './screens/ArchivedCards';\nimport MyCardDetails from './screens/MyCardDetails';\n\nexport const WalletRoutes = () => (\n \n \n \n \n \n);\n","import React, { useContext } from 'react';\nimport { HomepageContext, Hero, HeroAd } from './contexts/contentful';\nimport Skeleton from 'react-loading-skeleton';\n\nimport {\n ShopOnlineOnBonusSection,\n GiftCardsOnBonusSection,\n FeaturedSection,\n CategoriesSection,\n FavoritesSection,\n HeroSection,\n FullAdSection,\n} from './sections';\nimport { CreativeSlotTypes } from 'common/types/CreativeSlotTypes';\n\ninterface Map {\n [key: string]: T;\n}\n\nconst Components: Map = {\n categories_component: CategoriesSection,\n favorites_component: FavoritesSection,\n featured_brands_component: FeaturedSection,\n bonus_component: GiftCardsOnBonusSection,\n shop_online_bonus_component: ShopOnlineOnBonusSection,\n};\n\nconst isAdHero = (hero: Hero | HeroAd) => {\n return (hero as Hero)?.heroLayout === undefined;\n};\n\nconst getComponentToRender = (\n id: string,\n heroes: Map,\n componentMap: Map\n) => {\n const itsHeroData = heroes[id];\n\n if (itsHeroData) {\n return isAdHero(itsHeroData) ? FullAdSection : HeroSection;\n }\n\n // cross reference the `componentMap` with the ID to retrieve the `component_key` that will be used\n // too reference the `Component` map which maps from component_key -> ReactElement\n return Components[componentMap[id] as string];\n};\n\nexport const HomePageRenderer = () => {\n const { heroes, componentMap, layout, isLoading } = useContext(HomepageContext);\n\n // NOTE: Adjust skeletons as needed\n if (isLoading) {\n return (\n
    \n \n \n \n
    \n );\n }\n\n const creativeSlots = [CreativeSlotTypes.P1Hero, CreativeSlotTypes.P2, CreativeSlotTypes.P3];\n return (\n
    \n {layout.map((id: string) => {\n let creativeSlot;\n if (heroes[id]) {\n creativeSlot =\n creativeSlots.length > 1 ? creativeSlots.shift() : creativeSlots[0];\n }\n const creativeSlotProps = creativeSlot ? { creativeSlot } : {};\n\n const Component = getComponentToRender(id, heroes, componentMap);\n // NOTE: adds a guard in case Component is `undefined`\n return Component ? : null;\n })}\n
    \n );\n};\n","import React from 'react';\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { HomepageView } from 'features/homepage/contexts/contentful';\nimport { HomePageRenderer } from 'features/homepage/HomePageRenderer';\n\nexport const HomepageScreen = () => {\n return (\n \n \n \n \n \n );\n};\n","import React, { useEffect } from 'react';\n\nimport { BaseLandingPage } from '../base/BaseLandingPage';\nimport { useSelector } from 'react-redux';\nimport { FeaturesState } from 'common/features/featuresReducer';\nimport { useSearchGridStyles } from 'features/search/components/hooks';\nimport { TopPicksCard } from 'features/search/components/TopPicksCard';\nimport { SearchGrid } from 'components/search-grid/SearchGrid';\nimport { useScrollToTop } from 'hooks/useScrollToTop';\nimport { and } from 'common/utils/searchFilters';\nimport { brandsOnBonusFilter } from 'common/api/search/getBrandsOnBonus';\nimport { withAuth } from 'features/auth/components/withAuth';\nimport { Routes } from 'routes';\nimport { EarnTypeConstructorFilter } from 'common/api/constructor/util';\nimport { selectIsConstructorBrowseEnabledWeb } from 'common/features/store/duck/ffs';\nimport { useHistory } from 'react-router-dom';\nimport { UserAuthState, selectUserAuthState } from 'common/features/store/duck/account/duck';\n\nexport const BrandsOnBonus = () => {\n const { pageBrands, loading: brandsLoading } = useSelector(\n (state: FeaturesState) => state.store.searchGrid\n );\n const [searchGridStyles] = useSearchGridStyles<'325', '280'>('325', '280');\n const userAuthState = useSelector(selectUserAuthState);\n const isConstructorEnabled = useSelector(selectIsConstructorBrowseEnabledWeb);\n const isAuthenticated = userAuthState === UserAuthState.AUTHENTICATED;\n useScrollToTop();\n\n const filter =\n isConstructorEnabled && isAuthenticated\n ? and(\n brandsOnBonusFilter,\n `EarningsType/any(t: t eq '${EarnTypeConstructorFilter.GiftCards}')`\n )\n : brandsOnBonusFilter;\n\n return (\n \n \n \n );\n};\n\nexport const ShopOnlineBrandsOnBonus = withAuth(Routes.ShopOnlineOnBonus)(() => {\n const { pageBrands, loading: brandsLoading } = useSelector(\n (state: FeaturesState) => state.store.searchGrid\n );\n const [searchGridStyles] = useSearchGridStyles<'325', '280'>('325', '280');\n const isConstructorEnabled = useSelector(selectIsConstructorBrowseEnabledWeb);\n const history = useHistory();\n useScrollToTop();\n\n useEffect(() => {\n if (isConstructorEnabled === false) {\n history.push(Routes.OnBonus);\n }\n }, [isConstructorEnabled]);\n\n const filter = and(\n brandsOnBonusFilter,\n `EarningsType/any(t: t eq '${EarnTypeConstructorFilter.ShopOnline}')`\n );\n\n return (\n \n \n \n );\n});\n","import React, { useMemo } from 'react';\nimport { Brand } from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\n\nimport { createStyles } from 'utils/createStyle';\nimport { convertBrandToCardProps } from 'components/bonus/CardProps';\nimport { BrandCardSlim } from 'components/brand-card/BrandCardSlim';\nimport { useSearchGridStyles } from 'features/search/components/hooks';\nimport { useRootSelector } from 'common/features/featuresReducer';\n\ninterface FavoritesGridProps {\n isLoading: boolean;\n items: Brand[];\n suggestions: Brand[];\n}\n\nexport const FavoritesGrid = ({ isLoading, items, suggestions }: FavoritesGridProps) => {\n const emptyBrand: Brand = {\n id: '0',\n name: '',\n rebate: 0,\n isOnBonus: false,\n isFeatured: false,\n imageUrl: '',\n keyWords: [],\n isLocalProduct: false,\n productIds: [],\n categories: [],\n canDoubleDip: false,\n containsAffiliateOffer: false,\n isAffiliateOfferOnBonus: false,\n isRaiseRightBrand: false,\n isRaiseRightGiftCardOnBonusOrAffiliateOnBonus: false,\n newBannerExpiration: null,\n };\n const hasFavorites = useRootSelector((s) => s.store.brands.favorites.length > 0);\n\n const { styles, resultsContainer } = useStyles();\n\n const favoriteBrands = isLoading\n ? new Array(12).fill(0).map((_, index) => ({\n ...emptyBrand,\n id: index.toString(),\n }))\n : items;\n\n return (\n
    \n <>\n {hasFavorites &&\n favoriteBrands?.map((brd) => {\n const cardProps = convertBrandToCardProps(brd);\n cardProps.isLoading = isLoading;\n return ;\n })}\n {!isLoading && hasFavorites && favoriteBrands.length === 0 && (\n No gift cards were found.\n )}\n {!isLoading && !hasFavorites ? : null}\n \n
    \n );\n};\n\nconst useStyles = () => {\n const [, width] = useSearchGridStyles<'150', '180'>('150', '180');\n\n return {\n styles: createStyles({\n cardContainer: [\n '',\n {\n width: `${width}px`,\n height: 210,\n },\n ],\n favoritesOverrides: [\n '',\n {\n width: `${width}px`,\n },\n ],\n }),\n resultsContainer: 'flex flex-wrap gap-4 justify-center',\n };\n};\n\nconst PopularBrands = ({ suggestions }: Pick) => {\n const brandCards = useMemo(() => {\n return suggestions.map((suggestion: Brand) => convertBrandToCardProps(suggestion));\n }, [suggestions]);\n\n const { styles, resultsContainer } = useStyles();\n\n return (\n
    \n
    \n

    No Favorites Yet?

    \n

    \n These brands are the most popular way to earn for your organization.\n

    \n
    \n
    \n {brandCards.map((bc) => (\n \n ))}\n
    \n
    \n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { getBrands } from 'common/api/search/getBrands';\nimport { withAuth } from 'features/auth/components/withAuth';\n\nimport { useSelector } from 'react-redux';\nimport { FeaturesState } from 'common/features/featuresReducer';\n\nimport { BaseLandingPage } from '../base/BaseLandingPage';\nimport { FavoritesGrid } from './FavoritesGrid';\nimport {\n searchResultBrandsToBrands,\n Brand,\n} from 'common/features/store/duck/search-generic/utils/searchResultBrandsToBrands';\nimport { useBrandList } from 'common/hooks/useBrandList';\nimport { Btn } from 'components/btn/Btn';\nimport { useHistory } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { editFilter } from 'common/utils/shipToCoordinatorUtils';\nimport { selectIsShipToCoordinatorEnabled } from 'common/features/store/duck/organization/duck';\nimport { SearchApiQueryParams } from 'common/api/search';\nimport { useRootSelector } from 'rootStore';\nimport { selectFavorites } from 'common/features/store/duck/brands/duck';\n\nconst favoritesHeroId = 'favorites_hero_id';\n\nconst usePopularBrandCards = () => {\n const { data: brands, loadData } = useBrandList(searchResultBrandsToBrands);\n const [isLoading, setIsLoadingTo] = useState(true);\n\n useEffect(() => {\n const getFavoriteBrands = async (options: Partial = {}) => {\n const result = await getBrands(options);\n if (result.data?.brands && options.top) {\n // limit to based on `top` parameter\n result.data.brands = result.data.brands.splice(0, options.top);\n }\n return result;\n };\n loadData(getFavoriteBrands)({\n top: 4,\n orderby: 'PopularityRank asc',\n }).finally(() => {\n setIsLoadingTo(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n isFavoriteSuggestionsLoading: isLoading,\n favoriteSuggestions: brands || [],\n };\n};\n\nconst BackToCatalog = () => {\n const history = useHistory();\n\n const goToCatalog = () => {\n history.push(Routes.Brands);\n };\n\n return (\n
    \n Browse Our Catalog\n
    \n );\n};\n\nconst renderers = { footer: BackToCatalog };\n\nexport const Favorites = withAuth()(() => {\n const favorites = useRootSelector(selectFavorites);\n const { pageBrands, loading: brandsLoading } = useSelector(\n (state: FeaturesState) => state.store.searchGrid\n );\n const isShipToCoordinatorEnabled = useSelector(selectIsShipToCoordinatorEnabled);\n const favoriteFilter = useMemo(() => {\n return editFilter(\n isShipToCoordinatorEnabled,\n `search.in(Id, '${favorites.join()}')`\n ) as string;\n }, [isShipToCoordinatorEnabled, favorites]);\n const { isFavoriteSuggestionsLoading, favoriteSuggestions } = usePopularBrandCards();\n\n return (\n \n \n \n );\n});\n\nexport default Favorites;\n","import React from 'react';\n\nimport { featuredBrandsFilter } from 'common/api/search/getFeaturedBrands';\nimport { BaseLandingPage } from '../base/BaseLandingPage';\nimport { SearchGrid } from 'components/search-grid/SearchGrid';\nimport { TopPicksCard } from 'features/search/components/TopPicksCard';\nimport { useSelector } from 'react-redux';\nimport { FeaturesState } from 'common/features/featuresReducer';\nimport { useSearchGridStyles } from 'features/search/components/hooks';\n\nexport const FeaturedBrands = () => {\n const { pageBrands, loading: brandsLoading } = useSelector(\n (state: FeaturesState) => state.store.searchGrid\n );\n const [searchGridStyles] = useSearchGridStyles<'150', '180'>('150', '180');\n\n return (\n \n \n \n );\n};\n","export interface ECommBrand {\n id: number;\n name: string;\n imageUrl: string;\n urlSlug: string;\n}\n\nexport const emptyEcommBrand: ECommBrand = {\n id: 0,\n name: '',\n imageUrl: '',\n urlSlug: '',\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { BrandLogo } from './components/BrandLogo';\nimport { emptyEcommBrand } from 'common/api/e-comm/models/ECommBrand';\nimport { Product } from 'common/api/e-comm/models/Product';\nimport { useApi } from 'common/modules/async-actions/useApi';\nimport { getProduct } from 'common/api/e-comm/products';\nimport Skeleton from 'react-loading-skeleton';\nimport { Routes } from 'routes';\nimport { ShopScreen } from 'features/shop-base/ShopScreen';\nimport { ProductAmountInput, ProductAmountInputFormData } from './components/ProductAmountInput';\nimport { Form, Formik } from 'formik';\nimport { Btn } from 'components/btn/Btn';\nimport { emptyCartItem, CartItem } from 'common/api/e-comm/models/CartItem';\nimport { selectedProductOptions } from 'common/utils/amountInput';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTag } from '@fortawesome/pro-light-svg-icons';\nimport useMediaQueries from 'hooks/useMediaQueries';\nimport { SizeProp } from '@fortawesome/fontawesome-svg-core';\nimport { openLoader, LoadingOverlay, closeLoader } from 'components/loading-overlay/LoadingOverlay';\nimport { useAddProductToCart } from 'hooks/useAddProductToCart';\nimport { useRootSelector } from 'common/features/featuresReducer';\n\nexport interface LocalProductDetailsParams {\n productId: string;\n}\n\nconst useProduct = (productId: string) => {\n const [loadProduct, , result] = useApi(getProduct);\n const [loading, setLoadingTo] = useState(true);\n const [hasLoaded, setHasLoadedTo] = useState(false);\n\n useEffect(() => {\n if (!hasLoaded) {\n loadProduct(parseInt(productId)).finally(() => {\n setHasLoadedTo(true);\n setLoadingTo(false);\n });\n }\n }, [productId, hasLoaded, loadProduct]);\n\n return { product: result?.data || undefined, loading };\n};\n\nexport const LocalProductScreen = () => {\n return (\n \n \n \n );\n};\n\nconst LocalProductView = () => {\n const { productId } = useParams();\n const { product, loading } = useProduct(productId);\n const org = useRootSelector((state) => state.store.home.homeDetails?.defaultOrganization);\n\n const history = useHistory();\n\n if (loading) {\n return ;\n }\n\n // CASE: product was not found -- redirect ot shop screen\n if (product?.organization !== org?.id || (!product?.isAvailable && !product && !loading)) {\n history.replace(Routes.Shop);\n }\n\n return (\n
    \n
    \n \n \n
    \n
    \n );\n};\n\nconst LogoRenderer = () => {\n const [iconSize, setIconSize] = useState('5x');\n\n useMediaQueries({\n '(max-width: 648px)': () => {\n setIconSize('3x');\n },\n '(min-width: 649px)': () => {\n setIconSize('5x');\n },\n });\n return ;\n};\n\nconst HeaderSection = ({ product }: { product?: Product }) => {\n return (\n
    \n \n {product && product.name}\n
    \n );\n};\n\nconst Title = ({ children }: React.PropsWithChildren) => (\n

    {children}

    \n);\n\nconst Content = ({ product }: { product?: Product }) => {\n const initialValues: CartItem = {\n ...emptyCartItem,\n selectedOptions: selectedProductOptions(product),\n productId: product?.id ?? 0,\n priceOverride: product?.price ?? null,\n };\n const { addProductToCart } = useAddProductToCart();\n const loader = useRef(null);\n\n const onSubmit = async (values: CartItem) => {\n openLoader(loader.current);\n await addProductToCart(\n product as Product,\n values as ProductAmountInputFormData,\n emptyEcommBrand\n );\n closeLoader(loader.current);\n };\n return product ? (\n \n \n
    \n
    \n \n
    \n
    \n Add to Cart\n
    \n
    \n
    \n
    \n ) : null;\n};\n","import React from 'react';\nimport { Metadata } from 'components/metadata';\nimport { MetadataPage } from 'components/metadata/constants';\nimport { SearchResultsScreen } from 'features/search/SearchResults';\nimport { EarnTypeConstructorFilter } from 'common/api/constructor/util';\nimport { useRootSelector } from 'common/features/featuresReducer';\nimport { UserAuthState } from 'common/features/store/duck/account/duck';\nimport { Redirect } from 'react-router-dom';\nimport { Routes } from 'routes';\nimport { selectIsConstructorBrowseEnabledWeb } from 'common/features/store/duck/ffs';\n\ninterface ByEarnTypePageProps {\n earnType: EarnTypeConstructorFilter;\n}\n\nexport const ByEarnTypePage = ({ earnType }: ByEarnTypePageProps) => {\n const notAuthenticated = useRootSelector(\n (s: any) => s.store.account.userAuthState === UserAuthState.NOTAUTHENTICATED\n );\n const isConstructorAffiliateEnabled = useRootSelector(selectIsConstructorBrowseEnabledWeb);\n\n if (notAuthenticated || isConstructorAffiliateEnabled === false) {\n return ;\n }\n\n return (\n \n \n \n );\n};\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { Routes } from '../../routes';\n\nimport { SearchResultsScreen } from 'features/search/SearchResults';\nimport { ProductDetailsScreen } from 'features/product/ProductDetailScreen';\nimport { CheckoutScreen } from 'features/order-summary/screens/CheckoutScreen';\nimport { AccountSettingsScreen } from 'features/account-settings/screens/AccountSettingsScreen';\nimport { WalletRoutes } from 'features/wallet/WalletRoutes';\nimport { HomepageScreen } from 'features/homepage/HomepageScreen';\nimport {\n BrandsOnBonus,\n ShopOnlineBrandsOnBonus,\n} from 'features/landing-pages/brands-on-bonus/BrandsOnBonus';\nimport { Favorites } from 'features/landing-pages/favorites/Favorites';\nimport { FeaturedBrands } from 'features/landing-pages/featured-brands/FeaturedBrands';\nimport { LocalProductScreen } from 'features/product/LocalProductScreen';\nimport { Metadata } from 'components/metadata';\nimport { MetadataPage } from 'components/metadata/constants';\nimport { ByEarnTypePage } from './ByEarnTypePage';\nimport { EarnTypeConstructorFilter } from 'common/api/constructor/util';\nimport { withAuth } from 'features/auth/components/withAuth';\n\nconst AuthedEarnTypePage = withAuth(Routes.ShopOnline)(() => (\n \n));\nconst ShopRoutes = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default ShopRoutes;\n"],"names":["slideDownOpen","keyframes","opacity","transform","slideUpOpen","slideDownClosed","slideUpClosed","styles","createStyles","close","ModalStyles","closeButton","content","boxShadow","animationDuration","animationTimingFunction","EASE_OUT_QUART","animationName","arrow","fill","colors","white","marginTop","Root","RadixPopover","Trigger","Content","props","React","_extends","className","classNames","width","height","children","appcuesSelectors","ordersSection","reportsSection","participantSection","inviteFamilySubSection","organizationSection","paymentsSection","resourcesSection","inventoryMngmntSection","sideMenu","commonSections","title","id","entries","forScripWare","description","link","checkNotifications","state","selectCoordinatorMetaData","pendingOrders","hideForRoles","AccountRoles","ASSISTANT_COORDINATOR","pendingPurchaseOrderCount","Routes","ShopAccountSettingsCoordinatorOrganizationSettings","featureFlags","FeatureFlagTypes","coordinator_toggles","enable_invite_friends_family","internalLink","Scripware","NotAuthenticatedFilterView","_ref","visible","dispatch","useDispatch","authicatedState","useRootSelector","store","account","userAuthState","currentFilter","setCurrentFilterTo","useState","sortedBy","setSortedBy","sortOptions","useSearchSortOptions","appliedTerm","useSelector","search","useEffect","getBrands","sortBy","term","prefix_to_filter_by","getSearchTerm","brandsSearchByPrefix","requestData","prefix","queryType","filter","searchFields","orderby","count","value","UserAuthState","AUTHENTICATED","NotAuthenticatedSortAndHeaderSection","setFilters","ResponsiveContainer","For","ContainerType","desktop","defaultVisibility","AlphabetFilter","applyFilter","_ref2","BaseSortAndHeaderSection","mobile","NotAuthenticatedMobileFilterSection","DesktopSortAndHeaderSection","footerBtnStyle","createStyle","maxWidth","_ref3","filterData","setFilterData","resultsCount","setResultsCount","async","_response$data$brands","_response$data","filterByPrefix","opts","data","brands","length","fetchBrandsCount","clearAll","useCallback","Header","useMemo","onClick","MobileDialog","btnName","footer","header","container","onApply","onApplyClicked","onToggle","AThroughZMobileFilterCategory","onFilterClicked","option","MobileSortDialog","options","sortedByField","onChange","AllBrandsFilterSection","earnType","isAuthenticated","FilterSection","showAZFilter","_g","_defs","Object","assign","bind","n","e","arguments","t","r","hasOwnProperty","call","apply","SvgCartWithCards","svgRef","titleId","viewBox","xmlns","ref","clipPath","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","strokeMiterlimit","ForwardRef","configs","mainMessage","fontSize","lineHeight","subMessage","cardContainer","isConstructorEnabled","type","setType","queries","(max-width: 640px)","(min-width: 641px)","setData","useMediaQueries","baseFilters","useConstructorDefaultParameters","numResults","current","window","requestAnimationFrame","constructorClient","recommendations","getRecommendations","then","results","response","total_num_results","constructorBrands","i","convertBrandToCardProps","constructorDataToBrandData","catch","console","error","history","useHistory","backToShopAllBrands","clearSearchBar","updateSearch","applyTerm","push","Brands","CartWithCards","Btn","map","brand","BrandCardSlim","key","cache","searchTerm","suggestions","setSuggestions","loading","setLoading","useSearchGridStyles","memoizedSuggestions","suggestion","Id","name","Name","rebate","MaxRebate","isOnBonus","IsOnBonus","isFeatured","IsFeatured","imageUrl","ImageUrl","keyWords","KeyWords","categories","Categories","productIds","ProductIds","supportedTypes","SupportedTypes","Suggestions","urlSlug","UrlSlug","newBannerExpiration","NewBannerExpiration","Date","isLocalProduct","isNew","suggestionsToBrands","url","SUGGEST_API_URL","payload","fuzzy","suggesterName","select","top","apiFetch","method","headers","body","JSON","stringify","keys","getSuggestions","Skeleton","CardContext","Provider","SearchGrid","ItemComponent","TopPicksCard","items","isLoading","EmptyResults","ConstructorRefinedContent","memo","banner","setBanner","imgWidth","setImgWidth","tempStorage","listen","(max-width: 648px)","undefined","(min-width: 647px)","getUrl","ctaLink","NavLink","to","src","assetUrl","match","getPath","BrandsDetails","main","gridTemplateColumns","sectionStyles","filterSection","margin","gridCommandsContainer","bonusSection","marginBottom","featuredSection","topPicksSection","scrollToTop","borderRadius","position","bottom","right","searchBackgroundStyle","minHeight","HeroId","ShopGiftCards","ShopOnline","SearchResultsScreen","singleTypeView","selectIsConstructorBrowseEnabledWeb","total","s","searchGrid","isUserLoggedIn","selectLoginState","pathname","useLocation","matchedPath","matchPath","headerId","path","heroes","isRemoteContentLoading","heroId","useRemoteContent","affiliateErrorMessage","useFirebaseConfigValues","firebaseValueAsString","hideFilter","headerContext","layout","componentMap","setTimeout","prerenderReady","showResultsPage","Boolean","showFilters","applySearchTerm","navigateToProductDetailPage","item","split","ShopLocalProductDetails","productId","idWithSlug","replace","SearchBarBrands","SearchBar","onItemSelected","onSearch","ShopScreen","ContentfulView","HomepageContext","HeroSection","TopPicksSection","scrollTo","left","behavior","FontAwesomeIcon","size","icon","faArrowCircleUp","SuggestionsBySearchTerm","DefaultLogoRenderer","BrandLogo","renderers","logo","logoLoadAnimation","useStyles","logoContainer","logoImage","animated","div","style","logoStyles","useSpring","delay","dimension","setDimensionTo","query","(min-width: 649px)","paddingTop","fonts","useFontSizes","font","setStyles","activeRebate","oldRebate","(min-width: 648px)","(max-width: 647px)","bonusRebate","normalRebate","BrandTitleSection","classes","brandName","word","charAt","join","slice","formatBrandName","RenderBonusRebate","newRebate","Rebate","isFinite","toPrecision","accordionGroupHeader","accordionGroupButton","root","paddingBottom","Accordion","defaultExpandedItemValue","multipleEntriesOpen","expandedItem","setExpandedItem","multiSelectExpandedItems","setMultiSelectExpandedItems","RuiAccordion","onValueChange","Array","isArray","includes","ChevronUp","ChevronDown","termsContent","getContent","entry","termsAndInfoTitles","generalInformation","giftCardRedemptionInstructions","eGiftCardRedemptionInstructions","giftCardTermsAndConditions","eGiftCardTermsAndConditions","sortedItemValue","getDetailsAndExclusionsFilter","getGeneralInformationFilter","_","ProductDetailTerms","brandId","productType","defaultExpandedFilter","showAffiliateTerms","loadContentfulBrand","loadContentfulBrandAsyncState","loadContentfulBrandResponse","useApi","getContentfulBrandApi","terms","brandTerms","_terms$items","fields","productTypeTermsAndInfos","TextareaAutosize","readOnly","toString","currentTabName","ProductType","EGiftCard","toLowerCase","startsWith","sort","a","b","dangerouslySetInnerHTML","__html","filterTermsForCurrentTab","defaultItemValue","backgroundColor","control","FieldContainer","label","controlClassName","required","FieldStyles","inputWrapper","showHide","field","background","outline","appearance","borderColor","brandHighlight","paddingRight","display","charCounter","input","MozAppearance","WebkitAppearance","ctrlButton","ctrlContainer","getRemainder","number","divisor","Math","round","FieldNumber","increment","placeholder","min","max","hideFieldDescription","allowDecimal","includeThousandsSeparator","customValidator","mask","createNumberMask","inputText","useRef","getSafeValue","demonetize","ctx","useFormikContext","setInputValidationMsg","msg","inputElement","setCustomValidity","getPrefix","setError","newValue","previous","next","customErrors","_onIncrement","direction","actualValue","setFieldValue","inputValue","monetizeWithDecimal","MaskedInput","verifiedValue","target","onKeyDown","preventDefault","render","_props","autoComplete","titleHeader","titleBody","titleInput","titleFooter","FormikTextField","createFormikField","inputRef","inputProps","FormikTextAreaField","maxLength","FormikCurrencyField","FormikComboField","containerClassName","disabled","text","FormikIncrementField","sortOptionValuesAscending","values","opt1","opt2","emptyVariants","variants","product","unavailableVariants","from","reduce","get","price","set","Map","productToPriceVariantsMap","every","isAvailable","variantsMonetized","conjunct","monetize","ProductInfoBonusExpiration","expiration","showQuantity","timeRemaining","msUntil","msToDays","formatDuration","AffiliateBonusExpiration","fieldContainer","ctrlIncrement","incrementAndTotal","listShipToHome","listStyleType","paddingLeft","listComboContainer","row","mainField","fieldValue","fieldQuantity","fieldEarning","maxHeight","defaultUiSettings","totalMargin","ProductAmountInput","_selectedVariant$bonu","_selectedVariant$bonu2","_selectedVariant$bonu3","hideQuantityField","hideTotal","customLabel","uiSettings","cardBalance","setVariant","totalVerticalMargin","selectedVariant","setSelectedVariant","formCtx","calculateTotal","hasOptions","quantity","selectedOptions","priceOverride","useUnavailableProductVariants","bonus","gridTemplateColumnsContainer","productMinValue","minValue","productMaxValue","maxValue","productValueIncrement","unitPrice","productMaxBalance","maxBalance","getQuantityFieldLabel","realValue","find","prd","canOverridePrice","Field","component","validate","Number","concat","scrollToElement","el","getBoundingClientRect","scrollBy","precision","pair","gridGiftDetails","dataGrid","group","subGroup","editBtn","marginLeft","GiftDetails","formData","selectedDate","setIsEditing","giftCardImageUrl","useContext","ProductGiftDetailsContext","giftDetailsValues","toLocaleDateString","RecipientName","RecipientEmail","SenderName","SenderPhone","LinkBtn","faGiftCard","GiftCardImg","btns","sendersInfo","formContent","fieldValues","pillBtn","padding","GiftDetailsEditForm","setFormData","setHasFormData","Formik","initialValues","onSubmit","formValues","errors","SelectedCardCoverImage","EditForm","tomorrow","setHours","setMinutes","setSeconds","setDate","getDate","addMonthsFromNow","months","date","setMonth","getMonth","DateSelector","SelectedDate","setSelectedDate","isDatePickerOpen","setIsDatePickerOpen","toDateString","DatePicker","open","onCalendarOpen","onCalendarClose","selected","dt","minDate","maxDate","customInput","setSendAsGift","hasFormData","giftCardImages","showEditForm","submitForm","cardCoverImages","img","index","ImageName","Form","emptyGiftDetailsRequest","faTimes","GiftType","emailValidator","MASK_PHONE_US","guide","phoneNumberValidator","GiftMessage","getGiftCardImgSrc","isSecondary","onClose","submit","ModalContent","giftingType","setGiftingType","isTooltipOpen","setIsTooltipOpen","enableBulkGifting","useFeatureFlags","isEnabled","isMobileView","useDetectMobileView","modal","useModalControls","cartHasGiftingItems","selectCartHasGiftingItems","onOpenChange","onPopoverOpenChange","color","brandDark","faInfoCircle","align","alignOffset","side","sideOffset","chooseSingleGift","goToBulkGiftingScreen","BulkOrderDisabledOnMobileWarning","toggleModalVisibility","BulkOrderDisabledGiftItemsWarning","location","ArrowUpRight","Modal","isOpen","isVisible","showCloseButton","warningDark","faExclamationTriangle","goToCart","ShopOrderSummary","isMobile","setIsMobile","(min-width: 640px)","noop","isEditing","emptyProduct","sendAsGift","showGiftDetails","ProductGiftDetails","refContainer","document","InMyWallet","itemsSorted","getLastBalanceAddedDate","getTime","faWallet","renderCard","card","balance","_round","toFixed","waitPromise","promise","Footer","minWidth","href","imgBBB","getFullYear","PrivacyPolicy","TermsOfUse","onExit","headerStyles","headerLink","headerExit","supportIcon","seperator","leftHeader","rightHeader","Shop","RaiseRightLogo","faHeadset","initialState","step","selectedCardDesign","deliveryDate","senderName","message","recipients","giftImageOptions","addingToCartLoading","actions","createAction","setStep","setSelectedCardDesign","setDeliveryDate","setSenderName","setMessage","setRecipients","setGiftImageOptions","setProductId","setAddingToCartLoading","setFileDetails","reducer","action","fileDetails","BulkOrderContext","createContext","deleteRecipients","addToCart","Promise","resolve","BulkOrderProvider","closeGiftDetails","errorModalControls","useReducer","setOpenMenu","useNavMenu","formikCtx","dispatchRedux","amount","boundActions","design","formattedPayload","convertBulkOrderStateToCartItem","giftDetails","recipient","_state$deliveryDate","_state$selectedCardDe","fromName","fromPhone","toName","toEmail","email","toISOString","productImageName","addItemsToCart","updateCart","cart","goBack","radioList","radioOption","radioOptionSelected","checkIcon","unselectedCircle","optionLabel","optionLabelSelected","CustomRadioSelector","onSelectionChange","faCheckCircle","inputWrapperStyle","CustomTextInput","errorMessage","textarea","showCounter","counterLimit","onHasValueChange","focused","setFocused","hasValue","setHasValue","touched","setTouched","hasError","getTopValue","labelStyle","inputStyle","resize","InputElement","htmlFor","onFocus","handleFocus","onBlur","handleChange","defaultValue","Counter","inputEl","_inputEl$current","setTriggerRender","useLayoutEffect","listener","v","addEventListener","removeEventListener","getCharCount","stringValue","formHeader","stepperButton","lineGrey","grey3","cursor","stepperButtonClear","dateMarginContainer","dateMarginRow","dateMarginEntry","whiteSpace","stepContentWrapper","ReviewOrderStep","amountValue","parseFloat","substr","subTotal","earnings","alt","formatDateObject","showRecipientModal","Stars","fileName","fileSize","completed","progress","setProgress","progressColor","setProgressColor","timer","setInterval","prevProgress","clearInterval","PROGRESSBAR_ANIMATION_DURATION_MS","faFileCsv","transitionDuration","maxRecipients","maxFileSize","isDragging","setIsDragging","uploadedFile","setUploadedFile","fileInputRef","handleFileUpload","file","bytes","trunc","floor","log","pow","formatSize","endsWith","reject","reader","FileReader","onload","event","_event$target","rows","result","trim","line","cell","onerror","readAsText","csvFileToRecipients","FileUploadSuccess","handleClick","_fileInputRef$current","click","onDragOver","onDragLeave","handleDragLeave","onDrop","dataTransfer","files","accept","getNumber","asNumber","Step4","recipientsListModal","max_cart_line_items","uploadAnimationRunning","setUploadAnimationRunning","reviewOrderEnabled","downloadTemplate","Blob","downloadLink","createElement","download","URL","createObjectURL","appendChild","uploadStatusMessage","alertGreen","faTrash","faDownload","FileUpload","openRecipientsTable","faEye","onReviewOrder","onCancel","showModal","setShowModal","deliveryOption","setDeliveryOption","today","handleInputChange","debounce","updateFn","leading","getRebate","_product$bonus","selectedValues","parseInt","variant","_variant$bonus","senderNameHasValue","setSenderNameHasValue","ImageId","faArrowRight","inline","faCheck","Loading","loadingStyles","loadingContainer","loadingContent","loadingLogo","loadingTitle","loadingText","recipientListScrollContent","gridColumn","scrollbarWidth","scrollbarColor","recipientListContainer","recipientListData","recipientListFooter","RecipientListModal","modalControls","dataStyles","ModalSize","LARGE","FaceplateId","wrapper","leftPreview","cardPreview","rightSteppingForm","formContainer","formStepper","info","BulkOrderScreen","_state$fileDetails","brandImageUrl","facePlates","modalVisible","setModalVisible","getAmount","selectedOption","selectedOption_","exitLocation","setExitLocation","enable_bulk_egifting","selectIsBulkEgiftingEnabled","overflow","recipientsInfoModal","designs","mockCardDesigns","toggleModal","handleExit","BulkOrderLoading","FadeIn","when","BulkOrderForm","NumberRecipientsInfoModal","Modal2","firebaseValueAsNumber","BulkGiftingErrorModal","_ref4","closeModal","_path","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_path9","_path10","_path11","_path12","_path13","_path14","_path15","_path16","_path17","_path18","SvgTryBuyNowImg","TryBuyNowModal","isBusy","setIsBusy","TryBuyNowImg","isValid","ShopOrderScreen","ActivityIndicator","SvgWarningTriangleFilled","SvgWarningTriangleFilledOrange","BrandImage","OrderDetails","stateRebateAdjustment","adjustment","useStateRebateAdjustment","earningPercent","itemDetails","itemPrice","percent","pricePerCard","quantityText","earningsText","PaymentDetails","paymentMethod","fee","accountLastFour","selectPaymentType","Total","Details","onConfirmPurchase","paymentTypeFee","getPaymentTypeFee","paymentTypeFees","getFeeForPaymentMethod","paymentType","PaymentType","CreditCard","paymentSubType","isPercentage","organization","getTotal","formikProps","formattedTotal","onPurchaseClick","BuyNowDetails","Disclaimer","Codes","handleError","isWarning","code","errorCode","ECOMM_0011","ECOMM_0017","ECOMM_0018","ECOMM_0020","ECOMM_0022","codeNumber","useStepDelay","steps","loops","currentIndex","setCurrentIndex","isRunning","setIsRunning","loopsCounter","setLoopsCounter","timerId","executeStep","currentStep","doStep","isLastStep","prevIndex","clearTimeout","start","stop","STATUS_MESSAGE_SCREEN_TIME","BuyNowLoadingAnimation","animationStatus","setAnimationStatus","Lottie","animationData","OrderProcessingAnimation","loop","BuyNowSuccessScreen","subtotal","selectBuyNowPurchaseSuccessData","goToWallet","WalletMyCards","buyNowFlow","resetState","modalSize","CONTENT_WIDTH","MEDIUM","NoValidViewFound","BuyNowModal","view","selectBuyNowDrawerView","onCloseModal","resetForm","getPrice","isProductOnBonus","_variant$bonus2","_product$bonus2","BuyNowErrorView","disableClosingModal","escKeyCloseModalEnabled","errorData","selectBuyNowErrorData","BasicError","isSubmitting","WarningTriangleIcon","ErrorTriangleIcon","isBuyNowEnabled","fetching","useBuyNow","selectIsEnabled","enable_buy_now_web","useBuyNowPaymentMethod","setFetching","selectBuyNowPaymentMethod","loadPaymentOptionsData","usePaymentOptions","getPaymentTypesForBuyNow","update","TokenType","PlaceOrderResult","getOrdersV2","startDate","endDate","withTokensIfNeeded","ORDERS_URL","toQueryString","StartDate","EndDate","setShippingOptions","shippingOptions","getShippingMethods","request","sanitizedRequest","shippingAddress","phoneNumber","SendAsGiftUnavailable","ToShopInfo","imgs","imageName","onlyNumbers","phone","EGiftTabPanel","resetKey","canCheckout","buyNowControls","defaultVariant","shouldOpenBuyNow","params","useQueryParams","tab","denom","ProductQueryParam","matched_denom","parsed_denom","valid","useBuyNowParseQueryParams","showTryBuyNow","setShowTryBuyNow","modalCtrls","retrieveBlackBox","useBlackBoxValues","fromEntries","opt","hideAddedToCartAnimation","faceplates","setFaceplates","setGiftCardImageUrl","allowGiftingEgift","firebaseValueAsBoolean","Max_Number_Gift_Line_Items","numberOfGiftLineItems","selectCartNumberGiftLineItems","maxCapcityWarningModal","allVariantsUnavailable","isFetchingBuyNowPaymentMethod","buyNowPaymentMethod","userCards","useCardsFromWallet","c","isCardReloadable","thirdPartyViewerFlowIds","shouldHideSendAsGift","enable_amex_egift_web","giftDetail","_formData$SelectedDat","addingToCart","setAddingToCart","discardGiftDetails","giftCardUrl","sku","_faceplates$response","productSku","getProductFaceplatesBff","ok","facePlates_","resetFormData","toggleSendAsGift","discardGiftDetailsAndCloseModal","onBuyNowClick","matches","gaLogClickBuyNow","bbValues","tempCart","createTemporaryCartForBuyNow","blackBoxValue","buyNowDrawerView","purchaseRequest","orderSource","OrderSource","Web","clientVersion","paymentProviderResponse","payment3DSecureResponse","cartId","order","createdTime","logData","lineItems","emptyLineItem","productCount","updatedTime","shippingCost","orderId","String","isBuyNow","gaLogPurchase","tracker","trackPurchase","itemId","itemName","revenue","section","purchaseSuccessData","ECOMM_CATCH_ALL","Tabs","enableReinitialize","formikHelpers","_apiResponse$response","apiResponse","Switch","Route","exact","BrandsGiftCardDetails","Alert","AlertType","INFO","FormBtn","DiscardGiftDetailsWarningModal","CartMaxCapacityGiftWarningModal","BrandBulkOrder","goToCardPage","cardId","WalletMyCardDetails","titleStyles","PhysicalTabPanel","isShipToCoordinatorEnabled","orgOptionsHaveLoaded","selectOrganizationOptionsFinishedLoading","productDisabled","isShipToHomeEligible","productEnabled","Render","loadingComponentProps","ProductInfoList","isReloadable","ShipToHome","Reload","emptyUniversalBrand","getCardName","hasServerError","status","StatusCode","ServerError","RegisterCardDialog","supplierCode","initialFormValues","cardNumber","pin","isRequired","setIsRequired","userId","alert","useAlert","loader","doRegisterCard","openLoader","reload","getReloadProductThunk","_registerCardRequest","brandResult","all","registerCard","getBrandThunk","upsertCard","closeLoader","isPinRequiredForReloadOrBalance","_result$data","isPinRequired","validatePin","walletCardPinValidator","LoadingOverlay","useCardBalance","doGetCardBalance","getCardBalanceAsyncState","getCardBalanceResult","getCardBalance","_card$settings","settings","canCheckBalance","defaultApiErrorMessage","isConnected","navigator","onLine","ModalTrackDialog","currentBalance","setIsOpen","onBalanceUpdated","TrackDialog","doUpdateBalance","doUpdateBalanceAsyncState","updateBalance","valueStr","valueNumeric","isEmpty","CARD_AMOUNT_MAX","textAlign","SmallWarningTriangle","WarningTriangleFilled","GenericPinError","refreshBalance","MissingPinError","onEditCardDetails","IncorrectPinError","CardBalance","_card$settings4","loadCard","onAddMoneyClick","cardBalanceError","shouldHideCardBalance","cardBalanceErrorType","setCardBalanceErrorType","lastUpdate","setLastUpdate","_cardBalanceError$res","_cardBalanceError$res2","failedWith403","isPinRequiredError","isPinIncorrectError","showTrackBalanceDialog","setShowTrackBalanceDialog","ticker","setTicker","balanceUpdated","_response$data$settin","_card$settings2","_card$settings3","lastUpdateDateFormatted","getFuzzyDate","cardBalanceFormatted","renderRefreshButton","lastUpdateFormatted","faRedo","offer","contentWrapper","getCardDisplayName","formattedCardNumber","pop","getLastFourDigits","AmountInput","cards","onCardBalanceError","onCardBalanceLoading","balanceError","balanceLoading","canReloadCard","resp","hasErrorWithStatus","Gone","NotFound","ReloadTabPanel","showRegisterCard","setShowRegisterCard","reloadProducts","selectReloadProducts","walletCards","relatedReloadableProducts","hasReloadableCards","reloadableCardsList","reloadableCards","filteredCards","p","relatedCards","reloadableProduct","isDefined","ModalFooter","ModalPrimaryBtn","ModalSecondaryBtn","canReload","reloadCard","cardProduct","reloadProduct","ReloadTabPanelForm","reloadableProducts","setReloadProduct","selectedCard","_formCtx$values","selectedProduct","selectedCardError","setSelectedCardError","selectedCardLoading","setSelectedCardLoading","isOvernightReload","border","borderBottom","tabOfferContent","bonusPink","tabOffer","tabTitle","tabPill","marginRight","borderWidth","Tab","tabId","noUnderline","noUpperBorder","TabPill","potentialCartItemMatches","cartItem","o","optionId","emptyCartItem","selectedProductOptions","initialProductOptions","useProductRebate","adjustLocalProduct","adjustNonLocalProduct","calculateProductRebate","getCartItemRebate","firstMatch","some","getCartItemBonus","useConfigureUrlWithAffiliateToken","pattern","queryParams","token","setToken","setIsLoading","CRM_AFFILIATES_URL","getFlipgiveToken","SvgWarningSign","warningIcon","warningBannerContainer","borderStyle","fontWeight","WarningBanner","WarningIcon","AffiliateQueryParams","getTextToReturn","amountType","getConfirmationDrawerText","hours","timeframeMessage","earningsPercentage","brandLogo","(max-width: 500px)","(min-width: 501px)","EXTRA_SMALL","shopOnlineBanner","shopNowButton","wordWrap","wordBreak","ShopOnlineBanner","_affiliateOffer$avera","affiliateOffer","atRaiseRight","showAffiliateOffersForWallet","selectIsFlipgiveEnabledWeb","activationUrl","isLoadingUrl","ChannelWeb","isFetchingOrError","isAffiliateConfirmationEnabled","selectIsAffiliateConfirmationWebEnabled","isDrawerOpen","setIsDrawerOpen","orgId","selectSelectedOrgId","setBrandLogo","_brand","getBrand","_brand$data","rebateMessage","variable","bestRebate","onClickShopNow","logAffiliateClick","affiliateChannel","process","affiliateMobilePlatform","userAgent","version","averagePurchaseDelayHours","canDoubleDip","ExternalLinkArrow","AffiliateConfirmationModal","DetailsAndExclusions","affiliateVariablePricingText","affiliateExclusionText","TermsAndConditions","affiliateOfferTerms","termsStyles","AffiliateTabPanel","_brand$averagePurchas","contentStyle","isFlipgiveEnabled","affiliateOfferUrl","errorFetchingActivationUrl","accordionItems","HowItWorksShopOnline","isRaiseRightBrand","isAffiliateOfferOnBonus","affiliateBonus","affiliateRebate","affiliateBonusEnd","tabs","tabList","tabsContent","tabListPill","gap","tabsContentShopOnline","newBadge","orange","ProductDetailMainTab","_defaultOrg$organizat","products","selectedTab","onSelectedTabChange","handleAddItemToCart","hidePhysicalTab","setResetKey","rawBrandId","useParams","defaultOrg","homeDetails","home","_homeDetails$defaultO","organizations","defaultOrganization","selectIsShipToCoordinatorEnabled","isActive","eGiftCardProduct","prod","physicalCardProduct","GiftCard","reloadCardProduct","searchParams","URLSearchParams","generatePath","prev","OfferTab","PhysicalCard","BarCode","ReloadIcon","ProductDetailMainTabAffiliate","_defaultOrg$organizat2","_eGiftCardProduct$var","_physicalCardProduct$","_reloadCardProduct$va","selectedEarnTypeTab","onSelectedEarnTypeTabChange","constructorBrand","isAffiliateOnlyBrand","isGiftCardOnlyBrand","_homeDetails$defaultO2","isAffiliateEnabled","selectAffiliateEnabledWeb","eGiftCardOnBonus","physicalCardOnBonus","reloadCardOnBonus","productBrandId","scrollPosition","setScrollPosition","redirectPath","BrandsShopOnlineDetails","canonicalUrl","EarnTypeConstructorFilter","GiftCards","_history$location$sta","_history$location$sta2","backRoute","handleScroll","scrollY","Helmet","rel","uiRebate","UnAuthPDPContext","UnAuthProductDetailsView","_products$","useAffiliateUrlProtection","isAffiliateRoute","isLoggedIn","selectIsAuthenticated","sendToLoginPage","useContentfulGlobalContent","HeaderSection","unauthPdpBrandDescription","_props$brand","useMaxProductRebate","max_rebate","forEach","variant_rebate","productWithHighestRebate","calcProductRebate","_bestProduct","bestProduct","onBonus","UserContent","ProductNav","ControlButtons","returnUrl","getUrlToLoginPage","goToLogin","Link","EnrollWithoutEnrollCode","products_","setSelectedTab","eGiftProduct","hasProductType","physicalProduct","TabsContent","EGiftContent","PhysicalContent","ReloadContent","hasMinMax","acc","n2","getPhysicalProductMinMax","_ref5","useAddProductToCart","addProductToCart","showAddToCartAnimation","reloadableAmount","addReloadItemToCart","addItemToCart","gaLogAddToCart","requestCartItems","ProductDetailScreenStyles","brandLogoOffer","brandLogoOfferMobile","logoSection","firstRow","textOverflow","termsSkeleton","productDetail","optionalLoggedInDescription","readMoreButton","readMoreCollapsed","readMoreExpanded","animationPulsingHeart","animation","BrandFavorite","isFavorite","favorites","indexOf","isSaving","setIsSaving","toggle","unfavoriteBrandThunk","favoriteBrandThunk","visibility","Heart","brandAccent","FavoriteBrand","isLoadingBrandInfo","FirstRow","ProductDetailScreenContentConstructor","_brands$contentfulBra","setReadMoreExpanded","nav","selectedWayToEarnTab","setSelectedWayToEarnTab","shopOnlinePath","setQueryParam","pushState","checkSelectedTab","queryParam","defaultTab","checkQueryParams","requestWallet","constructorInstance","requests","sendTrackingEvents","trackConversion","contentfulBrandsById","optionalLoggedInDescriptionComponents","documentToReactComponents","faChevronDown","brandRebate","ProductDetailScreenContentCognitive","ProductDetailsScreenContent","ProductDetailsScreen","useScrollToTop","useBrandId","numericId","setProducts","isConstructorAffiliateEnabled","constructorBrandHasLoaded","useConstructorBrandById","brandIdParam","setConstructorBrand","setConstructorBrandHasLoaded","brandsById","resultsPerPage","numbericBrandId","browse","getBrowseResultsForItemIds","validBrands","processOnBonusBrands","brandConstructor","constructorToBrand","containsAffiliateOffer","isRaiseRightOnlyBrandWithoutAffiliate","brandDetailsPath","inBulkPath","getProductsByBrand","loadProducts","getContentfulBrandThunk","Metadata","page","MetadataPage","pdp","showItemAnimation","hideItemAnimation","showItem","animationFillMode","EASE_IN_OUT_BACK","hideItem","Breadcrumb","paths","trail","api","useSprings","config","wobbly","x","invisible","visiblePaths","styles_","li","ChevronRight","plainText","quantityContainer","button","QuantityRenderer","hideButtons","setShowItemUpdateErrorModal","Renderer","PlainTextRenderer","EditableQuantityRenderer","setUpdatingLineItem","updatingLineItem","OrderScreenContext","decrement","useQuantityControls","setQuantity","itemQt","updateLineItem","editCartLineItemThunk","isInIframe","parent","postMessage","mainWebsiteOrigin","qt","buttonStyles","classnames","minusButtonStyles","faMinus","faPlus","headerShipToHome","bigBtn","bigBtnUnselected","shippingOptionButtons","summaryGroupItems","rowGap","productTypeSeparator","columns","RenderItems","removeCartItem","showEgiftDetails","hideDeleteButton","getProductName","getProductTypeIcon","getProductTypeDisplayName","FeatureFlag","flagKey","fallback","getWalletCardDisplayName","RenderItemsMobile","OrderSummaryGroupItems","isRemoving","setIsRemoving","isDesktopView","useDetectDesktopView","showErrorModal","setShowErrorModal","formatDate","buttons","secondary","_response$response","removeItemFromCart","resetCart","QuantityEditErrorModal","SMALL","WarningTriangle","inDesktopView","setInDesktopView","(max-width: 1024px)","(min-width: 1024px)","useShippingMethods","loadShippingMethods","shippingMethodsResult","shippingMethodsResponse","getAddresses","FAMILY_URL","addAddress","address","editAddress","putDefaultAddress","FAMILY_ADDRESS_URL","getDefaultAddress","useDefaultAddress","doGetDefaultAddress","defaultAddressesAsyncState","defaultAddressResult","defaultAddress","refreshDefaultAddress","isDefaultAddress","setDefaultAddress","familyAddress","emptyFamilyAddress","emptyAddress","firstName","lastName","useAddresses","doGetAddresses","addressesAsyncState","addressesResult","addresses","asyncState","refreshAddresses","useEffectUntilDone","cb","deps","ran","emptyCartInfoShipping","hasShipToHomeEligibleItems","shippingFee","selectedShipping","selectedAddress","userAddresses","refreshShippingMethods","getPaymentMethod","paymentInfo","Check","achAccountId","creditCardId","BankAccount","getDefaultPaymentId","PaymentSubType","Credit","emptyCartInfoPayment","defaultPaymentType","defaultPayment","defaultPaymentMethodFee","payment","paymentFee","paymentAccount","useShipDateEstimations","estimationResponses","setEstimationResponses","loadShipDateEstimations","orderSubtotal","FULFILLMENT_SHIPPING_URL","getEstimatedShipDate","asTuple","calculatePaymentFee","useCartDetails","cartInfo","cartAsyncState","isLoadingShipDateEstimations","setIsLoadingShipDateEstimations","_cartInfo$newCreditCa2","useHomeDetails","defaultPaymentAsyncState","isLoadingPaymentInfo","savedCreditCards","achAccount","shipToHome","paymentMethodId","validPayment","getDefaultPaymentInfoDescription","paymentInfoDescription","accountNumber","_cartInfo$newCreditCa","newCreditCard","_creditCard$maskedCar","creditCard","cc","maskedCardNumber","useCartPayment","shipping","shippingToAddressId","isLoadingShippingMethods","requestedCartItemsRef","refreshedDefaultAddressRef","shipToHomeItems","getItemsByDeliveryType","addr","shipToHomeIfPossible","customerFirstName","profile","customerLastName","customerEmail","shipToHomeLineItemIds","markDone","shipToHomeConsignment","cheapestShipToHome","sm1","sm2","cost","shippingMethodId","useCartShipping","isLoadingShipping","isLoadingPayment","shipToCoordinator","electronicDeliveryItems","cartSubtotal","emptyCartInfoDetails","useWindowInnerSize","setWidth","innerWidth","setHeight","innerHeight","fn","hideHeight","showHeight","subtotalItems","area","hidden","OrderSummaryOptions","hidePayment","PaymentSection","ShipToSection","ShippingMethodSection","TotalSection","EarningsSection","cartInfoDetails","hasPaymentMethod","ShopOrderShipping","addressPart1","address2","address1","addressPart2","city","zipCode","totalShipToCoordinatorItems","totallShipToHomeItems","getPaymentDisplayName","ShopOrderPayment","getPaymentInfo","bigBtnUnselectedAnimation","low","high","showOpacity","sendToHomeSummaryGroupItems","showDeliveryGroup","bigBtnDescriptionSelected","bigBtnDescriptionUnselected","footerSummaryTotal","size_","defaultSize","BigBtn","sizes","btnSize","it","dynamicStyles","OrderSummaryGrid","onShipToHomeChange","summaryType","hideEditQuantityButtons","organizationSupportsShipToHome","org","paymentTypes","allowedType","renderDeliveryGroup","itemsContainer","column","OrderSummaryDetails","paymentTypeDisplayName","paymentFeeAmount","renderItems","checkFocus","contains","activeElement","useFocusMonitor","monitorFocus","events","eventName","orderDetailsContainerMobile","orderDetails","OrderSummaryDetailsMobile","expandItems","setExpandItems","isCartEmpty","containerRef","isFocused","displayOnValue","beginCheckout","FincenFlowState","fincen","fincenFlowState","deriveFincenFlowState","fincenData","shouldRunFincenFlow","CAN_ORDER","REQUIRES_INFORMATION_SUBMISSION","submitDt","fincenSubmissionDate","within24Hours","REQUIRES_INFORMATION_VERIFICATION","handlers","SET_FINCEN_DATA","WILL_EDIT_CART","SET_FINCEN_FLOW_STATE","fincenState","handler","FincenContext","editInfoUrl","enterInfoUrl","moreInfoUrl","processValidateCartResult","RequiresInformationSubmissionView","Title","faExclamationCircle","changeOrder","sendToFincenForm","RequiresInformationVerificationView","FincenInfo","ChangingYourOrderView","FincenFlowView","validateCart_","validateCart","lastUpdatedTime","setCheckoutFlowState","showFincen","setShowFincen","updateFincenInfoUrl","enterFincenInfoUrl","CheckoutFlowState","ENABLED","DISABLED","_result$error","_result$response","fincenResponse","UnprocessableEntity","context","renderFincenView","doubleDipMessage","borderTopRightRadius","borderTopLeftRadius","ShopOnlineWalletCardMarker","affiliateBrandOffersSelector","selectWalletAffiliateBonuses","affiliateOffers","doubleDipCard","brandImage","cardTypeIcon","lastViewed","archived","openUnArchiveModal","selectBrandId","cardBrand","cardName","cardType","CardTypeIcon","generateCardMetaData","balanceUpdatedDate","unArchiveCard","redirectToDetailPage","lastViewedDate","BrandCardTiles","BrandCardTilesConstructor","BrandCardTilesCognitive","cardBrandTilesValue","asString","loadData","useBrandList","searchResultBrandsToBrands","cardBrandTiles","parse","brandsList","cardBrandList","setCardBrandList","optionsAsyncState","homeDetailsLastUpdate","homeDetailsAsyncState","loadBrands","getBrowseResults","_result$response2","brandsConstructor","brandsToCards","PaymentIframe","iframeHeight","setIframeHeight","iframeRef","handleMessage","origin","paymentWebsiteOrigin","enabledRules","summary","review","success","zIndex","OrderScreenListener","_data$data$orderId","orderSuccessGridData","sessionStorage","setItem","ShopOrderSuccess","gaData","gaLogBeginCheckout","replaceState","logPageView","pagePath","hash","pageLocation","OrderScreen","hideHeader","showSummary","showMobileSummary","noMaxWidth","showBrandCardTiles","embedView","pathSegments","lastSegment","orderBreadcrumbPath","getBreadcrumbPath","isIframed","shouldIframe","iFrameSrc","getPaymentWindowUrl","isEmbeddedView","hasResult","isOrderOnHold","Hold","exceedsFinCenLimit","ExceedsFinCenLimit","hasUnavailableItems","ContainsUnavailableItems","creditCardRejected","CreditCardPaymentRejected","hasEarningsMismatchError","EarningsMismatch","checkoutServerErrorConfig","useSubmitOrder","report","backToCart","onCreditCardError","doFinCENAlert","doEarningsMismatchAlert","onUnavailableItems","shouldUpdateDefaultPayment","shippingMethod","cartTotal","doSetPaymentMethodAsDefault","useNewCreditCard","useNewDebitCard","setDefaultPaymentMethodThunk","save","emptyHomeDetailsResponse","submitOrder","_cart","transactionId","savePaymentDetails","requestBody","secondaryBlackBoxValue","expectedEarnings","apiVersion","isOnHold","hasEarningsMismatch","voidPayment","actualEarnings","newCreditCardId","ConvergeResponseType","createCreditCardRequest","clientIpAddress","customerId","cartReferenceId","ssl_transaction_type","ssl_txn_auth_token","ssl_cvv2cvc2","securityCode","ssl_cvv2cvc2_indicator","ssl_add_token","ssl_get_token","ssl_vendor_id","ssl_email","ssl_avs_address","ssl_city","ssl_state","ssl_avs_zip","ssl_description","ssl_first_name","ssl_last_name","cardholder_name","ssl_card_number","ssl_exp_date","expirationDate","ssl_amount","ssl_customer_id","ssl_invoice_number","ssl_merchant_txn_id","ssl_cardholder_ip","nameValidator","combineValidators","withMessage","emojiMessage","isWithoutEmojis","creditCardRegex","CreditCardType","Visa","Mastercard","Discover","getCreditCardTypeFromNumber","regex","isCardNumberValid","cardNumberValidator","isAmexCard","maskedCardNumberValidator","minLength","expirationDateValidator","isFutureExpDateDate","cvcValidator","combineValidationFns","isOrderExceedsMaxCards","sumBy","MAX_SHIP_TO_HOME_CARD_QUANTITY","creditCardErrorConfig","SERVICE_UNAVAILABLE_MESSAGE","creditCardPaymentDeclinedErrorConfig","getLastFourCCDigits","Declined","useCartPlaceOrder","onThreeDSecureChallengeStart","onThreeDSecureChallengeEnd","payWithNewCreditCard","useCreditCard","createAPIError","Error","callbacks","transactionToken3DSecure","rest","onThreeDSecureAuthenticated","onThreeDSecureResult","RR","checkout","payWithCreditCard","ThreeDSecureChallengeStart","ThreeDSecureChallengeEnd","ThreeDSecureAuthenticated","ThreeDSecureResult","Approval","Unknown","ThreeDSecureError","ThreeDSecureUnauthenticated","goToSuccess","showPaymentDeclinedAlert","largeAlert","onHold","onSuccess","setPaymentMethodAsDefault","threeDSecureCallbacks","getPayWithNewCreditCardOptions","tokenResponse","featureFlagsResponse","getCreditCardTransactionToken","getECommFeatureFlagsThunk","enable3DSecure","get3DSecureToken","placeOrder","_cartInfo$paymentMeth","_cartInfo$paymentMeth2","_cartInfo$paymentMeth3","_cartInfo$paymentMeth4","_cartInfo$paymentMeth5","_cartInfo$newCreditCa6","_cartInfo$newDebitCar6","shipToHomeSelection","consignmentId","shippingOptionId","shipToCoordinatorSelection","shipToCoordinatorConsignment","isNewCreditCard","isNewDebitCard","_cartInfo$newDebitCar","newDebitCard","payWithNewCreditCardOptions","emptyCheckoutRequest","_cartInfo$newDebitCar2","threeDSResult","_cartInfo$newCreditCa3","_cartInfo$newCreditCa4","_cartInfo$newDebitCar3","_cartInfo$newDebitCar4","expectedChargeAmount","billingAddress","cardToken","convergeResponse","tokenType","NewRecurring","NewSingleUse","_cartInfo$newCreditCa5","_cartInfo$newDebitCar5","logCreditCardFailure","ssl_txn_id","OrderReviewScreenContent","setCartInfo","checkoutFlowState","disableCheckoutBtn","showOnHoldBanner","setShowOnHoldBanner","isPlacingOrder","setIsPlacingOrder","doPlaceOrder","setShippingAddressAsDefault","renderPlaceOrderButton","cancelOrder","onCloseOnHold","OrderReviewScreen","orderStep","SvgEmptyCart","cx","cy","rx","ry","y","filterUnits","colorInterpolationFilters","floodOpacity","in","dy","stdDeviation","mode","in2","OrderSummaryScreenContent","isClearingCart","setIsClearingCart","shipToCoordinatorDisable","enableEditInCartQuantity","asBoolean","userIsLoggedIn","clearCart","ids","setShipToHome","shouldHideButtons","EmptyCartImg","goShopping","OrderSummaryScreen","StyledIndicator","optionStyle","RadioItem","disabledRadioOnly","fontTypeUnselected","fontColor","pointerEvents","grey4","styledRadio","alignItems","justifyContent","formatFee","hasPaymentType","pt","getFee","OrderPaymentOptions","selectedPayment","onPaymentChange","makeThisTheDefaultPayment","setMakeThisTheDefaultPayment","selectDefaultPaymentType","isCheckEnabled","paymentOptions","getPaymentOptions","achFee","creditCardFee","debitCardFee","Debit","checkPayment","availableForPayment","achPayment","isCredit","cardSubType","splice","onChangeLoadingStatus","setOnChangeLoadingStatus","internalOnPaymentChange","selectedPaymentOption","selectedPaymentId","getSelectedPaymentOption","_paymentOptions$find","_paymentOptions$find2","_paymentOptions$find3","AchStatusNotification","Checkbox","checked","labelClassName","hasAchPayment","isAchLocked","_s$store$account$achA","isLocked","achPaymentAllowed","NotificationView","notificationToRender","NoAchNotificationRenderer","ShopAccountSettingsPaymentOptionsTab","AchIsLockedNotificationRenderer","OrderPaymentOptionsWithDebit","sortId","creditCards","debitCards","debitCard","linkText","defaultId","defaultPaymentMethodId","shouldHideDefaultCheckbox","CreditDebitCardForm","checkboxText","isDebitCard","disabledDefault","setDisabledDefault","combinedMaskedCreditDebitMaskedValidator","AcceptedCreditCardsDisclaimer","CREDIT_CARD_MASK","validation","validateCardBinWithTokenX","isDebit","setFieldError","validateDebitCardNumber","MASK_SHORT_DATE","MASK_CVC","MASK_ZIP_CODE_SHORT","zipCodeValidator","FormikCheckboxField","onStateChange","val","enable_debit_web","CCImageNew","CCImage","list","OrderAddresses","onEdit","selectedAddressId","reverse","PhoneField","SuggestedAddress","suggestedAddress","originalAddress","onConfirm","originalStreetAddress","suggestedStreetAddress","formPersonalInformationRow1","gridAutoRows","columnGap","formShippingAddressRow1","formShippingAddressRow2","openFormAnimation","fadeIn","OrderEditAddressForm","overrides","submitBtnText","addressFormHeader","personalInfoFormHeader","addressId","onAddressSaved","saveAddress","saveAddressRequest","setSuggestedAddress","setOriginalAddress","onSaveAddress","validationResult","FULFILLMENT_ADDRESS_VALIDATION_URL","hasSuggestions","wasAddressFound","_onSaveAddress","stateOptionsList","stateOptions","orgAddressLine1Validator","addressLine2Validator","cityValidator","stateValidator","useSuggestedAddress","CreditCardForm","formRef","setCreditCardInfo","onAddressForm","isNewAddress","setIsNewAddress","setSelectedAddress","selectHomeDetails","onAddressSelected","validateOnChange","handleSubmit","btn","ModalExceedsMaxCards","maxCards","primaryButton","secondaryButton","textContent","OrderPaymentScreenContent","isShipCoordinatorEnabled","showExceededModal","setShowExceededModal","onNewCreditCardConfirm","setSelectedPayment","emptyDebitCard","emptyCreditCard","onBack","getDefaultPaymentMethodThunk","currentCartInfo","onContinue","billingInfo","ShopOrderReview","demoFAQ","continueToShippingNoDebit","continueToShippingIsDebit","continueToShipping","continueToButtonUniqueClass","orgSupportsPayingCoordinator","rootState","_rootState$store","isPayCoordinatorEnabled","continueToShippingDisabled","setHideButtons","isNewDebitFormSelected","validateOnMount","isInitialValid","formik","tokenExId","tokenExUrl","onNewDebitCardConfirm","isValidating","setForceShipToCoordinator","OrderPaymentScreen","grid","shippingMethodCols","OrderShippingGrid","Fragment","setShippingMethodId","estimated","fixEstimatedDate","estimatedShipDate","substring","days","formatEstimatedShipDate","OrderShippingScreenContent","editingAddress","setEditingAddress","setEmptyEditingAddress","_cartInfoDetails$ship","_cartInfoDetails$ship2","confirmOrder","back","_cartInfoDetails$ship3","OrderShippingScreen","billingAddressId","gridTotal","OrderSuccessGrid","showMobileLayout","setShowMobileLayout","earn","_item$brand","renderItemsMobile","SvgConfetti","FilterGroup","allCards","eGift","addedRecentlyOption","amountDescOption","amountAscOption","nameOption","lastViewedOption","sortByDate","cardA","cardB","cardADateStr","cardBDateStr","cardADate","valueOf","initData","filterByCardType","filterByBrand","activeCardTypeFilter","Set","selectedBrands","setActiveCardTypeFilter","setSelectedBrands","cardsWithBrand","setViewableCards","resolveCardTypeActiveFilters","shouldResetFilters","updatedFilters","add","SESSION_STORAGE_KEY","WalletSortAndFilterContext","WalletSortAndFilterView","shouldPersistFilter","initialLocation","persistedFilter","walletFiltersJson","getItem","rawObj","ctf","getStateFromSessionStorage","resultString","setResult","selectUserCards","setStateIntoSessionStorage","_key","_card$brand","sortCards","attr","sortDirection","activationDate","registeredDate","ascSort","descSort","sortByName","_cardA$brand$name","_cardA$brand","_cardB$brand$name","_cardB$brand","cardAName","cardBName","localeCompare","Button","active","btnStyles","borderSizing","FilterDialogContext","selections","optionIsSelected","CategoryOptionsRenderer","category","first","second","stringSplitByIndex","CategoryRenderer","CategoriesRenderer","groups","MobileFilterDialog","_ref6","filters","selectedFilters","_ref7","btnStyle","MobileSortView","_selectedField$value","selectedField","setSelectedField","Radio","MobileSortAndFilterView","setActiveTab","activeTab","CardTypeTab","setActiveCardType","OutlinedButton","has","BrandTab","cardWidth","setCardWidth","slidesPerRow","getSlidesConfig","slider","setSlider","setSliderNode","node","(max-width: 767px)","(min-width: 768px)","slidesToShow","arrows","draggable","dots","appendDots","CarouselControl","slickPrev","slickNext","showDots","Slider","selection","SelectionPills","pillsExist","Pills","onRemove","pillOption","updatedCardTypeFilter","delete","FilterContent","FilterHeader","SortHeader","SortByDropdownMenu","FilterAndSortHeader","FilterAndSortSection","getBrandsAndCards","createSelector","brandExistsInWallet","brand1","brand2","WalletSortAndFilter","shouldPersistFilters","allCardsOption","confirmButton","greyAccent","refreshArchivedCards","requestError","setRequestError","unArchiveSuccess","setUnarchiveSuccess","caption","buttonText","faTimesCircle","res","unarchiveCardThunk","onCancelClick","EmptyResultsMessage","ArchivedView","hasFetchedCards","setHasFetchedCards","archivedCards","refresh","loadArchivedCards","getArchivedWallet","neededBrandIds","archivedCardBrands","brandLoader","aggregateBrands","upsertBrands","keyBy","getArchivedCardsBrands","useArchivedCards","cardsToRender","setCardsToRender","openModal","useUnArchiveModalControls","cardToArchive","setCardToArchiveTo","UnArchiveCardModal","WalletCard","idx","scrollPositions","hasCards","CardsView","myCardsState","restoreOnMount","delayMs","restore","deltaY","useScrollRestore","finally","SupportedType","addCardFormInitialValues","submitButton","textInput","RetryAddingCard","attempts","AddCardForm","submitAttempts","submitSuccess","formError","setProduct","productResponse","_productResponse$data","noValidate","SearchBrandDropdown","wrapperStyles","walletCardNumberValidator","isNaN","validCardResponse","validateCard","cardEligibilityType","checkCardValidity","setFieldTouched","walletCardNameValidator","dirty","evt","CustomOption","_props$selectProps$in","innerRef","innerProps","selectProps","highlighted","highlightMatchesHtml","renderEmpty","Input","components","isHidden","SingleValue","menuIsOpen","loadOptions","searchString","callback","suggestBrands","includesEq","Reloadable","onlySuggestions","hasOnlySuggestions","AsyncSelect","base","singleValue","menu","getOptionValue","getOptionLabel","isClearable","noOptionsMessage","loadingMessage","DropdownIndicator","IndicatorSeparator","Option","onInputChange","itemSelected","_ref$current","_ref$current2","_ref$current3","blur","focus","menuPosition","setFormError","setSubmitSuccess","setSubmitting","selectedBrandId","errMsg","_validCardResponse$da","err","menuSm","MainLayout","archivedCardsRoute","myCardsRoute","currentLinkStyles","isMyCards","isArchived","AddCardModal","parseToMilliseconds","useRefreshWalletPolling","cardsById","shouldStartPolling","setContinuePolling","usePollingControl","setShouldStartPolling","polling_time_trigger","checkIfShouldStartPolling","orderDate","selectUserId","showAffiliateBonuses","pollInterval","pollingMaxTime","brandIds","array","requestAffilateOffersForWalletCards","pollingSoFar","withAuth","confettiContainer","OrderSuccessScreenContent","_orderData$cart$lineI","allCategories","_state$store$categori","_state$store$categori2","recommendedCategory","_state$store","orderData","placedOrderJSON","attributes","setAttributes","launcher","useRoktLauncher","dedupeList","element","categoryNames","indexByBrandId","RemoteConfigWeb","getRemoteValue","_orderData$total","_orderData$cart$lineI2","enable_rokt_web","cartItems","roktCartItems","_find","_categories$find$id","_categories$find","majorCat","majorCatID","minorCat1","minorCat1ID","productName","numberOfProducts","mapCartItemsToRoktCartItems","firstname","confirmationref","currency","country","language","getRoktAttributes","requestRecommendedCategories","fetchData","cnstrcPurchaseData","item_id","order_id","selectionPromise","selectPlacements","ConfettiImg","print","Redirect","ShopAccountSettingsOrderHistoryTab","ShopAccountSettingsDashboardTab","OrderSuccessScreen","targetOrigin","sendHeight","scrollHeight","observer","MutationObserver","observe","childList","subtree","disconnect","CheckoutView","useIframeHeight","locationState","CheckoutScreen","TabNames","pageIsLoading","setPageIsLoading","Settings","AccountSettingsContext","AccountSettingsView","ShopAccountSettingsPersonalInformationTab","ShopAccountSettingsSecurityTab","ShopAccountSettingsNotificationsTab","ShopAccountSettingsInviteFriendsFamilyOptionsTab","contextValues","headerLogoContainer","headerLogoImg","text2","AccountSettingsHeader","orgDefaultContent","isLoadingOrgDefaultContent","useFromContentful","_s$store$home$homeDet","selectHomeDetailsAsyncState","coordinator","setCoordinator","isLoadingCoordinator","setIsLoadingCoordinator","organizationInfo","organizationTypeCodes","organizationId","coordinatorInfo","getCoordinatorInfoByOrganizationCode","headerImageUrl","headerImage","tabClasses","flex","TabsContainer","tabItems","selectedTabName","setSelectedTabName","tabsListClasses","ti","tabItem","MONTHS","buyAgainButton","detailTotalEarnings","detailHeaderContainer","detailColumnHeader","detailBrandImage","mobileBrandImage","localProductMobile","localProduct","detailBrandName","detailCardType","detailLineItemContainer","detailLineItem","mobileLineItem","detailLineItemText","detailEarningPercent","weight","detailEarningAmount","detailValueAmount","textDecoration","mobileLineItemAmount","detailFooter","detailShippingInfo","detailShippingLineItems","detailTotalDivider","detailTotalLabel","detailTotalAmount","detailFooterClose","calculateEarnPercent","lineItem","totalEarnings","totalValue","RecentPurchaseDetail","_order$shippingInform2","_order$shippingInform3","_order$shippingInform4","_order$shippingInform5","_order$shippingInform6","expand","setExpand","getBrandSrcUrl","onBuyAgain","isBuyAgainRunning","sumByLineItemMoneyProp","giftDetailsModalInfo","setGiftDetailsModalInfo","ProcessingBuyAgain","orientation","orderNumber","faTag","faGift","faceValue","sum","orderFeeLabel","orderFees","shippingInformation","trackingUrl","trackingNumber","_order$shippingInform","lineItemTotal","calculateOrderTotal","GiftDetailsModal","hideGiftDetailsModal","logoURL","giftDetailsModalStyles","_lineItem$giftDetails","_lineItem$giftDetails2","_lineItem$giftDetails3","_lineItem$giftDetails4","_lineItem$giftDetails5","_lineItem$giftDetails6","renderLine","property","getProduct","E_COMM_PRODUCTS_URL","additionalBrandsBadge","brandContainer","closeIcon","headerDateContainer","headerDate","summaryBuyAgain","summaryLabel","summaryBrandContainer","summaryBrandImage","totalsContainer","totalDivider","localProductContainer","propSum","lineItemValue","formatISODate","jsDate","year","monthNbr","day","AdditionalBrands","useBuyAgainFlow","canBuyAgain","lines","linesWithoutReload","computeCanBuyAgain","triggerBuyAgain","addedSuccessfully","productData","_variant$options","optionExists","_addItemToCartResult$","addItemToCartResult","RecentPurchase","uniq","getBrandsThunk","uniqueBrands","uniqBy","summaryBrands","remainingBrands","addedSomeItemSuccessfully","Purchases","orders","recentOrders","RecentPurchases","_orders$data","fetchOrders","AdSidebarComponent","adSidebar","banners","_adSidebar$content","adImage","randomBanner","random","getDashboardEarningsData","EARNINGS_URL","Container","CustomizedLabel","dx","fontFamily","textAnchor","HeaderAndAdSection","EarningsAndPurchasesSection","earningData","setEarningData","loadEarningsData","monthsLabel","BarChart","XAxis","tickLine","dataKey","YAxis","hide","Bar","barSize","radius","FamilyEarningsSummary","faExternalLink","Dashboard","dataPickerInput","CustomRangeDatePicker","applyFilterBtn","setStart","end","setEnd","selectedRange","querySelector","onStartDateChange","onEndDateChange","isStartDatePickerOpen","setIsStartDatePickerOpen","isEndDatePickerOpen","setIsEndDatePickerOpen","dtStartRef","dtEndRef","startDatePickerHasFocus","endDatePickerHasFocus","isValidRange","newStart","newEnd","selectsRange","selectsStart","MaskedDateInput","selectsEnd","isSmall","monthStr","dateStr","yearStr","month","isValidMonth","isValidDate","getDaysInMonth","isValidYear","keepCharPositions","MASK_DATE","HorizontalPills","itemInactive","newText","formatDisplayDate","Intl","DateTimeFormat","format","useOrderHistoryDateRangeSelectorControls","selectedValue","setSelectedValue","setStartDate","setEndDate","onDateRangeChange","openDatePicker","setOpenDatePicker","onCustomClicked","onItemChange","newStartDate","newEndDate","OrderHistoryDateRangeSelector","FamilyOrderHistory","NewOrderHistoryDateRangeSelector","hideOrderHistoryReportCopy","PurchaseHistory","startDateStr","endDateStr","PurchaseHistoryList","loadMore","totalText","indicator","pageSize","setPageSize","Progress","historyItem","darkBlue","referenceNumber","cardHeader","table","headerRow","borderBottomColor","lightGrey","firstHeaderText","headerNumbers","cellText","cellEarnings","cellTotal","restaurantField","flexDirection","LocalDiningHistoryItem","transactionDateTime","merchantName","organizationBenefitAmount","transactionAmount","mockResponses","mockApi","limit","useLocalDiningHistory","setState","fullResults","uiResults","canLoadMoreResults","latestApiRequest","setViewedDateRange","range","apiRequest","_start","_end","CARD_LINKED_OFFERS_TRANSACTION_URL","requestOrderHistory","nextStartIndex","nextEndIndex","nextUiResults","datePickerContainer","contentContainer","buttonRow","LocalDiningHistory","dateRange","LocalDiningHistoryLoadingError","LocalDiningHistoryLoader","LocalDiningHistoryNoOrders","noOrdersStyle","FAQsData","question","answer","modalTop","modalIcon","modalTitle","modalCopy","darkestGrey","modalSubheader","modalAccordianTitle","modalAccordianContent","modalAccordianContentParagraph","OnlineHistoryFAQ","modalOpen","setModalOpen","DollarCircle","headline","linkContainer","subHeader","subHeaderContainer","reportContainer","reportTitle","historyContainer","sectionContainer","subsectionContainer","subsectionHeaderTitle","subsectionHeaderLink","OrderHistoryReports","FamilyOrderDetail","OrderHistoryReportContainer","OrderHistoryTabs","getTabs","includeOnlineOrders","Online","LocalDining","OrderHistorySection","cloDateRange","setCloDateRange","isLocalDiningEnabled","selectIsCardLinkedOffersWebEnabled","setTabs","setValue","NewOrderHistoryHeader","onTabChange","OnlineOrderHistory","FLIPGIVE_ORDERHISTORY_URL","nextOpenValue","OrderTypeStyles","showDateSelector","hideInstructionsOnDateSelector","OrderHistory","EditableField","editMode","FieldDisplayComponent","FieldEditComponent","transitions","useTransition","enter","leave","LabelRenderer","defaultRenderers","ToggleEditViewRenderer","BaseFieldDisplay","fieldToEdit","EditableFieldsContext","notBeingEdited","FieldDisplay","setFieldToEdit","NameFieldDisplay","_state$store$home$hom","shouldDisable","NameFieldEditComponent","_profile$firstName","_profile$lastName","_state$store$home$hom2","errorExists","setErrorExists","updateUserThunk","firstNameValidator","lastNameValidator","EmailFieldDisplay","EmailFieldEditComponent","_profile$email","emailValidator_","sameEmailValidator","formikContext","Conflict","helpers","defaultBox","defaultBoxActive","styledIndicator","Address","fieldBeingEdited","createModeOn","fullAddress","setAddressAsDefault","AddressInfo","RadioGroup","Label","AddressList","setAddressBeingEdited","addressBeingEdited","tabIndex","_selectedAddress$id","isAnyFieldBeingEdited","AddressFieldDisplay","setCreateMode","createMode","addNewAddress","AddressFieldEditComponent","address_","showDeleteModal","setShowDeleteModal","showForm","onDeleteClicked","onDeleteDismiss","doDeleteAddress","addressLine1Validator","FormikSelectField","getAddressToShowOnDelete","AddressEditableField","FundRaisingField","textSeparator","studentName","fundraisingGroup","FundRaisingEditComponent","_profile$studentName","_profile$fundraisingG","studentNameValidator","fundraisingGroupValidator","SuccessMessage","orgName","accountDashboard","successTexts","_accountDashboard$con","joinSuccessTitle","joinSuccessSubtitle","joinOrgSuccessBody","joinOrgSuccessImage","joinOrgSuccessTextLinkCopy","popover","fadeOut","subTitle","buttonCancel","JoinAnotherOrganizationContent","onFinish","enrollmentCode","setEnrollmentCode","args","selectOrgJoinAsyncState","newOrgName","displaySuccess","setDisplaySuccess","resetOrgJoin","TextField","errorClassName","clickHandler","addUserToOrgThunk","JoinAnotherOrganization","orgJoinCompleteCallback","setOpen","btnCancelLeave","LeaveOrganizationContent","_selectedOrganization","_selectedOrganization3","_selectedOrganization4","memberships","confirmedOrganization","setConfirmedOrganization","setSuccessfullyLeftOrg","selectedOrganization","setSelectedOrganization","leaveOrganization","setLeaveOrganization","isLeavingOrg","setIsLeavingOrg","m","cancel","timeout","extraStyles","_selectedOrganization2","DeletionConfirmationAlert","removeUserFromOrgThunk","Ok","ERROR","LeaveOrganization","successfullyLeftOrg","reset","enabledContainer","disabledContainer","DefaultOrgField","useOrgMemberships","defaultOrgId","disableLeaveOrganization","membership","orgJoinComplete","CreateOrganizationField","updateEnrollmentProgress","ProgressState","EnrollmentStartedExistingAccount","StartProgramContinue","UserNameFieldDisplay","userName","setUserName","fetchUsername","getAccount","username","PersonalSettingsFields","PersonalSettingsContent","EditableFieldsView","title2","defaultBtn","subtitle","SecuritySettingsContent","doGetPhonesByUser","phonesAsyncState","phones","getPhonesByUser","doGetAccount","accountAsyncState","formattedLastPasswordUpdate","_account$data","lastPasswordUpdate","manage2FA","SetDefaultItemList","maskedPhoneNumber","enrollmentDate","registrationDate","SvgSuccessCheckMark","fontStyle","createCreditCardTitle","creditCardType","CreditCardField","selectPaymentCreditCards","setSelectedCard","selectedCardTitle","setSelectedCardTitle","deleteText","setDeleteText","smallButtons","setSmallButtons","deleteSuccess","setDeleteSuccess","endEditMode","confirmDelete","deleteCreditCardThunk","(min-width: 769px)","(max-width: 768px)","startEditMode","CheckMark","PaymentOptionsContext","reloadAchInfo","showBankAccountMode","debugMode","PaymentOptionsView","localStorage","getFullAddress","BaseAddBankAccountFlow","contextProps","AddBankAccountPromptSection","globalContent","renderContent","noAchLinkedPrompt","linkABankAccount","AddBankAccountPromptText","AutomatedVerificationFlow","MicroTransactionsFlow","isOAuth","setIsOAuth","UserPlaidWrapper","_bbv$blackBoxValue","bbv","setUserAchAccountStatus","openPlaid","isPlaidReady","OAuthFlow","userAchPayload","setUserAchAccount","CannotDeleteAchAccountMessage","useAchControls","deleteAch","deleteUserAchAccountThunk","MethodNotAllowed","VerificationExpiredFlow","LabelRendererWithNotificationBell","ach","verificationHasExpiredOrFailed","verficationExpiredOrFailed","NotificationBell","hasAchAccount","userHasAddresses","btnText","isVerified","BankFieldDisplay","hasBankLinked","_ach$accountNumber","isPendingVerification","lastFour","BankField","verificationStatus","AchVerificationStatus","PendingManualVerification","PendingAutomatedVerification","VerificationExpired","VerificationFailed","NewAddressForm","BankEditFieldComponent","hasNoAddressSelected","hasNoAddresses","selectedAddressRef","removeItem","BankEditableFields","AchManagementSection","loadPaymentOptions","dataLoading","setDataLoadingTo","PaymentOptionsFields","PaymentSettingsContent","paymentSettingsFaq","faqAccordionItems","_paymentSettingsFaq$c","faqType","creditCardPaymentAllowed","checkPaymentAllowed","CheckFieldDisplay","itemHeader","itemdark","itemlight","itemSubText","successMessage","Preferences","preferences","updatePreference","preference","subText","show","ErrorMessage","useEmailPreferences","originalPreferences","showSuccessMessage","setShowSuccessMessage","setPreferences","setRequest","pushSubscriptions","savePreferences","prefs","updatedPreferences","mergeEmailPreferences","groupBySubscribedAndUnSubscribed","updateFamilySubscriptions","req","getFamilySubscriptions","normalizePreferences","transformToEmailSubscriptions","addSubtextToSubscriptions","sub","messageTypeId","messageTypeDescription","contentfulApi","getEntries","content_type","getContentfulEntriesForNotifications","updatePreferences","updateLastPreference","findIndex","newPrefs","requestMeta","mediums","emailPrefs","medium","j","channels","channel","channelName","messageTypes","k","messageTypeName","isSubscribed","emailSubs","messageMediums","messageMedium","emailChannels","messageType","UncheckWarningModal","confirm","Notifications","modalProps","isUnchecking","activeMenuItem","setActiveMenuItem","SettingsContext","SettingsView","loadingFlags","InviteFriendsFamilyContent","enable_iterable","NotificationsContent","ShopAccountSettingsTab","initialPersonalSettingsState","SidebarMenu","menuItem","isActiveMenuItem","computeClassNames","isP2PInviteEnabled","useP2PInviteSettings","security","HeaderAndMenu","useHackReRenderForFeatureFlags","flags","setKey","intervalId","infoContainer","blueStyle","popoverContent","resourceButton","transition","toBoolean","SideMenu","showScripWareBtn","showCode","setShowCode","helperOpen","setHelperOpen","isCopied","copyText","useCopyToClipboard","showEnrollmentResources","enrollmentCodeEmail","getEnrollmentCode","charsToHide","hideString","repeat","onCopyCode","urlWithCode","getEnrollmentUrl","logGetCoordinatorInvite","onOpenChangeHelper","InfoContainer","formatPhoneNumber","faCopy","getEnrollmentUrlQR","dataUrl","QRCode","linkQrCode","removeChild","revokeObjectURL","onDownloadQrCode","goToScripware","REACT_APP_LAUNCH_SCRIPWARE_URL","CoordinatorDashboardContext","isScripWare","reports","participants","payments","resources","inventory","sections","Orders","Section","Reports","Participants","Payments","Resources","Inventory","_section$id","roleId","role","_entry$featureFlags","shouldShow","_entry$featureFlags2","Entries","Entry","_entry$id","hasNotifications","genStyles","Wrapper","entryContainer","entryDescription","entryLink","verticalAlign","BaseNotification","buttonTitle","buttonAction","classname","NotificationType","containerClasses","titleClasses","SUCCESS","Notification","PendingOrderNotification","notification","actionName","isScripware","useIsScripware","notifications","DashboardContent","CoordinatorDashboard","selectDefaultOrganization","selectedOrganizationId","isScripWareOrg","loadOrgDetailData","orgDetailRes","getOrganizationDetail","ShopAccountSettingsCoordinatorTab","OrganizationSettings","isCoordinator","showCoordinatorDashboard","enable_unified_coordinator_dashboard","CoordinatorDashboardHome","ShopAccountSettings","AccountSettingsContent","activeOrg","AccountSettingsScreen","enableUnifiedCoordinatorDashboard","routeMatchWithCoordinatorDashboard","useRouteMatch","LoadingScreen","stringMap","successText","promptText","verb","capitalVerb","archiveSuccess","setArchiveSuccess","generateModalMetaData","deleteCardThunk","cardNumberInput","RetryUpdateCard","editCardFormInitialValues","editCardDetails","updatedCard","barcode","cardname","MobileBarCodeViewer","showBarcodeViewer","setShowBarcodeViewer","remoteCardDetails","setRemoteCardDetails","shouldHideCardBarCode","useRemoteCardStorage","getRemoteCardDetails","fetchRemoteCard","openBarcodeViewer","BarCodeViewer","RemoteCardViewer","SchModal","X","onClose_","CardImage","CardName","CardBarcode","ExtraInfo","wallet","barcodesById","isBarcodeVisible","barcodeType","shouldUseBarcode","getCardBarcode","upsertBarcodes","fetchBarCode","CardNumberRenderer","PinRenderer","AdditionalLabelRenderer","_ref8","_card$settings5","_card$settings6","_ref9","_card$settings7","_card$settings8","extraField","extraFieldValue","informations","brandImageContainer","brandImageContainerMobile","giftCardDetails","cardDetailContainer","addMoneyToThisCard","separator","MyCardDetailsContent","_card$id","addMoneyContainer","showEditModal","setShowEditModal","loadCardById","loadCardByIdResponse","getWalletCardById","loadBrand","loadBrandAsyncState","loadBrandResponse","showArchiveModal","setShowArchiveModal","pageLoading","setPageLoading","loadProductsByBrand","loadProductsByBrandAsyncState","loadProductsByBrandResponse","shouldHideCardInfo","isThirdPartyViewerFlow","responseThirdPartyViewerUrl","thirdPartyViewerUrl","setThirdPartyViewerUrl","getThirdPartyViewUrl","_r$data","_r$data2","useThirdPartyViewerUrl","isCardBalanceLoading","cardBalanceData","viewCardThunk","validateForm","canAddToCart","amountInputLabel","scrollToAddMoney","targetY","offsetTop","EditCardModal","onEditModalClose","faEdit","CardActivationCodes","ThirdPartyUrlAction","ArchiveCardModal","_card$settings9","_card$settings10","_card$settings$pin$la","_card$settings11","_card$settings12","isNumberCopied","setIsNumberCopied","isPinCopied","setIsPinCopied","isExtraFieldCopied","setIsExtraFieldCopied","remoteCardNumber","remotePin","cardPin","RestrictionTypeTexts","onCopyNumber","copyTextToClipboard","onCopyPin","pinToCopy","onCopyExtraField","restrictionType","renderPinCopyInfo","renderExtraFieldCopyInfo","viewerUrl","WalletRoutes","MyCards","WalletArchivedCards","ArchivedCards","MyCardDetails","Components","categories_component","CategoriesSection","favorites_component","FavoritesSection","featured_brands_component","FeaturedSection","bonus_component","GiftCardsOnBonusSection","shop_online_bonus_component","ShopOnlineOnBonusSection","HomePageRenderer","creativeSlots","CreativeSlotTypes","P1Hero","P2","P3","creativeSlot","shift","creativeSlotProps","Component","getComponentToRender","itsHeroData","hero","heroLayout","FullAdSection","HomepageScreen","HomepageView","BrandsOnBonus","pageBrands","brandsLoading","searchGridStyles","selectUserAuthState","and","brandsOnBonusFilter","BaseLandingPage","firebaseConfigKey","renderBonusSwitch","containerStyles","ShopOnlineBrandsOnBonus","ShopOnlineOnBonus","OnBonus","FavoritesGrid","emptyBrand","isRaiseRightGiftCardOnBonusOrAffiliateOnBonus","hasFavorites","resultsContainer","favoriteBrands","brd","cardProps","PopularBrands","favoritesOverrides","brandCards","bc","BackToCatalog","goToCatalog","Favorites","selectFavorites","favoriteFilter","editFilter","isFavoriteSuggestionsLoading","favoriteSuggestions","usePopularBrandCards","setIsLoadingTo","FeaturedBrands","featuredBrandsFilter","emptyEcommBrand","LocalProductScreen","LocalProductView","loadProduct","setLoadingTo","hasLoaded","setHasLoadedTo","useProduct","LogoRenderer","iconSize","setIconSize","_product$id","_product$price","ByEarnTypePage","notAuthenticated","NOTAUTHENTICATED","shop","AuthedEarnTypePage","ShopRoutes","Featured"],"sourceRoot":""}